You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2022/03/18 13:53:38 UTC

[pulsar] branch asf-site updated: Updated site at revision 86442ee

This is an automated email from the ASF dual-hosted git repository.

penghui pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 41a39cf  Updated site at revision 86442ee
41a39cf is described below

commit 41a39cf99189dc105a3a1d5670bec95bda0619cf
Author: Pulsar Site Updater <de...@pulsar.apache.org>
AuthorDate: Fri Mar 18 13:47:57 2022 +0000

    Updated site at revision 86442ee
---
 .../admin/2.10.0-SNAPSHOT/member-search-index.zip  | Bin 12901 -> 12901 bytes
 .../admin/2.10.0-SNAPSHOT/overview-summary.html    |   2 +-
 .../admin/2.10.0-SNAPSHOT/package-search-index.zip | Bin 263 -> 263 bytes
 .../admin/2.10.0-SNAPSHOT/type-search-index.zip    | Bin 500 -> 500 bytes
 .../client/2.10.0-SNAPSHOT/allclasses-index.html   |  88 ++-
 content/api/client/2.10.0-SNAPSHOT/allclasses.html |   1 +
 content/api/client/2.10.0-SNAPSHOT/index-all.html  |  31 +
 .../client/2.10.0-SNAPSHOT/member-search-index.js  |   2 +-
 .../client/2.10.0-SNAPSHOT/member-search-index.zip | Bin 11134 -> 11209 bytes
 .../apache/pulsar/client/api/ReaderBuilder.html    | 118 ++-
 .../pulsar/client/api/ReaderInterceptor.html       | 320 ++++++++
 .../pulsar/client/api/class-use/Message.html       |  58 +-
 .../apache/pulsar/client/api/class-use/Reader.html |  13 +-
 .../pulsar/client/api/class-use/ReaderBuilder.html |  52 +-
 .../{Reader.html => ReaderInterceptor.html}        |  64 +-
 .../apache/pulsar/client/api/package-summary.html  |  20 +-
 .../org/apache/pulsar/client/api/package-tree.html |   1 +
 .../org/apache/pulsar/client/api/package-use.html  |  30 +-
 .../class-use/InterfaceAudience.Public.html        |  29 +-
 .../class-use/InterfaceStability.Stable.html       |  27 +-
 .../client/2.10.0-SNAPSHOT/overview-summary.html   |   2 +-
 .../api/client/2.10.0-SNAPSHOT/overview-tree.html  |   1 +
 .../2.10.0-SNAPSHOT/package-search-index.zip       | Bin 298 -> 298 bytes
 .../client/2.10.0-SNAPSHOT/type-search-index.js    |   2 +-
 .../client/2.10.0-SNAPSHOT/type-search-index.zip   | Bin 1543 -> 1549 bytes
 .../pulsar-broker/2.10.0-SNAPSHOT/index-all.html   |  34 +
 .../2.10.0-SNAPSHOT/member-search-index.js         |   2 +-
 .../2.10.0-SNAPSHOT/member-search-index.zip        | Bin 70154 -> 70356 bytes
 ...rokerInterceptor.BrokerInterceptorDisabled.html |   2 +-
 .../pulsar/broker/intercept/BrokerInterceptor.html |  50 +-
 .../BrokerInterceptorWithClassLoader.html          |  56 +-
 .../broker/intercept/BrokerInterceptors.html       |  56 +-
 .../pulsar/broker/service/AbstractTopic.html       |  30 +-
 .../pulsar/broker/service/PulsarCommandSender.html | 120 ++-
 .../broker/service/PulsarCommandSenderImpl.html    | 136 +++-
 .../service/nonpersistent/NonPersistentTopic.html  |   2 +-
 .../broker/service/persistent/PersistentTopic.html |   2 +-
 .../broker/service/persistent/SystemTopic.html     |   2 +-
 .../2.10.0-SNAPSHOT/overview-summary.html          |   2 +-
 .../2.10.0-SNAPSHOT/package-search-index.zip       | Bin 593 -> 593 bytes
 .../2.10.0-SNAPSHOT/type-search-index.zip          | Bin 4380 -> 4380 bytes
 .../2.10.0-SNAPSHOT/member-search-index.zip        | Bin 1277 -> 1277 bytes
 .../2.10.0-SNAPSHOT/overview-summary.html          |   2 +-
 .../2.10.0-SNAPSHOT/package-search-index.zip       | Bin 260 -> 260 bytes
 .../2.10.0-SNAPSHOT/type-search-index.zip          | Bin 349 -> 349 bytes
 content/api/python/2.10.0-SNAPSHOT/index.html      |   6 +-
 content/api/python/index.html                      |   6 +-
 .../en/2.1.0-incubating/client-libraries-java.html |   2 +-
 .../client-libraries-java/index.html               |   2 +-
 .../en/2.1.0-incubating/security-encryption.html   |   2 +-
 .../security-encryption/index.html                 |   2 +-
 .../en/2.1.1-incubating/client-libraries-java.html |   2 +-
 .../client-libraries-java/index.html               |   2 +-
 .../en/2.1.1-incubating/security-encryption.html   |   2 +-
 .../security-encryption/index.html                 |   2 +-
 content/docs/en/2.2.0/client-libraries-java.html   |   2 +-
 .../docs/en/2.2.0/client-libraries-java/index.html |   2 +-
 content/docs/en/2.2.0/security-encryption.html     |   2 +-
 .../docs/en/2.2.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.2.1/client-libraries-java.html   |   2 +-
 .../docs/en/2.2.1/client-libraries-java/index.html |   2 +-
 content/docs/en/2.2.1/security-encryption.html     |   2 +-
 .../docs/en/2.2.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.3.0/client-libraries-java.html   |   2 +-
 .../docs/en/2.3.0/client-libraries-java/index.html |   2 +-
 content/docs/en/2.3.0/security-encryption.html     |   2 +-
 .../docs/en/2.3.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.3.1/client-libraries-java.html   |   2 +-
 .../docs/en/2.3.1/client-libraries-java/index.html |   2 +-
 content/docs/en/2.3.1/security-encryption.html     |   2 +-
 .../docs/en/2.3.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.3.2/client-libraries-java.html   |   2 +-
 .../docs/en/2.3.2/client-libraries-java/index.html |   2 +-
 content/docs/en/2.3.2/security-encryption.html     |   2 +-
 .../docs/en/2.3.2/security-encryption/index.html   |   2 +-
 content/docs/en/2.4.0/client-libraries-java.html   |   2 +-
 .../docs/en/2.4.0/client-libraries-java/index.html |   2 +-
 content/docs/en/2.4.0/security-encryption.html     |   2 +-
 .../docs/en/2.4.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.4.1/client-libraries-java.html   |   2 +-
 .../docs/en/2.4.1/client-libraries-java/index.html |   2 +-
 content/docs/en/2.4.1/security-encryption.html     |   2 +-
 .../docs/en/2.4.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.4.2/client-libraries-java.html   |   2 +-
 .../docs/en/2.4.2/client-libraries-java/index.html |   2 +-
 content/docs/en/2.4.2/security-encryption.html     |   2 +-
 .../docs/en/2.4.2/security-encryption/index.html   |   2 +-
 content/docs/en/2.5.0/client-libraries-java.html   |   2 +-
 .../docs/en/2.5.0/client-libraries-java/index.html |   2 +-
 content/docs/en/2.5.0/security-encryption.html     |   2 +-
 .../docs/en/2.5.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.5.1/security-bouncy-castle.html  |   2 +-
 .../en/2.5.1/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.5.1/security-encryption.html     |   2 +-
 .../docs/en/2.5.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.5.2/security-bouncy-castle.html  |   2 +-
 .../en/2.5.2/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.5.2/security-encryption.html     |   2 +-
 .../docs/en/2.5.2/security-encryption/index.html   |   2 +-
 content/docs/en/2.6.0/security-bouncy-castle.html  |   2 +-
 .../en/2.6.0/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.6.0/security-encryption.html     |   2 +-
 .../docs/en/2.6.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.6.1/security-bouncy-castle.html  |   2 +-
 .../en/2.6.1/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.6.1/security-encryption.html     |   2 +-
 .../docs/en/2.6.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.6.2/security-bouncy-castle.html  |   2 +-
 .../en/2.6.2/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.6.2/security-encryption.html     |   2 +-
 .../docs/en/2.6.2/security-encryption/index.html   |   2 +-
 content/docs/en/2.6.3/security-bouncy-castle.html  |   2 +-
 .../en/2.6.3/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.6.3/security-encryption.html     |   2 +-
 .../docs/en/2.6.3/security-encryption/index.html   |   2 +-
 content/docs/en/2.6.4/security-bouncy-castle.html  |   2 +-
 .../en/2.6.4/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.6.4/security-encryption.html     |   2 +-
 .../docs/en/2.6.4/security-encryption/index.html   |   2 +-
 content/docs/en/2.7.0/security-bouncy-castle.html  |   2 +-
 .../en/2.7.0/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.7.0/security-encryption.html     |   2 +-
 .../docs/en/2.7.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.7.1/security-bouncy-castle.html  |   2 +-
 .../en/2.7.1/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.7.1/security-encryption.html     |   2 +-
 .../docs/en/2.7.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.7.2/security-bouncy-castle.html  |   2 +-
 .../en/2.7.2/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.7.2/security-encryption.html     |   2 +-
 .../docs/en/2.7.2/security-encryption/index.html   |   2 +-
 content/docs/en/2.7.3/security-bouncy-castle.html  |   2 +-
 .../en/2.7.3/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.7.3/security-encryption.html     |   2 +-
 .../docs/en/2.7.3/security-encryption/index.html   |   2 +-
 content/docs/en/2.7.4/security-bouncy-castle.html  |   2 +-
 .../en/2.7.4/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.7.4/security-encryption.html     |   2 +-
 .../docs/en/2.7.4/security-encryption/index.html   |   2 +-
 content/docs/en/2.8.0/security-bouncy-castle.html  |   2 +-
 .../en/2.8.0/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.8.0/security-encryption.html     |   2 +-
 .../docs/en/2.8.0/security-encryption/index.html   |   2 +-
 content/docs/en/2.8.1/security-bouncy-castle.html  |   2 +-
 .../en/2.8.1/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.8.1/security-encryption.html     |   2 +-
 .../docs/en/2.8.1/security-encryption/index.html   |   2 +-
 content/docs/en/2.8.2/security-bouncy-castle.html  |   2 +-
 .../en/2.8.2/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.8.2/security-encryption.html     |   2 +-
 .../docs/en/2.8.2/security-encryption/index.html   |   2 +-
 content/docs/en/2.9.0/security-bouncy-castle.html  |   2 +-
 .../en/2.9.0/security-bouncy-castle/index.html     |   2 +-
 content/docs/en/2.9.0/security-encryption.html     |   2 +-
 .../docs/en/2.9.0/security-encryption/index.html   |   2 +-
 content/docs/en/next/adaptors-kafka.html           |   2 +-
 content/docs/en/next/adaptors-kafka/index.html     |   2 +-
 content/docs/en/next/adaptors-spark.html           |   2 +-
 content/docs/en/next/adaptors-spark/index.html     |   2 +-
 content/docs/en/next/adaptors-storm.html           |   2 +-
 content/docs/en/next/adaptors-storm/index.html     |   2 +-
 content/docs/en/next/admin-api-brokers.html        |   2 +-
 content/docs/en/next/admin-api-brokers/index.html  |   2 +-
 content/docs/en/next/admin-api-clusters.html       |   2 +-
 content/docs/en/next/admin-api-clusters/index.html |   2 +-
 content/docs/en/next/admin-api-functions.html      |   2 +-
 .../docs/en/next/admin-api-functions/index.html    |   2 +-
 content/docs/en/next/admin-api-namespaces.html     |   2 +-
 .../docs/en/next/admin-api-namespaces/index.html   |   2 +-
 content/docs/en/next/admin-api-overview.html       |   2 +-
 content/docs/en/next/admin-api-overview/index.html |   2 +-
 content/docs/en/next/admin-api-packages.html       |   2 +-
 content/docs/en/next/admin-api-packages/index.html |   2 +-
 content/docs/en/next/admin-api-permissions.html    |   2 +-
 .../docs/en/next/admin-api-permissions/index.html  |   2 +-
 content/docs/en/next/admin-api-tenants.html        |   2 +-
 content/docs/en/next/admin-api-tenants/index.html  |   2 +-
 content/docs/en/next/admin-api-topics.html         |   2 +-
 content/docs/en/next/admin-api-topics/index.html   |   2 +-
 content/docs/en/next/administration-geo.html       |   2 +-
 content/docs/en/next/administration-geo/index.html |   2 +-
 content/docs/en/next/administration-isolation.html |   2 +-
 .../en/next/administration-isolation/index.html    |   2 +-
 .../docs/en/next/administration-load-balance.html  |   2 +-
 .../en/next/administration-load-balance/index.html |   2 +-
 content/docs/en/next/administration-proxy.html     |   2 +-
 .../docs/en/next/administration-proxy/index.html   |   2 +-
 .../en/next/administration-pulsar-manager.html     |   2 +-
 .../next/administration-pulsar-manager/index.html  |   2 +-
 content/docs/en/next/administration-stats.html     |   2 +-
 .../docs/en/next/administration-stats/index.html   |   2 +-
 content/docs/en/next/administration-upgrade.html   |   2 +-
 .../docs/en/next/administration-upgrade/index.html |   2 +-
 content/docs/en/next/administration-zk-bk.html     |   2 +-
 .../docs/en/next/administration-zk-bk/index.html   |   2 +-
 content/docs/en/next/client-libraries-cpp.html     |   2 +-
 .../docs/en/next/client-libraries-cpp/index.html   |   2 +-
 content/docs/en/next/client-libraries-dotnet.html  |   2 +-
 .../en/next/client-libraries-dotnet/index.html     |   2 +-
 content/docs/en/next/client-libraries-go.html      |   2 +-
 .../docs/en/next/client-libraries-go/index.html    |   2 +-
 content/docs/en/next/client-libraries-java.html    |   2 +-
 .../docs/en/next/client-libraries-java/index.html  |   2 +-
 content/docs/en/next/client-libraries-node.html    |   2 +-
 .../docs/en/next/client-libraries-node/index.html  |   2 +-
 content/docs/en/next/client-libraries-python.html  |   2 +-
 .../en/next/client-libraries-python/index.html     |   2 +-
 content/docs/en/next/client-libraries-rest.html    |   2 +-
 .../docs/en/next/client-libraries-rest/index.html  |   2 +-
 .../docs/en/next/client-libraries-websocket.html   |   2 +-
 .../en/next/client-libraries-websocket/index.html  |   2 +-
 content/docs/en/next/client-libraries.html         |   2 +-
 content/docs/en/next/client-libraries/index.html   |   2 +-
 .../en/next/concepts-architecture-overview.html    |   2 +-
 .../next/concepts-architecture-overview/index.html |   2 +-
 content/docs/en/next/concepts-authentication.html  |   2 +-
 .../en/next/concepts-authentication/index.html     |   2 +-
 content/docs/en/next/concepts-clients.html         |   2 +-
 content/docs/en/next/concepts-clients/index.html   |   2 +-
 content/docs/en/next/concepts-messaging.html       |   2 +-
 content/docs/en/next/concepts-messaging/index.html |   2 +-
 content/docs/en/next/concepts-multi-tenancy.html   |   2 +-
 .../docs/en/next/concepts-multi-tenancy/index.html |   2 +-
 .../concepts-multiple-advertised-listeners.html    |   2 +-
 .../index.html                                     |   2 +-
 content/docs/en/next/concepts-overview.html        |   2 +-
 content/docs/en/next/concepts-overview/index.html  |   2 +-
 .../docs/en/next/concepts-proxy-sni-routing.html   |   2 +-
 .../en/next/concepts-proxy-sni-routing/index.html  |   2 +-
 content/docs/en/next/concepts-replication.html     |   2 +-
 .../docs/en/next/concepts-replication/index.html   |   2 +-
 .../docs/en/next/concepts-topic-compaction.html    |   2 +-
 .../en/next/concepts-topic-compaction/index.html   |   2 +-
 .../docs/en/next/cookbooks-bookkeepermetadata.html |   2 +-
 .../next/cookbooks-bookkeepermetadata/index.html   |   2 +-
 content/docs/en/next/cookbooks-compaction.html     |   2 +-
 .../docs/en/next/cookbooks-compaction/index.html   |   2 +-
 content/docs/en/next/cookbooks-deduplication.html  |   2 +-
 .../en/next/cookbooks-deduplication/index.html     |   2 +-
 content/docs/en/next/cookbooks-encryption.html     |   2 +-
 .../docs/en/next/cookbooks-encryption/index.html   |   2 +-
 content/docs/en/next/cookbooks-message-queue.html  |   2 +-
 .../en/next/cookbooks-message-queue/index.html     |   2 +-
 content/docs/en/next/cookbooks-non-persistent.html |   2 +-
 .../en/next/cookbooks-non-persistent/index.html    |   2 +-
 .../docs/en/next/cookbooks-retention-expiry.html   |   2 +-
 .../en/next/cookbooks-retention-expiry/index.html  |   2 +-
 content/docs/en/next/deploy-aws.html               |   2 +-
 content/docs/en/next/deploy-aws/index.html         |   2 +-
 .../en/next/deploy-bare-metal-multi-cluster.html   |   2 +-
 .../deploy-bare-metal-multi-cluster/index.html     |   2 +-
 content/docs/en/next/deploy-bare-metal.html        |   2 +-
 content/docs/en/next/deploy-bare-metal/index.html  |   2 +-
 content/docs/en/next/deploy-docker.html            |   2 +-
 content/docs/en/next/deploy-docker/index.html      |   2 +-
 content/docs/en/next/deploy-kubernetes.html        |   2 +-
 content/docs/en/next/deploy-kubernetes/index.html  |   2 +-
 content/docs/en/next/deploy-monitoring.html        |   2 +-
 content/docs/en/next/deploy-monitoring/index.html  |   2 +-
 content/docs/en/next/develop-binary-protocol.html  |   2 +-
 .../en/next/develop-binary-protocol/index.html     |   2 +-
 content/docs/en/next/develop-load-manager.html     |   2 +-
 .../docs/en/next/develop-load-manager/index.html   |   2 +-
 content/docs/en/next/develop-plugin.html           |   2 +-
 content/docs/en/next/develop-plugin/index.html     |   2 +-
 content/docs/en/next/develop-tools.html            |   2 +-
 content/docs/en/next/develop-tools/index.html      |   2 +-
 content/docs/en/next/functions-cli.html            |   2 +-
 content/docs/en/next/functions-cli/index.html      |   2 +-
 content/docs/en/next/functions-debug.html          |   2 +-
 content/docs/en/next/functions-debug/index.html    |   2 +-
 content/docs/en/next/functions-deploy.html         |   2 +-
 content/docs/en/next/functions-deploy/index.html   |   2 +-
 content/docs/en/next/functions-develop.html        |   2 +-
 content/docs/en/next/functions-develop/index.html  |   2 +-
 content/docs/en/next/functions-overview.html       |   2 +-
 content/docs/en/next/functions-overview/index.html |   2 +-
 content/docs/en/next/functions-package.html        |   2 +-
 content/docs/en/next/functions-package/index.html  |   2 +-
 content/docs/en/next/functions-runtime.html        |   2 +-
 content/docs/en/next/functions-runtime/index.html  |   2 +-
 content/docs/en/next/functions-worker.html         |   2 +-
 content/docs/en/next/functions-worker/index.html   |   2 +-
 content/docs/en/next/helm-deploy.html              |   2 +-
 content/docs/en/next/helm-deploy/index.html        |   2 +-
 content/docs/en/next/helm-install.html             |   2 +-
 content/docs/en/next/helm-install/index.html       |   2 +-
 content/docs/en/next/helm-overview.html            |   2 +-
 content/docs/en/next/helm-overview/index.html      |   2 +-
 content/docs/en/next/helm-prepare.html             |   2 +-
 content/docs/en/next/helm-prepare/index.html       |   2 +-
 content/docs/en/next/helm-tools.html               |   2 +-
 content/docs/en/next/helm-tools/index.html         |   2 +-
 content/docs/en/next/helm-upgrade.html             |   2 +-
 content/docs/en/next/helm-upgrade/index.html       |   2 +-
 content/docs/en/next/io-cdc.html                   |   2 +-
 content/docs/en/next/io-cdc/index.html             |   2 +-
 content/docs/en/next/io-cli.html                   |   2 +-
 content/docs/en/next/io-cli/index.html             |   2 +-
 content/docs/en/next/io-connectors.html            |   2 +-
 content/docs/en/next/io-connectors/index.html      |   2 +-
 content/docs/en/next/io-debug.html                 |   2 +-
 content/docs/en/next/io-debug/index.html           |   2 +-
 content/docs/en/next/io-develop.html               |   2 +-
 content/docs/en/next/io-develop/index.html         |   2 +-
 content/docs/en/next/io-overview.html              |   2 +-
 content/docs/en/next/io-overview/index.html        |   2 +-
 content/docs/en/next/io-quickstart.html            |   2 +-
 content/docs/en/next/io-quickstart/index.html      |   2 +-
 content/docs/en/next/io-use.html                   |   2 +-
 content/docs/en/next/io-use/index.html             |   2 +-
 content/docs/en/next/kubernetes-helm.html          |   2 +-
 content/docs/en/next/kubernetes-helm/index.html    |   2 +-
 content/docs/en/next/performance-pulsar-perf.html  |   2 +-
 .../en/next/performance-pulsar-perf/index.html     |   2 +-
 content/docs/en/next/reference-cli-tools.html      |   2 +-
 .../docs/en/next/reference-cli-tools/index.html    |   2 +-
 content/docs/en/next/reference-configuration.html  |   2 +-
 .../en/next/reference-configuration/index.html     |   2 +-
 content/docs/en/next/reference-metrics.html        |   2 +-
 content/docs/en/next/reference-metrics/index.html  |   2 +-
 content/docs/en/next/reference-terminology.html    |   2 +-
 .../docs/en/next/reference-terminology/index.html  |   2 +-
 .../en/next/schema-evolution-compatibility.html    |   2 +-
 .../next/schema-evolution-compatibility/index.html |   2 +-
 content/docs/en/next/schema-get-started.html       |   2 +-
 content/docs/en/next/schema-get-started/index.html |   2 +-
 content/docs/en/next/schema-manage.html            |   2 +-
 content/docs/en/next/schema-manage/index.html      |   2 +-
 content/docs/en/next/schema-understand.html        |   2 +-
 content/docs/en/next/schema-understand/index.html  |   2 +-
 content/docs/en/next/security-athenz.html          |   2 +-
 content/docs/en/next/security-athenz/index.html    |   2 +-
 content/docs/en/next/security-authorization.html   |   2 +-
 .../docs/en/next/security-authorization/index.html |   2 +-
 content/docs/en/next/security-bouncy-castle.html   |   4 +-
 .../docs/en/next/security-bouncy-castle/index.html |   4 +-
 content/docs/en/next/security-encryption.html      |   4 +-
 .../docs/en/next/security-encryption/index.html    |   4 +-
 content/docs/en/next/security-extending.html       | 180 +----
 content/docs/en/next/security-extending/index.html | 180 +----
 content/docs/en/next/security-jwt.html             |   2 +-
 content/docs/en/next/security-jwt/index.html       |   2 +-
 content/docs/en/next/security-kerberos.html        |   2 +-
 content/docs/en/next/security-kerberos/index.html  |   2 +-
 content/docs/en/next/security-oauth2.html          |  56 +-
 content/docs/en/next/security-oauth2/index.html    |  56 +-
 content/docs/en/next/security-overview.html        |  12 +-
 content/docs/en/next/security-overview/index.html  |  12 +-
 .../security-policy-and-supported-versions.html    |   2 +-
 .../index.html                                     |   2 +-
 .../docs/en/next/security-tls-authentication.html  |   2 +-
 .../en/next/security-tls-authentication/index.html |   2 +-
 content/docs/en/next/security-tls-keystore.html    |   2 +-
 .../docs/en/next/security-tls-keystore/index.html  |   2 +-
 content/docs/en/next/security-tls-transport.html   |   2 +-
 .../docs/en/next/security-tls-transport/index.html |   2 +-
 .../en/next/sql-deployment-configurations.html     |   2 +-
 .../next/sql-deployment-configurations/index.html  |   2 +-
 content/docs/en/next/sql-getting-started.html      |   2 +-
 .../docs/en/next/sql-getting-started/index.html    |   2 +-
 content/docs/en/next/sql-overview.html             |   2 +-
 content/docs/en/next/sql-overview/index.html       |   2 +-
 content/docs/en/next/sql-rest-api.html             |   2 +-
 content/docs/en/next/sql-rest-api/index.html       |   2 +-
 content/docs/en/next/standalone-docker.html        |   2 +-
 content/docs/en/next/standalone-docker/index.html  |   2 +-
 content/docs/en/next/standalone.html               |   2 +-
 content/docs/en/next/standalone/index.html         |   2 +-
 content/docs/en/next/tiered-storage-aliyun.html    |   2 +-
 .../docs/en/next/tiered-storage-aliyun/index.html  |   2 +-
 content/docs/en/next/tiered-storage-aws.html       |   2 +-
 content/docs/en/next/tiered-storage-aws/index.html |   2 +-
 content/docs/en/next/tiered-storage-azure.html     |   2 +-
 .../docs/en/next/tiered-storage-azure/index.html   |   2 +-
 .../docs/en/next/tiered-storage-filesystem.html    |   2 +-
 .../en/next/tiered-storage-filesystem/index.html   |   2 +-
 content/docs/en/next/tiered-storage-gcs.html       |   2 +-
 content/docs/en/next/tiered-storage-gcs/index.html |   2 +-
 content/docs/en/next/tiered-storage-overview.html  |   2 +-
 .../en/next/tiered-storage-overview/index.html     |   2 +-
 content/docs/en/next/txn-how.html                  |   2 +-
 content/docs/en/next/txn-how/index.html            |   2 +-
 content/docs/en/next/txn-monitor.html              |   2 +-
 content/docs/en/next/txn-monitor/index.html        |   2 +-
 content/docs/en/next/txn-use.html                  |   2 +-
 content/docs/en/next/txn-use/index.html            |   2 +-
 content/docs/en/next/txn-what.html                 |   2 +-
 content/docs/en/next/txn-what/index.html           |   2 +-
 content/docs/en/next/txn-why.html                  |   2 +-
 content/docs/en/next/txn-why/index.html            |   2 +-
 content/docs/en/next/window-functions-context.html |   2 +-
 .../en/next/window-functions-context/index.html    |   2 +-
 content/docs/en/security-bouncy-castle.html        |   2 +-
 content/docs/en/security-bouncy-castle/index.html  |   2 +-
 content/docs/en/security-encryption.html           |   2 +-
 content/docs/en/security-encryption/index.html     |   2 +-
 content/swagger/2.10.0-SNAPSHOT/swagger.json       | 846 ++++++++++----------
 .../swagger/2.10.0-SNAPSHOT/swaggerfunctions.json  | 294 +++----
 .../swagger/2.10.0-SNAPSHOT/swaggerpackages.json   | 210 ++---
 content/swagger/2.10.0-SNAPSHOT/swaggersink.json   | 210 ++---
 content/swagger/2.10.0-SNAPSHOT/swaggersource.json | 210 ++---
 content/swagger/2.10.0-SNAPSHOT/v2/swagger.json    | 852 ++++++++++-----------
 .../2.10.0-SNAPSHOT/v3/swaggerfunctions.json       | 294 +++----
 .../2.10.0-SNAPSHOT/v3/swaggerpackages.json        | 210 ++---
 .../swagger/2.10.0-SNAPSHOT/v3/swaggersink.json    | 210 ++---
 .../swagger/2.10.0-SNAPSHOT/v3/swaggersource.json  | 210 ++---
 content/swagger/master/swagger.json                | 846 ++++++++++----------
 content/swagger/master/swaggerfunctions.json       | 294 +++----
 content/swagger/master/swaggerpackages.json        | 210 ++---
 content/swagger/master/swaggersink.json            | 210 ++---
 content/swagger/master/swaggersource.json          | 210 ++---
 content/swagger/master/v2/swagger.json             | 852 ++++++++++-----------
 content/swagger/master/v3/swaggerfunctions.json    | 294 +++----
 content/swagger/master/v3/swaggerpackages.json     | 210 ++---
 content/swagger/master/v3/swaggersink.json         | 210 ++---
 content/swagger/master/v3/swaggersource.json       | 210 ++---
 417 files changed, 5179 insertions(+), 4474 deletions(-)

diff --git a/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip
index 022924d..4c20fa9 100644
Binary files a/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/admin/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html b/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html
index 44ae421..28fe74d 100644
--- a/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/admin/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Mar 18 06:14:13 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Fri Mar 18 12:10:29 UTC 2022 -->
 <title>Pulsar Client Admin Original 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip
index cb70cc4..65c3252 100644
Binary files a/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/admin/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip
index 424beb1..2469ae1 100644
Binary files a/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/admin/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/client/2.10.0-SNAPSHOT/allclasses-index.html b/content/api/client/2.10.0-SNAPSHOT/allclasses-index.html
index cf6c300..5fce82e 100644
--- a/content/api/client/2.10.0-SNAPSHOT/allclasses-index.html
+++ b/content/api/client/2.10.0-SNAPSHOT/allclasses-index.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":2,"i1":1,"i2":1,"i3":2,"i4":1,"i5":4,"i6":1,"i7":1,"i8":2,"i9":2,"i10":1,"i11":4,"i12":1,"i13":1,"i14":4,"i15":1,"i16":1,"i17":1,"i18":1,"i19":1,"i20":2,"i21":2,"i22":1,"i23":2,"i24":2,"i25":2,"i26":2,"i27":1,"i28":1,"i29":1,"i30":1,"i31":1,"i32":4,"i33":2,"i34":32,"i35":32,"i36":32,"i37":2,"i38":32,"i39":32,"i40":32,"i41":4,"i42":2,"i43":2,"i44":2,"i45":2,"i46":2,"i47":1,"i48":4,"i49":1,"i50":1,"i51":1,"i52":1,"i53":1,"i54":1,"i55":1,"i56":1,"i57":1,"i58":1,"i59":4,"i60 [...]
+var data = {"i0":2,"i1":1,"i2":1,"i3":2,"i4":1,"i5":4,"i6":1,"i7":1,"i8":2,"i9":2,"i10":1,"i11":4,"i12":1,"i13":1,"i14":4,"i15":1,"i16":1,"i17":1,"i18":1,"i19":1,"i20":2,"i21":2,"i22":1,"i23":2,"i24":2,"i25":2,"i26":2,"i27":1,"i28":1,"i29":1,"i30":1,"i31":1,"i32":4,"i33":2,"i34":32,"i35":32,"i36":32,"i37":2,"i38":32,"i39":32,"i40":32,"i41":4,"i42":2,"i43":2,"i44":2,"i45":2,"i46":2,"i47":1,"i48":4,"i49":1,"i50":1,"i51":1,"i52":1,"i53":1,"i54":1,"i55":1,"i56":1,"i57":1,"i58":1,"i59":4,"i60 [...]
 var tabs = {65535:["t0","All Classes"],1:["t1","Interface Summary"],2:["t2","Class Summary"],4:["t3","Enum Summary"],8:["t4","Exception Summary"],32:["t6","Annotation Types Summary"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -781,244 +781,250 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </th>
 </tr>
 <tr id="i110" class="altColor">
+<td class="colFirst"><a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;<a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;</td>
+<th class="colLast" scope="row">
+<div class="block">Reader interceptor.</div>
+</th>
+</tr>
+<tr id="i111" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/ReaderListener.html" title="interface in org.apache.pulsar.client.api">ReaderListener</a>&lt;<a href="org/apache/pulsar/client/api/ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">A listener that will be called in order for every message received.</div>
 </th>
 </tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/RecordSchemaBuilder.html" title="interface in org.apache.pulsar.client.api.schema">RecordSchemaBuilder</a></td>
 <th class="colLast" scope="row">
 <div class="block">Building the schema for a <a href="org/apache/pulsar/client/api/schema/GenericRecord.html" title="interface in org.apache.pulsar.client.api.schema"><code>GenericRecord</code></a>.</div>
 </th>
 </tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api">RedeliveryBackoff</a></td>
 <th class="colLast" scope="row">
 <div class="block">Interface for custom message is negativeAcked policy, users can specify a <a href="org/apache/pulsar/client/api/RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api"><code>RedeliveryBackoff</code></a> for
  a consumer.</div>
 </th>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/RegexSubscriptionMode.html" title="enum in org.apache.pulsar.client.api">RegexSubscriptionMode</a></td>
 <th class="colLast" scope="row">
 <div class="block">When subscribing to topics using a regular expression, one can specify
  to only pick a certain type of topics.</div>
 </th>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/Schema.html" title="interface in org.apache.pulsar.client.api">Schema</a>&lt;<a href="org/apache/pulsar/client/api/Schema.html" title="type parameter in Schema">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">Message schema definition.</div>
 </th>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/SchemaBuilder.html" title="interface in org.apache.pulsar.client.api.schema">SchemaBuilder</a></td>
 <th class="colLast" scope="row">
 <div class="block">Builder to build schema.</div>
 </th>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/SchemaDefinition.html" title="interface in org.apache.pulsar.client.api.schema">SchemaDefinition</a>&lt;<a href="org/apache/pulsar/client/api/schema/SchemaDefinition.html" title="type parameter in SchemaDefinition">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">Interface for schema definition.</div>
 </th>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/SchemaDefinitionBuilder.html" title="interface in org.apache.pulsar.client.api.schema">SchemaDefinitionBuilder</a>&lt;<a href="org/apache/pulsar/client/api/schema/SchemaDefinitionBuilder.html" title="type parameter in SchemaDefinitionBuilder">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">Builder to build schema definition <a href="org/apache/pulsar/client/api/schema/SchemaDefinition.html" title="interface in org.apache.pulsar.client.api.schema"><code>SchemaDefinition</code></a>.</div>
 </th>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/common/schema/SchemaInfo.html" title="interface in org.apache.pulsar.common.schema">SchemaInfo</a></td>
 <th class="colLast" scope="row">
 <div class="block">Information about the schema.</div>
 </th>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/common/schema/SchemaInfo.SchemaInfoBuilder.html" title="class in org.apache.pulsar.common.schema">SchemaInfo.SchemaInfoBuilder</a></td>
 <th class="colLast" scope="row">&nbsp;</th>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/SchemaInfoProvider.html" title="interface in org.apache.pulsar.client.api.schema">SchemaInfoProvider</a></td>
 <th class="colLast" scope="row">
 <div class="block">Schema Provider.</div>
 </th>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/common/schema/SchemaInfoWithVersion.html" title="class in org.apache.pulsar.common.schema">SchemaInfoWithVersion</a></td>
 <th class="colLast" scope="row">
 <div class="block">Data structure representing a schema information including its version.</div>
 </th>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/SchemaReader.html" title="interface in org.apache.pulsar.client.api.schema">SchemaReader</a>&lt;<a href="org/apache/pulsar/client/api/schema/SchemaReader.html" title="type parameter in SchemaReader">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">Deserialize messages from bytes.</div>
 </th>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/SchemaSerializationException.html" title="class in org.apache.pulsar.client.api">SchemaSerializationException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Schema serialization exception.</div>
 </th>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/common/schema/SchemaType.html" title="enum in org.apache.pulsar.common.schema">SchemaType</a></td>
 <th class="colLast" scope="row">
 <div class="block">Types of supported schema for Pulsar messages.</div>
 </th>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/schema/SchemaWriter.html" title="interface in org.apache.pulsar.client.api.schema">SchemaWriter</a>&lt;<a href="org/apache/pulsar/client/api/schema/SchemaWriter.html" title="type parameter in SchemaWriter">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">Serialize messages into bytes.</div>
 </th>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/ServiceUrlProvider.html" title="interface in org.apache.pulsar.client.api">ServiceUrlProvider</a></td>
 <th class="colLast" scope="row">
 <div class="block">The provider to provide the service url.</div>
 </th>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/SizeUnit.html" title="enum in org.apache.pulsar.client.api">SizeUnit</a></td>
 <th class="colLast" scope="row">
 <div class="block">Size unit converter.</div>
 </th>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/SubscriptionInitialPosition.html" title="enum in org.apache.pulsar.client.api">SubscriptionInitialPosition</a></td>
 <th class="colLast" scope="row">
 <div class="block">When creating a consumer, if the subscription does not exist, a new subscription will be created.</div>
 </th>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/SubscriptionMode.html" title="enum in org.apache.pulsar.client.api">SubscriptionMode</a></td>
 <th class="colLast" scope="row">
 <div class="block">Types of subscription mode supported by Pulsar.</div>
 </th>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/SubscriptionType.html" title="enum in org.apache.pulsar.client.api">SubscriptionType</a></td>
 <th class="colLast" scope="row">
 <div class="block">Types of subscription supported by Pulsar.</div>
 </th>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/TableView.html" title="interface in org.apache.pulsar.client.api">TableView</a>&lt;<a href="org/apache/pulsar/client/api/TableView.html" title="type parameter in TableView">T</a>&gt;</td>
 <th class="colLast" scope="row">&nbsp;</th>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/TableViewBuilder.html" title="interface in org.apache.pulsar.client.api">TableViewBuilder</a>&lt;<a href="org/apache/pulsar/client/api/TableViewBuilder.html" title="type parameter in TableViewBuilder">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block"><a href="org/apache/pulsar/client/api/TableViewBuilder.html" title="interface in org.apache.pulsar.client.api"><code>TableViewBuilder</code></a> is used to configure and create instances of <a href="org/apache/pulsar/client/api/TableView.html" title="interface in org.apache.pulsar.client.api"><code>TableView</code></a>.</div>
 </th>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/TopicMetadata.html" title="interface in org.apache.pulsar.client.api">TopicMetadata</a></td>
 <th class="colLast" scope="row">
 <div class="block">Metadata of a topic that can be used for message routing.</div>
 </th>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/Transaction.html" title="interface in org.apache.pulsar.client.api.transaction">Transaction</a></td>
 <th class="colLast" scope="row">
 <div class="block">The class represents a transaction within Pulsar.</div>
 </th>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionBufferClient.html" title="interface in org.apache.pulsar.client.api.transaction">TransactionBufferClient</a></td>
 <th class="colLast" scope="row">
 <div class="block">The transaction buffer client to commit and abort transactions on topics or subscription.</div>
 </th>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionBufferClientException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionBufferClientException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Exceptions for transaction buffer client.</div>
 </th>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionBufferClientException.ReachMaxPendingOpsException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionBufferClientException.ReachMaxPendingOpsException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when transaction buffer op over max pending numbers.</div>
 </th>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionBufferClientException.RequestTimeoutException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionBufferClientException.RequestTimeoutException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when operation timeout.</div>
 </th>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionBuilder.html" title="interface in org.apache.pulsar.client.api.transaction">TransactionBuilder</a></td>
 <th class="colLast" scope="row">
 <div class="block">The builder to build a transaction for Pulsar.</div>
 </th>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClient.html" title="interface in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClient</a></td>
 <th class="colLast" scope="row">
 <div class="block">Transaction coordinator client.</div>
 </th>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClient.State.html" title="enum in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClient.State</a></td>
 <th class="colLast" scope="row">
 <div class="block">State of the transaction coordinator client.</div>
 </th>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Exceptions for transaction coordinator client.</div>
 </th>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.CoordinatorClientStateException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException.CoordinatorClientStateException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when transaction coordinator with unexpected state.</div>
 </th>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.CoordinatorNotFoundException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException.CoordinatorNotFoundException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when transaction coordinator not found in broker side.</div>
 </th>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.InvalidTxnStatusException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException.InvalidTxnStatusException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when transaction switch to a invalid status.</div>
 </th>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.MetaStoreHandlerNotExistsException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException.MetaStoreHandlerNotExistsException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when transaction meta store handler not exists.</div>
 </th>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.MetaStoreHandlerNotReadyException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException.MetaStoreHandlerNotReadyException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when send request to transaction meta store but the transaction meta store handler not ready.</div>
 </th>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TransactionCoordinatorClientException.TransactionNotFoundException.html" title="class in org.apache.pulsar.client.api.transaction">TransactionCoordinatorClientException.TransactionNotFoundException</a></td>
 <th class="colLast" scope="row">
 <div class="block">Thrown when transaction not found in transaction coordinator.</div>
 </th>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/transaction/TxnID.html" title="class in org.apache.pulsar.client.api.transaction">TxnID</a></td>
 <th class="colLast" scope="row">
 <div class="block">An identifier for representing a transaction.</div>
 </th>
 </tr>
-<tr id="i150" class="altColor">
+<tr id="i151" class="rowColor">
 <td class="colFirst"><a href="org/apache/pulsar/client/api/TypedMessageBuilder.html" title="interface in org.apache.pulsar.client.api">TypedMessageBuilder</a>&lt;<a href="org/apache/pulsar/client/api/TypedMessageBuilder.html" title="type parameter in TypedMessageBuilder">T</a>&gt;</td>
 <th class="colLast" scope="row">
 <div class="block">Message builder that constructs a message to be published through a producer.</div>
diff --git a/content/api/client/2.10.0-SNAPSHOT/allclasses.html b/content/api/client/2.10.0-SNAPSHOT/allclasses.html
index 3b6ea6a..feaf545 100644
--- a/content/api/client/2.10.0-SNAPSHOT/allclasses.html
+++ b/content/api/client/2.10.0-SNAPSHOT/allclasses.html
@@ -130,6 +130,7 @@
 <li><a href="org/apache/pulsar/client/api/Range.html" title="class in org.apache.pulsar.client.api">Range</a></li>
 <li><a href="org/apache/pulsar/client/api/Reader.html" title="interface in org.apache.pulsar.client.api"><span class="interfaceName">Reader</span></a></li>
 <li><a href="org/apache/pulsar/client/api/ReaderBuilder.html" title="interface in org.apache.pulsar.client.api"><span class="interfaceName">ReaderBuilder</span></a></li>
+<li><a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api"><span class="interfaceName">ReaderInterceptor</span></a></li>
 <li><a href="org/apache/pulsar/client/api/ReaderListener.html" title="interface in org.apache.pulsar.client.api"><span class="interfaceName">ReaderListener</span></a></li>
 <li><a href="org/apache/pulsar/client/api/schema/RecordSchemaBuilder.html" title="interface in org.apache.pulsar.client.api.schema"><span class="interfaceName">RecordSchemaBuilder</span></a></li>
 <li><a href="org/apache/pulsar/client/api/RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api"><span class="interfaceName">RedeliveryBackoff</span></a></li>
diff --git a/content/api/client/2.10.0-SNAPSHOT/index-all.html b/content/api/client/2.10.0-SNAPSHOT/index-all.html
index 4c3ccf7..3979a1a 100644
--- a/content/api/client/2.10.0-SNAPSHOT/index-all.html
+++ b/content/api/client/2.10.0-SNAPSHOT/index-all.html
@@ -357,6 +357,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>
 <div class="block">If enabled, partitioned producer will automatically discover new partitions at runtime.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderBuilder.html#autoUpdatePartitions(boolean)">autoUpdatePartitions(boolean)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a></dt>
+<dd>
+<div class="block">If enabled, the reader will auto subscribe for partitions increasement.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ConsumerBuilder.html#autoUpdatePartitionsInterval(int,java.util.concurrent.TimeUnit)">autoUpdatePartitionsInterval(int, TimeUnit)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ConsumerBuilder.html" title="interface in org.apache.pulsar.client.api">ConsumerBuilder</a></dt>
 <dd>
 <div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>.</div>
@@ -365,6 +369,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>
 <div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderBuilder.html#autoUpdatePartitionsInterval(int,java.util.concurrent.TimeUnit)">autoUpdatePartitionsInterval(int, TimeUnit)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a></dt>
+<dd>
+<div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/TableViewBuilder.html#autoUpdatePartitionsInterval(int,java.util.concurrent.TimeUnit)">autoUpdatePartitionsInterval(int, TimeUnit)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/TableViewBuilder.html" title="interface in org.apache.pulsar.client.api">TableViewBuilder</a></dt>
 <dd>
 <div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>.</div>
@@ -447,6 +455,13 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  Message)</code></a> or the <code>CompletableFuture</code> returned by
  <a href="org/apache/pulsar/client/api/Consumer.html#receiveAsync()"><code>Consumer.receiveAsync()</code></a> completes.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderInterceptor.html#beforeRead(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">beforeRead(Reader&lt;T&gt;, Message&lt;T&gt;)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a></dt>
+<dd>
+<div class="block">This is called just before the message is returned by
+ <a href="org/apache/pulsar/client/api/Reader.html#readNext()"><code>Reader.readNext()</code></a>, <a href="org/apache/pulsar/client/api/ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)"><code>ReaderListener.received(Reader, Message)</code></a>
+ or the <code>CompletableFuture</code> returned by
+ <a href="org/apache/pulsar/client/api/Reader.html#readNextAsync()"><code>Reader.readNextAsync()</code></a> completes.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ProducerInterceptor.html#beforeSend(org.apache.pulsar.client.api.Producer,org.apache.pulsar.client.api.Message)">beforeSend(Producer&lt;T&gt;, Message&lt;T&gt;)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ProducerInterceptor.html" title="interface in org.apache.pulsar.client.api">ProducerInterceptor</a></dt>
 <dd>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
@@ -644,6 +659,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>
 <div class="block">Close the PulsarClient and release all the resources.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderInterceptor.html#close()">close()</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a></dt>
+<dd>
+<div class="block">Close the interceptor.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ServiceUrlProvider.html#close()">close()</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ServiceUrlProvider.html" title="interface in org.apache.pulsar.client.api">ServiceUrlProvider</a></dt>
 <dd>
 <div class="block">Close the resource that the provider allocated.</div>
@@ -1902,6 +1921,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderBuilder.html#intercept(org.apache.pulsar.client.api.ReaderInterceptor...)">intercept(ReaderInterceptor&lt;T&gt;...)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a></dt>
+<dd>
+<div class="block">Intercept <a href="org/apache/pulsar/client/api/Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a>.</div>
+</dd>
 <dt><a href="org/apache/pulsar/common/classification/InterfaceAudience.html" title="class in org.apache.pulsar.common.classification"><span class="typeNameLink">InterfaceAudience</span></a> - Class in <a href="org/apache/pulsar/common/classification/package-summary.html">org.apache.pulsar.common.classification</a></dt>
 <dd>
 <div class="block">Annotation to inform users of a package, class or method's intended audience.</div>
@@ -2694,6 +2717,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">This method is called when partitions of the topic (partitioned-topic) changes.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderInterceptor.html#onPartitionsChange(java.lang.String,int)">onPartitionsChange(String, int)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a></dt>
+<dd>
+<div class="block">This method is called when partitions of the topic (partitioned-topic) changes.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ProducerInterceptor.html#onSendAcknowledgement(org.apache.pulsar.client.api.Producer,org.apache.pulsar.client.api.Message,org.apache.pulsar.client.api.MessageId,java.lang.Throwable)">onSendAcknowledgement(Producer&lt;T&gt;, Message&lt;T&gt;, MessageId, Throwable)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ProducerInterceptor.html" title="interface in org.apache. [...]
 <dd>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
@@ -3166,6 +3193,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>
 <div class="block"><a href="org/apache/pulsar/client/api/ReaderBuilder.html" title="interface in org.apache.pulsar.client.api"><code>ReaderBuilder</code></a> is used to configure and create instances of <a href="org/apache/pulsar/client/api/Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a>.</div>
 </dd>
+<dt><a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">ReaderInterceptor</span></a>&lt;<a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt; - Interface in <a href="org/apache/pulsar/client/api/package-summary.html">org.apache.pulsar.client.api</a></dt>
+<dd>
+<div class="block">Reader interceptor.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/client/api/ReaderBuilder.html#readerListener(org.apache.pulsar.client.api.ReaderListener)">readerListener(ReaderListener&lt;T&gt;)</a></span> - Method in interface org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a></dt>
 <dd>
 <div class="block">Sets a <a href="org/apache/pulsar/client/api/ReaderListener.html" title="interface in org.apache.pulsar.client.api"><code>ReaderListener</code></a> for the reader.</div>
diff --git a/content/api/client/2.10.0-SNAPSHOT/member-search-index.js b/content/api/client/2.10.0-SNAPSHOT/member-search-index.js
index 825d237..6f5c5e5 100644
--- a/content/api/client/2.10.0-SNAPSHOT/member-search-index.js
+++ b/content/api/client/2.10.0-SNAPSHOT/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.pulsar.client.api.transaction","c":"Transaction","l":"abort()"},{"p":"org.apache.pulsar.client.api.transaction","c":"TransactionCoordinatorClient","l":"abort(TxnID)","url":"abort(org.apache.pulsar.client.api.transaction.TxnID)"},{"p":"org.apache.pulsar.client.api.transaction","c":"TransactionCoordinatorClient","l":"abortAsync(TxnID)","url":"abortAsync(org.apache.pulsar.client.api.transaction.TxnID)"},{"p":"org.apache.pulsar.client.api.transaction","c [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.pulsar.client.api.transaction","c":"Transaction","l":"abort()"},{"p":"org.apache.pulsar.client.api.transaction","c":"TransactionCoordinatorClient","l":"abort(TxnID)","url":"abort(org.apache.pulsar.client.api.transaction.TxnID)"},{"p":"org.apache.pulsar.client.api.transaction","c":"TransactionCoordinatorClient","l":"abortAsync(TxnID)","url":"abortAsync(org.apache.pulsar.client.api.transaction.TxnID)"},{"p":"org.apache.pulsar.client.api.transaction","c [...]
\ No newline at end of file
diff --git a/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip
index 840d75f..f901710 100644
Binary files a/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/client/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderBuilder.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderBuilder.html
index 84d88bc..e80320f 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderBuilder.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderBuilder.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6};
+var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -160,54 +160,76 @@ extends java.lang.Cloneable</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#autoUpdatePartitions(boolean)">autoUpdatePartitions</a></span>&#8203;(boolean&nbsp;autoUpdate)</code></th>
+<td class="colLast">
+<div class="block">If enabled, the reader will auto subscribe for partitions increasement.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#autoUpdatePartitionsInterval(int,java.util.concurrent.TimeUnit)">autoUpdatePartitionsInterval</a></span>&#8203;(int&nbsp;interval,
+                            java.util.concurrent.TimeUnit&nbsp;unit)</code></th>
+<td class="colLast">
+<div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clone()">clone</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Create a copy of the current <a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api"><code>ReaderBuilder</code></a>.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#create()">create</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Finalize the creation of the <a href="Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a> instance.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>java.util.concurrent.CompletableFuture&lt;<a href="Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createAsync()">createAsync</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Finalize the creation of the <a href="Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a> instance in asynchronous mode.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#cryptoFailureAction(org.apache.pulsar.client.api.ConsumerCryptoFailureAction)">cryptoFailureAction</a></span>&#8203;(<a href="ConsumerCryptoFailureAction.html" title="enum in org.apache.pulsar.client.api">ConsumerCryptoFailureAction</a>&nbsp;action)</code></th>
 <td class="colLast">
 <div class="block">Sets the <a href="ConsumerCryptoFailureAction.html" title="enum in org.apache.pulsar.client.api"><code>ConsumerCryptoFailureAction</code></a> to specify.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#cryptoKeyReader(org.apache.pulsar.client.api.CryptoKeyReader)">cryptoKeyReader</a></span>&#8203;(<a href="CryptoKeyReader.html" title="interface in org.apache.pulsar.client.api">CryptoKeyReader</a>&nbsp;cryptoKeyReader)</code></th>
 <td class="colLast">
 <div class="block">Sets a <a href="CryptoKeyReader.html" title="interface in org.apache.pulsar.client.api"><code>CryptoKeyReader</code></a> to decrypt the message payloads.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#defaultCryptoKeyReader(java.lang.String)">defaultCryptoKeyReader</a></span>&#8203;(java.lang.String&nbsp;privateKey)</code></th>
 <td class="colLast">
 <div class="block">Sets the default implementation of <a href="CryptoKeyReader.html" title="interface in org.apache.pulsar.client.api"><code>CryptoKeyReader</code></a>.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#defaultCryptoKeyReader(java.util.Map)">defaultCryptoKeyReader</a></span>&#8203;(java.util.Map&lt;java.lang.String,&#8203;java.lang.String&gt;&nbsp;privateKeys)</code></th>
 <td class="colLast">
 <div class="block">Sets the default implementation of <a href="CryptoKeyReader.html" title="interface in org.apache.pulsar.client.api"><code>CryptoKeyReader</code></a>.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#intercept(org.apache.pulsar.client.api.ReaderInterceptor...)">intercept</a></span>&#8203;(<a href="ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;...&nbsp;interceptors)</code></th>
+<td class="colLast">
+<div class="block">Intercept <a href="Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a>.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#keyHashRange(org.apache.pulsar.client.api.Range...)">keyHashRange</a></span>&#8203;(<a href="Range.html" title="class in org.apache.pulsar.client.api">Range</a>...&nbsp;ranges)</code></th>
 <td class="colLast">
@@ -215,21 +237,21 @@ extends java.lang.Cloneable</pre>
  the specified key hash range.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#loadConf(java.util.Map)">loadConf</a></span>&#8203;(java.util.Map&lt;java.lang.String,&#8203;java.lang.Object&gt;&nbsp;config)</code></th>
 <td class="colLast">
 <div class="block">Load the configuration from provided <tt>config</tt> map.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#poolMessages(boolean)">poolMessages</a></span>&#8203;(boolean&nbsp;poolMessages)</code></th>
 <td class="colLast">
 <div class="block">Enable pooling of messages and the underlying data buffers.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readCompacted(boolean)">readCompacted</a></span>&#8203;(boolean&nbsp;readCompacted)</code></th>
 <td class="colLast">
@@ -237,28 +259,28 @@ extends java.lang.Cloneable</pre>
  of the topic.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readerListener(org.apache.pulsar.client.api.ReaderListener)">readerListener</a></span>&#8203;(<a href="ReaderListener.html" title="interface in org.apache.pulsar.client.api">ReaderListener</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&nbsp;readerListener)</code></th>
 <td class="colLast">
 <div class="block">Sets a <a href="ReaderListener.html" title="interface in org.apache.pulsar.client.api"><code>ReaderListener</code></a> for the reader.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readerName(java.lang.String)">readerName</a></span>&#8203;(java.lang.String&nbsp;readerName)</code></th>
 <td class="colLast">
 <div class="block">Specify a reader name.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#receiverQueueSize(int)">receiverQueueSize</a></span>&#8203;(int&nbsp;receiverQueueSize)</code></th>
 <td class="colLast">
 <div class="block">Sets the size of the consumer receive queue.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#startMessageFromRollbackDuration(long,java.util.concurrent.TimeUnit)">startMessageFromRollbackDuration</a></span>&#8203;(long&nbsp;rollbackDuration,
                                 java.util.concurrent.TimeUnit&nbsp;timeunit)</code></th>
@@ -266,42 +288,42 @@ extends java.lang.Cloneable</pre>
 <div class="block">The initial reader positioning can be set at specific timestamp by providing total rollback duration.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#startMessageId(org.apache.pulsar.client.api.MessageId)">startMessageId</a></span>&#8203;(<a href="MessageId.html" title="interface in org.apache.pulsar.client.api">MessageId</a>&nbsp;startMessageId)</code></th>
 <td class="colLast">
 <div class="block">The initial reader positioning is done by specifying a message id.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#startMessageIdInclusive()">startMessageIdInclusive</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Set the reader to include the given position of <a href="#startMessageId(org.apache.pulsar.client.api.MessageId)"><code>startMessageId(MessageId)</code></a></div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#subscriptionName(java.lang.String)">subscriptionName</a></span>&#8203;(java.lang.String&nbsp;subscriptionName)</code></th>
 <td class="colLast">
 <div class="block">Set the subscription name.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#subscriptionRolePrefix(java.lang.String)">subscriptionRolePrefix</a></span>&#8203;(java.lang.String&nbsp;subscriptionRolePrefix)</code></th>
 <td class="colLast">
 <div class="block">Set the subscription role prefix.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#topic(java.lang.String)">topic</a></span>&#8203;(java.lang.String&nbsp;topicName)</code></th>
 <td class="colLast">
 <div class="block">Specify the topic this reader will read from.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#topics(java.util.List)">topics</a></span>&#8203;(java.util.List&lt;java.lang.String&gt;&nbsp;topicNames)</code></th>
 <td class="colLast">
@@ -720,7 +742,7 @@ extends java.lang.Cloneable</pre>
 <a id="poolMessages(boolean)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>poolMessages</h4>
 <pre class="methodSignature"><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&nbsp;poolMessages&#8203;(boolean&nbsp;poolMessages)</pre>
@@ -732,6 +754,58 @@ extends java.lang.Cloneable</pre>
  memory corruption, deserialization error, etc.).</div>
 </li>
 </ul>
+<a id="autoUpdatePartitions(boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>autoUpdatePartitions</h4>
+<pre class="methodSignature"><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&nbsp;autoUpdatePartitions&#8203;(boolean&nbsp;autoUpdate)</pre>
+<div class="block">If enabled, the reader will auto subscribe for partitions increasement.
+ This is only for partitioned reader.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>autoUpdate</code> - whether to auto update partition increasement</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the reader builder instance</dd>
+</dl>
+</li>
+</ul>
+<a id="autoUpdatePartitionsInterval(int,java.util.concurrent.TimeUnit)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>autoUpdatePartitionsInterval</h4>
+<pre class="methodSignature"><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&nbsp;autoUpdatePartitionsInterval&#8203;(int&nbsp;interval,
+                                              java.util.concurrent.TimeUnit&nbsp;unit)</pre>
+<div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>. This only works if autoUpdatePartitions is
+ enabled.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>interval</code> - the interval of updating partitions</dd>
+<dd><code>unit</code> - the time unit of the interval.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the reader builder instance</dd>
+</dl>
+</li>
+</ul>
+<a id="intercept(org.apache.pulsar.client.api.ReaderInterceptor...)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>intercept</h4>
+<pre class="methodSignature"><a href="ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&nbsp;intercept&#8203;(<a href="ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;<a href="ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;...&nbsp;interceptors)</pre>
+<div class="block">Intercept <a href="Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>interceptors</code> - the list of interceptors to intercept the reader created by this builder.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the reader builder instance</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </section>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderInterceptor.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderInterceptor.html
new file mode 100644
index 0000000..846e56f
--- /dev/null
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/ReaderInterceptor.html
@@ -0,0 +1,320 @@
+<!DOCTYPE HTML>
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>ReaderInterceptor (Pulsar Client :: API 2.10.0-SNAPSHOT API)</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
+<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
+<!--[if IE]>
+<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
+<![endif]-->
+<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
+<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="ReaderInterceptor (Pulsar Client :: API 2.10.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var data = {"i0":6,"i1":6,"i2":18};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+var pathtoroot = "../../../../../";
+var useModuleDirectories = true;
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<header role="banner">
+<nav role="navigation">
+<div class="fixedNav">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a id="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ReaderInterceptor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<ul class="navListSearch">
+<li><label for="search">SEARCH:</label>
+<input type="text" id="search" value="search" disabled="disabled">
+<input type="reset" id="reset" value="reset" disabled="disabled">
+</li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+</div>
+<div class="navPadding">&nbsp;</div>
+<script type="text/javascript"><!--
+$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
+//-->
+</script>
+</nav>
+</header>
+<!-- ======== START OF CLASS DATA ======== -->
+<main role="main">
+<div class="header">
+<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.pulsar.client.api</a></div>
+<h2 title="Interface ReaderInterceptor" class="title">Interface ReaderInterceptor&lt;T&gt;</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt><span class="paramLabel">Type Parameters:</span></dt>
+<dd><code>T</code> - </dd>
+</dl>
+<hr>
+<pre><a href="../../common/classification/InterfaceAudience.Public.html" title="annotation in org.apache.pulsar.common.classification">@Public</a>
+<a href="../../common/classification/InterfaceStability.Stable.html" title="annotation in org.apache.pulsar.common.classification">@Stable</a>
+public interface <span class="typeNameLabel">ReaderInterceptor&lt;T&gt;</span></pre>
+<div class="block">Reader interceptor.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<section role="region">
+<ul class="blockList">
+<li class="blockList"><a id="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabE [...]
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colSecond" scope="col">Method</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#beforeRead(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">beforeRead</a></span>&#8203;(<a href="Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;reader,
+          <a href="Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;message)</code></th>
+<td class="colLast">
+<div class="block">This is called just before the message is returned by
+ <a href="Reader.html#readNext()"><code>Reader.readNext()</code></a>, <a href="ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)"><code>ReaderListener.received(Reader, Message)</code></a>
+ or the <code>CompletableFuture</code> returned by
+ <a href="Reader.html#readNextAsync()"><code>Reader.readNextAsync()</code></a> completes.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#close()">close</a></span>()</code></th>
+<td class="colLast">
+<div class="block">Close the interceptor.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>default void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPartitionsChange(java.lang.String,int)">onPartitionsChange</a></span>&#8203;(java.lang.String&nbsp;topicName,
+                  int&nbsp;partitions)</code></th>
+<td class="colLast">
+<div class="block">This method is called when partitions of the topic (partitioned-topic) changes.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<section role="region">
+<ul class="blockList">
+<li class="blockList"><a id="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a id="close()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>close</h4>
+<pre class="methodSignature">void&nbsp;close()</pre>
+<div class="block">Close the interceptor.</div>
+</li>
+</ul>
+<a id="beforeRead(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>beforeRead</h4>
+<pre class="methodSignature"><a href="Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;beforeRead&#8203;(<a href="Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;reader,
+                      <a href="Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;message)</pre>
+<div class="block">This is called just before the message is returned by
+ <a href="Reader.html#readNext()"><code>Reader.readNext()</code></a>, <a href="ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)"><code>ReaderListener.received(Reader, Message)</code></a>
+ or the <code>CompletableFuture</code> returned by
+ <a href="Reader.html#readNextAsync()"><code>Reader.readNextAsync()</code></a> completes.
+
+ This method is based on <a href="ConsumerInterceptor.html#beforeConsume(org.apache.pulsar.client.api.Consumer,org.apache.pulsar.client.api.Message)"><code>ConsumerInterceptor.beforeConsume(Consumer, Message)</code></a>,
+ so it has the same features.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>reader</code> - the reader which contains the interceptor</dd>
+<dd><code>message</code> - the message to be read by the client.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>message that is either modified by the interceptor or same message
+         passed into the method.</dd>
+</dl>
+</li>
+</ul>
+<a id="onPartitionsChange(java.lang.String,int)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>onPartitionsChange</h4>
+<pre class="methodSignature">default&nbsp;void&nbsp;onPartitionsChange&#8203;(java.lang.String&nbsp;topicName,
+                                int&nbsp;partitions)</pre>
+<div class="block">This method is called when partitions of the topic (partitioned-topic) changes.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>topicName</code> - topic name</dd>
+<dd><code>partitions</code> - new updated number of partitions</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</div>
+</div>
+</main>
+<!-- ========= END OF CLASS DATA ========= -->
+<footer role="contentinfo">
+<nav role="navigation">
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a id="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a id="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/ReaderInterceptor.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a id="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</nav>
+<p class="legalCopy"><small>Copyright &#169; 2017&#x2013;2022 <a href="http://www.apache.org/">Apache Software Foundation</a>. All rights reserved.</small></p>
+</footer>
+</body>
+</html>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Message.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Message.html
index 5a5296e..564c93f 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Message.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Message.html
@@ -155,6 +155,17 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderInterceptor.</span><code><span class="memberNameLink"><a href="../ReaderInterceptor.html#beforeRead(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">beforeRead</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;reader,
+          <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;message)</code></th>
+<td class="colLast">
+<div class="block">This is called just before the message is returned by
+ <a href="../Reader.html#readNext()"><code>Reader.readNext()</code></a>, <a href="../ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)"><code>ReaderListener.received(Reader, Message)</code></a>
+ or the <code>CompletableFuture</code> returned by
+ <a href="../Reader.html#readNextAsync()"><code>Reader.readNextAsync()</code></a> completes.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ProducerInterceptor.</span><code><span class="memberNameLink"><a href="../ProducerInterceptor.html#beforeSend(org.apache.pulsar.client.api.Producer,org.apache.pulsar.client.api.Message)">beforeSend</a></span>&#8203;(<a href="../Producer.html" title="interface in org.apache.pulsar.client.api">Producer</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;&nbsp;producer,
           <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;&nbsp;message)</code></th>
@@ -164,7 +175,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  send the message to the brokers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;T&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">MessagePayloadContext.</span><code><span class="memberNameLink"><a href="../MessagePayloadContext.html#getMessageAt(int,int,org.apache.pulsar.client.api.MessagePayload,boolean,org.apache.pulsar.client.api.Schema)">getMessageAt</a></span>&#8203;(int&nbsp;index,
             int&nbsp;numMessages,
@@ -175,14 +186,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">Get the internal single message with a specific index from a payload if the payload is a batch.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../Reader.html" title="type parameter in Reader">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Reader.</span><code><span class="memberNameLink"><a href="../Reader.html#readNext()">readNext</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Read the next message in the topic.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../Reader.html" title="type parameter in Reader">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Reader.</span><code><span class="memberNameLink"><a href="../Reader.html#readNext(int,java.util.concurrent.TimeUnit)">readNext</a></span>&#8203;(int&nbsp;timeout,
         java.util.concurrent.TimeUnit&nbsp;unit)</code></th>
@@ -190,14 +201,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">Read the next message in the topic waiting for a maximum time.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../Consumer.html" title="type parameter in Consumer">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#receive()">receive</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Receives a single message.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../Consumer.html" title="type parameter in Consumer">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#receive(int,java.util.concurrent.TimeUnit)">receive</a></span>&#8203;(int&nbsp;timeout,
        java.util.concurrent.TimeUnit&nbsp;unit)</code></th>
@@ -280,6 +291,17 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderInterceptor.</span><code><span class="memberNameLink"><a href="../ReaderInterceptor.html#beforeRead(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">beforeRead</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;reader,
+          <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;message)</code></th>
+<td class="colLast">
+<div class="block">This is called just before the message is returned by
+ <a href="../Reader.html#readNext()"><code>Reader.readNext()</code></a>, <a href="../ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)"><code>ReaderListener.received(Reader, Message)</code></a>
+ or the <code>CompletableFuture</code> returned by
+ <a href="../Reader.html#readNextAsync()"><code>Reader.readNextAsync()</code></a> completes.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ProducerInterceptor.</span><code><span class="memberNameLink"><a href="../ProducerInterceptor.html#beforeSend(org.apache.pulsar.client.api.Producer,org.apache.pulsar.client.api.Message)">beforeSend</a></span>&#8203;(<a href="../Producer.html" title="interface in org.apache.pulsar.client.api">Producer</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;&nbsp;producer,
           <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;&nbsp;message)</code></th>
@@ -289,7 +311,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  send the message to the brokers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>default int</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">MessageRouter.</span><code><span class="memberNameLink"><a href="../MessageRouter.html#choosePartition(org.apache.pulsar.client.api.Message)">choosePartition</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;msg)</code></th>
 <td class="colLast">
@@ -298,7 +320,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>default int</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">MessageRouter.</span><code><span class="memberNameLink"><a href="../MessageRouter.html#choosePartition(org.apache.pulsar.client.api.Message,org.apache.pulsar.client.api.TopicMetadata)">choosePartition</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;msg,
                <a href="../TopicMetadata.html" title="interface in org.apache.pulsar.client.api">TopicMetadata</a>&nbsp;metadata)</code></th>
@@ -306,14 +328,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">Choose a partition based on msg and the topic metadata.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#negativeAcknowledge(org.apache.pulsar.client.api.Message)">negativeAcknowledge</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message)</code></th>
 <td class="colLast">
 <div class="block">Acknowledge the failure to process a single message.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ProducerInterceptor.</span><code><span class="memberNameLink"><a href="../ProducerInterceptor.html#onSendAcknowledgement(org.apache.pulsar.client.api.Producer,org.apache.pulsar.client.api.Message,org.apache.pulsar.client.api.MessageId,java.lang.Throwable)">onSendAcknowledgement</a></span>&#8203;(<a href="../Producer.html" title="interface in org.apache.pulsar.client.api">Producer</a>&lt;<a href="../ProducerInterceptor.html" ti [...]
                      <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ProducerInterceptor.html" title="type parameter in ProducerInterceptor">T</a>&gt;&nbsp;message,
@@ -325,7 +347,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  acknowledged, or when sending the message fails.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">MessageListener.</span><code><span class="memberNameLink"><a href="../MessageListener.html#received(org.apache.pulsar.client.api.Consumer,org.apache.pulsar.client.api.Message)">received</a></span>&#8203;(<a href="../Consumer.html" title="interface in org.apache.pulsar.client.api">Consumer</a>&lt;<a href="../MessageListener.html" title="type parameter in MessageListener">T</a>&gt;&nbsp;consumer,
         <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../MessageListener.html" title="type parameter in MessageListener">T</a>&gt;&nbsp;msg)</code></th>
@@ -333,7 +355,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">This method is called whenever a new message is received.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderListener.</span><code><span class="memberNameLink"><a href="../ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">received</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;reader,
         <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;msg)</code></th>
@@ -341,7 +363,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">This method is called whenever a new message is received.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLater(org.apache.pulsar.client.api.Message,long,java.util.concurrent.TimeUnit)">reconsumeLater</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
               long&nbsp;delayTime,
@@ -350,7 +372,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">reconsumeLater the consumption of <a href="../Messages.html" title="interface in org.apache.pulsar.client.api"><code>Messages</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLater(org.apache.pulsar.client.api.Message,java.util.Map,long,java.util.concurrent.TimeUnit)">reconsumeLater</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
               java.util.Map&lt;java.lang.String,&#8203;java.lang.String&gt;&nbsp;customProperties,
@@ -360,7 +382,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">reconsumeLater the consumption of <a href="../Messages.html" title="interface in org.apache.pulsar.client.api"><code>Messages</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>java.util.concurrent.CompletableFuture&lt;java.lang.Void&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLaterAsync(org.apache.pulsar.client.api.Message,long,java.util.concurrent.TimeUnit)">reconsumeLaterAsync</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
                    long&nbsp;delayTime,
@@ -369,7 +391,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">Asynchronously reconsumeLater the consumption of a single message.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>java.util.concurrent.CompletableFuture&lt;java.lang.Void&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLaterAsync(org.apache.pulsar.client.api.Message,java.util.Map,long,java.util.concurrent.TimeUnit)">reconsumeLaterAsync</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
                    java.util.Map&lt;java.lang.String,&#8203;java.lang.String&gt;&nbsp;customProperties,
@@ -379,7 +401,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">Asynchronously reconsumeLater the consumption of a single message.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLaterCumulative(org.apache.pulsar.client.api.Message,long,java.util.concurrent.TimeUnit)">reconsumeLaterCumulative</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
                         long&nbsp;delayTime,
@@ -388,7 +410,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">reconsumeLater the reception of all the messages in the stream up to (and including) the provided message.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>java.util.concurrent.CompletableFuture&lt;java.lang.Void&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLaterCumulativeAsync(org.apache.pulsar.client.api.Message,long,java.util.concurrent.TimeUnit)">reconsumeLaterCumulativeAsync</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
                              long&nbsp;delayTime,
@@ -398,7 +420,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  message.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>java.util.concurrent.CompletableFuture&lt;java.lang.Void&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">Consumer.</span><code><span class="memberNameLink"><a href="../Consumer.html#reconsumeLaterCumulativeAsync(org.apache.pulsar.client.api.Message,java.util.Map,long,java.util.concurrent.TimeUnit)">reconsumeLaterCumulativeAsync</a></span>&#8203;(<a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;?&gt;&nbsp;message,
                              java.util.Map&lt;java.lang.String,&#8203;java.lang.String&gt;&nbsp;customProperties,
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html
index af5039d..dd15f94 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html
@@ -164,13 +164,24 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code><a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderInterceptor.</span><code><span class="memberNameLink"><a href="../ReaderInterceptor.html#beforeRead(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">beforeRead</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;reader,
+          <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderInterceptor.html" title="type parameter in ReaderInterceptor">T</a>&gt;&nbsp;message)</code></th>
+<td class="colLast">
+<div class="block">This is called just before the message is returned by
+ <a href="../Reader.html#readNext()"><code>readNext()</code></a>, <a href="../ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)"><code>ReaderListener.received(Reader, Message)</code></a>
+ or the <code>CompletableFuture</code> returned by
+ <a href="../Reader.html#readNextAsync()"><code>readNextAsync()</code></a> completes.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>default void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderListener.</span><code><span class="memberNameLink"><a href="../ReaderListener.html#reachedEndOfTopic(org.apache.pulsar.client.api.Reader)">reachedEndOfTopic</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;reader)</code></th>
 <td class="colLast">
 <div class="block">Get the notification when a topic is terminated.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderListener.</span><code><span class="memberNameLink"><a href="../ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">received</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;reader,
         <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;msg)</code></th>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderBuilder.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderBuilder.html
index e3c64b0..5d49d9b 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderBuilder.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderBuilder.html
@@ -131,6 +131,21 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#autoUpdatePartitions(boolean)">autoUpdatePartitions</a></span>&#8203;(boolean&nbsp;autoUpdate)</code></th>
+<td class="colLast">
+<div class="block">If enabled, the reader will auto subscribe for partitions increasement.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#autoUpdatePartitionsInterval(int,java.util.concurrent.TimeUnit)">autoUpdatePartitionsInterval</a></span>&#8203;(int&nbsp;interval,
+                            java.util.concurrent.TimeUnit&nbsp;unit)</code></th>
+<td class="colLast">
+<div class="block">Set the interval of updating partitions <i>(default: 1 minute)</i>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#clone()">clone</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Create a copy of the current <a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api"><code>ReaderBuilder</code></a>.</div>
@@ -166,41 +181,48 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#intercept(org.apache.pulsar.client.api.ReaderInterceptor...)">intercept</a></span>&#8203;(<a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;...&nbsp;interceptors)</code></th>
+<td class="colLast">
+<div class="block">Intercept <a href="../Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#keyHashRange(org.apache.pulsar.client.api.Range...)">keyHashRange</a></span>&#8203;(<a href="../Range.html" title="class in org.apache.pulsar.client.api">Range</a>...&nbsp;ranges)</code></th>
 <td class="colLast">
 <div class="block">Set key hash range of the reader, broker will only dispatch messages which hash of the message key contains by
  the specified key hash range.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#loadConf(java.util.Map)">loadConf</a></span>&#8203;(java.util.Map&lt;java.lang.String,&#8203;java.lang.Object&gt;&nbsp;config)</code></th>
 <td class="colLast">
 <div class="block">Load the configuration from provided <tt>config</tt> map.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;byte[]&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">PulsarClient.</span><code><span class="memberNameLink"><a href="../PulsarClient.html#newReader()">newReader</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Create a topic reader builder with no schema (<a href="../Schema.html#BYTES"><code>Schema.BYTES</code></a>) to read from the specified topic.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;T&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">PulsarClient.</span><code><span class="memberNameLink"><a href="../PulsarClient.html#newReader(org.apache.pulsar.client.api.Schema)">newReader</a></span>&#8203;(<a href="../Schema.html" title="interface in org.apache.pulsar.client.api">Schema</a>&lt;T&gt;&nbsp;schema)</code></th>
 <td class="colLast">
 <div class="block">Create a topic reader builder with a specific <a href="../Schema.html" title="interface in org.apache.pulsar.client.api"><code>Schema</code></a>) to read from the specified topic.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#poolMessages(boolean)">poolMessages</a></span>&#8203;(boolean&nbsp;poolMessages)</code></th>
 <td class="colLast">
 <div class="block">Enable pooling of messages and the underlying data buffers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#readCompacted(boolean)">readCompacted</a></span>&#8203;(boolean&nbsp;readCompacted)</code></th>
 <td class="colLast">
@@ -208,28 +230,28 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  of the topic.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#readerListener(org.apache.pulsar.client.api.ReaderListener)">readerListener</a></span>&#8203;(<a href="../ReaderListener.html" title="interface in org.apache.pulsar.client.api">ReaderListener</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&nbsp;readerListener)</code></th>
 <td class="colLast">
 <div class="block">Sets a <a href="../ReaderListener.html" title="interface in org.apache.pulsar.client.api"><code>ReaderListener</code></a> for the reader.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#readerName(java.lang.String)">readerName</a></span>&#8203;(java.lang.String&nbsp;readerName)</code></th>
 <td class="colLast">
 <div class="block">Specify a reader name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#receiverQueueSize(int)">receiverQueueSize</a></span>&#8203;(int&nbsp;receiverQueueSize)</code></th>
 <td class="colLast">
 <div class="block">Sets the size of the consumer receive queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#startMessageFromRollbackDuration(long,java.util.concurrent.TimeUnit)">startMessageFromRollbackDuration</a></span>&#8203;(long&nbsp;rollbackDuration,
                                 java.util.concurrent.TimeUnit&nbsp;timeunit)</code></th>
@@ -237,42 +259,42 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <div class="block">The initial reader positioning can be set at specific timestamp by providing total rollback duration.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#startMessageId(org.apache.pulsar.client.api.MessageId)">startMessageId</a></span>&#8203;(<a href="../MessageId.html" title="interface in org.apache.pulsar.client.api">MessageId</a>&nbsp;startMessageId)</code></th>
 <td class="colLast">
 <div class="block">The initial reader positioning is done by specifying a message id.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#startMessageIdInclusive()">startMessageIdInclusive</a></span>()</code></th>
 <td class="colLast">
 <div class="block">Set the reader to include the given position of <a href="../ReaderBuilder.html#startMessageId(org.apache.pulsar.client.api.MessageId)"><code>startMessageId(MessageId)</code></a></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#subscriptionName(java.lang.String)">subscriptionName</a></span>&#8203;(java.lang.String&nbsp;subscriptionName)</code></th>
 <td class="colLast">
 <div class="block">Set the subscription name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#subscriptionRolePrefix(java.lang.String)">subscriptionRolePrefix</a></span>&#8203;(java.lang.String&nbsp;subscriptionRolePrefix)</code></th>
 <td class="colLast">
 <div class="block">Set the subscription role prefix.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#topic(java.lang.String)">topic</a></span>&#8203;(java.lang.String&nbsp;topicName)</code></th>
 <td class="colLast">
 <div class="block">Specify the topic this reader will read from.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
 <th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#topics(java.util.List)">topics</a></span>&#8203;(java.util.List&lt;java.lang.String&gt;&nbsp;topicNames)</code></th>
 <td class="colLast">
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderInterceptor.html
similarity index 57%
copy from content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html
copy to content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderInterceptor.html
index af5039d..d49f3c2 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/Reader.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/class-use/ReaderInterceptor.html
@@ -3,7 +3,7 @@
 <html lang="en">
 <head>
 <!-- Generated by javadoc -->
-<title>Uses of Interface org.apache.pulsar.client.api.Reader (Pulsar Client :: API 2.10.0-SNAPSHOT API)</title>
+<title>Uses of Interface org.apache.pulsar.client.api.ReaderInterceptor (Pulsar Client :: API 2.10.0-SNAPSHOT API)</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../../../../jquery/jquery-ui.css" title="Style">
@@ -20,7 +20,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Interface org.apache.pulsar.client.api.Reader (Pulsar Client :: API 2.10.0-SNAPSHOT API)";
+            parent.document.title="Uses of Interface org.apache.pulsar.client.api.ReaderInterceptor (Pulsar Client :: API 2.10.0-SNAPSHOT API)";
         }
     }
     catch(err) {
@@ -46,7 +46,7 @@ loadScripts(document, 'script');</script>
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../index.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Class</a></li>
+<li><a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -93,13 +93,13 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </header>
 <main role="main">
 <div class="header">
-<h2 title="Uses of Interface org.apache.pulsar.client.api.Reader" class="title">Uses of Interface<br>org.apache.pulsar.client.api.Reader</h2>
+<h2 title="Uses of Interface org.apache.pulsar.client.api.ReaderInterceptor" class="title">Uses of Interface<br>org.apache.pulsar.client.api.ReaderInterceptor</h2>
 </div>
 <div class="classUseContainer">
 <ul class="blockList">
 <li class="blockList">
 <table class="useSummary">
-<caption><span>Packages that use <a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>Packages that use <a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Package</th>
 <th class="colLast" scope="col">Description</th>
@@ -120,9 +120,9 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <section role="region"><a id="org.apache.pulsar.client.api">
 <!--   -->
 </a>
-<h3>Uses of <a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a> in <a href="../package-summary.html">org.apache.pulsar.client.api</a></h3>
+<h3>Uses of <a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a> in <a href="../package-summary.html">org.apache.pulsar.client.api</a></h3>
 <table class="useSummary">
-<caption><span>Methods in <a href="../package-summary.html">org.apache.pulsar.client.api</a> that return <a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>Methods in <a href="../package-summary.html">org.apache.pulsar.client.api</a> with parameters of type <a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colSecond" scope="col">Method</th>
@@ -130,52 +130,10 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
-<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#create()">create</a></span>()</code></th>
+<td class="colFirst"><code><a href="../ReaderBuilder.html" title="interface in org.apache.pulsar.client.api">ReaderBuilder</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;</code></td>
+<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#intercept(org.apache.pulsar.client.api.ReaderInterceptor...)">intercept</a></span>&#8203;(<a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;...&nbsp;interceptors)</code></th>
 <td class="colLast">
-<div class="block">Finalize the creation of the <a href="../Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a> instance.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary">
-<caption><span>Methods in <a href="../package-summary.html">org.apache.pulsar.client.api</a> that return types with arguments of type <a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colSecond" scope="col">Method</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>java.util.concurrent.CompletableFuture&lt;<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderBuilder.html" title="type parameter in ReaderBuilder">T</a>&gt;&gt;</code></td>
-<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderBuilder.</span><code><span class="memberNameLink"><a href="../ReaderBuilder.html#createAsync()">createAsync</a></span>()</code></th>
-<td class="colLast">
-<div class="block">Finalize the creation of the <a href="../Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a> instance in asynchronous mode.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary">
-<caption><span>Methods in <a href="../package-summary.html">org.apache.pulsar.client.api</a> with parameters of type <a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colSecond" scope="col">Method</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>default void</code></td>
-<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderListener.</span><code><span class="memberNameLink"><a href="../ReaderListener.html#reachedEndOfTopic(org.apache.pulsar.client.api.Reader)">reachedEndOfTopic</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;reader)</code></th>
-<td class="colLast">
-<div class="block">Get the notification when a topic is terminated.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<th class="colSecond" scope="row"><span class="typeNameLabel">ReaderListener.</span><code><span class="memberNameLink"><a href="../ReaderListener.html#received(org.apache.pulsar.client.api.Reader,org.apache.pulsar.client.api.Message)">received</a></span>&#8203;(<a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Reader</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;reader,
-        <a href="../Message.html" title="interface in org.apache.pulsar.client.api">Message</a>&lt;<a href="../ReaderListener.html" title="type parameter in ReaderListener">T</a>&gt;&nbsp;msg)</code></th>
-<td class="colLast">
-<div class="block">This method is called whenever a new message is received.</div>
+<div class="block">Intercept <a href="../Reader.html" title="interface in org.apache.pulsar.client.api"><code>Reader</code></a>.</div>
 </td>
 </tr>
 </tbody>
@@ -200,7 +158,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../index.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../Reader.html" title="interface in org.apache.pulsar.client.api">Class</a></li>
+<li><a href="../ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-summary.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-summary.html
index a6df80a..aeb04ca 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-summary.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-summary.html
@@ -298,47 +298,53 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </td>
 </tr>
 <tr class="rowColor">
+<th class="colFirst" scope="row"><a href="ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;T&gt;</th>
+<td class="colLast">
+<div class="block">Reader interceptor.</div>
+</td>
+</tr>
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="ReaderListener.html" title="interface in org.apache.pulsar.client.api">ReaderListener</a>&lt;T&gt;</th>
 <td class="colLast">
 <div class="block">A listener that will be called in order for every message received.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api">RedeliveryBackoff</a></th>
 <td class="colLast">
 <div class="block">Interface for custom message is negativeAcked policy, users can specify a <a href="RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api"><code>RedeliveryBackoff</code></a> for
  a consumer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="Schema.html" title="interface in org.apache.pulsar.client.api">Schema</a>&lt;T&gt;</th>
 <td class="colLast">
 <div class="block">Message schema definition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="ServiceUrlProvider.html" title="interface in org.apache.pulsar.client.api">ServiceUrlProvider</a></th>
 <td class="colLast">
 <div class="block">The provider to provide the service url.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="TableView.html" title="interface in org.apache.pulsar.client.api">TableView</a>&lt;T&gt;</th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="TableViewBuilder.html" title="interface in org.apache.pulsar.client.api">TableViewBuilder</a>&lt;T&gt;</th>
 <td class="colLast">
 <div class="block"><a href="TableViewBuilder.html" title="interface in org.apache.pulsar.client.api"><code>TableViewBuilder</code></a> is used to configure and create instances of <a href="TableView.html" title="interface in org.apache.pulsar.client.api"><code>TableView</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="TopicMetadata.html" title="interface in org.apache.pulsar.client.api">TopicMetadata</a></th>
 <td class="colLast">
 <div class="block">Metadata of a topic that can be used for message routing.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="TypedMessageBuilder.html" title="interface in org.apache.pulsar.client.api">TypedMessageBuilder</a>&lt;T&gt;</th>
 <td class="colLast">
 <div class="block">Message builder that constructs a message to be published through a producer.</div>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-tree.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-tree.html
index d0e2f16..47ff031 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-tree.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-tree.html
@@ -229,6 +229,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <li class="circle">org.apache.pulsar.client.api.<a href="MessagePayloadContext.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">MessagePayloadContext</span></a></li>
 <li class="circle">org.apache.pulsar.client.api.<a href="MessagePayloadFactory.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">MessagePayloadFactory</span></a></li>
 <li class="circle">org.apache.pulsar.client.api.<a href="MessagePayloadProcessor.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">MessagePayloadProcessor</span></a></li>
+<li class="circle">org.apache.pulsar.client.api.<a href="ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">ReaderInterceptor</span></a>&lt;T&gt;</li>
 <li class="circle">java.io.Serializable
 <ul>
 <li class="circle">org.apache.pulsar.client.api.<a href="Authentication.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">Authentication</span></a> (also extends java.io.Closeable)</li>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-use.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-use.html
index 792827d..988eff6 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-use.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/client/api/package-use.html
@@ -465,78 +465,84 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </td>
 </tr>
 <tr class="altColor">
+<th class="colFirst" scope="row"><a href="class-use/ReaderInterceptor.html#org.apache.pulsar.client.api">ReaderInterceptor</a></th>
+<td class="colLast">
+<div class="block">Reader interceptor.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/ReaderListener.html#org.apache.pulsar.client.api">ReaderListener</a></th>
 <td class="colLast">
 <div class="block">A listener that will be called in order for every message received.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/RedeliveryBackoff.html#org.apache.pulsar.client.api">RedeliveryBackoff</a></th>
 <td class="colLast">
 <div class="block">Interface for custom message is negativeAcked policy, users can specify a <a href="RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api"><code>RedeliveryBackoff</code></a> for
  a consumer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/RegexSubscriptionMode.html#org.apache.pulsar.client.api">RegexSubscriptionMode</a></th>
 <td class="colLast">
 <div class="block">When subscribing to topics using a regular expression, one can specify
  to only pick a certain type of topics.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/Schema.html#org.apache.pulsar.client.api">Schema</a></th>
 <td class="colLast">
 <div class="block">Message schema definition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/ServiceUrlProvider.html#org.apache.pulsar.client.api">ServiceUrlProvider</a></th>
 <td class="colLast">
 <div class="block">The provider to provide the service url.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/SizeUnit.html#org.apache.pulsar.client.api">SizeUnit</a></th>
 <td class="colLast">
 <div class="block">Size unit converter.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/SubscriptionInitialPosition.html#org.apache.pulsar.client.api">SubscriptionInitialPosition</a></th>
 <td class="colLast">
 <div class="block">When creating a consumer, if the subscription does not exist, a new subscription will be created.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/SubscriptionMode.html#org.apache.pulsar.client.api">SubscriptionMode</a></th>
 <td class="colLast">
 <div class="block">Types of subscription mode supported by Pulsar.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/SubscriptionType.html#org.apache.pulsar.client.api">SubscriptionType</a></th>
 <td class="colLast">
 <div class="block">Types of subscription supported by Pulsar.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/TableView.html#org.apache.pulsar.client.api">TableView</a></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/TableViewBuilder.html#org.apache.pulsar.client.api">TableViewBuilder</a></th>
 <td class="colLast">
 <div class="block"><a href="TableViewBuilder.html" title="interface in org.apache.pulsar.client.api"><code>TableViewBuilder</code></a> is used to configure and create instances of <a href="TableView.html" title="interface in org.apache.pulsar.client.api"><code>TableView</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/TopicMetadata.html#org.apache.pulsar.client.api">TopicMetadata</a></th>
 <td class="colLast">
 <div class="block">Metadata of a topic that can be used for message routing.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/TypedMessageBuilder.html#org.apache.pulsar.client.api">TypedMessageBuilder</a></th>
 <td class="colLast">
 <div class="block">Message builder that constructs a message to be published through a producer.</div>
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceAudience.Public.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceAudience.Public.html
index 552c0f8..7a2160b 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceAudience.Public.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceAudience.Public.html
@@ -425,12 +425,19 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;T&gt;</span></code></th>
+<td class="colLast">
+<div class="block">Reader interceptor.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/ReaderListener.html" title="interface in org.apache.pulsar.client.api">ReaderListener</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
 <div class="block">A listener that will be called in order for every message received.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api">RedeliveryBackoff</a></span></code></th>
 <td class="colLast">
@@ -438,7 +445,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  a consumer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/RegexSubscriptionMode.html" title="enum in org.apache.pulsar.client.api">RegexSubscriptionMode</a></span></code></th>
 <td class="colLast">
@@ -446,63 +453,63 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  to only pick a certain type of topics.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/Schema.html" title="interface in org.apache.pulsar.client.api">Schema</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
 <div class="block">Message schema definition.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SchemaSerializationException.html" title="class in org.apache.pulsar.client.api">SchemaSerializationException</a></span></code></th>
 <td class="colLast">
 <div class="block">Schema serialization exception.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/ServiceUrlProvider.html" title="interface in org.apache.pulsar.client.api">ServiceUrlProvider</a></span></code></th>
 <td class="colLast">
 <div class="block">The provider to provide the service url.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SubscriptionInitialPosition.html" title="enum in org.apache.pulsar.client.api">SubscriptionInitialPosition</a></span></code></th>
 <td class="colLast">
 <div class="block">When creating a consumer, if the subscription does not exist, a new subscription will be created.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SubscriptionMode.html" title="enum in org.apache.pulsar.client.api">SubscriptionMode</a></span></code></th>
 <td class="colLast">
 <div class="block">Types of subscription mode supported by Pulsar.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SubscriptionType.html" title="enum in org.apache.pulsar.client.api">SubscriptionType</a></span></code></th>
 <td class="colLast">
 <div class="block">Types of subscription supported by Pulsar.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/TableViewBuilder.html" title="interface in org.apache.pulsar.client.api">TableViewBuilder</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
 <div class="block"><a href="../../../client/api/TableViewBuilder.html" title="interface in org.apache.pulsar.client.api"><code>TableViewBuilder</code></a> is used to configure and create instances of <a href="../../../client/api/TableView.html" title="interface in org.apache.pulsar.client.api"><code>TableView</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/TopicMetadata.html" title="interface in org.apache.pulsar.client.api">TopicMetadata</a></span></code></th>
 <td class="colLast">
 <div class="block">Metadata of a topic that can be used for message routing.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/TypedMessageBuilder.html" title="interface in org.apache.pulsar.client.api">TypedMessageBuilder</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
diff --git a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceStability.Stable.html b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceStability.Stable.html
index 2f36425..bcfcd6f 100644
--- a/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceStability.Stable.html
+++ b/content/api/client/2.10.0-SNAPSHOT/org/apache/pulsar/common/classification/class-use/InterfaceStability.Stable.html
@@ -442,12 +442,19 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api">ReaderInterceptor</a>&lt;T&gt;</span></code></th>
+<td class="colLast">
+<div class="block">Reader interceptor.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/ReaderListener.html" title="interface in org.apache.pulsar.client.api">ReaderListener</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
 <div class="block">A listener that will be called in order for every message received.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/RedeliveryBackoff.html" title="interface in org.apache.pulsar.client.api">RedeliveryBackoff</a></span></code></th>
 <td class="colLast">
@@ -455,7 +462,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  a consumer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/RegexSubscriptionMode.html" title="enum in org.apache.pulsar.client.api">RegexSubscriptionMode</a></span></code></th>
 <td class="colLast">
@@ -463,56 +470,56 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  to only pick a certain type of topics.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/Schema.html" title="interface in org.apache.pulsar.client.api">Schema</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
 <div class="block">Message schema definition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SchemaSerializationException.html" title="class in org.apache.pulsar.client.api">SchemaSerializationException</a></span></code></th>
 <td class="colLast">
 <div class="block">Schema serialization exception.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/ServiceUrlProvider.html" title="interface in org.apache.pulsar.client.api">ServiceUrlProvider</a></span></code></th>
 <td class="colLast">
 <div class="block">The provider to provide the service url.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SubscriptionInitialPosition.html" title="enum in org.apache.pulsar.client.api">SubscriptionInitialPosition</a></span></code></th>
 <td class="colLast">
 <div class="block">When creating a consumer, if the subscription does not exist, a new subscription will be created.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SubscriptionMode.html" title="enum in org.apache.pulsar.client.api">SubscriptionMode</a></span></code></th>
 <td class="colLast">
 <div class="block">Types of subscription mode supported by Pulsar.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/SubscriptionType.html" title="enum in org.apache.pulsar.client.api">SubscriptionType</a></span></code></th>
 <td class="colLast">
 <div class="block">Types of subscription supported by Pulsar.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/TopicMetadata.html" title="interface in org.apache.pulsar.client.api">TopicMetadata</a></span></code></th>
 <td class="colLast">
 <div class="block">Metadata of a topic that can be used for message routing.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../client/api/TypedMessageBuilder.html" title="interface in org.apache.pulsar.client.api">TypedMessageBuilder</a>&lt;T&gt;</span></code></th>
 <td class="colLast">
diff --git a/content/api/client/2.10.0-SNAPSHOT/overview-summary.html b/content/api/client/2.10.0-SNAPSHOT/overview-summary.html
index 78eb57d..40fea85 100644
--- a/content/api/client/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/client/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Mar 18 06:14:03 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Fri Mar 18 12:10:20 UTC 2022 -->
 <title>Pulsar Client :: API 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/client/2.10.0-SNAPSHOT/overview-tree.html b/content/api/client/2.10.0-SNAPSHOT/overview-tree.html
index c4d56a9..95addf4 100644
--- a/content/api/client/2.10.0-SNAPSHOT/overview-tree.html
+++ b/content/api/client/2.10.0-SNAPSHOT/overview-tree.html
@@ -280,6 +280,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <li class="circle">org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/MessagePayloadFactory.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">MessagePayloadFactory</span></a></li>
 <li class="circle">org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/MessagePayloadProcessor.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">MessagePayloadProcessor</span></a></li>
 <li class="circle">org.apache.pulsar.client.internal.<a href="org/apache/pulsar/client/internal/PulsarClientImplementationBinding.html" title="interface in org.apache.pulsar.client.internal"><span class="typeNameLink">PulsarClientImplementationBinding</span></a></li>
+<li class="circle">org.apache.pulsar.client.api.<a href="org/apache/pulsar/client/api/ReaderInterceptor.html" title="interface in org.apache.pulsar.client.api"><span class="typeNameLink">ReaderInterceptor</span></a>&lt;T&gt;</li>
 <li class="circle">org.apache.pulsar.client.api.schema.<a href="org/apache/pulsar/client/api/schema/RecordSchemaBuilder.html" title="interface in org.apache.pulsar.client.api.schema"><span class="typeNameLink">RecordSchemaBuilder</span></a></li>
 <li class="circle">org.apache.pulsar.client.api.schema.<a href="org/apache/pulsar/client/api/schema/SchemaBuilder.html" title="interface in org.apache.pulsar.client.api.schema"><span class="typeNameLink">SchemaBuilder</span></a></li>
 <li class="circle">org.apache.pulsar.client.api.schema.<a href="org/apache/pulsar/client/api/schema/SchemaDefinition.html" title="interface in org.apache.pulsar.client.api.schema"><span class="typeNameLink">SchemaDefinition</span></a>&lt;T&gt;</li>
diff --git a/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip
index 3db178c..32ed701 100644
Binary files a/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/client/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/client/2.10.0-SNAPSHOT/type-search-index.js b/content/api/client/2.10.0-SNAPSHOT/type-search-index.js
index 8d61521..1f041cd 100644
--- a/content/api/client/2.10.0-SNAPSHOT/type-search-index.js
+++ b/content/api/client/2.10.0-SNAPSHOT/type-search-index.js
@@ -1 +1 @@
-typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"org.apache.pulsar.client.api","l":"PulsarClientException.AlreadyClosedException"},{"p":"org.apache.pulsar.common.api","l":"AuthData"},{"p":"org.apache.pulsar.client.api","l":"Authentication"},{"p":"org.apache.pulsar.client.api","l":"AuthenticationDataProvider"},{"p":"org.apache.pulsar.client.api","l":"PulsarClientException.AuthenticationException"},{"p":"org.apache.pulsar.client.api","l":"AuthenticationFactory"},{ [...]
\ No newline at end of file
+typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"org.apache.pulsar.client.api","l":"PulsarClientException.AlreadyClosedException"},{"p":"org.apache.pulsar.common.api","l":"AuthData"},{"p":"org.apache.pulsar.client.api","l":"Authentication"},{"p":"org.apache.pulsar.client.api","l":"AuthenticationDataProvider"},{"p":"org.apache.pulsar.client.api","l":"PulsarClientException.AuthenticationException"},{"p":"org.apache.pulsar.client.api","l":"AuthenticationFactory"},{ [...]
\ No newline at end of file
diff --git a/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip
index 9c2228b..12c56bc 100644
Binary files a/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/client/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/index-all.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/index-all.html
index 22172db..b67cddc 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/index-all.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/index-all.html
@@ -11161,6 +11161,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendConnectedResponse(int,int)">sendConnectedResponse(int, int)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">PulsarCommandSenderImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSender.html#sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendEndTxnErrorResponse(long, TxnID, ServerError, String)</a></span> - Method in interface org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">Puls [...]
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendEndTxnErrorResponse(long, TxnID, ServerError, String)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">Puls [...]
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSender.html#sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">sendEndTxnResponse(long, TxnID, int)</a></span> - Method in interface org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">sendEndTxnResponse(long, TxnID, int)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">PulsarCommandSenderImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSender.html#sendError(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendError(long, ServerError, String)</a></span> - Method in interface org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendError(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendError(long, ServerError, String)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">PulsarCommandSenderImpl</a></dt>
@@ -11223,6 +11231,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.html#sendMessagesToConsumers(org.apache.pulsar.broker.service.persistent.PersistentDispatcherMultipleConsumers.ReadType,java.util.List)">sendMessagesToConsumers(PersistentDispatcherMultipleConsumers.ReadType, List&lt;Entry&gt;)</a></span> - Method in class org.apache.pulsar.broker.service.persistent.<a href="org/apache/pulsar/broker/service/persistent/Persi [...]
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSender.html#sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendNewTxnErrorResponse(long, long, ServerError, String)</a></span> - Method in interface org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendNewTxnErrorResponse(long, long, ServerError, String)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">PulsarCommandSenderImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSender.html#sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">sendNewTxnResponse(long, TxnID, long)</a></span> - Method in interface org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">sendNewTxnResponse(long, TxnID, long)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">PulsarCommandSenderImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSender.html#sendPartitionMetadataResponse(int,long)">sendPartitionMetadataResponse(int, long)</a></span> - Method in interface org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html#sendPartitionMetadataResponse(int,long)">sendPartitionMetadataResponse(int, long)</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html" title="class in org.apache.pulsar.broker.service">PulsarCommandSenderImpl</a></dt>
@@ -12842,12 +12858,28 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/compaction/TwoPhaseCompactor.html#%3Cinit%3E(org.apache.pulsar.broker.ServiceConfiguration,org.apache.pulsar.client.api.PulsarClient,org.apache.bookkeeper.client.BookKeeper,java.util.concurrent.ScheduledExecutorService)">TwoPhaseCompactor(ServiceConfiguration, PulsarClient, BookKeeper, ScheduledExecutorService)</a></span> - Constructor for class org.apache.pulsar.compaction.<a href="org/apache/pulsar/compaction/TwoPhaseCompactor [...]
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/intercept/BrokerInterceptor.html#txnEnded(java.lang.String,long)">txnEnded(String, long)</a></span> - Method in interface org.apache.pulsar.broker.intercept.<a href="org/apache/pulsar/broker/intercept/BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></dt>
+<dd>
+<div class="block">Intercept when a transaction ends.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/intercept/BrokerInterceptors.html#txnEnded(java.lang.String,long)">txnEnded(String, long)</a></span> - Method in class org.apache.pulsar.broker.intercept.<a href="org/apache/pulsar/broker/intercept/BrokerInterceptors.html" title="class in org.apache.pulsar.broker.intercept">BrokerInterceptors</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html#txnEnded(java.lang.String,long)">txnEnded(String, long)</a></span> - Method in class org.apache.pulsar.broker.intercept.<a href="org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html" title="class in org.apache.pulsar.broker.intercept">BrokerInterceptorWithClassLoader</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/transaction/buffer/impl/TransactionEntryImpl.html#txnId()">txnId()</a></span> - Method in class org.apache.pulsar.broker.transaction.buffer.impl.<a href="org/apache/pulsar/broker/transaction/buffer/impl/TransactionEntryImpl.html" title="class in org.apache.pulsar.broker.transaction.buffer.impl">TransactionEntryImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/transaction/buffer/TransactionEntry.html#txnId()">txnId()</a></span> - Method in interface org.apache.pulsar.broker.transaction.buffer.<a href="org/apache/pulsar/broker/transaction/buffer/TransactionEntry.html" title="interface in org.apache.pulsar.broker.transaction.buffer">TransactionEntry</a></dt>
 <dd>
 <div class="block">The transaction id that the entry is appended to.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/intercept/BrokerInterceptor.html#txnOpened(long,java.lang.String)">txnOpened(long, String)</a></span> - Method in interface org.apache.pulsar.broker.intercept.<a href="org/apache/pulsar/broker/intercept/BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></dt>
+<dd>
+<div class="block">Intercept when a transaction begins.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/intercept/BrokerInterceptors.html#txnOpened(long,java.lang.String)">txnOpened(long, String)</a></span> - Method in class org.apache.pulsar.broker.intercept.<a href="org/apache/pulsar/broker/intercept/BrokerInterceptors.html" title="class in org.apache.pulsar.broker.intercept">BrokerInterceptors</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html#txnOpened(long,java.lang.String)">txnOpened(long, String)</a></span> - Method in class org.apache.pulsar.broker.intercept.<a href="org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html" title="class in org.apache.pulsar.broker.intercept">BrokerInterceptorWithClassLoader</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/schema/proto/SchemaRegistryFormat.SchemaInfo.html#TYPE_FIELD_NUMBER">TYPE_FIELD_NUMBER</a></span> - Static variable in class org.apache.pulsar.broker.service.schema.proto.<a href="org/apache/pulsar/broker/service/schema/proto/SchemaRegistryFormat.SchemaInfo.html" title="class in org.apache.pulsar.broker.service.schema.proto">SchemaRegistryFormat.SchemaInfo</a></dt>
 <dd>&nbsp;</dd>
 </dl>
@@ -13014,6 +13046,8 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/AbstractTopic.html#updateBrokerDispatchRate()">updateBrokerDispatchRate()</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/AbstractTopic.html#updateBrokerPublishRate()">updateBrokerPublishRate()</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/AbstractTopic.html#updateBrokerReplicatorDispatchRate()">updateBrokerReplicatorDispatchRate()</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/pulsar/broker/service/AbstractTopic.html#updateBrokerSubscriptionDispatchRate()">updateBrokerSubscriptionDispatchRate()</a></span> - Method in class org.apache.pulsar.broker.service.<a href="org/apache/pulsar/broker/service/AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></dt>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.js b/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.js
index 6256bce8..50dee19 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.js
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.pulsar.broker.transaction.pendingack.proto","c":"PendingAckOp","l":"ABORT"},{"p":"org.apache.pulsar.broker.transaction.pendingack.proto","c":"PendingAckOp","l":"ABORT_VALUE"},{"p":"org.apache.pulsar.broker.stats.prometheus","c":"AggregatedTransactionCoordinatorStats","l":"abortedCount"},{"p":"org.apache.pulsar.broker.transaction.buffer","c":"TransactionMeta","l":"abortTxn()"},{"p":"org.apache.pulsar.broker.transaction.pendingack","c":"PendingAckHandl [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.pulsar.broker.transaction.pendingack.proto","c":"PendingAckOp","l":"ABORT"},{"p":"org.apache.pulsar.broker.transaction.pendingack.proto","c":"PendingAckOp","l":"ABORT_VALUE"},{"p":"org.apache.pulsar.broker.stats.prometheus","c":"AggregatedTransactionCoordinatorStats","l":"abortedCount"},{"p":"org.apache.pulsar.broker.transaction.buffer","c":"TransactionMeta","l":"abortTxn()"},{"p":"org.apache.pulsar.broker.transaction.pendingack","c":"PendingAckHandl [...]
\ No newline at end of file
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip
index 0cb76c4..107d946 100644
Binary files a/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/pulsar-broker/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.BrokerInterceptorDisabled.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.BrokerInterceptorDisabled.html
index 3268a4b..65e9508 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.BrokerInterceptorDisabled.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.BrokerInterceptorDisabled.html
@@ -275,7 +275,7 @@ implements <a href="BrokerInterceptor.html" title="interface in org.apache.pulsa
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.pulsar.broker.intercept.<a href="BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></h3>
-<code><a href="BrokerInterceptor.html#beforeSendMessage(org.apache.pulsar.broker.service.Subscription,org.apache.bookkeeper.mledger.Entry,long%5B%5D,org.apache.pulsar.common.api.proto.MessageMetadata)">beforeSendMessage</a>, <a href="BrokerInterceptor.html#consumerCreated(org.apache.pulsar.broker.service.ServerCnx,org.apache.pulsar.broker.service.Consumer,java.util.Map)">consumerCreated</a>, <a href="BrokerInterceptor.html#messageAcked(org.apache.pulsar.broker.service.ServerCnx,org.apach [...]
+<code><a href="BrokerInterceptor.html#beforeSendMessage(org.apache.pulsar.broker.service.Subscription,org.apache.bookkeeper.mledger.Entry,long%5B%5D,org.apache.pulsar.common.api.proto.MessageMetadata)">beforeSendMessage</a>, <a href="BrokerInterceptor.html#consumerCreated(org.apache.pulsar.broker.service.ServerCnx,org.apache.pulsar.broker.service.Consumer,java.util.Map)">consumerCreated</a>, <a href="BrokerInterceptor.html#messageAcked(org.apache.pulsar.broker.service.ServerCnx,org.apach [...]
 </ul>
 </li>
 </ul>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.html
index 45deacb..0a8e1f9 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptor.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":18,"i1":6,"i2":18,"i3":6,"i4":18,"i5":18,"i6":18,"i7":6,"i8":18,"i9":18,"i10":6,"i11":6,"i12":6,"i13":18};
+var data = {"i0":18,"i1":6,"i2":18,"i3":6,"i4":18,"i5":18,"i6":18,"i7":6,"i8":18,"i9":18,"i10":6,"i11":6,"i12":6,"i13":18,"i14":18,"i15":18};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -328,6 +328,22 @@ extends java.lang.AutoCloseable</pre>
 <div class="block">Called by the broker when a new connection is created.</div>
 </td>
 </tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>default void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#txnEnded(java.lang.String,long)">txnEnded</a></span>&#8203;(java.lang.String&nbsp;txnID,
+        long&nbsp;txnAction)</code></th>
+<td class="colLast">
+<div class="block">Intercept when a transaction ends.</div>
+</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>default void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#txnOpened(long,java.lang.String)">txnOpened</a></span>&#8203;(long&nbsp;tcId,
+         java.lang.String&nbsp;txnID)</code></th>
+<td class="colLast">
+<div class="block">Intercept when a transaction begins.</div>
+</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -484,6 +500,38 @@ extends java.lang.AutoCloseable</pre>
 </dl>
 </li>
 </ul>
+<a id="txnOpened(long,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>txnOpened</h4>
+<pre class="methodSignature">default&nbsp;void&nbsp;txnOpened&#8203;(long&nbsp;tcId,
+                       java.lang.String&nbsp;txnID)</pre>
+<div class="block">Intercept when a transaction begins.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>tcId</code> - Transaction Coordinator Id</dd>
+<dd><code>txnID</code> - Transaction ID</dd>
+</dl>
+</li>
+</ul>
+<a id="txnEnded(java.lang.String,long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>txnEnded</h4>
+<pre class="methodSignature">default&nbsp;void&nbsp;txnEnded&#8203;(java.lang.String&nbsp;txnID,
+                      long&nbsp;txnAction)</pre>
+<div class="block">Intercept when a transaction ends.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>txnID</code> - Transaction ID</dd>
+<dd><code>txnAction</code> - Transaction Action</dd>
+</dl>
+</li>
+</ul>
 <a id="onPulsarCommand(org.apache.pulsar.common.api.proto.BaseCommand,org.apache.pulsar.broker.service.ServerCnx)">
 <!--   -->
 </a>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html
index 28c8039..fb96cc8 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -325,6 +325,22 @@ implements <a href="BrokerInterceptor.html" title="interface in org.apache.pulsa
 <div class="block">Called by the broker when a new connection is created.</div>
 </td>
 </tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#txnEnded(java.lang.String,long)">txnEnded</a></span>&#8203;(java.lang.String&nbsp;txnID,
+        long&nbsp;txnAction)</code></th>
+<td class="colLast">
+<div class="block">Intercept when a transaction ends.</div>
+</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#txnOpened(long,java.lang.String)">txnOpened</a></span>&#8203;(long&nbsp;tcId,
+         java.lang.String&nbsp;txnID)</code></th>
+<td class="colLast">
+<div class="block">Intercept when a transaction begins.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
@@ -505,6 +521,44 @@ implements <a href="BrokerInterceptor.html" title="interface in org.apache.pulsa
 </dl>
 </li>
 </ul>
+<a id="txnOpened(long,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>txnOpened</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;txnOpened&#8203;(long&nbsp;tcId,
+                      java.lang.String&nbsp;txnID)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="BrokerInterceptor.html#txnOpened(long,java.lang.String)">BrokerInterceptor</a></code></span></div>
+<div class="block">Intercept when a transaction begins.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="BrokerInterceptor.html#txnOpened(long,java.lang.String)">txnOpened</a></code>&nbsp;in interface&nbsp;<code><a href="BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>tcId</code> - Transaction Coordinator Id</dd>
+<dd><code>txnID</code> - Transaction ID</dd>
+</dl>
+</li>
+</ul>
+<a id="txnEnded(java.lang.String,long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>txnEnded</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;txnEnded&#8203;(java.lang.String&nbsp;txnID,
+                     long&nbsp;txnAction)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="BrokerInterceptor.html#txnEnded(java.lang.String,long)">BrokerInterceptor</a></code></span></div>
+<div class="block">Intercept when a transaction ends.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="BrokerInterceptor.html#txnEnded(java.lang.String,long)">txnEnded</a></code>&nbsp;in interface&nbsp;<code><a href="BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>txnID</code> - Transaction ID</dd>
+<dd><code>txnAction</code> - Transaction Action</dd>
+</dl>
+</li>
+</ul>
 <a id="onConnectionCreated(org.apache.pulsar.broker.service.ServerCnx)">
 <!--   -->
 </a>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptors.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptors.html
index 1b2a2ef..c157a01 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptors.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/intercept/BrokerInterceptors.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -332,6 +332,22 @@ implements <a href="BrokerInterceptor.html" title="interface in org.apache.pulsa
 <div class="block">Called by the broker when a new connection is created.</div>
 </td>
 </tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#txnEnded(java.lang.String,long)">txnEnded</a></span>&#8203;(java.lang.String&nbsp;txnID,
+        long&nbsp;txnAction)</code></th>
+<td class="colLast">
+<div class="block">Intercept when a transaction ends.</div>
+</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#txnOpened(long,java.lang.String)">txnOpened</a></span>&#8203;(long&nbsp;tcId,
+         java.lang.String&nbsp;txnID)</code></th>
+<td class="colLast">
+<div class="block">Intercept when a transaction begins.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
@@ -531,6 +547,44 @@ implements <a href="BrokerInterceptor.html" title="interface in org.apache.pulsa
 </dl>
 </li>
 </ul>
+<a id="txnOpened(long,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>txnOpened</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;txnOpened&#8203;(long&nbsp;tcId,
+                      java.lang.String&nbsp;txnID)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="BrokerInterceptor.html#txnOpened(long,java.lang.String)">BrokerInterceptor</a></code></span></div>
+<div class="block">Intercept when a transaction begins.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="BrokerInterceptor.html#txnOpened(long,java.lang.String)">txnOpened</a></code>&nbsp;in interface&nbsp;<code><a href="BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>tcId</code> - Transaction Coordinator Id</dd>
+<dd><code>txnID</code> - Transaction ID</dd>
+</dl>
+</li>
+</ul>
+<a id="txnEnded(java.lang.String,long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>txnEnded</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;txnEnded&#8203;(java.lang.String&nbsp;txnID,
+                     long&nbsp;txnAction)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="BrokerInterceptor.html#txnEnded(java.lang.String,long)">BrokerInterceptor</a></code></span></div>
+<div class="block">Intercept when a transaction ends.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="BrokerInterceptor.html#txnEnded(java.lang.String,long)">txnEnded</a></code>&nbsp;in interface&nbsp;<code><a href="BrokerInterceptor.html" title="interface in org.apache.pulsar.broker.intercept">BrokerInterceptor</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>txnID</code> - Transaction ID</dd>
+<dd><code>txnAction</code> - Transaction Action</dd>
+</dl>
+</li>
+</ul>
 <a id="onConnectionCreated(org.apache.pulsar.broker.service.ServerCnx)">
 <!--   -->
 </a>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/AbstractTopic.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/AbstractTopic.html
index 5328ddb..7094887 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/AbstractTopic.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/AbstractTopic.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":6,"i30":6,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":6,"i50":10,"i51":10,"i52":10,"i53":10,"i54":1 [...]
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":6,"i30":6,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":6,"i50":10,"i51":10,"i52":10,"i53":10,"i54":1 [...]
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -728,37 +728,42 @@ implements <a href="Topic.html" title="interface in org.apache.pulsar.broker.ser
 </tr>
 <tr id="i75" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerReplicatorDispatchRate()">updateBrokerReplicatorDispatchRate</a></span>()</code></th>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerPublishRate()">updateBrokerPublishRate</a></span>()</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr id="i76" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerSubscriptionDispatchRate()">updateBrokerSubscriptionDispatchRate</a></span>()</code></th>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerReplicatorDispatchRate()">updateBrokerReplicatorDispatchRate</a></span>()</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr id="i77" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerSubscriptionTypesEnabled()">updateBrokerSubscriptionTypesEnabled</a></span>()</code></th>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerSubscriptionDispatchRate()">updateBrokerSubscriptionDispatchRate</a></span>()</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr id="i78" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateBrokerSubscriptionTypesEnabled()">updateBrokerSubscriptionTypesEnabled</a></span>()</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i79" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updatePublishDispatcher()">updatePublishDispatcher</a></span>()</code></th>
 <td class="colLast">
 <div class="block">update topic publish dispatcher for this topic.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateResourceGroupLimiter(java.util.Optional)">updateResourceGroupLimiter</a></span>&#8203;(java.util.Optional&lt;org.apache.pulsar.common.policies.data.Policies&gt;&nbsp;optPolicies)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateTopicPolicy(org.apache.pulsar.common.policies.data.TopicPolicies)">updateTopicPolicy</a></span>&#8203;(org.apache.pulsar.common.policies.data.TopicPolicies&nbsp;data)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#updateTopicPolicyByNamespacePolicy(org.apache.pulsar.common.policies.data.Policies)">updateTopicPolicyByNamespacePolicy</a></span>&#8203;(org.apache.pulsar.common.policies.data.Policies&nbsp;namespacePolicies)</code></th>
 <td class="colLast">&nbsp;</td>
@@ -1902,12 +1907,21 @@ implements <a href="Topic.html" title="interface in org.apache.pulsar.broker.ser
 <a id="getFilteredEntriesCount()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getFilteredEntriesCount</h4>
 <pre class="methodSignature">public&nbsp;long&nbsp;getFilteredEntriesCount()</pre>
 </li>
 </ul>
+<a id="updateBrokerPublishRate()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>updateBrokerPublishRate</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;updateBrokerPublishRate()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </section>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSender.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSender.html
index 639c9bd..7d71f67 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSender.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSender.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6};
+var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -162,52 +162,67 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendEndTxnErrorResponse</a></span>&#8203;(long&nbsp;requestId,
+                       org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                       org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                       java.lang.String&nbsp;message)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">sendEndTxnResponse</a></span>&#8203;(long&nbsp;requestId,
+                  org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                  int&nbsp;txnAction)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendError(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendError</a></span>&#8203;(long&nbsp;requestId,
          org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
          java.lang.String&nbsp;message)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendErrorResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendErrorResponse</a></span>&#8203;(long&nbsp;requestId,
                  org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                  java.lang.String&nbsp;message)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetOrCreateSchemaErrorResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendGetOrCreateSchemaErrorResponse</a></span>&#8203;(long&nbsp;requestId,
                                   org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                                   java.lang.String&nbsp;errorMessage)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetOrCreateSchemaResponse(long,org.apache.pulsar.common.protocol.schema.SchemaVersion)">sendGetOrCreateSchemaResponse</a></span>&#8203;(long&nbsp;requestId,
                              org.apache.pulsar.common.protocol.schema.SchemaVersion&nbsp;schemaVersion)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetSchemaErrorResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendGetSchemaErrorResponse</a></span>&#8203;(long&nbsp;requestId,
                           org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                           java.lang.String&nbsp;errorMessage)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetSchemaResponse(long,org.apache.pulsar.common.schema.SchemaInfo,org.apache.pulsar.common.protocol.schema.SchemaVersion)">sendGetSchemaResponse</a></span>&#8203;(long&nbsp;requestId,
                      org.apache.pulsar.common.schema.SchemaInfo&nbsp;schema,
                      org.apache.pulsar.common.protocol.schema.SchemaVersion&nbsp;version)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetTopicsOfNamespaceResponse(java.util.List,long)">sendGetTopicsOfNamespaceResponse</a></span>&#8203;(java.util.List&lt;java.lang.String&gt;&nbsp;topics,
                                 long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendLookupResponse(java.lang.String,java.lang.String,boolean,org.apache.pulsar.common.api.proto.CommandLookupTopicResponse.LookupType,long,boolean)">sendLookupResponse</a></span>&#8203;(java.lang.String&nbsp;brokerServiceUrl,
                   java.lang.String&nbsp;brokerServiceUrlTls,
@@ -217,14 +232,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
                   boolean&nbsp;proxyThroughServiceUrl)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendLookupResponse(org.apache.pulsar.common.api.proto.ServerError,java.lang.String,long)">sendLookupResponse</a></span>&#8203;(org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                   java.lang.String&nbsp;errorMsg,
                   long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>io.netty.util.concurrent.Future&lt;java.lang.Void&gt;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendMessagesToConsumer(long,java.lang.String,org.apache.pulsar.broker.service.Subscription,int,java.util.List,org.apache.pulsar.broker.service.EntryBatchSizes,org.apache.pulsar.broker.service.EntryBatchIndexesAcks,org.apache.pulsar.broker.service.RedeliveryTracker,long)">sendMessagesToConsumer</a></span>&#8203;(long&nbsp;consumerId,
                       java.lang.String&nbsp;topicName,
@@ -237,20 +252,35 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
                       long&nbsp;epoch)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendNewTxnErrorResponse</a></span>&#8203;(long&nbsp;requestId,
+                       long&nbsp;txnID,
+                       org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                       java.lang.String&nbsp;message)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">sendNewTxnResponse</a></span>&#8203;(long&nbsp;requestId,
+                  org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                  long&nbsp;tcID)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendPartitionMetadataResponse(int,long)">sendPartitionMetadataResponse</a></span>&#8203;(int&nbsp;partitions,
                              long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendPartitionMetadataResponse(org.apache.pulsar.common.api.proto.ServerError,java.lang.String,long)">sendPartitionMetadataResponse</a></span>&#8203;(org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                              java.lang.String&nbsp;errorMsg,
                              long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendProducerSuccessResponse(long,java.lang.String,long,org.apache.pulsar.common.protocol.schema.SchemaVersion,java.util.Optional,boolean)">sendProducerSuccessResponse</a></span>&#8203;(long&nbsp;requestId,
                            java.lang.String&nbsp;producerName,
@@ -260,19 +290,19 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
                            boolean&nbsp;isProducerReady)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendProducerSuccessResponse(long,java.lang.String,org.apache.pulsar.common.protocol.schema.SchemaVersion)">sendProducerSuccessResponse</a></span>&#8203;(long&nbsp;requestId,
                            java.lang.String&nbsp;producerName,
                            org.apache.pulsar.common.protocol.schema.SchemaVersion&nbsp;schemaVersion)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendReachedEndOfTopic(long)">sendReachedEndOfTopic</a></span>&#8203;(long&nbsp;consumerId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSendError(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendSendError</a></span>&#8203;(long&nbsp;producerId,
              long&nbsp;sequenceId,
@@ -280,7 +310,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
              java.lang.String&nbsp;errorMsg)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSendReceiptResponse(long,long,long,long,long)">sendSendReceiptResponse</a></span>&#8203;(long&nbsp;producerId,
                        long&nbsp;sequenceId,
@@ -289,22 +319,22 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
                        long&nbsp;entryId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSuccess(long)">sendSuccess</a></span>&#8203;(long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSuccessResponse(long)">sendSuccessResponse</a></span>&#8203;(long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendTcClientConnectResponse(long)">sendTcClientConnectResponse</a></span>&#8203;(long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendTcClientConnectResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendTcClientConnectResponse</a></span>&#8203;(long&nbsp;requestId,
                            org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
@@ -577,12 +607,58 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <a id="sendTcClientConnectResponse(long)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>sendTcClientConnectResponse</h4>
 <pre class="methodSignature">void&nbsp;sendTcClientConnectResponse&#8203;(long&nbsp;requestId)</pre>
 </li>
 </ul>
+<a id="sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sendNewTxnResponse</h4>
+<pre class="methodSignature">void&nbsp;sendNewTxnResponse&#8203;(long&nbsp;requestId,
+                        org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                        long&nbsp;tcID)</pre>
+</li>
+</ul>
+<a id="sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sendNewTxnErrorResponse</h4>
+<pre class="methodSignature">void&nbsp;sendNewTxnErrorResponse&#8203;(long&nbsp;requestId,
+                             long&nbsp;txnID,
+                             org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                             java.lang.String&nbsp;message)</pre>
+</li>
+</ul>
+<a id="sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sendEndTxnResponse</h4>
+<pre class="methodSignature">void&nbsp;sendEndTxnResponse&#8203;(long&nbsp;requestId,
+                        org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                        int&nbsp;txnAction)</pre>
+</li>
+</ul>
+<a id="sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>sendEndTxnErrorResponse</h4>
+<pre class="methodSignature">void&nbsp;sendEndTxnErrorResponse&#8203;(long&nbsp;requestId,
+                             org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                             org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                             java.lang.String&nbsp;message)</pre>
+</li>
+</ul>
 </li>
 </ul>
 </section>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html
index 00953d2..318937a 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.html
@@ -26,7 +26,7 @@
     catch(err) {
     }
 //-->
-var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10};
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -194,52 +194,67 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendEndTxnErrorResponse</a></span>&#8203;(long&nbsp;requestId,
+                       org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                       org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                       java.lang.String&nbsp;message)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">sendEndTxnResponse</a></span>&#8203;(long&nbsp;requestId,
+                  org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                  int&nbsp;txnAction)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendError(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendError</a></span>&#8203;(long&nbsp;requestId,
          org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
          java.lang.String&nbsp;message)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendErrorResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendErrorResponse</a></span>&#8203;(long&nbsp;requestId,
                  org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                  java.lang.String&nbsp;message)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetOrCreateSchemaErrorResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendGetOrCreateSchemaErrorResponse</a></span>&#8203;(long&nbsp;requestId,
                                   org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                                   java.lang.String&nbsp;errorMessage)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetOrCreateSchemaResponse(long,org.apache.pulsar.common.protocol.schema.SchemaVersion)">sendGetOrCreateSchemaResponse</a></span>&#8203;(long&nbsp;requestId,
                              org.apache.pulsar.common.protocol.schema.SchemaVersion&nbsp;schemaVersion)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetSchemaErrorResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendGetSchemaErrorResponse</a></span>&#8203;(long&nbsp;requestId,
                           org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                           java.lang.String&nbsp;errorMessage)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetSchemaResponse(long,org.apache.pulsar.common.schema.SchemaInfo,org.apache.pulsar.common.protocol.schema.SchemaVersion)">sendGetSchemaResponse</a></span>&#8203;(long&nbsp;requestId,
                      org.apache.pulsar.common.schema.SchemaInfo&nbsp;schema,
                      org.apache.pulsar.common.protocol.schema.SchemaVersion&nbsp;version)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendGetTopicsOfNamespaceResponse(java.util.List,long)">sendGetTopicsOfNamespaceResponse</a></span>&#8203;(java.util.List&lt;java.lang.String&gt;&nbsp;topics,
                                 long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendLookupResponse(java.lang.String,java.lang.String,boolean,org.apache.pulsar.common.api.proto.CommandLookupTopicResponse.LookupType,long,boolean)">sendLookupResponse</a></span>&#8203;(java.lang.String&nbsp;brokerServiceUrl,
                   java.lang.String&nbsp;brokerServiceUrlTls,
@@ -249,14 +264,14 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
                   boolean&nbsp;proxyThroughServiceUrl)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendLookupResponse(org.apache.pulsar.common.api.proto.ServerError,java.lang.String,long)">sendLookupResponse</a></span>&#8203;(org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                   java.lang.String&nbsp;errorMsg,
                   long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>io.netty.channel.ChannelPromise</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendMessagesToConsumer(long,java.lang.String,org.apache.pulsar.broker.service.Subscription,int,java.util.List,org.apache.pulsar.broker.service.EntryBatchSizes,org.apache.pulsar.broker.service.EntryBatchIndexesAcks,org.apache.pulsar.broker.service.RedeliveryTracker,long)">sendMessagesToConsumer</a></span>&#8203;(long&nbsp;consumerId,
                       java.lang.String&nbsp;topicName,
@@ -269,20 +284,35 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
                       long&nbsp;epoch)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendNewTxnErrorResponse</a></span>&#8203;(long&nbsp;requestId,
+                       long&nbsp;txnID,
+                       org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                       java.lang.String&nbsp;message)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">sendNewTxnResponse</a></span>&#8203;(long&nbsp;requestId,
+                  org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                  long&nbsp;tcID)</code></th>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendPartitionMetadataResponse(int,long)">sendPartitionMetadataResponse</a></span>&#8203;(int&nbsp;partitions,
                              long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendPartitionMetadataResponse(org.apache.pulsar.common.api.proto.ServerError,java.lang.String,long)">sendPartitionMetadataResponse</a></span>&#8203;(org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
                              java.lang.String&nbsp;errorMsg,
                              long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendProducerSuccessResponse(long,java.lang.String,long,org.apache.pulsar.common.protocol.schema.SchemaVersion,java.util.Optional,boolean)">sendProducerSuccessResponse</a></span>&#8203;(long&nbsp;requestId,
                            java.lang.String&nbsp;producerName,
@@ -292,19 +322,19 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
                            boolean&nbsp;isProducerReady)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendProducerSuccessResponse(long,java.lang.String,org.apache.pulsar.common.protocol.schema.SchemaVersion)">sendProducerSuccessResponse</a></span>&#8203;(long&nbsp;requestId,
                            java.lang.String&nbsp;producerName,
                            org.apache.pulsar.common.protocol.schema.SchemaVersion&nbsp;schemaVersion)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendReachedEndOfTopic(long)">sendReachedEndOfTopic</a></span>&#8203;(long&nbsp;consumerId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSendError(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendSendError</a></span>&#8203;(long&nbsp;producerId,
              long&nbsp;sequenceId,
@@ -312,7 +342,7 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
              java.lang.String&nbsp;errorMsg)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSendReceiptResponse(long,long,long,long,long)">sendSendReceiptResponse</a></span>&#8203;(long&nbsp;producerId,
                        long&nbsp;sequenceId,
@@ -321,22 +351,22 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
                        long&nbsp;entryId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSuccess(long)">sendSuccess</a></span>&#8203;(long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendSuccessResponse(long)">sendSuccessResponse</a></span>&#8203;(long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendTcClientConnectResponse(long)">sendTcClientConnectResponse</a></span>&#8203;(long&nbsp;requestId)</code></th>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendTcClientConnectResponse(long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendTcClientConnectResponse</a></span>&#8203;(long&nbsp;requestId,
                            org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
@@ -724,7 +754,7 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
 <a id="sendTcClientConnectResponse(long)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>sendTcClientConnectResponse</h4>
 <pre class="methodSignature">public&nbsp;void&nbsp;sendTcClientConnectResponse&#8203;(long&nbsp;requestId)</pre>
@@ -734,6 +764,68 @@ implements <a href="PulsarCommandSender.html" title="interface in org.apache.pul
 </dl>
 </li>
 </ul>
+<a id="sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sendNewTxnResponse</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;sendNewTxnResponse&#8203;(long&nbsp;requestId,
+                               org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                               long&nbsp;tcID)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="PulsarCommandSender.html#sendNewTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,long)">sendNewTxnResponse</a></code>&nbsp;in interface&nbsp;<code><a href="PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></code></dd>
+</dl>
+</li>
+</ul>
+<a id="sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sendNewTxnErrorResponse</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;sendNewTxnErrorResponse&#8203;(long&nbsp;requestId,
+                                    long&nbsp;txnID,
+                                    org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                                    java.lang.String&nbsp;message)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="PulsarCommandSender.html#sendNewTxnErrorResponse(long,long,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendNewTxnErrorResponse</a></code>&nbsp;in interface&nbsp;<code><a href="PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></code></dd>
+</dl>
+</li>
+</ul>
+<a id="sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sendEndTxnResponse</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;sendEndTxnResponse&#8203;(long&nbsp;requestId,
+                               org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                               int&nbsp;txnAction)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="PulsarCommandSender.html#sendEndTxnResponse(long,org.apache.pulsar.client.api.transaction.TxnID,int)">sendEndTxnResponse</a></code>&nbsp;in interface&nbsp;<code><a href="PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></code></dd>
+</dl>
+</li>
+</ul>
+<a id="sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>sendEndTxnErrorResponse</h4>
+<pre class="methodSignature">public&nbsp;void&nbsp;sendEndTxnErrorResponse&#8203;(long&nbsp;requestId,
+                                    org.apache.pulsar.client.api.transaction.TxnID&nbsp;txnID,
+                                    org.apache.pulsar.common.api.proto.ServerError&nbsp;error,
+                                    java.lang.String&nbsp;message)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="PulsarCommandSender.html#sendEndTxnErrorResponse(long,org.apache.pulsar.client.api.transaction.TxnID,org.apache.pulsar.common.api.proto.ServerError,java.lang.String)">sendEndTxnErrorResponse</a></code>&nbsp;in interface&nbsp;<code><a href="PulsarCommandSender.html" title="interface in org.apache.pulsar.broker.service">PulsarCommandSender</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </section>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.html
index 1ec4a16..e989311 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.html
@@ -507,7 +507,7 @@ implements <a href="../Topic.html" title="interface in org.apache.pulsar.broker.
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.pulsar.broker.service.<a href="../AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></h3>
-<code><a href="../AbstractTopic.html#addConsumerToSubscription(org.apache.pulsar.broker.service.Subscription,org.apache.pulsar.broker.service.Consumer)">addConsumerToSubscription</a>, <a href="../AbstractTopic.html#addFilteredEntriesCount(int)">addFilteredEntriesCount</a>, <a href="../AbstractTopic.html#addProducer(org.apache.pulsar.broker.service.Producer,java.util.concurrent.CompletableFuture)">addProducer</a>, <a href="../AbstractTopic.html#addSchema(org.apache.pulsar.common.protocol. [...]
+<code><a href="../AbstractTopic.html#addConsumerToSubscription(org.apache.pulsar.broker.service.Subscription,org.apache.pulsar.broker.service.Consumer)">addConsumerToSubscription</a>, <a href="../AbstractTopic.html#addFilteredEntriesCount(int)">addFilteredEntriesCount</a>, <a href="../AbstractTopic.html#addProducer(org.apache.pulsar.broker.service.Producer,java.util.concurrent.CompletableFuture)">addProducer</a>, <a href="../AbstractTopic.html#addSchema(org.apache.pulsar.common.protocol. [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/PersistentTopic.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/PersistentTopic.html
index 0e171e3..4a4c41d 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/PersistentTopic.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/PersistentTopic.html
@@ -824,7 +824,7 @@ implements <a href="../Topic.html" title="interface in org.apache.pulsar.broker.
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.pulsar.broker.service.<a href="../AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></h3>
-<code><a href="../AbstractTopic.html#addConsumerToSubscription(org.apache.pulsar.broker.service.Subscription,org.apache.pulsar.broker.service.Consumer)">addConsumerToSubscription</a>, <a href="../AbstractTopic.html#addFilteredEntriesCount(int)">addFilteredEntriesCount</a>, <a href="../AbstractTopic.html#addSchema(org.apache.pulsar.common.protocol.schema.SchemaData)">addSchema</a>, <a href="../AbstractTopic.html#checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.Sch [...]
+<code><a href="../AbstractTopic.html#addConsumerToSubscription(org.apache.pulsar.broker.service.Subscription,org.apache.pulsar.broker.service.Consumer)">addConsumerToSubscription</a>, <a href="../AbstractTopic.html#addFilteredEntriesCount(int)">addFilteredEntriesCount</a>, <a href="../AbstractTopic.html#addSchema(org.apache.pulsar.common.protocol.schema.SchemaData)">addSchema</a>, <a href="../AbstractTopic.html#checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.Sch [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/SystemTopic.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/SystemTopic.html
index 4bebf6b..04f80a2 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/SystemTopic.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/org/apache/pulsar/broker/service/persistent/SystemTopic.html
@@ -284,7 +284,7 @@ extends <a href="PersistentTopic.html" title="class in org.apache.pulsar.broker.
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.pulsar.broker.service.<a href="../AbstractTopic.html" title="class in org.apache.pulsar.broker.service">AbstractTopic</a></h3>
-<code><a href="../AbstractTopic.html#addConsumerToSubscription(org.apache.pulsar.broker.service.Subscription,org.apache.pulsar.broker.service.Consumer)">addConsumerToSubscription</a>, <a href="../AbstractTopic.html#addFilteredEntriesCount(int)">addFilteredEntriesCount</a>, <a href="../AbstractTopic.html#addSchema(org.apache.pulsar.common.protocol.schema.SchemaData)">addSchema</a>, <a href="../AbstractTopic.html#checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.Sch [...]
+<code><a href="../AbstractTopic.html#addConsumerToSubscription(org.apache.pulsar.broker.service.Subscription,org.apache.pulsar.broker.service.Consumer)">addConsumerToSubscription</a>, <a href="../AbstractTopic.html#addFilteredEntriesCount(int)">addFilteredEntriesCount</a>, <a href="../AbstractTopic.html#addSchema(org.apache.pulsar.common.protocol.schema.SchemaData)">addSchema</a>, <a href="../AbstractTopic.html#checkSchemaCompatibleForConsumer(org.apache.pulsar.common.protocol.schema.Sch [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html b/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html
index 9ad4df8..019ce44 100644
--- a/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/pulsar-broker/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Mar 18 06:14:32 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Fri Mar 18 12:10:46 UTC 2022 -->
 <title>Pulsar Broker 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip
index a7851d6..f4d1121 100644
Binary files a/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/pulsar-broker/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip
index c86d204..6c094ee 100644
Binary files a/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/pulsar-broker/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip b/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip
index 93d97a2..fa929a6 100644
Binary files a/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip and b/content/api/pulsar-functions/2.10.0-SNAPSHOT/member-search-index.zip differ
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html b/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html
index b9f7576..2c59089 100644
--- a/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html
+++ b/content/api/pulsar-functions/2.10.0-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.11) on Fri Mar 18 06:14:19 UTC 2022 -->
+<!-- Generated by javadoc (11.0.11) on Fri Mar 18 12:10:35 UTC 2022 -->
 <title>Pulsar Functions :: API 2.10.0-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip b/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip
index 149532a..1f6bcac 100644
Binary files a/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip and b/content/api/pulsar-functions/2.10.0-SNAPSHOT/package-search-index.zip differ
diff --git a/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip b/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip
index 3154d50..9c780f3 100644
Binary files a/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip and b/content/api/pulsar-functions/2.10.0-SNAPSHOT/type-search-index.zip differ
diff --git a/content/api/python/2.10.0-SNAPSHOT/index.html b/content/api/python/2.10.0-SNAPSHOT/index.html
index afacf73..55578f0 100644
--- a/content/api/python/2.10.0-SNAPSHOT/index.html
+++ b/content/api/python/2.10.0-SNAPSHOT/index.html
@@ -3787,7 +3787,7 @@ producers and consumers.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_producer">
-    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fe0fb407e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
+    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f39bce27e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
     </div>
     
 
@@ -4041,7 +4041,7 @@ batched into single batch message:
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_reader">
-    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fe0f3983350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
+    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f39b53a5350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
     </div>
     
 
@@ -4258,7 +4258,7 @@ for ongoing operations to complete.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.subscribe">
-    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fe0f3983290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
+    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f39b53a5290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
     </div>
     
 
diff --git a/content/api/python/index.html b/content/api/python/index.html
index afacf73..55578f0 100644
--- a/content/api/python/index.html
+++ b/content/api/python/index.html
@@ -3787,7 +3787,7 @@ producers and consumers.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_producer">
-    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fe0fb407e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
+    <p>def <span class="ident">create_producer</span>(</p><p>self, topic, producer_name=None, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f39bce27e50&gt;, initial_sequence_id=None, send_timeout_millis=30000, compression_type=_pulsar.CompressionType.NONE, max_pending_messages=1000, max_pending_messages_across_partitions=50000, block_if_queue_full=False, batching_enabled=False, batching_max_messages=1000, batching_max_allowed_size_in_bytes=131072, batching_max_publish_delay_ms [...]
     </div>
     
 
@@ -4041,7 +4041,7 @@ batched into single batch message:
             
   <div class="item">
     <div class="name def" id="pulsar.Client.create_reader">
-    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fe0f3983350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
+    <p>def <span class="ident">create_reader</span>(</p><p>self, topic, start_message_id, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f39b53a5350&gt;, reader_listener=None, receiver_queue_size=1000, reader_name=None, subscription_role_prefix=None, is_read_compacted=False, crypto_key_reader=None)</p>
     </div>
     
 
@@ -4258,7 +4258,7 @@ for ongoing operations to complete.</p></div>
             
   <div class="item">
     <div class="name def" id="pulsar.Client.subscribe">
-    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7fe0f3983290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
+    <p>def <span class="ident">subscribe</span>(</p><p>self, topic, subscription_name, consumer_type=_pulsar.ConsumerType.Exclusive, schema=&lt;pulsar.schema.schema.BytesSchema object at 0x7f39b53a5290&gt;, message_listener=None, receiver_queue_size=1000, max_total_receiver_queue_size_across_partitions=50000, consumer_name=None, unacked_messages_timeout_ms=None, broker_consumer_stats_cache_time_ms=30000, negative_ack_redelivery_delay_ms=60000, is_read_compacted=False, properties=None, pa [...]
     </div>
     
 
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-java.html b/content/docs/en/2.1.0-incubating/client-libraries-java.html
index 7b4df77..3209d12 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-java.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-java.html
@@ -430,7 +430,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-heading [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.0-incubating/client-libraries-java/index.html b/content/docs/en/2.1.0-incubating/client-libraries-java/index.html
index 7b4df77..3209d12 100644
--- a/content/docs/en/2.1.0-incubating/client-libraries-java/index.html
+++ b/content/docs/en/2.1.0-incubating/client-libraries-java/index.html
@@ -430,7 +430,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-heading [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.0-incubating/security-encryption.html b/content/docs/en/2.1.0-incubating/security-encryption.html
index 9cdc8a9..276658b 100644
--- a/content/docs/en/2.1.0-incubating/security-encryption.html
+++ b/content/docs/en/2.1.0-incubating/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encr [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.0-incubating/security-encryption/index.html b/content/docs/en/2.1.0-incubating/security-encryption/index.html
index 9cdc8a9..276658b 100644
--- a/content/docs/en/2.1.0-incubating/security-encryption/index.html
+++ b/content/docs/en/2.1.0-incubating/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.0-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.0-incubating/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encr [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-java.html b/content/docs/en/2.1.1-incubating/client-libraries-java.html
index 7b1927a..40c2858 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-java.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-java.html
@@ -430,7 +430,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-heading [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.1-incubating/client-libraries-java/index.html b/content/docs/en/2.1.1-incubating/client-libraries-java/index.html
index 7b1927a..40c2858 100644
--- a/content/docs/en/2.1.1-incubating/client-libraries-java/index.html
+++ b/content/docs/en/2.1.1-incubating/client-libraries-java/index.html
@@ -430,7 +430,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven< [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-heading [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.1-incubating/security-encryption.html b/content/docs/en/2.1.1-incubating/security-encryption.html
index 62f6f74..c9bc694 100644
--- a/content/docs/en/2.1.1-incubating/security-encryption.html
+++ b/content/docs/en/2.1.1-incubating/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encr [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.1.1-incubating/security-encryption/index.html b/content/docs/en/2.1.1-incubating/security-encryption/index.html
index 62f6f74..c9bc694 100644
--- a/content/docs/en/2.1.1-incubating/security-encryption/index.html
+++ b/content/docs/en/2.1.1-incubating/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetr [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.1.1-incubating/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.1.1-incubating/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encr [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.0/client-libraries-java.html b/content/docs/en/2.2.0/client-libraries-java.html
index 4780828..0863c78 100644
--- a/content/docs/en/2.2.0/client-libraries-java.html
+++ b/content/docs/en/2.2.0/client-libraries-java.html
@@ -430,7 +430,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.2.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.2.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.0/client-libraries-java/index.html b/content/docs/en/2.2.0/client-libraries-java/index.html
index 4780828..0863c78 100644
--- a/content/docs/en/2.2.0/client-libraries-java/index.html
+++ b/content/docs/en/2.2.0/client-libraries-java/index.html
@@ -430,7 +430,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.2.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.2.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.0/security-encryption.html b/content/docs/en/2.2.0/security-encryption.html
index 05bd255..10d55e1 100644
--- a/content/docs/en/2.2.0/security-encryption.html
+++ b/content/docs/en/2.2.0/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.0/security-encryption/index.html b/content/docs/en/2.2.0/security-encryption/index.html
index 05bd255..10d55e1 100644
--- a/content/docs/en/2.2.0/security-encryption/index.html
+++ b/content/docs/en/2.2.0/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.1/client-libraries-java.html b/content/docs/en/2.2.1/client-libraries-java.html
index 550ed7f..52e670a 100644
--- a/content/docs/en/2.2.1/client-libraries-java.html
+++ b/content/docs/en/2.2.1/client-libraries-java.html
@@ -429,7 +429,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.2.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.2.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.1/client-libraries-java/index.html b/content/docs/en/2.2.1/client-libraries-java/index.html
index 550ed7f..52e670a 100644
--- a/content/docs/en/2.2.1/client-libraries-java/index.html
+++ b/content/docs/en/2.2.1/client-libraries-java/index.html
@@ -429,7 +429,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.2.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.2.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.1/security-encryption.html b/content/docs/en/2.2.1/security-encryption.html
index 447fd77..b738e52 100644
--- a/content/docs/en/2.2.1/security-encryption.html
+++ b/content/docs/en/2.2.1/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.2.1/security-encryption/index.html b/content/docs/en/2.2.1/security-encryption/index.html
index 447fd77..b738e52 100644
--- a/content/docs/en/2.2.1/security-encryption/index.html
+++ b/content/docs/en/2.2.1/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.2.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.2.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.0/client-libraries-java.html b/content/docs/en/2.3.0/client-libraries-java.html
index 5a3d75e..1c14e35 100644
--- a/content/docs/en/2.3.0/client-libraries-java.html
+++ b/content/docs/en/2.3.0/client-libraries-java.html
@@ -429,7 +429,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.3.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.3.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.0/client-libraries-java/index.html b/content/docs/en/2.3.0/client-libraries-java/index.html
index 5a3d75e..1c14e35 100644
--- a/content/docs/en/2.3.0/client-libraries-java/index.html
+++ b/content/docs/en/2.3.0/client-libraries-java/index.html
@@ -429,7 +429,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.3.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.3.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.0/security-encryption.html b/content/docs/en/2.3.0/security-encryption.html
index 62c00ef..02e7886 100644
--- a/content/docs/en/2.3.0/security-encryption.html
+++ b/content/docs/en/2.3.0/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.0/security-encryption/index.html b/content/docs/en/2.3.0/security-encryption/index.html
index 62c00ef..02e7886 100644
--- a/content/docs/en/2.3.0/security-encryption/index.html
+++ b/content/docs/en/2.3.0/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.1/client-libraries-java.html b/content/docs/en/2.3.1/client-libraries-java.html
index bc2ed91..5fc754b 100644
--- a/content/docs/en/2.3.1/client-libraries-java.html
+++ b/content/docs/en/2.3.1/client-libraries-java.html
@@ -440,7 +440,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.3.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.3.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.1/client-libraries-java/index.html b/content/docs/en/2.3.1/client-libraries-java/index.html
index bc2ed91..5fc754b 100644
--- a/content/docs/en/2.3.1/client-libraries-java/index.html
+++ b/content/docs/en/2.3.1/client-libraries-java/index.html
@@ -440,7 +440,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.3.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.3.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.1/security-encryption.html b/content/docs/en/2.3.1/security-encryption.html
index b45d28b..af9e0fa 100644
--- a/content/docs/en/2.3.1/security-encryption.html
+++ b/content/docs/en/2.3.1/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.1/security-encryption/index.html b/content/docs/en/2.3.1/security-encryption/index.html
index b45d28b..af9e0fa 100644
--- a/content/docs/en/2.3.1/security-encryption/index.html
+++ b/content/docs/en/2.3.1/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.2/client-libraries-java.html b/content/docs/en/2.3.2/client-libraries-java.html
index a9711d4..b43a890 100644
--- a/content/docs/en/2.3.2/client-libraries-java.html
+++ b/content/docs/en/2.3.2/client-libraries-java.html
@@ -440,7 +440,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.3.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.3.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.2/client-libraries-java/index.html b/content/docs/en/2.3.2/client-libraries-java/index.html
index a9711d4..b43a890 100644
--- a/content/docs/en/2.3.2/client-libraries-java/index.html
+++ b/content/docs/en/2.3.2/client-libraries-java/index.html
@@ -440,7 +440,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.3.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.3.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.2/security-encryption.html b/content/docs/en/2.3.2/security-encryption.html
index d78d9e4..537cc0b 100644
--- a/content/docs/en/2.3.2/security-encryption.html
+++ b/content/docs/en/2.3.2/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.3.2/security-encryption/index.html b/content/docs/en/2.3.2/security-encryption/index.html
index d78d9e4..537cc0b 100644
--- a/content/docs/en/2.3.2/security-encryption/index.html
+++ b/content/docs/en/2.3.2/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.3.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.3.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.0/client-libraries-java.html b/content/docs/en/2.4.0/client-libraries-java.html
index c11338a..cf1597f 100644
--- a/content/docs/en/2.4.0/client-libraries-java.html
+++ b/content/docs/en/2.4.0/client-libraries-java.html
@@ -579,7 +579,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.4.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.4.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.0/client-libraries-java/index.html b/content/docs/en/2.4.0/client-libraries-java/index.html
index c11338a..cf1597f 100644
--- a/content/docs/en/2.4.0/client-libraries-java/index.html
+++ b/content/docs/en/2.4.0/client-libraries-java/index.html
@@ -579,7 +579,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.4.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.4.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.0/security-encryption.html b/content/docs/en/2.4.0/security-encryption.html
index d223dfd..ff8261e 100644
--- a/content/docs/en/2.4.0/security-encryption.html
+++ b/content/docs/en/2.4.0/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.0/security-encryption/index.html b/content/docs/en/2.4.0/security-encryption/index.html
index d223dfd..ff8261e 100644
--- a/content/docs/en/2.4.0/security-encryption/index.html
+++ b/content/docs/en/2.4.0/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.1/client-libraries-java.html b/content/docs/en/2.4.1/client-libraries-java.html
index 70989f6..908927e 100644
--- a/content/docs/en/2.4.1/client-libraries-java.html
+++ b/content/docs/en/2.4.1/client-libraries-java.html
@@ -617,7 +617,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.4.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.4.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.1/client-libraries-java/index.html b/content/docs/en/2.4.1/client-libraries-java/index.html
index 70989f6..908927e 100644
--- a/content/docs/en/2.4.1/client-libraries-java/index.html
+++ b/content/docs/en/2.4.1/client-libraries-java/index.html
@@ -617,7 +617,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.4.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.4.1/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.1/security-encryption.html b/content/docs/en/2.4.1/security-encryption.html
index 389ef2f..a8ca47b 100644
--- a/content/docs/en/2.4.1/security-encryption.html
+++ b/content/docs/en/2.4.1/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.1/security-encryption/index.html b/content/docs/en/2.4.1/security-encryption/index.html
index 389ef2f..a8ca47b 100644
--- a/content/docs/en/2.4.1/security-encryption/index.html
+++ b/content/docs/en/2.4.1/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.2/client-libraries-java.html b/content/docs/en/2.4.2/client-libraries-java.html
index 7068e14..064dad3 100644
--- a/content/docs/en/2.4.2/client-libraries-java.html
+++ b/content/docs/en/2.4.2/client-libraries-java.html
@@ -617,7 +617,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.4.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.4.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.2/client-libraries-java/index.html b/content/docs/en/2.4.2/client-libraries-java/index.html
index 7068e14..064dad3 100644
--- a/content/docs/en/2.4.2/client-libraries-java/index.html
+++ b/content/docs/en/2.4.2/client-libraries-java/index.html
@@ -617,7 +617,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.4.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.4.2/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.2/security-encryption.html b/content/docs/en/2.4.2/security-encryption.html
index 989c2e1..109f902 100644
--- a/content/docs/en/2.4.2/security-encryption.html
+++ b/content/docs/en/2.4.2/security-encryption.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.4.2/security-encryption/index.html b/content/docs/en/2.4.2/security-encryption/index.html
index 989c2e1..109f902 100644
--- a/content/docs/en/2.4.2/security-encryption/index.html
+++ b/content/docs/en/2.4.2/security-encryption/index.html
@@ -230,7 +230,7 @@ Application will never be able to decrypt the messages if the private key is per
 </ul></li>
 <li>If decryption fails, the message consumption stops and application will notice backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip/discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.4.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.4.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.0/client-libraries-java.html b/content/docs/en/2.5.0/client-libraries-java.html
index 9bee77a..2c22850 100644
--- a/content/docs/en/2.5.0/client-libraries-java.html
+++ b/content/docs/en/2.5.0/client-libraries-java.html
@@ -725,7 +725,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.5.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.5.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.0/client-libraries-java/index.html b/content/docs/en/2.5.0/client-libraries-java/index.html
index 9bee77a..2c22850 100644
--- a/content/docs/en/2.5.0/client-libraries-java/index.html
+++ b/content/docs/en/2.5.0/client-libraries-java/index.html
@@ -725,7 +725,7 @@ PulsarClient client = PulsarClient.builder()
 <li><code>data:application/x-pem-file;base64,&lt;base64-encoded value&gt;</code></li>
 </ul>
 </blockquote>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.5.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven">Maven</a></li><li><a href="# [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.5.0/client-libraries-go"><span>Go</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#installation">Installation</a><ul class="toc-headings"><li><a href="#maven [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.0/security-encryption.html b/content/docs/en/2.5.0/security-encryption.html
index 556a726..a0b33bc 100644
--- a/content/docs/en/2.5.0/security-encryption.html
+++ b/content/docs/en/2.5.0/security-encryption.html
@@ -229,7 +229,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.0/security-encryption/index.html b/content/docs/en/2.5.0/security-encryption/index.html
index 556a726..a0b33bc 100644
--- a/content/docs/en/2.5.0/security-encryption/index.html
+++ b/content/docs/en/2.5.0/security-encryption/index.html
@@ -229,7 +229,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.1/security-bouncy-castle.html b/content/docs/en/2.5.1/security-bouncy-castle.html
index e7a6f2d..5474543 100644
--- a/content/docs/en/2.5.1/security-bouncy-castle.html
+++ b/content/docs/en/2.5.1/security-bouncy-castle.html
@@ -158,7 +158,7 @@ and it many more cipher suites and algorithms than the default JCE provided by S
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.5.1/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-of-bc-non- [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.5.1/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#i [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.1/security-bouncy-castle/index.html b/content/docs/en/2.5.1/security-bouncy-castle/index.html
index e7a6f2d..5474543 100644
--- a/content/docs/en/2.5.1/security-bouncy-castle/index.html
+++ b/content/docs/en/2.5.1/security-bouncy-castle/index.html
@@ -158,7 +158,7 @@ and it many more cipher suites and algorithms than the default JCE provided by S
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.5.1/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-of-bc-non- [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.5.1/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#i [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.1/security-encryption.html b/content/docs/en/2.5.1/security-encryption.html
index 3b505b3..339316e 100644
--- a/content/docs/en/2.5.1/security-encryption.html
+++ b/content/docs/en/2.5.1/security-encryption.html
@@ -229,7 +229,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.1/security-encryption/index.html b/content/docs/en/2.5.1/security-encryption/index.html
index 3b505b3..339316e 100644
--- a/content/docs/en/2.5.1/security-encryption/index.html
+++ b/content/docs/en/2.5.1/security-encryption/index.html
@@ -229,7 +229,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.2/security-bouncy-castle.html b/content/docs/en/2.5.2/security-bouncy-castle.html
index a8fc7a8..8563faa 100644
--- a/content/docs/en/2.5.2/security-bouncy-castle.html
+++ b/content/docs/en/2.5.2/security-bouncy-castle.html
@@ -158,7 +158,7 @@ and it many more cipher suites and algorithms than the default JCE provided by S
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.5.2/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-of-bc-non- [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.5.2/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#i [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.2/security-bouncy-castle/index.html b/content/docs/en/2.5.2/security-bouncy-castle/index.html
index a8fc7a8..8563faa 100644
--- a/content/docs/en/2.5.2/security-bouncy-castle/index.html
+++ b/content/docs/en/2.5.2/security-bouncy-castle/index.html
@@ -158,7 +158,7 @@ and it many more cipher suites and algorithms than the default JCE provided by S
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.5.2/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-of-bc-non- [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.5.2/client-libraries-java"><span>Java</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#i [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.2/security-encryption.html b/content/docs/en/2.5.2/security-encryption.html
index 93ef0eb..e8de341 100644
--- a/content/docs/en/2.5.2/security-encryption.html
+++ b/content/docs/en/2.5.2/security-encryption.html
@@ -229,7 +229,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.5.2/security-encryption/index.html b/content/docs/en/2.5.2/security-encryption/index.html
index 93ef0eb..e8de341 100644
--- a/content/docs/en/2.5.2/security-encryption/index.html
+++ b/content/docs/en/2.5.2/security-encryption/index.html
@@ -229,7 +229,7 @@ conf.addEncryptionKey(<span class="hljs-string">"myapp.messagekey2"</span>);
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.5.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.5.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.0/security-bouncy-castle.html b/content/docs/en/2.6.0/security-bouncy-castle.html
index 7b298ac..a629f98 100644
--- a/content/docs/en/2.6.0/security-bouncy-castle.html
+++ b/content/docs/en/2.6.0/security-bouncy-castle.html
@@ -158,7 +158,7 @@ and it many more cipher suites and algorithms than the default JCE provided by S
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.0/security-bouncy-castle/index.html b/content/docs/en/2.6.0/security-bouncy-castle/index.html
index 7b298ac..a629f98 100644
--- a/content/docs/en/2.6.0/security-bouncy-castle/index.html
+++ b/content/docs/en/2.6.0/security-bouncy-castle/index.html
@@ -158,7 +158,7 @@ and it many more cipher suites and algorithms than the default JCE provided by S
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.0/security-encryption.html b/content/docs/en/2.6.0/security-encryption.html
index fefae63..2e5febc 100644
--- a/content/docs/en/2.6.0/security-encryption.html
+++ b/content/docs/en/2.6.0/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.0/security-encryption/index.html b/content/docs/en/2.6.0/security-encryption/index.html
index fefae63..2e5febc 100644
--- a/content/docs/en/2.6.0/security-encryption/index.html
+++ b/content/docs/en/2.6.0/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.1/security-bouncy-castle.html b/content/docs/en/2.6.1/security-bouncy-castle.html
index 1c870e4..f633f45 100644
--- a/content/docs/en/2.6.1/security-bouncy-castle.html
+++ b/content/docs/en/2.6.1/security-bouncy-castle.html
@@ -159,7 +159,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.1/security-bouncy-castle/index.html b/content/docs/en/2.6.1/security-bouncy-castle/index.html
index 1c870e4..f633f45 100644
--- a/content/docs/en/2.6.1/security-bouncy-castle/index.html
+++ b/content/docs/en/2.6.1/security-bouncy-castle/index.html
@@ -159,7 +159,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.1/security-encryption.html b/content/docs/en/2.6.1/security-encryption.html
index b590660..d1bf6d5 100644
--- a/content/docs/en/2.6.1/security-encryption.html
+++ b/content/docs/en/2.6.1/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.1/security-encryption/index.html b/content/docs/en/2.6.1/security-encryption/index.html
index b590660..d1bf6d5 100644
--- a/content/docs/en/2.6.1/security-encryption/index.html
+++ b/content/docs/en/2.6.1/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.2/security-bouncy-castle.html b/content/docs/en/2.6.2/security-bouncy-castle.html
index 1928184..df2f43d 100644
--- a/content/docs/en/2.6.2/security-bouncy-castle.html
+++ b/content/docs/en/2.6.2/security-bouncy-castle.html
@@ -158,7 +158,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.2/security-bouncy-castle/index.html b/content/docs/en/2.6.2/security-bouncy-castle/index.html
index 1928184..df2f43d 100644
--- a/content/docs/en/2.6.2/security-bouncy-castle/index.html
+++ b/content/docs/en/2.6.2/security-bouncy-castle/index.html
@@ -158,7 +158,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.2/security-encryption.html b/content/docs/en/2.6.2/security-encryption.html
index 63fc117..f4ba6c0 100644
--- a/content/docs/en/2.6.2/security-encryption.html
+++ b/content/docs/en/2.6.2/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.2/security-encryption/index.html b/content/docs/en/2.6.2/security-encryption/index.html
index 63fc117..f4ba6c0 100644
--- a/content/docs/en/2.6.2/security-encryption/index.html
+++ b/content/docs/en/2.6.2/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.3/security-bouncy-castle.html b/content/docs/en/2.6.3/security-bouncy-castle.html
index f894bb4..622defe 100644
--- a/content/docs/en/2.6.3/security-bouncy-castle.html
+++ b/content/docs/en/2.6.3/security-bouncy-castle.html
@@ -158,7 +158,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.3/security-bouncy-castle/index.html b/content/docs/en/2.6.3/security-bouncy-castle/index.html
index f894bb4..622defe 100644
--- a/content/docs/en/2.6.3/security-bouncy-castle/index.html
+++ b/content/docs/en/2.6.3/security-bouncy-castle/index.html
@@ -158,7 +158,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.3/security-encryption.html b/content/docs/en/2.6.3/security-encryption.html
index a58ef2c..6504d54 100644
--- a/content/docs/en/2.6.3/security-encryption.html
+++ b/content/docs/en/2.6.3/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.3/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.3/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.3/security-encryption/index.html b/content/docs/en/2.6.3/security-encryption/index.html
index a58ef2c..6504d54 100644
--- a/content/docs/en/2.6.3/security-encryption/index.html
+++ b/content/docs/en/2.6.3/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.3/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.3/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.4/security-bouncy-castle.html b/content/docs/en/2.6.4/security-bouncy-castle.html
index 4897261..aa260bb 100644
--- a/content/docs/en/2.6.4/security-bouncy-castle.html
+++ b/content/docs/en/2.6.4/security-bouncy-castle.html
@@ -158,7 +158,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.4/security-bouncy-castle/index.html b/content/docs/en/2.6.4/security-bouncy-castle/index.html
index 4897261..aa260bb 100644
--- a/content/docs/en/2.6.4/security-bouncy-castle/index.html
+++ b/content/docs/en/2.6.4/security-bouncy-castle/index.html
@@ -158,7 +158,7 @@ By using this <code>bouncy-castle-bc-shaded</code> module, user can easily inclu
 </code></pre>
 <p>Besides this, module <code>bouncy-castle-bcfips</code> builds contain an output with format NAR, you can set java environment by <code>-DBcPath='nar/file/path'</code>, Pulsar will auto load it.</p>
 <p>For more example, you can reference module <code>bcfips-include-test</code> and <code>bcfips-nar-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.6.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#include-dependencies-o [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.6.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.4/security-encryption.html b/content/docs/en/2.6.4/security-encryption.html
index 662e9b2..430230b 100644
--- a/content/docs/en/2.6.4/security-encryption.html
+++ b/content/docs/en/2.6.4/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.4/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.4/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.6.4/security-encryption/index.html b/content/docs/en/2.6.4/security-encryption/index.html
index 662e9b2..430230b 100644
--- a/content/docs/en/2.6.4/security-encryption/index.html
+++ b/content/docs/en/2.6.4/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.4/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.6.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.6.4/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.0/security-bouncy-castle.html b/content/docs/en/2.7.0/security-bouncy-castle.html
index c0eb4ce..a912e5a 100644
--- a/content/docs/en/2.7.0/security-bouncy-castle.html
+++ b/content/docs/en/2.7.0/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.0/security-bouncy-castle/index.html b/content/docs/en/2.7.0/security-bouncy-castle/index.html
index c0eb4ce..a912e5a 100644
--- a/content/docs/en/2.7.0/security-bouncy-castle/index.html
+++ b/content/docs/en/2.7.0/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.0/security-encryption.html b/content/docs/en/2.7.0/security-encryption.html
index 3027769..eef947b 100644
--- a/content/docs/en/2.7.0/security-encryption.html
+++ b/content/docs/en/2.7.0/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.0/security-encryption/index.html b/content/docs/en/2.7.0/security-encryption/index.html
index 3027769..eef947b 100644
--- a/content/docs/en/2.7.0/security-encryption/index.html
+++ b/content/docs/en/2.7.0/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.1/security-bouncy-castle.html b/content/docs/en/2.7.1/security-bouncy-castle.html
index 06a2bd8..dacad47 100644
--- a/content/docs/en/2.7.1/security-bouncy-castle.html
+++ b/content/docs/en/2.7.1/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.1/security-bouncy-castle/index.html b/content/docs/en/2.7.1/security-bouncy-castle/index.html
index 06a2bd8..dacad47 100644
--- a/content/docs/en/2.7.1/security-bouncy-castle/index.html
+++ b/content/docs/en/2.7.1/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.1/security-encryption.html b/content/docs/en/2.7.1/security-encryption.html
index 436084f..7e52ae7 100644
--- a/content/docs/en/2.7.1/security-encryption.html
+++ b/content/docs/en/2.7.1/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.1/security-encryption/index.html b/content/docs/en/2.7.1/security-encryption/index.html
index 436084f..7e52ae7 100644
--- a/content/docs/en/2.7.1/security-encryption/index.html
+++ b/content/docs/en/2.7.1/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.2/security-bouncy-castle.html b/content/docs/en/2.7.2/security-bouncy-castle.html
index 16e891b..9292552 100644
--- a/content/docs/en/2.7.2/security-bouncy-castle.html
+++ b/content/docs/en/2.7.2/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.2/security-bouncy-castle/index.html b/content/docs/en/2.7.2/security-bouncy-castle/index.html
index 16e891b..9292552 100644
--- a/content/docs/en/2.7.2/security-bouncy-castle/index.html
+++ b/content/docs/en/2.7.2/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.2/security-encryption.html b/content/docs/en/2.7.2/security-encryption.html
index 77b0cbb..cfcd3f1 100644
--- a/content/docs/en/2.7.2/security-encryption.html
+++ b/content/docs/en/2.7.2/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.2/security-encryption/index.html b/content/docs/en/2.7.2/security-encryption/index.html
index 77b0cbb..cfcd3f1 100644
--- a/content/docs/en/2.7.2/security-encryption/index.html
+++ b/content/docs/en/2.7.2/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.3/security-bouncy-castle.html b/content/docs/en/2.7.3/security-bouncy-castle.html
index 3a2fdf8..32730aa 100644
--- a/content/docs/en/2.7.3/security-bouncy-castle.html
+++ b/content/docs/en/2.7.3/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.3/security-bouncy-castle/index.html b/content/docs/en/2.7.3/security-bouncy-castle/index.html
index 3a2fdf8..32730aa 100644
--- a/content/docs/en/2.7.3/security-bouncy-castle/index.html
+++ b/content/docs/en/2.7.3/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.3/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.3/security-encryption.html b/content/docs/en/2.7.3/security-encryption.html
index 2fb19e7..efc75e3 100644
--- a/content/docs/en/2.7.3/security-encryption.html
+++ b/content/docs/en/2.7.3/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.3/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.3/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.3/security-encryption/index.html b/content/docs/en/2.7.3/security-encryption/index.html
index 2fb19e7..efc75e3 100644
--- a/content/docs/en/2.7.3/security-encryption/index.html
+++ b/content/docs/en/2.7.3/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.3/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.3/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.3/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.4/security-bouncy-castle.html b/content/docs/en/2.7.4/security-bouncy-castle.html
index a7a46ca..705af4d 100644
--- a/content/docs/en/2.7.4/security-bouncy-castle.html
+++ b/content/docs/en/2.7.4/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.4/security-bouncy-castle/index.html b/content/docs/en/2.7.4/security-bouncy-castle/index.html
index a7a46ca..705af4d 100644
--- a/content/docs/en/2.7.4/security-bouncy-castle/index.html
+++ b/content/docs/en/2.7.4/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.7.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.7.4/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.4/security-encryption.html b/content/docs/en/2.7.4/security-encryption.html
index ddccfbb..41bf2de 100644
--- a/content/docs/en/2.7.4/security-encryption.html
+++ b/content/docs/en/2.7.4/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.4/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.4/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.7.4/security-encryption/index.html b/content/docs/en/2.7.4/security-encryption/index.html
index ddccfbb..41bf2de 100644
--- a/content/docs/en/2.7.4/security-encryption/index.html
+++ b/content/docs/en/2.7.4/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.4/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.7.4/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.7.4/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.0/security-bouncy-castle.html b/content/docs/en/2.8.0/security-bouncy-castle.html
index 1821507..35e82aa 100644
--- a/content/docs/en/2.8.0/security-bouncy-castle.html
+++ b/content/docs/en/2.8.0/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.8.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.8.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.0/security-bouncy-castle/index.html b/content/docs/en/2.8.0/security-bouncy-castle/index.html
index 1821507..35e82aa 100644
--- a/content/docs/en/2.8.0/security-bouncy-castle/index.html
+++ b/content/docs/en/2.8.0/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.8.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.8.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.0/security-encryption.html b/content/docs/en/2.8.0/security-encryption.html
index 9b7b8ff..73a6b11 100644
--- a/content/docs/en/2.8.0/security-encryption.html
+++ b/content/docs/en/2.8.0/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.0/security-encryption/index.html b/content/docs/en/2.8.0/security-encryption/index.html
index 9b7b8ff..73a6b11 100644
--- a/content/docs/en/2.8.0/security-encryption/index.html
+++ b/content/docs/en/2.8.0/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.1/security-bouncy-castle.html b/content/docs/en/2.8.1/security-bouncy-castle.html
index 32f2ad7..d88608c 100644
--- a/content/docs/en/2.8.1/security-bouncy-castle.html
+++ b/content/docs/en/2.8.1/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.8.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.8.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.1/security-bouncy-castle/index.html b/content/docs/en/2.8.1/security-bouncy-castle/index.html
index 32f2ad7..d88608c 100644
--- a/content/docs/en/2.8.1/security-bouncy-castle/index.html
+++ b/content/docs/en/2.8.1/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.8.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.8.1/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.1/security-encryption.html b/content/docs/en/2.8.1/security-encryption.html
index b38e168..2e40549 100644
--- a/content/docs/en/2.8.1/security-encryption.html
+++ b/content/docs/en/2.8.1/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.1/security-encryption/index.html b/content/docs/en/2.8.1/security-encryption/index.html
index b38e168..2e40549 100644
--- a/content/docs/en/2.8.1/security-encryption/index.html
+++ b/content/docs/en/2.8.1/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.1/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.1/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.1/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.2/security-bouncy-castle.html b/content/docs/en/2.8.2/security-bouncy-castle.html
index 474ff5d..b3b0420 100644
--- a/content/docs/en/2.8.2/security-bouncy-castle.html
+++ b/content/docs/en/2.8.2/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.8.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.8.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.2/security-bouncy-castle/index.html b/content/docs/en/2.8.2/security-bouncy-castle/index.html
index 474ff5d..b3b0420 100644
--- a/content/docs/en/2.8.2/security-bouncy-castle/index.html
+++ b/content/docs/en/2.8.2/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.8.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.8.2/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.2/security-encryption.html b/content/docs/en/2.8.2/security-encryption.html
index c2c4346..3331aed 100644
--- a/content/docs/en/2.8.2/security-encryption.html
+++ b/content/docs/en/2.8.2/security-encryption.html
@@ -139,7 +139,7 @@ openssl ec -in test_ecdsa_privkey.pem -pubout -outform pem -out test_ecdsa_pubke
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.8.2/security-encryption/index.html b/content/docs/en/2.8.2/security-encryption/index.html
index c2c4346..3331aed 100644
--- a/content/docs/en/2.8.2/security-encryption/index.html
+++ b/content/docs/en/2.8.2/security-encryption/index.html
@@ -139,7 +139,7 @@ openssl ec -in test_ecdsa_privkey.pem -pubout -outform pem -out test_ecdsa_pubke
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.2/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.8.2/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.8.2/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.9.0/security-bouncy-castle.html b/content/docs/en/2.9.0/security-bouncy-castle.html
index 456788f..617e81e 100644
--- a/content/docs/en/2.9.0/security-bouncy-castle.html
+++ b/content/docs/en/2.9.0/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.9.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.9.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.9.0/security-bouncy-castle/index.html b/content/docs/en/2.9.0/security-bouncy-castle/index.html
index 456788f..617e81e 100644
--- a/content/docs/en/2.9.0/security-bouncy-castle/index.html
+++ b/content/docs/en/2.9.0/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/2.9.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modul [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/2.9.0/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.9.0/security-encryption.html b/content/docs/en/2.9.0/security-encryption.html
index 006df0d..caa74be 100644
--- a/content/docs/en/2.9.0/security-encryption.html
+++ b/content/docs/en/2.9.0/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.9.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.9.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/2.9.0/security-encryption/index.html b/content/docs/en/2.9.0/security-encryption/index.html
index 006df0d..caa74be 100644
--- a/content/docs/en/2.9.0/security-encryption/index.html
+++ b/content/docs/en/2.9.0/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.9.0/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li> [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/2.9.0/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/2.9.0/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/adaptors-kafka.html b/content/docs/en/next/adaptors-kafka.html
index 85d8ddd..3ae4328 100644
--- a/content/docs/en/next/adaptors-kafka.html
+++ b/content/docs/en/next/adaptors-kafka.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/adaptors-kafka/index.html b/content/docs/en/next/adaptors-kafka/index.html
index 85d8ddd..3ae4328 100644
--- a/content/docs/en/next/adaptors-kafka/index.html
+++ b/content/docs/en/next/adaptors-kafka/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/adaptors-spark.html b/content/docs/en/next/adaptors-spark.html
index a961f6e..61d8c5e 100644
--- a/content/docs/en/next/adaptors-spark.html
+++ b/content/docs/en/next/adaptors-spark.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/adaptors-spark/index.html b/content/docs/en/next/adaptors-spark/index.html
index a961f6e..61d8c5e 100644
--- a/content/docs/en/next/adaptors-spark/index.html
+++ b/content/docs/en/next/adaptors-spark/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/adaptors-storm.html b/content/docs/en/next/adaptors-storm.html
index 83d62cc..5014c93 100644
--- a/content/docs/en/next/adaptors-storm.html
+++ b/content/docs/en/next/adaptors-storm.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/adaptors-storm/index.html b/content/docs/en/next/adaptors-storm/index.html
index 83d62cc..5014c93 100644
--- a/content/docs/en/next/adaptors-storm/index.html
+++ b/content/docs/en/next/adaptors-storm/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-brokers.html b/content/docs/en/next/admin-api-brokers.html
index b6072b9..66baf27 100644
--- a/content/docs/en/next/admin-api-brokers.html
+++ b/content/docs/en/next/admin-api-brokers.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-brokers/index.html b/content/docs/en/next/admin-api-brokers/index.html
index b6072b9..66baf27 100644
--- a/content/docs/en/next/admin-api-brokers/index.html
+++ b/content/docs/en/next/admin-api-brokers/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-clusters.html b/content/docs/en/next/admin-api-clusters.html
index 7ae0de9..db16a97 100644
--- a/content/docs/en/next/admin-api-clusters.html
+++ b/content/docs/en/next/admin-api-clusters.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-clusters/index.html b/content/docs/en/next/admin-api-clusters/index.html
index 7ae0de9..db16a97 100644
--- a/content/docs/en/next/admin-api-clusters/index.html
+++ b/content/docs/en/next/admin-api-clusters/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-functions.html b/content/docs/en/next/admin-api-functions.html
index 8e7165d..1dd22e5 100644
--- a/content/docs/en/next/admin-api-functions.html
+++ b/content/docs/en/next/admin-api-functions.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-functions/index.html b/content/docs/en/next/admin-api-functions/index.html
index 8e7165d..1dd22e5 100644
--- a/content/docs/en/next/admin-api-functions/index.html
+++ b/content/docs/en/next/admin-api-functions/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-namespaces.html b/content/docs/en/next/admin-api-namespaces.html
index 6463f5a..c272687 100644
--- a/content/docs/en/next/admin-api-namespaces.html
+++ b/content/docs/en/next/admin-api-namespaces.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-namespaces/index.html b/content/docs/en/next/admin-api-namespaces/index.html
index 6463f5a..c272687 100644
--- a/content/docs/en/next/admin-api-namespaces/index.html
+++ b/content/docs/en/next/admin-api-namespaces/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-overview.html b/content/docs/en/next/admin-api-overview.html
index 01f9317..fb99339 100644
--- a/content/docs/en/next/admin-api-overview.html
+++ b/content/docs/en/next/admin-api-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-overview/index.html b/content/docs/en/next/admin-api-overview/index.html
index 01f9317..fb99339 100644
--- a/content/docs/en/next/admin-api-overview/index.html
+++ b/content/docs/en/next/admin-api-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-packages.html b/content/docs/en/next/admin-api-packages.html
index 07f04c3..1b40c3e 100644
--- a/content/docs/en/next/admin-api-packages.html
+++ b/content/docs/en/next/admin-api-packages.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-packages/index.html b/content/docs/en/next/admin-api-packages/index.html
index 07f04c3..1b40c3e 100644
--- a/content/docs/en/next/admin-api-packages/index.html
+++ b/content/docs/en/next/admin-api-packages/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-permissions.html b/content/docs/en/next/admin-api-permissions.html
index 1b21d6c..6e3a4f2 100644
--- a/content/docs/en/next/admin-api-permissions.html
+++ b/content/docs/en/next/admin-api-permissions.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-permissions/index.html b/content/docs/en/next/admin-api-permissions/index.html
index 1b21d6c..6e3a4f2 100644
--- a/content/docs/en/next/admin-api-permissions/index.html
+++ b/content/docs/en/next/admin-api-permissions/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-tenants.html b/content/docs/en/next/admin-api-tenants.html
index 3a25f85..a25c7ed 100644
--- a/content/docs/en/next/admin-api-tenants.html
+++ b/content/docs/en/next/admin-api-tenants.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-tenants/index.html b/content/docs/en/next/admin-api-tenants/index.html
index 3a25f85..a25c7ed 100644
--- a/content/docs/en/next/admin-api-tenants/index.html
+++ b/content/docs/en/next/admin-api-tenants/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-topics.html b/content/docs/en/next/admin-api-topics.html
index 29db781..718b39e 100644
--- a/content/docs/en/next/admin-api-topics.html
+++ b/content/docs/en/next/admin-api-topics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/admin-api-topics/index.html b/content/docs/en/next/admin-api-topics/index.html
index 29db781..718b39e 100644
--- a/content/docs/en/next/admin-api-topics/index.html
+++ b/content/docs/en/next/admin-api-topics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-geo.html b/content/docs/en/next/administration-geo.html
index f6ac807..e02f13d 100644
--- a/content/docs/en/next/administration-geo.html
+++ b/content/docs/en/next/administration-geo.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-geo/index.html b/content/docs/en/next/administration-geo/index.html
index f6ac807..e02f13d 100644
--- a/content/docs/en/next/administration-geo/index.html
+++ b/content/docs/en/next/administration-geo/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-isolation.html b/content/docs/en/next/administration-isolation.html
index 0758c70..57e1aa9 100644
--- a/content/docs/en/next/administration-isolation.html
+++ b/content/docs/en/next/administration-isolation.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-isolation/index.html b/content/docs/en/next/administration-isolation/index.html
index 0758c70..57e1aa9 100644
--- a/content/docs/en/next/administration-isolation/index.html
+++ b/content/docs/en/next/administration-isolation/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-load-balance.html b/content/docs/en/next/administration-load-balance.html
index ada3c7d..062d29b 100644
--- a/content/docs/en/next/administration-load-balance.html
+++ b/content/docs/en/next/administration-load-balance.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-load-balance/index.html b/content/docs/en/next/administration-load-balance/index.html
index ada3c7d..062d29b 100644
--- a/content/docs/en/next/administration-load-balance/index.html
+++ b/content/docs/en/next/administration-load-balance/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-proxy.html b/content/docs/en/next/administration-proxy.html
index 451b9d0..8ca90df 100644
--- a/content/docs/en/next/administration-proxy.html
+++ b/content/docs/en/next/administration-proxy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-proxy/index.html b/content/docs/en/next/administration-proxy/index.html
index 451b9d0..8ca90df 100644
--- a/content/docs/en/next/administration-proxy/index.html
+++ b/content/docs/en/next/administration-proxy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-pulsar-manager.html b/content/docs/en/next/administration-pulsar-manager.html
index 090fe49..d6d107c 100644
--- a/content/docs/en/next/administration-pulsar-manager.html
+++ b/content/docs/en/next/administration-pulsar-manager.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-pulsar-manager/index.html b/content/docs/en/next/administration-pulsar-manager/index.html
index 090fe49..d6d107c 100644
--- a/content/docs/en/next/administration-pulsar-manager/index.html
+++ b/content/docs/en/next/administration-pulsar-manager/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-stats.html b/content/docs/en/next/administration-stats.html
index c22d3d2..e6c043d 100644
--- a/content/docs/en/next/administration-stats.html
+++ b/content/docs/en/next/administration-stats.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-stats/index.html b/content/docs/en/next/administration-stats/index.html
index c22d3d2..e6c043d 100644
--- a/content/docs/en/next/administration-stats/index.html
+++ b/content/docs/en/next/administration-stats/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-upgrade.html b/content/docs/en/next/administration-upgrade.html
index 6c6a0b7..1dbb736 100644
--- a/content/docs/en/next/administration-upgrade.html
+++ b/content/docs/en/next/administration-upgrade.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-upgrade/index.html b/content/docs/en/next/administration-upgrade/index.html
index 6c6a0b7..1dbb736 100644
--- a/content/docs/en/next/administration-upgrade/index.html
+++ b/content/docs/en/next/administration-upgrade/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-zk-bk.html b/content/docs/en/next/administration-zk-bk.html
index f9108a6..1705ab0 100644
--- a/content/docs/en/next/administration-zk-bk.html
+++ b/content/docs/en/next/administration-zk-bk.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/administration-zk-bk/index.html b/content/docs/en/next/administration-zk-bk/index.html
index f9108a6..1705ab0 100644
--- a/content/docs/en/next/administration-zk-bk/index.html
+++ b/content/docs/en/next/administration-zk-bk/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-cpp.html b/content/docs/en/next/client-libraries-cpp.html
index 93a3419..de4283b 100644
--- a/content/docs/en/next/client-libraries-cpp.html
+++ b/content/docs/en/next/client-libraries-cpp.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-cpp/index.html b/content/docs/en/next/client-libraries-cpp/index.html
index 93a3419..de4283b 100644
--- a/content/docs/en/next/client-libraries-cpp/index.html
+++ b/content/docs/en/next/client-libraries-cpp/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-dotnet.html b/content/docs/en/next/client-libraries-dotnet.html
index 24903d5..be92b09 100644
--- a/content/docs/en/next/client-libraries-dotnet.html
+++ b/content/docs/en/next/client-libraries-dotnet.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-dotnet/index.html b/content/docs/en/next/client-libraries-dotnet/index.html
index 24903d5..be92b09 100644
--- a/content/docs/en/next/client-libraries-dotnet/index.html
+++ b/content/docs/en/next/client-libraries-dotnet/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-go.html b/content/docs/en/next/client-libraries-go.html
index 5a37495..0ecd317 100644
--- a/content/docs/en/next/client-libraries-go.html
+++ b/content/docs/en/next/client-libraries-go.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-go/index.html b/content/docs/en/next/client-libraries-go/index.html
index 5a37495..0ecd317 100644
--- a/content/docs/en/next/client-libraries-go/index.html
+++ b/content/docs/en/next/client-libraries-go/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-java.html b/content/docs/en/next/client-libraries-java.html
index b8c691e..6be35c7 100644
--- a/content/docs/en/next/client-libraries-java.html
+++ b/content/docs/en/next/client-libraries-java.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-java/index.html b/content/docs/en/next/client-libraries-java/index.html
index b8c691e..6be35c7 100644
--- a/content/docs/en/next/client-libraries-java/index.html
+++ b/content/docs/en/next/client-libraries-java/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-node.html b/content/docs/en/next/client-libraries-node.html
index 9a69f4c..c6b47f2d 100644
--- a/content/docs/en/next/client-libraries-node.html
+++ b/content/docs/en/next/client-libraries-node.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-node/index.html b/content/docs/en/next/client-libraries-node/index.html
index 9a69f4c..c6b47f2d 100644
--- a/content/docs/en/next/client-libraries-node/index.html
+++ b/content/docs/en/next/client-libraries-node/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-python.html b/content/docs/en/next/client-libraries-python.html
index b9fe515..109ade5 100644
--- a/content/docs/en/next/client-libraries-python.html
+++ b/content/docs/en/next/client-libraries-python.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-python/index.html b/content/docs/en/next/client-libraries-python/index.html
index b9fe515..109ade5 100644
--- a/content/docs/en/next/client-libraries-python/index.html
+++ b/content/docs/en/next/client-libraries-python/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-rest.html b/content/docs/en/next/client-libraries-rest.html
index cfcba9d..ff02265 100644
--- a/content/docs/en/next/client-libraries-rest.html
+++ b/content/docs/en/next/client-libraries-rest.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-rest/index.html b/content/docs/en/next/client-libraries-rest/index.html
index cfcba9d..ff02265 100644
--- a/content/docs/en/next/client-libraries-rest/index.html
+++ b/content/docs/en/next/client-libraries-rest/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-websocket.html b/content/docs/en/next/client-libraries-websocket.html
index 31d58cb..f8a7677 100644
--- a/content/docs/en/next/client-libraries-websocket.html
+++ b/content/docs/en/next/client-libraries-websocket.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries-websocket/index.html b/content/docs/en/next/client-libraries-websocket/index.html
index 31d58cb..f8a7677 100644
--- a/content/docs/en/next/client-libraries-websocket/index.html
+++ b/content/docs/en/next/client-libraries-websocket/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries.html b/content/docs/en/next/client-libraries.html
index c06b29a..189f9d7 100644
--- a/content/docs/en/next/client-libraries.html
+++ b/content/docs/en/next/client-libraries.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/client-libraries/index.html b/content/docs/en/next/client-libraries/index.html
index c06b29a..189f9d7 100644
--- a/content/docs/en/next/client-libraries/index.html
+++ b/content/docs/en/next/client-libraries/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-architecture-overview.html b/content/docs/en/next/concepts-architecture-overview.html
index d0b94b1..eee9f11 100644
--- a/content/docs/en/next/concepts-architecture-overview.html
+++ b/content/docs/en/next/concepts-architecture-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-architecture-overview/index.html b/content/docs/en/next/concepts-architecture-overview/index.html
index d0b94b1..eee9f11 100644
--- a/content/docs/en/next/concepts-architecture-overview/index.html
+++ b/content/docs/en/next/concepts-architecture-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-authentication.html b/content/docs/en/next/concepts-authentication.html
index 1dc6f4f..77f03fd 100644
--- a/content/docs/en/next/concepts-authentication.html
+++ b/content/docs/en/next/concepts-authentication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-authentication/index.html b/content/docs/en/next/concepts-authentication/index.html
index 1dc6f4f..77f03fd 100644
--- a/content/docs/en/next/concepts-authentication/index.html
+++ b/content/docs/en/next/concepts-authentication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-clients.html b/content/docs/en/next/concepts-clients.html
index d098b16..d1a63f8 100644
--- a/content/docs/en/next/concepts-clients.html
+++ b/content/docs/en/next/concepts-clients.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-clients/index.html b/content/docs/en/next/concepts-clients/index.html
index d098b16..d1a63f8 100644
--- a/content/docs/en/next/concepts-clients/index.html
+++ b/content/docs/en/next/concepts-clients/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-messaging.html b/content/docs/en/next/concepts-messaging.html
index 3eb9f512..59f8cf9 100644
--- a/content/docs/en/next/concepts-messaging.html
+++ b/content/docs/en/next/concepts-messaging.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-messaging/index.html b/content/docs/en/next/concepts-messaging/index.html
index 3eb9f512..59f8cf9 100644
--- a/content/docs/en/next/concepts-messaging/index.html
+++ b/content/docs/en/next/concepts-messaging/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-multi-tenancy.html b/content/docs/en/next/concepts-multi-tenancy.html
index 773fbae..99c44c3 100644
--- a/content/docs/en/next/concepts-multi-tenancy.html
+++ b/content/docs/en/next/concepts-multi-tenancy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-multi-tenancy/index.html b/content/docs/en/next/concepts-multi-tenancy/index.html
index 773fbae..99c44c3 100644
--- a/content/docs/en/next/concepts-multi-tenancy/index.html
+++ b/content/docs/en/next/concepts-multi-tenancy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-multiple-advertised-listeners.html b/content/docs/en/next/concepts-multiple-advertised-listeners.html
index 02cae7e..3b9eefd 100644
--- a/content/docs/en/next/concepts-multiple-advertised-listeners.html
+++ b/content/docs/en/next/concepts-multiple-advertised-listeners.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-multiple-advertised-listeners/index.html b/content/docs/en/next/concepts-multiple-advertised-listeners/index.html
index 02cae7e..3b9eefd 100644
--- a/content/docs/en/next/concepts-multiple-advertised-listeners/index.html
+++ b/content/docs/en/next/concepts-multiple-advertised-listeners/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-overview.html b/content/docs/en/next/concepts-overview.html
index bf6228a..27cd614 100644
--- a/content/docs/en/next/concepts-overview.html
+++ b/content/docs/en/next/concepts-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-overview/index.html b/content/docs/en/next/concepts-overview/index.html
index bf6228a..27cd614 100644
--- a/content/docs/en/next/concepts-overview/index.html
+++ b/content/docs/en/next/concepts-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-proxy-sni-routing.html b/content/docs/en/next/concepts-proxy-sni-routing.html
index 8e2e9b4..b4f4b82 100644
--- a/content/docs/en/next/concepts-proxy-sni-routing.html
+++ b/content/docs/en/next/concepts-proxy-sni-routing.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-proxy-sni-routing/index.html b/content/docs/en/next/concepts-proxy-sni-routing/index.html
index 8e2e9b4..b4f4b82 100644
--- a/content/docs/en/next/concepts-proxy-sni-routing/index.html
+++ b/content/docs/en/next/concepts-proxy-sni-routing/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-replication.html b/content/docs/en/next/concepts-replication.html
index f307ce9..69ae5ce 100644
--- a/content/docs/en/next/concepts-replication.html
+++ b/content/docs/en/next/concepts-replication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-replication/index.html b/content/docs/en/next/concepts-replication/index.html
index f307ce9..69ae5ce 100644
--- a/content/docs/en/next/concepts-replication/index.html
+++ b/content/docs/en/next/concepts-replication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-topic-compaction.html b/content/docs/en/next/concepts-topic-compaction.html
index 17328fd..03077e9 100644
--- a/content/docs/en/next/concepts-topic-compaction.html
+++ b/content/docs/en/next/concepts-topic-compaction.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/concepts-topic-compaction/index.html b/content/docs/en/next/concepts-topic-compaction/index.html
index 17328fd..03077e9 100644
--- a/content/docs/en/next/concepts-topic-compaction/index.html
+++ b/content/docs/en/next/concepts-topic-compaction/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-bookkeepermetadata.html b/content/docs/en/next/cookbooks-bookkeepermetadata.html
index 154669e..0d8c5c1 100644
--- a/content/docs/en/next/cookbooks-bookkeepermetadata.html
+++ b/content/docs/en/next/cookbooks-bookkeepermetadata.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-bookkeepermetadata/index.html b/content/docs/en/next/cookbooks-bookkeepermetadata/index.html
index 154669e..0d8c5c1 100644
--- a/content/docs/en/next/cookbooks-bookkeepermetadata/index.html
+++ b/content/docs/en/next/cookbooks-bookkeepermetadata/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-compaction.html b/content/docs/en/next/cookbooks-compaction.html
index 67fb5d3..b749a6e 100644
--- a/content/docs/en/next/cookbooks-compaction.html
+++ b/content/docs/en/next/cookbooks-compaction.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-compaction/index.html b/content/docs/en/next/cookbooks-compaction/index.html
index 67fb5d3..b749a6e 100644
--- a/content/docs/en/next/cookbooks-compaction/index.html
+++ b/content/docs/en/next/cookbooks-compaction/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-deduplication.html b/content/docs/en/next/cookbooks-deduplication.html
index 92c91a7..b7956f2 100644
--- a/content/docs/en/next/cookbooks-deduplication.html
+++ b/content/docs/en/next/cookbooks-deduplication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-deduplication/index.html b/content/docs/en/next/cookbooks-deduplication/index.html
index 92c91a7..b7956f2 100644
--- a/content/docs/en/next/cookbooks-deduplication/index.html
+++ b/content/docs/en/next/cookbooks-deduplication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-encryption.html b/content/docs/en/next/cookbooks-encryption.html
index 0ac42b7..40b3e29 100644
--- a/content/docs/en/next/cookbooks-encryption.html
+++ b/content/docs/en/next/cookbooks-encryption.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-encryption/index.html b/content/docs/en/next/cookbooks-encryption/index.html
index 0ac42b7..40b3e29 100644
--- a/content/docs/en/next/cookbooks-encryption/index.html
+++ b/content/docs/en/next/cookbooks-encryption/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-message-queue.html b/content/docs/en/next/cookbooks-message-queue.html
index 47e6e4c..ce4555e 100644
--- a/content/docs/en/next/cookbooks-message-queue.html
+++ b/content/docs/en/next/cookbooks-message-queue.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-message-queue/index.html b/content/docs/en/next/cookbooks-message-queue/index.html
index 47e6e4c..ce4555e 100644
--- a/content/docs/en/next/cookbooks-message-queue/index.html
+++ b/content/docs/en/next/cookbooks-message-queue/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-non-persistent.html b/content/docs/en/next/cookbooks-non-persistent.html
index 7cf2530..98bf6ee 100644
--- a/content/docs/en/next/cookbooks-non-persistent.html
+++ b/content/docs/en/next/cookbooks-non-persistent.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-non-persistent/index.html b/content/docs/en/next/cookbooks-non-persistent/index.html
index 7cf2530..98bf6ee 100644
--- a/content/docs/en/next/cookbooks-non-persistent/index.html
+++ b/content/docs/en/next/cookbooks-non-persistent/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-retention-expiry.html b/content/docs/en/next/cookbooks-retention-expiry.html
index 9a8407f..9b8742b 100644
--- a/content/docs/en/next/cookbooks-retention-expiry.html
+++ b/content/docs/en/next/cookbooks-retention-expiry.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/cookbooks-retention-expiry/index.html b/content/docs/en/next/cookbooks-retention-expiry/index.html
index 9a8407f..9b8742b 100644
--- a/content/docs/en/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/en/next/cookbooks-retention-expiry/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-aws.html b/content/docs/en/next/deploy-aws.html
index 5e329dd..35b0449 100644
--- a/content/docs/en/next/deploy-aws.html
+++ b/content/docs/en/next/deploy-aws.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-aws/index.html b/content/docs/en/next/deploy-aws/index.html
index 5e329dd..35b0449 100644
--- a/content/docs/en/next/deploy-aws/index.html
+++ b/content/docs/en/next/deploy-aws/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-bare-metal-multi-cluster.html b/content/docs/en/next/deploy-bare-metal-multi-cluster.html
index c04f0b8..2c6c263 100644
--- a/content/docs/en/next/deploy-bare-metal-multi-cluster.html
+++ b/content/docs/en/next/deploy-bare-metal-multi-cluster.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-bare-metal-multi-cluster/index.html b/content/docs/en/next/deploy-bare-metal-multi-cluster/index.html
index c04f0b8..2c6c263 100644
--- a/content/docs/en/next/deploy-bare-metal-multi-cluster/index.html
+++ b/content/docs/en/next/deploy-bare-metal-multi-cluster/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-bare-metal.html b/content/docs/en/next/deploy-bare-metal.html
index 750b53e..8d92517 100644
--- a/content/docs/en/next/deploy-bare-metal.html
+++ b/content/docs/en/next/deploy-bare-metal.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-bare-metal/index.html b/content/docs/en/next/deploy-bare-metal/index.html
index 750b53e..8d92517 100644
--- a/content/docs/en/next/deploy-bare-metal/index.html
+++ b/content/docs/en/next/deploy-bare-metal/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-docker.html b/content/docs/en/next/deploy-docker.html
index 9e01401..c01d774 100644
--- a/content/docs/en/next/deploy-docker.html
+++ b/content/docs/en/next/deploy-docker.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-docker/index.html b/content/docs/en/next/deploy-docker/index.html
index 9e01401..c01d774 100644
--- a/content/docs/en/next/deploy-docker/index.html
+++ b/content/docs/en/next/deploy-docker/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-kubernetes.html b/content/docs/en/next/deploy-kubernetes.html
index dff425f..1ad24c6 100644
--- a/content/docs/en/next/deploy-kubernetes.html
+++ b/content/docs/en/next/deploy-kubernetes.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-kubernetes/index.html b/content/docs/en/next/deploy-kubernetes/index.html
index dff425f..1ad24c6 100644
--- a/content/docs/en/next/deploy-kubernetes/index.html
+++ b/content/docs/en/next/deploy-kubernetes/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-monitoring.html b/content/docs/en/next/deploy-monitoring.html
index 4bdb6de..fa5c427 100644
--- a/content/docs/en/next/deploy-monitoring.html
+++ b/content/docs/en/next/deploy-monitoring.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/deploy-monitoring/index.html b/content/docs/en/next/deploy-monitoring/index.html
index 4bdb6de..fa5c427 100644
--- a/content/docs/en/next/deploy-monitoring/index.html
+++ b/content/docs/en/next/deploy-monitoring/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-binary-protocol.html b/content/docs/en/next/develop-binary-protocol.html
index 678ad6f..b4a94ca 100644
--- a/content/docs/en/next/develop-binary-protocol.html
+++ b/content/docs/en/next/develop-binary-protocol.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-binary-protocol/index.html b/content/docs/en/next/develop-binary-protocol/index.html
index 678ad6f..b4a94ca 100644
--- a/content/docs/en/next/develop-binary-protocol/index.html
+++ b/content/docs/en/next/develop-binary-protocol/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-load-manager.html b/content/docs/en/next/develop-load-manager.html
index ef9fade..a5557db 100644
--- a/content/docs/en/next/develop-load-manager.html
+++ b/content/docs/en/next/develop-load-manager.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-load-manager/index.html b/content/docs/en/next/develop-load-manager/index.html
index ef9fade..a5557db 100644
--- a/content/docs/en/next/develop-load-manager/index.html
+++ b/content/docs/en/next/develop-load-manager/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-plugin.html b/content/docs/en/next/develop-plugin.html
index b1cdabc..e30f48b 100644
--- a/content/docs/en/next/develop-plugin.html
+++ b/content/docs/en/next/develop-plugin.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-plugin/index.html b/content/docs/en/next/develop-plugin/index.html
index b1cdabc..e30f48b 100644
--- a/content/docs/en/next/develop-plugin/index.html
+++ b/content/docs/en/next/develop-plugin/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-tools.html b/content/docs/en/next/develop-tools.html
index 6c98d39..04a598f 100644
--- a/content/docs/en/next/develop-tools.html
+++ b/content/docs/en/next/develop-tools.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/develop-tools/index.html b/content/docs/en/next/develop-tools/index.html
index 6c98d39..04a598f 100644
--- a/content/docs/en/next/develop-tools/index.html
+++ b/content/docs/en/next/develop-tools/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-cli.html b/content/docs/en/next/functions-cli.html
index a98f1c8..efbea97 100644
--- a/content/docs/en/next/functions-cli.html
+++ b/content/docs/en/next/functions-cli.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-cli/index.html b/content/docs/en/next/functions-cli/index.html
index a98f1c8..efbea97 100644
--- a/content/docs/en/next/functions-cli/index.html
+++ b/content/docs/en/next/functions-cli/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-debug.html b/content/docs/en/next/functions-debug.html
index 04f70c4..29c7ca2 100644
--- a/content/docs/en/next/functions-debug.html
+++ b/content/docs/en/next/functions-debug.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-debug/index.html b/content/docs/en/next/functions-debug/index.html
index 04f70c4..29c7ca2 100644
--- a/content/docs/en/next/functions-debug/index.html
+++ b/content/docs/en/next/functions-debug/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-deploy.html b/content/docs/en/next/functions-deploy.html
index 40244e1c..f1df8bb 100644
--- a/content/docs/en/next/functions-deploy.html
+++ b/content/docs/en/next/functions-deploy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-deploy/index.html b/content/docs/en/next/functions-deploy/index.html
index 40244e1c..f1df8bb 100644
--- a/content/docs/en/next/functions-deploy/index.html
+++ b/content/docs/en/next/functions-deploy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-develop.html b/content/docs/en/next/functions-develop.html
index b1b3780..f7503a65 100644
--- a/content/docs/en/next/functions-develop.html
+++ b/content/docs/en/next/functions-develop.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-develop/index.html b/content/docs/en/next/functions-develop/index.html
index b1b3780..f7503a65 100644
--- a/content/docs/en/next/functions-develop/index.html
+++ b/content/docs/en/next/functions-develop/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-overview.html b/content/docs/en/next/functions-overview.html
index 638a1e8..f902300 100644
--- a/content/docs/en/next/functions-overview.html
+++ b/content/docs/en/next/functions-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-overview/index.html b/content/docs/en/next/functions-overview/index.html
index 638a1e8..f902300 100644
--- a/content/docs/en/next/functions-overview/index.html
+++ b/content/docs/en/next/functions-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-package.html b/content/docs/en/next/functions-package.html
index e226d41..56ba06e 100644
--- a/content/docs/en/next/functions-package.html
+++ b/content/docs/en/next/functions-package.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-package/index.html b/content/docs/en/next/functions-package/index.html
index e226d41..56ba06e 100644
--- a/content/docs/en/next/functions-package/index.html
+++ b/content/docs/en/next/functions-package/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-runtime.html b/content/docs/en/next/functions-runtime.html
index b02aef9..f4c42de 100644
--- a/content/docs/en/next/functions-runtime.html
+++ b/content/docs/en/next/functions-runtime.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-runtime/index.html b/content/docs/en/next/functions-runtime/index.html
index b02aef9..f4c42de 100644
--- a/content/docs/en/next/functions-runtime/index.html
+++ b/content/docs/en/next/functions-runtime/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-worker.html b/content/docs/en/next/functions-worker.html
index f0faff5..12b99de 100644
--- a/content/docs/en/next/functions-worker.html
+++ b/content/docs/en/next/functions-worker.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/functions-worker/index.html b/content/docs/en/next/functions-worker/index.html
index f0faff5..12b99de 100644
--- a/content/docs/en/next/functions-worker/index.html
+++ b/content/docs/en/next/functions-worker/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-deploy.html b/content/docs/en/next/helm-deploy.html
index a7e5de7..68eb158 100644
--- a/content/docs/en/next/helm-deploy.html
+++ b/content/docs/en/next/helm-deploy.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-deploy/index.html b/content/docs/en/next/helm-deploy/index.html
index a7e5de7..68eb158 100644
--- a/content/docs/en/next/helm-deploy/index.html
+++ b/content/docs/en/next/helm-deploy/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-install.html b/content/docs/en/next/helm-install.html
index 6ed5aad..6262567 100644
--- a/content/docs/en/next/helm-install.html
+++ b/content/docs/en/next/helm-install.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-install/index.html b/content/docs/en/next/helm-install/index.html
index 6ed5aad..6262567 100644
--- a/content/docs/en/next/helm-install/index.html
+++ b/content/docs/en/next/helm-install/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-overview.html b/content/docs/en/next/helm-overview.html
index 0bbfb0e..ab59ca2 100644
--- a/content/docs/en/next/helm-overview.html
+++ b/content/docs/en/next/helm-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-overview/index.html b/content/docs/en/next/helm-overview/index.html
index 0bbfb0e..ab59ca2 100644
--- a/content/docs/en/next/helm-overview/index.html
+++ b/content/docs/en/next/helm-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-prepare.html b/content/docs/en/next/helm-prepare.html
index a69c288..83dafd3 100644
--- a/content/docs/en/next/helm-prepare.html
+++ b/content/docs/en/next/helm-prepare.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-prepare/index.html b/content/docs/en/next/helm-prepare/index.html
index a69c288..83dafd3 100644
--- a/content/docs/en/next/helm-prepare/index.html
+++ b/content/docs/en/next/helm-prepare/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-tools.html b/content/docs/en/next/helm-tools.html
index b94323b..b52e5e4 100644
--- a/content/docs/en/next/helm-tools.html
+++ b/content/docs/en/next/helm-tools.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-tools/index.html b/content/docs/en/next/helm-tools/index.html
index b94323b..b52e5e4 100644
--- a/content/docs/en/next/helm-tools/index.html
+++ b/content/docs/en/next/helm-tools/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-upgrade.html b/content/docs/en/next/helm-upgrade.html
index d3423b8..1fd98de 100644
--- a/content/docs/en/next/helm-upgrade.html
+++ b/content/docs/en/next/helm-upgrade.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/helm-upgrade/index.html b/content/docs/en/next/helm-upgrade/index.html
index d3423b8..1fd98de 100644
--- a/content/docs/en/next/helm-upgrade/index.html
+++ b/content/docs/en/next/helm-upgrade/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-cdc.html b/content/docs/en/next/io-cdc.html
index a3f199f..a244dc0 100644
--- a/content/docs/en/next/io-cdc.html
+++ b/content/docs/en/next/io-cdc.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-cdc/index.html b/content/docs/en/next/io-cdc/index.html
index a3f199f..a244dc0 100644
--- a/content/docs/en/next/io-cdc/index.html
+++ b/content/docs/en/next/io-cdc/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-cli.html b/content/docs/en/next/io-cli.html
index 5c2a035..14bf517 100644
--- a/content/docs/en/next/io-cli.html
+++ b/content/docs/en/next/io-cli.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-cli/index.html b/content/docs/en/next/io-cli/index.html
index 5c2a035..14bf517 100644
--- a/content/docs/en/next/io-cli/index.html
+++ b/content/docs/en/next/io-cli/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-connectors.html b/content/docs/en/next/io-connectors.html
index 64f513d..7f0bcd1 100644
--- a/content/docs/en/next/io-connectors.html
+++ b/content/docs/en/next/io-connectors.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-connectors/index.html b/content/docs/en/next/io-connectors/index.html
index 64f513d..7f0bcd1 100644
--- a/content/docs/en/next/io-connectors/index.html
+++ b/content/docs/en/next/io-connectors/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-debug.html b/content/docs/en/next/io-debug.html
index a0ae813..463e0c8 100644
--- a/content/docs/en/next/io-debug.html
+++ b/content/docs/en/next/io-debug.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-debug/index.html b/content/docs/en/next/io-debug/index.html
index a0ae813..463e0c8 100644
--- a/content/docs/en/next/io-debug/index.html
+++ b/content/docs/en/next/io-debug/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-develop.html b/content/docs/en/next/io-develop.html
index e245a7d..e6a396a 100644
--- a/content/docs/en/next/io-develop.html
+++ b/content/docs/en/next/io-develop.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-develop/index.html b/content/docs/en/next/io-develop/index.html
index e245a7d..e6a396a 100644
--- a/content/docs/en/next/io-develop/index.html
+++ b/content/docs/en/next/io-develop/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-overview.html b/content/docs/en/next/io-overview.html
index 1c25cb6..0ddf1ca 100644
--- a/content/docs/en/next/io-overview.html
+++ b/content/docs/en/next/io-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-overview/index.html b/content/docs/en/next/io-overview/index.html
index 1c25cb6..0ddf1ca 100644
--- a/content/docs/en/next/io-overview/index.html
+++ b/content/docs/en/next/io-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-quickstart.html b/content/docs/en/next/io-quickstart.html
index d56b20a..4c9451e 100644
--- a/content/docs/en/next/io-quickstart.html
+++ b/content/docs/en/next/io-quickstart.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-quickstart/index.html b/content/docs/en/next/io-quickstart/index.html
index d56b20a..4c9451e 100644
--- a/content/docs/en/next/io-quickstart/index.html
+++ b/content/docs/en/next/io-quickstart/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-use.html b/content/docs/en/next/io-use.html
index 47b314c..0d53090 100644
--- a/content/docs/en/next/io-use.html
+++ b/content/docs/en/next/io-use.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/io-use/index.html b/content/docs/en/next/io-use/index.html
index 47b314c..0d53090 100644
--- a/content/docs/en/next/io-use/index.html
+++ b/content/docs/en/next/io-use/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/kubernetes-helm.html b/content/docs/en/next/kubernetes-helm.html
index 7c151e99..8cde258 100644
--- a/content/docs/en/next/kubernetes-helm.html
+++ b/content/docs/en/next/kubernetes-helm.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/kubernetes-helm/index.html b/content/docs/en/next/kubernetes-helm/index.html
index 7c151e99..8cde258 100644
--- a/content/docs/en/next/kubernetes-helm/index.html
+++ b/content/docs/en/next/kubernetes-helm/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/performance-pulsar-perf.html b/content/docs/en/next/performance-pulsar-perf.html
index 8273248..315258f 100644
--- a/content/docs/en/next/performance-pulsar-perf.html
+++ b/content/docs/en/next/performance-pulsar-perf.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/performance-pulsar-perf/index.html b/content/docs/en/next/performance-pulsar-perf/index.html
index 8273248..315258f 100644
--- a/content/docs/en/next/performance-pulsar-perf/index.html
+++ b/content/docs/en/next/performance-pulsar-perf/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-cli-tools.html b/content/docs/en/next/reference-cli-tools.html
index 7dbbb98..4bb8897 100644
--- a/content/docs/en/next/reference-cli-tools.html
+++ b/content/docs/en/next/reference-cli-tools.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-cli-tools/index.html b/content/docs/en/next/reference-cli-tools/index.html
index 7dbbb98..4bb8897 100644
--- a/content/docs/en/next/reference-cli-tools/index.html
+++ b/content/docs/en/next/reference-cli-tools/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-configuration.html b/content/docs/en/next/reference-configuration.html
index 2e034fa..76c687f 100644
--- a/content/docs/en/next/reference-configuration.html
+++ b/content/docs/en/next/reference-configuration.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-configuration/index.html b/content/docs/en/next/reference-configuration/index.html
index 2e034fa..76c687f 100644
--- a/content/docs/en/next/reference-configuration/index.html
+++ b/content/docs/en/next/reference-configuration/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-metrics.html b/content/docs/en/next/reference-metrics.html
index 910cf0c..2a9a76f 100644
--- a/content/docs/en/next/reference-metrics.html
+++ b/content/docs/en/next/reference-metrics.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-metrics/index.html b/content/docs/en/next/reference-metrics/index.html
index 910cf0c..2a9a76f 100644
--- a/content/docs/en/next/reference-metrics/index.html
+++ b/content/docs/en/next/reference-metrics/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-terminology.html b/content/docs/en/next/reference-terminology.html
index f932013..bbe8512 100644
--- a/content/docs/en/next/reference-terminology.html
+++ b/content/docs/en/next/reference-terminology.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/reference-terminology/index.html b/content/docs/en/next/reference-terminology/index.html
index f932013..bbe8512 100644
--- a/content/docs/en/next/reference-terminology/index.html
+++ b/content/docs/en/next/reference-terminology/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-evolution-compatibility.html b/content/docs/en/next/schema-evolution-compatibility.html
index fc8564a..335d33f 100644
--- a/content/docs/en/next/schema-evolution-compatibility.html
+++ b/content/docs/en/next/schema-evolution-compatibility.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-evolution-compatibility/index.html b/content/docs/en/next/schema-evolution-compatibility/index.html
index fc8564a..335d33f 100644
--- a/content/docs/en/next/schema-evolution-compatibility/index.html
+++ b/content/docs/en/next/schema-evolution-compatibility/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-get-started.html b/content/docs/en/next/schema-get-started.html
index 11ba2cd..fff696c 100644
--- a/content/docs/en/next/schema-get-started.html
+++ b/content/docs/en/next/schema-get-started.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-get-started/index.html b/content/docs/en/next/schema-get-started/index.html
index 11ba2cd..fff696c 100644
--- a/content/docs/en/next/schema-get-started/index.html
+++ b/content/docs/en/next/schema-get-started/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-manage.html b/content/docs/en/next/schema-manage.html
index 17815aa..641f2a3 100644
--- a/content/docs/en/next/schema-manage.html
+++ b/content/docs/en/next/schema-manage.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-manage/index.html b/content/docs/en/next/schema-manage/index.html
index 17815aa..641f2a3 100644
--- a/content/docs/en/next/schema-manage/index.html
+++ b/content/docs/en/next/schema-manage/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-understand.html b/content/docs/en/next/schema-understand.html
index c58aee7..f213f74 100644
--- a/content/docs/en/next/schema-understand.html
+++ b/content/docs/en/next/schema-understand.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/schema-understand/index.html b/content/docs/en/next/schema-understand/index.html
index c58aee7..f213f74 100644
--- a/content/docs/en/next/schema-understand/index.html
+++ b/content/docs/en/next/schema-understand/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-athenz.html b/content/docs/en/next/security-athenz.html
index 7fc1321..bdbfa83 100644
--- a/content/docs/en/next/security-athenz.html
+++ b/content/docs/en/next/security-athenz.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-athenz/index.html b/content/docs/en/next/security-athenz/index.html
index 7fc1321..bdbfa83 100644
--- a/content/docs/en/next/security-athenz/index.html
+++ b/content/docs/en/next/security-athenz/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-authorization.html b/content/docs/en/next/security-authorization.html
index 8040cff..4d3d839 100644
--- a/content/docs/en/next/security-authorization.html
+++ b/content/docs/en/next/security-authorization.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-authorization/index.html b/content/docs/en/next/security-authorization/index.html
index 8040cff..4d3d839 100644
--- a/content/docs/en/next/security-authorization/index.html
+++ b/content/docs/en/next/security-authorization/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-bouncy-castle.html b/content/docs/en/next/security-bouncy-castle.html
index 4816fe4..f57e958 100644
--- a/content/docs/en/next/security-bouncy-castle.html
+++ b/content/docs/en/next/security-bouncy-castle.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/next/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modules [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/next/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-bouncy-castle/index.html b/content/docs/en/next/security-bouncy-castle/index.html
index 4816fe4..f57e958 100644
--- a/content/docs/en/next/security-bouncy-castle/index.html
+++ b/content/docs/en/next/security-bouncy-castle/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/next/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modules [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/next/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a h [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-encryption.html b/content/docs/en/next/security-encryption.html
index 643edfd..1b70053 100644
--- a/content/docs/en/next/security-encryption.html
+++ b/content/docs/en/next/security-encryption.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -139,7 +139,7 @@ openssl ec -in test_ecdsa_privkey.pem -pubout -outform pem -out test_ecdsa_pubke
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/next/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li><l [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/next/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and s [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-encryption/index.html b/content/docs/en/next/security-encryption/index.html
index 643edfd..1b70053 100644
--- a/content/docs/en/next/security-encryption/index.html
+++ b/content/docs/en/next/security-encryption/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -139,7 +139,7 @@ openssl ec -in test_ecdsa_privkey.pem -pubout -outform pem -out test_ecdsa_pubke
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/next/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li><l [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/next/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and s [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-extending.html b/content/docs/en/next/security-extending.html
index d41135e..41f9ff5 100644
--- a/content/docs/en/next/security-extending.html
+++ b/content/docs/en/next/security-extending.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Extending Authentication and Authorization in Pulsar · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar provides a way to use custom authentication and authorization mechanisms."/><meta name="docsearch:version" content="next"/><meta name="doc [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Extend Authentication and Authorization in Pulsar · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar provides a way to use custom authentication and authorization mechanisms."/><meta name="docsearch:version" content="next"/><meta name="docsea [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -74,172 +74,60 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/security-extending.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Extending Authentication and Authorization in Pulsar</h1></header><article><div><span><p>Pulsar provides a way to use custom authent [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/security-extending.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Extend Authentication and Authorization in Pulsar</h1></header><article><div><span><p>Pulsar provides a way to use custom authentica [...]
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>Pulsar supports mutual TLS and Athenz authentication plugins. For how to use these authentication plugins, you can refer to the description in <a href="/docs/en/next/security-overview">Security</a>.</p>
-<p>You can use a custom authentication mechanism by providing the implementation in the form of two plugins. One plugin is for the Client library and the other plugin is for the Pulsar Proxy and/or Pulsar Broker to validate the credentials.</p>
+<p>You can use a custom authentication mechanism by providing the implementation in the form of two plugins.</p>
+<ul>
+<li>Client authentication plugin</li>
+<li>Proxy/Broker authentication plugin</li>
+</ul>
 <h3><a class="anchor" aria-hidden="true" id="client-authentication-plugin"></a><a href="#client-authentication-plugin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
-<p>For the client library, you need to implement <code>org.apache.pulsar.client.api.Authentication</code>. By entering the command below you can pass this class when you create a Pulsar client:</p>
+<p>For the client library, you need to implement <code>org.apache.pulsar.client.api.Authentication</code>. By entering the command below, you can pass this class when you create a Pulsar client.</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.builder()
     .serviceUrl(<span class="hljs-string">"pulsar://localhost:6650"</span>)
     .authentication(<span class="hljs-keyword">new</span> MyAuthentication())
     .build();
 </code></pre>
-<p>You can use 2 interfaces to implement on the client side:</p>
+<p>You can implement 2 interfaces on the client side:</p>
 <ul>
-<li><code>Authentication</code> -&gt; <a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/Authentication.html">http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/Authentication.html</a></li>
-<li><code>AuthenticationDataProvider</code> -&gt; <a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/AuthenticationDataProvider.html">http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/AuthenticationDataProvider.html</a></li>
+<li><a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/Authentication.html"><code>Authentication</code></a></li>
+<li><a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/AuthenticationDataProvider.html"><code>AuthenticationDataProvider</code></a></li>
 </ul>
-<p>This in turn needs to provide the client credentials in the form of <code>org.apache.pulsar.client.api.AuthenticationDataProvider</code>. This leaves the chance to return different kinds of authentication token for different types of connection or by passing a certificate chain to use for TLS.</p>
-<p>You can find examples for client authentication providers at:</p>
+<p>This in turn requires you to provide the client credentials in the form of <code>org.apache.pulsar.client.api.AuthenticationDataProvider</code> and also leaves the chance to return different kinds of authentication token for different types of connection or by passing a certificate chain to use for TLS.</p>
+<p>You can find the following examples for different client authentication plugins:</p>
 <ul>
-<li>Mutual TLS Auth -- <a href="https://github.com/apache/pulsar/tree/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth">https://github.com/apache/pulsar/tree/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth</a></li>
-<li>Athenz -- <a href="https://github.com/apache/pulsar/tree/master/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth">https://github.com/apache/pulsar/tree/master/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationTls.java">Mutual TLS</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationAthenz.java">Athenz</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client-auth-sasl/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationSasl.java">Kerberos</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationToken.java">JSON Web Token (JWT)</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/oauth2/AuthenticationOAuth2.java">OAuth 2.0</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationBasic.java">Basic auth</a></li>
 </ul>
 <h3><a class="anchor" aria-hidden="true" id="proxybroker-authentication-plugin"></a><a href="#proxybroker-authentication-plugin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>On the proxy/broker side, you need to configure the corresponding plugin to validate the credentials that the client sends. The Proxy and Broker can support multiple authentication providers at the same time.</p>
-<p>In <code>conf/broker.conf</code> you can choose to specify a list of valid providers:</p>
+<p>On the proxy/broker side, you need to configure the corresponding plugin to validate the credentials that the client sends. The proxy and broker can support multiple authentication providers at the same time.</p>
+<p>In <code>conf/broker.conf</code>, you can choose to specify a list of valid providers:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Authentication provider name list, which is comma separated list of class names</span>
 <span class="hljs-attr">authenticationProviders</span>=<span class="hljs-string"></span>
 </code></pre>
-<p>To implement <code>org.apache.pulsar.broker.authentication.AuthenticationProvider</code> on one single interface:</p>
-<pre><code class="hljs css language-java"><span class="hljs-comment">/**
- * Provider of authentication mechanism
- */</span>
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">AuthenticationProvider</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Closeable</span> </span>{
-
-    <span class="hljs-comment">/**
-     * Perform initialization for the authentication provider
-     *
-     * <span class="hljs-doctag">@param</span> config
-     *            broker config object
-     * <span class="hljs-doctag">@throws</span> IOException
-     *             if the initialization fails
-     */</span>
-    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">initialize</span><span class="hljs-params">(ServiceConfiguration config)</span> <span class="hljs-keyword">throws</span> IOException</span>;
-
-    <span class="hljs-comment">/**
-     * <span class="hljs-doctag">@return</span> the authentication method name supported by this provider
-     */</span>
-    <span class="hljs-function">String <span class="hljs-title">getAuthMethodName</span><span class="hljs-params">()</span></span>;
-
-    <span class="hljs-comment">/**
-     * Validate the authentication for the given credentials with the specified authentication data
-     *
-     * <span class="hljs-doctag">@param</span> authData
-     *            provider specific authentication data
-     * <span class="hljs-doctag">@return</span> the "role" string for the authenticated connection, if the authentication was successful
-     * <span class="hljs-doctag">@throws</span> AuthenticationException
-     *             if the credentials are not valid
-     */</span>
-    <span class="hljs-function">String <span class="hljs-title">authenticate</span><span class="hljs-params">(AuthenticationDataSource authData)</span> <span class="hljs-keyword">throws</span> AuthenticationException</span>;
-
-}
-</code></pre>
-<p>The following is the example for Broker authentication plugins:</p>
+<p>For the implementation of the <code>org.apache.pulsar.broker.authentication.AuthenticationProvider</code> interface, refer to <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProvider.java">here</a>.</p>
+<p>You can find the following examples for different broker authentication plugins:</p>
 <ul>
-<li>Mutual TLS -- <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java">https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java</a></li>
-<li>Athenz -- <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-athenz/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderAthenz.java">https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-athenz/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderAthenz.java</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java">Mutual TLS</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-athenz/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderAthenz.java">Athenz</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-sasl/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderSasl.java">Kerberos</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java">JSON Web Token (JWT)</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java">Basic auth</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authorization"></a><a href="#authorization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
 <p>Authorization is the operation that checks whether a particular &quot;role&quot; or &quot;principal&quot; has permission to perform a certain operation.</p>
-<p>By default, you can use the embedded authorization provider provided by Pulsar. You can also configure a different authorization provider through a plugin.
-Note that although the Authentication plugin is designed for use in both the Proxy and Broker,
-the Authorization plugin is designed only for use on the Broker however the Proxy does perform some simple Authorization checks of Roles if authorization is enabled.</p>
-<p>To provide a custom provider, you need to implement the <code>org.apache.pulsar.broker.authorization.AuthorizationProvider</code> interface, put this class in the Pulsar broker classpath and configure the class in <code>conf/broker.conf</code>:</p>
+<p>By default, you can use the embedded authorization provider provided by Pulsar. You can also configure a different authorization provider through a plugin. Note that although the Authentication plugin is designed for use in both the proxy and broker, the Authorization plugin is designed only for use on the broker.</p>
+<h3><a class="anchor" aria-hidden="true" id="broker-authorization-plugin"></a><a href="#broker-authorization-plugin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>To provide a custom authorization provider, you need to implement the <code>org.apache.pulsar.broker.authorization.AuthorizationProvider</code> interface, put this class in the Pulsar broker classpath and configure the class in <code>conf/broker.conf</code>:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Authorization provider fully qualified class-name</span>
 <span class="hljs-attr">authorizationProvider</span>=<span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
 </code></pre>
-<pre><code class="hljs css language-java"><span class="hljs-comment">/**
- * Provider of authorization mechanism
- */</span>
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">AuthorizationProvider</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Closeable</span> </span>{
-
-    <span class="hljs-comment">/**
-     * Perform initialization for the authorization provider
-     *
-     * <span class="hljs-doctag">@param</span> conf
-     *            broker config object
-     * <span class="hljs-doctag">@param</span> configCache
-     *            pulsar zk configuration cache service
-     * <span class="hljs-doctag">@throws</span> IOException
-     *             if the initialization fails
-     */</span>
-    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">initialize</span><span class="hljs-params">(ServiceConfiguration conf, ConfigurationCacheService configCache)</span> <span class="hljs-keyword">throws</span> IOException</span>;
-
-    <span class="hljs-comment">/**
-     * Check if the specified role has permission to send messages to the specified fully qualified topic name.
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     *            the fully qualified topic name associated with the topic.
-     * <span class="hljs-doctag">@param</span> role
-     *            the app id used to send messages to the topic.
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Boolean&gt; <span class="hljs-title">canProduceAsync</span><span class="hljs-params">(TopicName topicName, String role,
-            AuthenticationDataSource authenticationData)</span></span>;
-
-    <span class="hljs-comment">/**
-     * Check if the specified role has permission to receive messages from the specified fully qualified topic name.
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     *            the fully qualified topic name associated with the topic.
-     * <span class="hljs-doctag">@param</span> role
-     *            the app id used to receive messages from the topic.
-     * <span class="hljs-doctag">@param</span> subscription
-     *            the subscription name defined by the client
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Boolean&gt; <span class="hljs-title">canConsumeAsync</span><span class="hljs-params">(TopicName topicName, String role,
-            AuthenticationDataSource authenticationData, String subscription)</span></span>;
-
-    <span class="hljs-comment">/**
-     * Check whether the specified role can perform a lookup for the specified topic.
-     *
-     * For that the caller needs to have producer or consumer permission.
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     * <span class="hljs-doctag">@param</span> role
-     * <span class="hljs-doctag">@return</span>
-     * <span class="hljs-doctag">@throws</span> Exception
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Boolean&gt; <span class="hljs-title">canLookupAsync</span><span class="hljs-params">(TopicName topicName, String role,
-            AuthenticationDataSource authenticationData)</span></span>;
-
-    <span class="hljs-comment">/**
-     *
-     * Grant authorization-action permission on a namespace to the given client
-     *
-     * <span class="hljs-doctag">@param</span> namespace
-     * <span class="hljs-doctag">@param</span> actions
-     * <span class="hljs-doctag">@param</span> role
-     * <span class="hljs-doctag">@param</span> authDataJson
-     *            additional authdata in json format
-     * <span class="hljs-doctag">@return</span> CompletableFuture
-     * <span class="hljs-doctag">@completesWith</span> &lt;br/&gt;
-     *                IllegalArgumentException when namespace not found&lt;br/&gt;
-     *                IllegalStateException when failed to grant permission
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Void&gt; <span class="hljs-title">grantPermissionAsync</span><span class="hljs-params">(NamespaceName namespace, Set&lt;AuthAction&gt; actions, String role,
-            String authDataJson)</span></span>;
-
-    <span class="hljs-comment">/**
-     * Grant authorization-action permission on a topic to the given client
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     * <span class="hljs-doctag">@param</span> role
-     * <span class="hljs-doctag">@param</span> authDataJson
-     *            additional authdata in json format
-     * <span class="hljs-doctag">@return</span> CompletableFuture
-     * <span class="hljs-doctag">@completesWith</span> &lt;br/&gt;
-     *                IllegalArgumentException when namespace not found&lt;br/&gt;
-     *                IllegalStateException when failed to grant permission
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Void&gt; <span class="hljs-title">grantPermissionAsync</span><span class="hljs-params">(TopicName topicName, Set&lt;AuthAction&gt; actions, String role,
-            String authDataJson)</span></span>;
-
-}
-
-</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-encryption"><span class="arrow-prev">← </span><span>End-to-End Encryption</span></a><a class="docs-next button" href="/docs/en/next/security-bouncy-castle"><span>Bouncy Castle Providers</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication">Authentication</a><ul class="toc-headings"><li><a hre [...]
+<p>For the implementation of the <code>org.apache.pulsar.broker.authorization.AuthorizationProvider</code> interface, refer to <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/AuthorizationProvider.java">here</a>.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-encryption"><span class="arrow-prev">← </span><span>End-to-End Encryption</span></a><a class="docs-next button" href="/docs/en/next/security-bouncy-castle"><span>Bouncy Castle Providers</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication">Authentication</a><ul class="toc-headings"><li><a hre [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-extending/index.html b/content/docs/en/next/security-extending/index.html
index d41135e..41f9ff5 100644
--- a/content/docs/en/next/security-extending/index.html
+++ b/content/docs/en/next/security-extending/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Extending Authentication and Authorization in Pulsar · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar provides a way to use custom authentication and authorization mechanisms."/><meta name="docsearch:version" content="next"/><meta name="doc [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Extend Authentication and Authorization in Pulsar · Apache Pulsar</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar provides a way to use custom authentication and authorization mechanisms."/><meta name="docsearch:version" content="next"/><meta name="docsea [...]
               (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
               (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
               m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -74,172 +74,60 @@
                 };
               }
             });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/security-extending.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Extending Authentication and Authorization in Pulsar</h1></header><article><div><span><p>Pulsar provides a way to use custom authent [...]
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/security-extending.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Extend Authentication and Authorization in Pulsar</h1></header><article><div><span><p>Pulsar provides a way to use custom authentica [...]
 <h2><a class="anchor" aria-hidden="true" id="authentication"></a><a href="#authentication" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
-<p>Pulsar supports mutual TLS and Athenz authentication plugins. For how to use these authentication plugins, you can refer to the description in <a href="/docs/en/next/security-overview">Security</a>.</p>
-<p>You can use a custom authentication mechanism by providing the implementation in the form of two plugins. One plugin is for the Client library and the other plugin is for the Pulsar Proxy and/or Pulsar Broker to validate the credentials.</p>
+<p>You can use a custom authentication mechanism by providing the implementation in the form of two plugins.</p>
+<ul>
+<li>Client authentication plugin</li>
+<li>Proxy/Broker authentication plugin</li>
+</ul>
 <h3><a class="anchor" aria-hidden="true" id="client-authentication-plugin"></a><a href="#client-authentication-plugin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
-<p>For the client library, you need to implement <code>org.apache.pulsar.client.api.Authentication</code>. By entering the command below you can pass this class when you create a Pulsar client:</p>
+<p>For the client library, you need to implement <code>org.apache.pulsar.client.api.Authentication</code>. By entering the command below, you can pass this class when you create a Pulsar client.</p>
 <pre><code class="hljs css language-java">PulsarClient client = PulsarClient.builder()
     .serviceUrl(<span class="hljs-string">"pulsar://localhost:6650"</span>)
     .authentication(<span class="hljs-keyword">new</span> MyAuthentication())
     .build();
 </code></pre>
-<p>You can use 2 interfaces to implement on the client side:</p>
+<p>You can implement 2 interfaces on the client side:</p>
 <ul>
-<li><code>Authentication</code> -&gt; <a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/Authentication.html">http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/Authentication.html</a></li>
-<li><code>AuthenticationDataProvider</code> -&gt; <a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/AuthenticationDataProvider.html">http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/AuthenticationDataProvider.html</a></li>
+<li><a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/Authentication.html"><code>Authentication</code></a></li>
+<li><a href="http://pulsar.apache.org/api/client/2.9.0-SNAPSHOT/org/apache/pulsar/client/api/AuthenticationDataProvider.html"><code>AuthenticationDataProvider</code></a></li>
 </ul>
-<p>This in turn needs to provide the client credentials in the form of <code>org.apache.pulsar.client.api.AuthenticationDataProvider</code>. This leaves the chance to return different kinds of authentication token for different types of connection or by passing a certificate chain to use for TLS.</p>
-<p>You can find examples for client authentication providers at:</p>
+<p>This in turn requires you to provide the client credentials in the form of <code>org.apache.pulsar.client.api.AuthenticationDataProvider</code> and also leaves the chance to return different kinds of authentication token for different types of connection or by passing a certificate chain to use for TLS.</p>
+<p>You can find the following examples for different client authentication plugins:</p>
 <ul>
-<li>Mutual TLS Auth -- <a href="https://github.com/apache/pulsar/tree/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth">https://github.com/apache/pulsar/tree/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth</a></li>
-<li>Athenz -- <a href="https://github.com/apache/pulsar/tree/master/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth">https://github.com/apache/pulsar/tree/master/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationTls.java">Mutual TLS</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationAthenz.java">Athenz</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client-auth-sasl/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationSasl.java">Kerberos</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationToken.java">JSON Web Token (JWT)</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/oauth2/AuthenticationOAuth2.java">OAuth 2.0</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationBasic.java">Basic auth</a></li>
 </ul>
 <h3><a class="anchor" aria-hidden="true" id="proxybroker-authentication-plugin"></a><a href="#proxybroker-authentication-plugin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
-<p>On the proxy/broker side, you need to configure the corresponding plugin to validate the credentials that the client sends. The Proxy and Broker can support multiple authentication providers at the same time.</p>
-<p>In <code>conf/broker.conf</code> you can choose to specify a list of valid providers:</p>
+<p>On the proxy/broker side, you need to configure the corresponding plugin to validate the credentials that the client sends. The proxy and broker can support multiple authentication providers at the same time.</p>
+<p>In <code>conf/broker.conf</code>, you can choose to specify a list of valid providers:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Authentication provider name list, which is comma separated list of class names</span>
 <span class="hljs-attr">authenticationProviders</span>=<span class="hljs-string"></span>
 </code></pre>
-<p>To implement <code>org.apache.pulsar.broker.authentication.AuthenticationProvider</code> on one single interface:</p>
-<pre><code class="hljs css language-java"><span class="hljs-comment">/**
- * Provider of authentication mechanism
- */</span>
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">AuthenticationProvider</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Closeable</span> </span>{
-
-    <span class="hljs-comment">/**
-     * Perform initialization for the authentication provider
-     *
-     * <span class="hljs-doctag">@param</span> config
-     *            broker config object
-     * <span class="hljs-doctag">@throws</span> IOException
-     *             if the initialization fails
-     */</span>
-    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">initialize</span><span class="hljs-params">(ServiceConfiguration config)</span> <span class="hljs-keyword">throws</span> IOException</span>;
-
-    <span class="hljs-comment">/**
-     * <span class="hljs-doctag">@return</span> the authentication method name supported by this provider
-     */</span>
-    <span class="hljs-function">String <span class="hljs-title">getAuthMethodName</span><span class="hljs-params">()</span></span>;
-
-    <span class="hljs-comment">/**
-     * Validate the authentication for the given credentials with the specified authentication data
-     *
-     * <span class="hljs-doctag">@param</span> authData
-     *            provider specific authentication data
-     * <span class="hljs-doctag">@return</span> the "role" string for the authenticated connection, if the authentication was successful
-     * <span class="hljs-doctag">@throws</span> AuthenticationException
-     *             if the credentials are not valid
-     */</span>
-    <span class="hljs-function">String <span class="hljs-title">authenticate</span><span class="hljs-params">(AuthenticationDataSource authData)</span> <span class="hljs-keyword">throws</span> AuthenticationException</span>;
-
-}
-</code></pre>
-<p>The following is the example for Broker authentication plugins:</p>
+<p>For the implementation of the <code>org.apache.pulsar.broker.authentication.AuthenticationProvider</code> interface, refer to <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProvider.java">here</a>.</p>
+<p>You can find the following examples for different broker authentication plugins:</p>
 <ul>
-<li>Mutual TLS -- <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java">https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java</a></li>
-<li>Athenz -- <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-athenz/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderAthenz.java">https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-athenz/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderAthenz.java</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java">Mutual TLS</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-athenz/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderAthenz.java">Athenz</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-auth-sasl/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderSasl.java">Kerberos</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java">JSON Web Token (JWT)</a></li>
+<li><a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java">Basic auth</a></li>
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="authorization"></a><a href="#authorization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
 <p>Authorization is the operation that checks whether a particular &quot;role&quot; or &quot;principal&quot; has permission to perform a certain operation.</p>
-<p>By default, you can use the embedded authorization provider provided by Pulsar. You can also configure a different authorization provider through a plugin.
-Note that although the Authentication plugin is designed for use in both the Proxy and Broker,
-the Authorization plugin is designed only for use on the Broker however the Proxy does perform some simple Authorization checks of Roles if authorization is enabled.</p>
-<p>To provide a custom provider, you need to implement the <code>org.apache.pulsar.broker.authorization.AuthorizationProvider</code> interface, put this class in the Pulsar broker classpath and configure the class in <code>conf/broker.conf</code>:</p>
+<p>By default, you can use the embedded authorization provider provided by Pulsar. You can also configure a different authorization provider through a plugin. Note that although the Authentication plugin is designed for use in both the proxy and broker, the Authorization plugin is designed only for use on the broker.</p>
+<h3><a class="anchor" aria-hidden="true" id="broker-authorization-plugin"></a><a href="#broker-authorization-plugin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>To provide a custom authorization provider, you need to implement the <code>org.apache.pulsar.broker.authorization.AuthorizationProvider</code> interface, put this class in the Pulsar broker classpath and configure the class in <code>conf/broker.conf</code>:</p>
 <pre><code class="hljs css language-properties"><span class="hljs-comment"># Authorization provider fully qualified class-name</span>
 <span class="hljs-attr">authorizationProvider</span>=<span class="hljs-string">org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider</span>
 </code></pre>
-<pre><code class="hljs css language-java"><span class="hljs-comment">/**
- * Provider of authorization mechanism
- */</span>
-<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">AuthorizationProvider</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Closeable</span> </span>{
-
-    <span class="hljs-comment">/**
-     * Perform initialization for the authorization provider
-     *
-     * <span class="hljs-doctag">@param</span> conf
-     *            broker config object
-     * <span class="hljs-doctag">@param</span> configCache
-     *            pulsar zk configuration cache service
-     * <span class="hljs-doctag">@throws</span> IOException
-     *             if the initialization fails
-     */</span>
-    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">initialize</span><span class="hljs-params">(ServiceConfiguration conf, ConfigurationCacheService configCache)</span> <span class="hljs-keyword">throws</span> IOException</span>;
-
-    <span class="hljs-comment">/**
-     * Check if the specified role has permission to send messages to the specified fully qualified topic name.
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     *            the fully qualified topic name associated with the topic.
-     * <span class="hljs-doctag">@param</span> role
-     *            the app id used to send messages to the topic.
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Boolean&gt; <span class="hljs-title">canProduceAsync</span><span class="hljs-params">(TopicName topicName, String role,
-            AuthenticationDataSource authenticationData)</span></span>;
-
-    <span class="hljs-comment">/**
-     * Check if the specified role has permission to receive messages from the specified fully qualified topic name.
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     *            the fully qualified topic name associated with the topic.
-     * <span class="hljs-doctag">@param</span> role
-     *            the app id used to receive messages from the topic.
-     * <span class="hljs-doctag">@param</span> subscription
-     *            the subscription name defined by the client
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Boolean&gt; <span class="hljs-title">canConsumeAsync</span><span class="hljs-params">(TopicName topicName, String role,
-            AuthenticationDataSource authenticationData, String subscription)</span></span>;
-
-    <span class="hljs-comment">/**
-     * Check whether the specified role can perform a lookup for the specified topic.
-     *
-     * For that the caller needs to have producer or consumer permission.
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     * <span class="hljs-doctag">@param</span> role
-     * <span class="hljs-doctag">@return</span>
-     * <span class="hljs-doctag">@throws</span> Exception
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Boolean&gt; <span class="hljs-title">canLookupAsync</span><span class="hljs-params">(TopicName topicName, String role,
-            AuthenticationDataSource authenticationData)</span></span>;
-
-    <span class="hljs-comment">/**
-     *
-     * Grant authorization-action permission on a namespace to the given client
-     *
-     * <span class="hljs-doctag">@param</span> namespace
-     * <span class="hljs-doctag">@param</span> actions
-     * <span class="hljs-doctag">@param</span> role
-     * <span class="hljs-doctag">@param</span> authDataJson
-     *            additional authdata in json format
-     * <span class="hljs-doctag">@return</span> CompletableFuture
-     * <span class="hljs-doctag">@completesWith</span> &lt;br/&gt;
-     *                IllegalArgumentException when namespace not found&lt;br/&gt;
-     *                IllegalStateException when failed to grant permission
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Void&gt; <span class="hljs-title">grantPermissionAsync</span><span class="hljs-params">(NamespaceName namespace, Set&lt;AuthAction&gt; actions, String role,
-            String authDataJson)</span></span>;
-
-    <span class="hljs-comment">/**
-     * Grant authorization-action permission on a topic to the given client
-     *
-     * <span class="hljs-doctag">@param</span> topicName
-     * <span class="hljs-doctag">@param</span> role
-     * <span class="hljs-doctag">@param</span> authDataJson
-     *            additional authdata in json format
-     * <span class="hljs-doctag">@return</span> CompletableFuture
-     * <span class="hljs-doctag">@completesWith</span> &lt;br/&gt;
-     *                IllegalArgumentException when namespace not found&lt;br/&gt;
-     *                IllegalStateException when failed to grant permission
-     */</span>
-    <span class="hljs-function">CompletableFuture&lt;Void&gt; <span class="hljs-title">grantPermissionAsync</span><span class="hljs-params">(TopicName topicName, Set&lt;AuthAction&gt; actions, String role,
-            String authDataJson)</span></span>;
-
-}
-
-</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-encryption"><span class="arrow-prev">← </span><span>End-to-End Encryption</span></a><a class="docs-next button" href="/docs/en/next/security-bouncy-castle"><span>Bouncy Castle Providers</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication">Authentication</a><ul class="toc-headings"><li><a hre [...]
+<p>For the implementation of the <code>org.apache.pulsar.broker.authorization.AuthorizationProvider</code> interface, refer to <a href="https://github.com/apache/pulsar/blob/master/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/AuthorizationProvider.java">here</a>.</p>
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-encryption"><span class="arrow-prev">← </span><span>End-to-End Encryption</span></a><a class="docs-next button" href="/docs/en/next/security-bouncy-castle"><span>Bouncy Castle Providers</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication">Authentication</a><ul class="toc-headings"><li><a hre [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-jwt.html b/content/docs/en/next/security-jwt.html
index 9ec4c30..87f45b7 100644
--- a/content/docs/en/next/security-jwt.html
+++ b/content/docs/en/next/security-jwt.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-jwt/index.html b/content/docs/en/next/security-jwt/index.html
index 9ec4c30..87f45b7 100644
--- a/content/docs/en/next/security-jwt/index.html
+++ b/content/docs/en/next/security-jwt/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-kerberos.html b/content/docs/en/next/security-kerberos.html
index 66730a0..e47c75c 100644
--- a/content/docs/en/next/security-kerberos.html
+++ b/content/docs/en/next/security-kerberos.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-kerberos/index.html b/content/docs/en/next/security-kerberos/index.html
index 66730a0..e47c75c 100644
--- a/content/docs/en/next/security-kerberos/index.html
+++ b/content/docs/en/next/security-kerberos/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-oauth2.html b/content/docs/en/next/security-oauth2.html
index 707e7d5..e248592 100644
--- a/content/docs/en/next/security-oauth2.html
+++ b/content/docs/en/next/security-oauth2.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -75,14 +75,14 @@
               }
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/security-oauth2.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Client authentication using OAuth 2.0 access tokens</h1></header><article><div><span><p>Pulsar supports authenticating clients using OA [...]
-<p>This module is used to support the Pulsar client authentication plugin for OAuth 2.0. After communicating with the Oauth 2.0 server, the Pulsar client gets an <code>access token</code> from the Oauth 2.0 server, and passes this <code>access token</code> to the Pulsar broker to do the authentication. The broker can use the <code>org.apache.pulsar.broker.authentication.AuthenticationProviderToken</code>. Or, you can add your own <code>AuthenticationProvider</code> to make it with this m [...]
+<p>This module is used to support the <a href="/docs/en/next/security-extending/#client-authentication-plugin">Pulsar client authentication plugin</a> for OAuth 2.0. After communicating with the OAuth 2.0 server, the Pulsar client gets an <code>access token</code> from the OAuth 2.0 server, and passes this <code>access token</code> to the Pulsar broker to do the authentication. The broker can use the <code>org.apache.pulsar.broker.authentication.AuthenticationProviderToken</code>. Or, yo [...]
 <h2><a class="anchor" aria-hidden="true" id="authentication-provider-configuration"></a><a href="#authentication-provider-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
 <p>This library allows you to authenticate the Pulsar client by using an access token that is obtained from an OAuth 2.0 authorization service, which acts as a <em>token issuer</em>.</p>
 <h3><a class="anchor" aria-hidden="true" id="authentication-types"></a><a href="#authentication-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>The authentication type determines how to obtain an access token through an OAuth 2.0 authorization flow.</p>
-<h4><a class="anchor" aria-hidden="true" id="note"></a><a href="#note" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <blockquote>
-<p>Currently, the Pulsar Java client only supports the <code>client_credentials</code> authentication type .</p>
+<p>Note
+Currently, the Pulsar Java client only supports the <code>client_credentials</code> authentication type .</p>
 </blockquote>
 <h4><a class="anchor" aria-hidden="true" id="client-credentials"></a><a href="#client-credentials" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>The following table lists parameters supported for the <code>client credentials</code> authentication type.</p>
@@ -91,7 +91,7 @@
 <tr><th>Parameter</th><th>Description</th><th>Example</th><th>Required or not</th></tr>
 </thead>
 <tbody>
-<tr><td><code>type</code></td><td>Oauth 2.0 authentication type.</td><td><code>client_credentials</code> (default)</td><td>Optional</td></tr>
+<tr><td><code>type</code></td><td>OAuth 2.0 authentication type.</td><td><code>client_credentials</code> (default)</td><td>Optional</td></tr>
 <tr><td><code>issuerUrl</code></td><td>URL of the authentication provider which allows the Pulsar client to obtain an access token</td><td><code>https://accounts.google.com</code></td><td>Required</td></tr>
 <tr><td><code>privateKey</code></td><td>URL to a JSON credentials file</td><td>Support the following pattern formats: <br> <li> <code>file:///path/to/file</code> <li><code>file:/path/to/file</code> <li> <code>data:application/json;base64,&lt;base64-encoded value&gt;</code></td><td>Required</td></tr>
 <tr><td><code>audience</code></td><td>An OAuth 2.0 &quot;resource server&quot; identifier for the Pulsar cluster</td><td><code>https://broker.example.com</code></td><td>Optional</td></tr>
@@ -127,7 +127,7 @@
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="client-configuration"></a><a href="#client-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>You can use the OAuth2 authentication provider with the following Pulsar clients.</p>
-<h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
+<h3><a class="anchor" aria-hidden="true" id="java-client"></a><a href="#java-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
 <p>You can use the factory method to configure authentication for Pulsar Java client.</p>
 <pre><code class="hljs css language-java">URL issuerUrl = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"https://dev-kt-aa9ne.us.auth0.com"</span>);
 URL credentialsUrl = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"file:///path/to/KeyFile.json"</span>);
@@ -148,7 +148,7 @@ PulsarClient client = PulsarClient.builder()
     .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>The C++ client is similar to the Java client. You need to provide parameters of <code>issuerUrl</code>, <code>private_key</code> (the credentials file path), and <code>audience</code>.</p>
+<p>The C++ client is similar to the Java client. You need to provide the parameters of <code>issuerUrl</code>, <code>private_key</code> (the credentials file path), and <code>audience</code>.</p>
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 pulsar::ClientConfiguration <span class="hljs-built_in">config</span>;
@@ -191,6 +191,46 @@ params = <span class="hljs-string">'''
 
 client = Client(<span class="hljs-string">"pulsar://my-cluster:6650"</span>, authentication=AuthenticationOauth2(params))
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="nodejs-client"></a><a href="#nodejs-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>To enable OAuth2 authentication in Node.js client, you need to configure OAuth2 authentication.
+This example shows how to configure OAuth2 authentication in Node.js client.</p>
+<pre><code class="hljs css language-JavaScript">    <span class="hljs-keyword">const</span> Pulsar = <span class="hljs-built_in">require</span>(<span class="hljs-string">'pulsar-client'</span>);
+    <span class="hljs-keyword">const</span> issuer_url = process.env.ISSUER_URL;
+    <span class="hljs-keyword">const</span> private_key = process.env.PRIVATE_KEY;
+    <span class="hljs-keyword">const</span> audience = process.env.AUDIENCE;
+    <span class="hljs-keyword">const</span> scope = process.env.SCOPE;
+    <span class="hljs-keyword">const</span> service_url = process.env.SERVICE_URL;
+    <span class="hljs-keyword">const</span> client_id = process.env.CLIENT_ID;
+    <span class="hljs-keyword">const</span> client_secret = process.env.CLIENT_SECRET;
+    <span class="hljs-function">(<span class="hljs-params"><span class="hljs-keyword">async</span> (</span>) =&gt;</span> {
+      <span class="hljs-keyword">const</span> params = {
+        <span class="hljs-attr">issuer_url</span>: issuer_url
+      }
+      <span class="hljs-keyword">if</span> (private_key.length &gt; <span class="hljs-number">0</span>) {
+        params[<span class="hljs-string">'private_key'</span>] = private_key
+      } <span class="hljs-keyword">else</span> {
+        params[<span class="hljs-string">'client_id'</span>] = client_id
+        params[<span class="hljs-string">'client_secret'</span>] = client_secret
+      }
+      <span class="hljs-keyword">if</span> (audience.length &gt; <span class="hljs-number">0</span>) {
+        params[<span class="hljs-string">'audience'</span>] = audience
+      }
+      <span class="hljs-keyword">if</span> (scope.length &gt; <span class="hljs-number">0</span>) {
+        params[<span class="hljs-string">'scope'</span>] = scope
+      }
+      <span class="hljs-keyword">const</span> auth = <span class="hljs-keyword">new</span> Pulsar.AuthenticationOauth2(params);
+      <span class="hljs-comment">// Create a client</span>
+      <span class="hljs-keyword">const</span> client = <span class="hljs-keyword">new</span> Pulsar.Client({
+        <span class="hljs-attr">serviceUrl</span>: service_url,
+        <span class="hljs-attr">tlsAllowInsecureConnection</span>: <span class="hljs-literal">true</span>,
+        <span class="hljs-attr">authentication</span>: auth,
+      });
+      <span class="hljs-keyword">await</span> client.close();
+    })();
+</code></pre>
+<blockquote>
+<p>Note: The support for OAuth2 authentication is only available in Node.js client 1.6.2 and later versions.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="cli-configuration"></a><a href="#cli-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
 <p>This section describes how to use Pulsar CLI tools to connect a cluster through OAuth2 authentication plugin.</p>
 <h3><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
@@ -227,7 +267,7 @@ Set the <code>privateKey</code>, <code>issuerUrl</code>, and <code>audience</cod
 </code></pre>
 <p>Set the <code>admin-url</code> parameter to the Web service URL. A Web service URLis a combination of the protocol, hostname and port ID, such as <code>pulsar://localhost:6650</code>.
 Set the <code>privateKey</code>, <code>issuerUrl</code>, and <code>audience</code> parameters to the values based on the configuration in the key file. For details, see <a href="#authentication-types">authentication types</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-kerberos"><span class="arrow-prev">← </span><span>Authentication using Kerberos</span></a><a class="docs-next button" href="/docs/en/next/security-authorization"><span>Authorization and ACLs</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication-provider-configuration">Authentication provider c [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-kerberos"><span class="arrow-prev">← </span><span>Authentication using Kerberos</span></a><a class="docs-next button" href="/docs/en/next/security-authorization"><span>Authorization and ACLs</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication-provider-configuration">Authentication provider c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-oauth2/index.html b/content/docs/en/next/security-oauth2/index.html
index 707e7d5..e248592 100644
--- a/content/docs/en/next/security-oauth2/index.html
+++ b/content/docs/en/next/security-oauth2/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -75,14 +75,14 @@
               }
             });
         </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/pulsar/edit/master/site2/docs/security-oauth2.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Client authentication using OAuth 2.0 access tokens</h1></header><article><div><span><p>Pulsar supports authenticating clients using OA [...]
-<p>This module is used to support the Pulsar client authentication plugin for OAuth 2.0. After communicating with the Oauth 2.0 server, the Pulsar client gets an <code>access token</code> from the Oauth 2.0 server, and passes this <code>access token</code> to the Pulsar broker to do the authentication. The broker can use the <code>org.apache.pulsar.broker.authentication.AuthenticationProviderToken</code>. Or, you can add your own <code>AuthenticationProvider</code> to make it with this m [...]
+<p>This module is used to support the <a href="/docs/en/next/security-extending/#client-authentication-plugin">Pulsar client authentication plugin</a> for OAuth 2.0. After communicating with the OAuth 2.0 server, the Pulsar client gets an <code>access token</code> from the OAuth 2.0 server, and passes this <code>access token</code> to the Pulsar broker to do the authentication. The broker can use the <code>org.apache.pulsar.broker.authentication.AuthenticationProviderToken</code>. Or, yo [...]
 <h2><a class="anchor" aria-hidden="true" id="authentication-provider-configuration"></a><a href="#authentication-provider-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 [...]
 <p>This library allows you to authenticate the Pulsar client by using an access token that is obtained from an OAuth 2.0 authorization service, which acts as a <em>token issuer</em>.</p>
 <h3><a class="anchor" aria-hidden="true" id="authentication-types"></a><a href="#authentication-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>The authentication type determines how to obtain an access token through an OAuth 2.0 authorization flow.</p>
-<h4><a class="anchor" aria-hidden="true" id="note"></a><a href="#note" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
 <blockquote>
-<p>Currently, the Pulsar Java client only supports the <code>client_credentials</code> authentication type .</p>
+<p>Note
+Currently, the Pulsar Java client only supports the <code>client_credentials</code> authentication type .</p>
 </blockquote>
 <h4><a class="anchor" aria-hidden="true" id="client-credentials"></a><a href="#client-credentials" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
 <p>The following table lists parameters supported for the <code>client credentials</code> authentication type.</p>
@@ -91,7 +91,7 @@
 <tr><th>Parameter</th><th>Description</th><th>Example</th><th>Required or not</th></tr>
 </thead>
 <tbody>
-<tr><td><code>type</code></td><td>Oauth 2.0 authentication type.</td><td><code>client_credentials</code> (default)</td><td>Optional</td></tr>
+<tr><td><code>type</code></td><td>OAuth 2.0 authentication type.</td><td><code>client_credentials</code> (default)</td><td>Optional</td></tr>
 <tr><td><code>issuerUrl</code></td><td>URL of the authentication provider which allows the Pulsar client to obtain an access token</td><td><code>https://accounts.google.com</code></td><td>Required</td></tr>
 <tr><td><code>privateKey</code></td><td>URL to a JSON credentials file</td><td>Support the following pattern formats: <br> <li> <code>file:///path/to/file</code> <li><code>file:/path/to/file</code> <li> <code>data:application/json;base64,&lt;base64-encoded value&gt;</code></td><td>Required</td></tr>
 <tr><td><code>audience</code></td><td>An OAuth 2.0 &quot;resource server&quot; identifier for the Pulsar cluster</td><td><code>https://broker.example.com</code></td><td>Optional</td></tr>
@@ -127,7 +127,7 @@
 </ul>
 <h2><a class="anchor" aria-hidden="true" id="client-configuration"></a><a href="#client-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
 <p>You can use the OAuth2 authentication provider with the following Pulsar clients.</p>
-<h3><a class="anchor" aria-hidden="true" id="java"></a><a href="#java" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
+<h3><a class="anchor" aria-hidden="true" id="java-client"></a><a href="#java-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
 <p>You can use the factory method to configure authentication for Pulsar Java client.</p>
 <pre><code class="hljs css language-java">URL issuerUrl = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"https://dev-kt-aa9ne.us.auth0.com"</span>);
 URL credentialsUrl = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"file:///path/to/KeyFile.json"</span>);
@@ -148,7 +148,7 @@ PulsarClient client = PulsarClient.builder()
     .build();
 </code></pre>
 <h3><a class="anchor" aria-hidden="true" id="c-client"></a><a href="#c-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
-<p>The C++ client is similar to the Java client. You need to provide parameters of <code>issuerUrl</code>, <code>private_key</code> (the credentials file path), and <code>audience</code>.</p>
+<p>The C++ client is similar to the Java client. You need to provide the parameters of <code>issuerUrl</code>, <code>private_key</code> (the credentials file path), and <code>audience</code>.</p>
 <pre><code class="hljs css language-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;pulsar/Client.h&gt;</span></span>
 
 pulsar::ClientConfiguration <span class="hljs-built_in">config</span>;
@@ -191,6 +191,46 @@ params = <span class="hljs-string">'''
 
 client = Client(<span class="hljs-string">"pulsar://my-cluster:6650"</span>, authentication=AuthenticationOauth2(params))
 </code></pre>
+<h3><a class="anchor" aria-hidden="true" id="nodejs-client"></a><a href="#nodejs-client" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>To enable OAuth2 authentication in Node.js client, you need to configure OAuth2 authentication.
+This example shows how to configure OAuth2 authentication in Node.js client.</p>
+<pre><code class="hljs css language-JavaScript">    <span class="hljs-keyword">const</span> Pulsar = <span class="hljs-built_in">require</span>(<span class="hljs-string">'pulsar-client'</span>);
+    <span class="hljs-keyword">const</span> issuer_url = process.env.ISSUER_URL;
+    <span class="hljs-keyword">const</span> private_key = process.env.PRIVATE_KEY;
+    <span class="hljs-keyword">const</span> audience = process.env.AUDIENCE;
+    <span class="hljs-keyword">const</span> scope = process.env.SCOPE;
+    <span class="hljs-keyword">const</span> service_url = process.env.SERVICE_URL;
+    <span class="hljs-keyword">const</span> client_id = process.env.CLIENT_ID;
+    <span class="hljs-keyword">const</span> client_secret = process.env.CLIENT_SECRET;
+    <span class="hljs-function">(<span class="hljs-params"><span class="hljs-keyword">async</span> (</span>) =&gt;</span> {
+      <span class="hljs-keyword">const</span> params = {
+        <span class="hljs-attr">issuer_url</span>: issuer_url
+      }
+      <span class="hljs-keyword">if</span> (private_key.length &gt; <span class="hljs-number">0</span>) {
+        params[<span class="hljs-string">'private_key'</span>] = private_key
+      } <span class="hljs-keyword">else</span> {
+        params[<span class="hljs-string">'client_id'</span>] = client_id
+        params[<span class="hljs-string">'client_secret'</span>] = client_secret
+      }
+      <span class="hljs-keyword">if</span> (audience.length &gt; <span class="hljs-number">0</span>) {
+        params[<span class="hljs-string">'audience'</span>] = audience
+      }
+      <span class="hljs-keyword">if</span> (scope.length &gt; <span class="hljs-number">0</span>) {
+        params[<span class="hljs-string">'scope'</span>] = scope
+      }
+      <span class="hljs-keyword">const</span> auth = <span class="hljs-keyword">new</span> Pulsar.AuthenticationOauth2(params);
+      <span class="hljs-comment">// Create a client</span>
+      <span class="hljs-keyword">const</span> client = <span class="hljs-keyword">new</span> Pulsar.Client({
+        <span class="hljs-attr">serviceUrl</span>: service_url,
+        <span class="hljs-attr">tlsAllowInsecureConnection</span>: <span class="hljs-literal">true</span>,
+        <span class="hljs-attr">authentication</span>: auth,
+      });
+      <span class="hljs-keyword">await</span> client.close();
+    })();
+</code></pre>
+<blockquote>
+<p>Note: The support for OAuth2 authentication is only available in Node.js client 1.6.2 and later versions.</p>
+</blockquote>
 <h2><a class="anchor" aria-hidden="true" id="cli-configuration"></a><a href="#cli-configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
 <p>This section describes how to use Pulsar CLI tools to connect a cluster through OAuth2 authentication plugin.</p>
 <h3><a class="anchor" aria-hidden="true" id="pulsar-admin"></a><a href="#pulsar-admin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
@@ -227,7 +267,7 @@ Set the <code>privateKey</code>, <code>issuerUrl</code>, and <code>audience</cod
 </code></pre>
 <p>Set the <code>admin-url</code> parameter to the Web service URL. A Web service URLis a combination of the protocol, hostname and port ID, such as <code>pulsar://localhost:6650</code>.
 Set the <code>privateKey</code>, <code>issuerUrl</code>, and <code>audience</code> parameters to the values based on the configuration in the key file. For details, see <a href="#authentication-types">authentication types</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-kerberos"><span class="arrow-prev">← </span><span>Authentication using Kerberos</span></a><a class="docs-next button" href="/docs/en/next/security-authorization"><span>Authorization and ACLs</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication-provider-configuration">Authentication provider c [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/security-kerberos"><span class="arrow-prev">← </span><span>Authentication using Kerberos</span></a><a class="docs-next button" href="/docs/en/next/security-authorization"><span>Authorization and ACLs</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#authentication-provider-configuration">Authentication provider c [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/next/security-overview.html b/content/docs/en/next/security-overview.html
index bf545cd..79c01d9 100644
--- a/content/docs/en/next/security-overview.html
+++ b/content/docs/en/next/security-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -86,10 +86,12 @@
 <h2><a class="anchor" aria-hidden="true" id="authentication-providers"></a><a href="#authentication-providers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Currently Pulsar supports the following authentication providers:</p>
 <ul>
-<li><a href="/docs/en/next/security-tls-authentication">TLS Authentication</a></li>
-<li><a href="/docs/en/next/security-athenz">Athenz</a></li>
-<li><a href="/docs/en/next/security-kerberos">Kerberos</a></li>
-<li><a href="/docs/en/next/security-jwt">JSON Web Token Authentication</a></li>
+<li><a href="/docs/en/next/security-tls-authentication">TLS authentication</a></li>
+<li><a href="/docs/en/next/security-athenz">Athenz authentication</a></li>
+<li><a href="/docs/en/next/security-kerberos">Kerberos authentication</a></li>
+<li><a href="/docs/en/next/security-jwt">JSON Web Token (JWT) authentication</a></li>
+<li><a href="/docs/en/next/security-oauth2">OAuth 2.0 authentication</a></li>
+<li>Basic authentication</li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/en/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/en/next/security-overview/index.html b/content/docs/en/next/security-overview/index.html
index bf545cd..79c01d9 100644
--- a/content/docs/en/next/security-overview/index.html
+++ b/content/docs/en/next/security-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
@@ -86,10 +86,12 @@
 <h2><a class="anchor" aria-hidden="true" id="authentication-providers"></a><a href="#authentication-providers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
 <p>Currently Pulsar supports the following authentication providers:</p>
 <ul>
-<li><a href="/docs/en/next/security-tls-authentication">TLS Authentication</a></li>
-<li><a href="/docs/en/next/security-athenz">Athenz</a></li>
-<li><a href="/docs/en/next/security-kerberos">Kerberos</a></li>
-<li><a href="/docs/en/next/security-jwt">JSON Web Token Authentication</a></li>
+<li><a href="/docs/en/next/security-tls-authentication">TLS authentication</a></li>
+<li><a href="/docs/en/next/security-athenz">Athenz authentication</a></li>
+<li><a href="/docs/en/next/security-kerberos">Kerberos authentication</a></li>
+<li><a href="/docs/en/next/security-jwt">JSON Web Token (JWT) authentication</a></li>
+<li><a href="/docs/en/next/security-oauth2">OAuth 2.0 authentication</a></li>
+<li>Basic authentication</li>
 </ul>
 </span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/administration-isolation"><span class="arrow-prev">← </span><span>Pulsar isolation</span></a><a class="docs-next button" href="/docs/en/next/security-policy-and-supported-versions"><span>Security Policy and Supported Versions</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#role-tokens">Role tokens</a></li><li>< [...]
       const community = document.querySelector("a[href='#community']").parentNode;
diff --git a/content/docs/en/next/security-policy-and-supported-versions.html b/content/docs/en/next/security-policy-and-supported-versions.html
index d40b150..89b37e5 100644
--- a/content/docs/en/next/security-policy-and-supported-versions.html
+++ b/content/docs/en/next/security-policy-and-supported-versions.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-policy-and-supported-versions/index.html b/content/docs/en/next/security-policy-and-supported-versions/index.html
index d40b150..89b37e5 100644
--- a/content/docs/en/next/security-policy-and-supported-versions/index.html
+++ b/content/docs/en/next/security-policy-and-supported-versions/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-tls-authentication.html b/content/docs/en/next/security-tls-authentication.html
index 171135c..f4fcf8e 100644
--- a/content/docs/en/next/security-tls-authentication.html
+++ b/content/docs/en/next/security-tls-authentication.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-tls-authentication/index.html b/content/docs/en/next/security-tls-authentication/index.html
index 171135c..f4fcf8e 100644
--- a/content/docs/en/next/security-tls-authentication/index.html
+++ b/content/docs/en/next/security-tls-authentication/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-tls-keystore.html b/content/docs/en/next/security-tls-keystore.html
index b2f2cb1..5a8afb9f 100644
--- a/content/docs/en/next/security-tls-keystore.html
+++ b/content/docs/en/next/security-tls-keystore.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-tls-keystore/index.html b/content/docs/en/next/security-tls-keystore/index.html
index b2f2cb1..5a8afb9f 100644
--- a/content/docs/en/next/security-tls-keystore/index.html
+++ b/content/docs/en/next/security-tls-keystore/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-tls-transport.html b/content/docs/en/next/security-tls-transport.html
index 2c3a07c..033f25e 100644
--- a/content/docs/en/next/security-tls-transport.html
+++ b/content/docs/en/next/security-tls-transport.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/security-tls-transport/index.html b/content/docs/en/next/security-tls-transport/index.html
index 2c3a07c..033f25e 100644
--- a/content/docs/en/next/security-tls-transport/index.html
+++ b/content/docs/en/next/security-tls-transport/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-deployment-configurations.html b/content/docs/en/next/sql-deployment-configurations.html
index 5c53d20..f0c6b74 100644
--- a/content/docs/en/next/sql-deployment-configurations.html
+++ b/content/docs/en/next/sql-deployment-configurations.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-deployment-configurations/index.html b/content/docs/en/next/sql-deployment-configurations/index.html
index 5c53d20..f0c6b74 100644
--- a/content/docs/en/next/sql-deployment-configurations/index.html
+++ b/content/docs/en/next/sql-deployment-configurations/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-getting-started.html b/content/docs/en/next/sql-getting-started.html
index e0e89d9..f8fe323 100644
--- a/content/docs/en/next/sql-getting-started.html
+++ b/content/docs/en/next/sql-getting-started.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-getting-started/index.html b/content/docs/en/next/sql-getting-started/index.html
index e0e89d9..f8fe323 100644
--- a/content/docs/en/next/sql-getting-started/index.html
+++ b/content/docs/en/next/sql-getting-started/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-overview.html b/content/docs/en/next/sql-overview.html
index b2aca09..7abe1e6 100644
--- a/content/docs/en/next/sql-overview.html
+++ b/content/docs/en/next/sql-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-overview/index.html b/content/docs/en/next/sql-overview/index.html
index b2aca09..7abe1e6 100644
--- a/content/docs/en/next/sql-overview/index.html
+++ b/content/docs/en/next/sql-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-rest-api.html b/content/docs/en/next/sql-rest-api.html
index 82c8e80..3f03d38 100644
--- a/content/docs/en/next/sql-rest-api.html
+++ b/content/docs/en/next/sql-rest-api.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/sql-rest-api/index.html b/content/docs/en/next/sql-rest-api/index.html
index 82c8e80..3f03d38 100644
--- a/content/docs/en/next/sql-rest-api/index.html
+++ b/content/docs/en/next/sql-rest-api/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/standalone-docker.html b/content/docs/en/next/standalone-docker.html
index 35c1cb9..ac1164c 100644
--- a/content/docs/en/next/standalone-docker.html
+++ b/content/docs/en/next/standalone-docker.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/standalone-docker/index.html b/content/docs/en/next/standalone-docker/index.html
index 35c1cb9..ac1164c 100644
--- a/content/docs/en/next/standalone-docker/index.html
+++ b/content/docs/en/next/standalone-docker/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/standalone.html b/content/docs/en/next/standalone.html
index 4419c93..39ee355 100644
--- a/content/docs/en/next/standalone.html
+++ b/content/docs/en/next/standalone.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/standalone/index.html b/content/docs/en/next/standalone/index.html
index 4419c93..39ee355 100644
--- a/content/docs/en/next/standalone/index.html
+++ b/content/docs/en/next/standalone/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-aliyun.html b/content/docs/en/next/tiered-storage-aliyun.html
index df121ed..2ce2edb 100644
--- a/content/docs/en/next/tiered-storage-aliyun.html
+++ b/content/docs/en/next/tiered-storage-aliyun.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-aliyun/index.html b/content/docs/en/next/tiered-storage-aliyun/index.html
index df121ed..2ce2edb 100644
--- a/content/docs/en/next/tiered-storage-aliyun/index.html
+++ b/content/docs/en/next/tiered-storage-aliyun/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-aws.html b/content/docs/en/next/tiered-storage-aws.html
index abeed50..3ac6d6f 100644
--- a/content/docs/en/next/tiered-storage-aws.html
+++ b/content/docs/en/next/tiered-storage-aws.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-aws/index.html b/content/docs/en/next/tiered-storage-aws/index.html
index abeed50..3ac6d6f 100644
--- a/content/docs/en/next/tiered-storage-aws/index.html
+++ b/content/docs/en/next/tiered-storage-aws/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-azure.html b/content/docs/en/next/tiered-storage-azure.html
index c0803ee..d6498d1 100644
--- a/content/docs/en/next/tiered-storage-azure.html
+++ b/content/docs/en/next/tiered-storage-azure.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-azure/index.html b/content/docs/en/next/tiered-storage-azure/index.html
index c0803ee..d6498d1 100644
--- a/content/docs/en/next/tiered-storage-azure/index.html
+++ b/content/docs/en/next/tiered-storage-azure/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-filesystem.html b/content/docs/en/next/tiered-storage-filesystem.html
index 0c6346d..7d0fee1 100644
--- a/content/docs/en/next/tiered-storage-filesystem.html
+++ b/content/docs/en/next/tiered-storage-filesystem.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-filesystem/index.html b/content/docs/en/next/tiered-storage-filesystem/index.html
index 0c6346d..7d0fee1 100644
--- a/content/docs/en/next/tiered-storage-filesystem/index.html
+++ b/content/docs/en/next/tiered-storage-filesystem/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-gcs.html b/content/docs/en/next/tiered-storage-gcs.html
index 81ec7d8..f653a6e 100644
--- a/content/docs/en/next/tiered-storage-gcs.html
+++ b/content/docs/en/next/tiered-storage-gcs.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-gcs/index.html b/content/docs/en/next/tiered-storage-gcs/index.html
index 81ec7d8..f653a6e 100644
--- a/content/docs/en/next/tiered-storage-gcs/index.html
+++ b/content/docs/en/next/tiered-storage-gcs/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-overview.html b/content/docs/en/next/tiered-storage-overview.html
index 327c77c..7bb1050 100644
--- a/content/docs/en/next/tiered-storage-overview.html
+++ b/content/docs/en/next/tiered-storage-overview.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/tiered-storage-overview/index.html b/content/docs/en/next/tiered-storage-overview/index.html
index 327c77c..7bb1050 100644
--- a/content/docs/en/next/tiered-storage-overview/index.html
+++ b/content/docs/en/next/tiered-storage-overview/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-how.html b/content/docs/en/next/txn-how.html
index 64e6565..592bf45 100644
--- a/content/docs/en/next/txn-how.html
+++ b/content/docs/en/next/txn-how.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-how/index.html b/content/docs/en/next/txn-how/index.html
index 64e6565..592bf45 100644
--- a/content/docs/en/next/txn-how/index.html
+++ b/content/docs/en/next/txn-how/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-monitor.html b/content/docs/en/next/txn-monitor.html
index 6efa893..561f7d2 100644
--- a/content/docs/en/next/txn-monitor.html
+++ b/content/docs/en/next/txn-monitor.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-monitor/index.html b/content/docs/en/next/txn-monitor/index.html
index 6efa893..561f7d2 100644
--- a/content/docs/en/next/txn-monitor/index.html
+++ b/content/docs/en/next/txn-monitor/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-use.html b/content/docs/en/next/txn-use.html
index 98e4bff..f9d5345 100644
--- a/content/docs/en/next/txn-use.html
+++ b/content/docs/en/next/txn-use.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-use/index.html b/content/docs/en/next/txn-use/index.html
index 98e4bff..f9d5345 100644
--- a/content/docs/en/next/txn-use/index.html
+++ b/content/docs/en/next/txn-use/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-what.html b/content/docs/en/next/txn-what.html
index 0fd4141..ae77c00 100644
--- a/content/docs/en/next/txn-what.html
+++ b/content/docs/en/next/txn-what.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-what/index.html b/content/docs/en/next/txn-what/index.html
index 0fd4141..ae77c00 100644
--- a/content/docs/en/next/txn-what/index.html
+++ b/content/docs/en/next/txn-what/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-why.html b/content/docs/en/next/txn-why.html
index cb9eb50..bea3c08 100644
--- a/content/docs/en/next/txn-why.html
+++ b/content/docs/en/next/txn-why.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/txn-why/index.html b/content/docs/en/next/txn-why/index.html
index cb9eb50..bea3c08 100644
--- a/content/docs/en/next/txn-why/index.html
+++ b/content/docs/en/next/txn-why/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/window-functions-context.html b/content/docs/en/next/window-functions-context.html
index 06603c7..5c94120 100644
--- a/content/docs/en/next/window-functions-context.html
+++ b/content/docs/en/next/window-functions-context.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/next/window-functions-context/index.html b/content/docs/en/next/window-functions-context/index.html
index 06603c7..5c94120 100644
--- a/content/docs/en/next/window-functions-context/index.html
+++ b/content/docs/en/next/window-functions-context/index.html
@@ -18,7 +18,7 @@
             languagesDropDown.className = "hide";
           }
         });
-      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
+      </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line [...]
             var coll = document.getElementsByClassName('collapsible');
             var checkActiveCategory = true;
             for (var i = 0; i < coll.length; i++) {
diff --git a/content/docs/en/security-bouncy-castle.html b/content/docs/en/security-bouncy-castle.html
index afe4730..5e25c3d 100644
--- a/content/docs/en/security-bouncy-castle.html
+++ b/content/docs/en/security-bouncy-castle.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modules-packaged- [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how- [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/security-bouncy-castle/index.html b/content/docs/en/security-bouncy-castle/index.html
index afe4730..5e25c3d 100644
--- a/content/docs/en/security-bouncy-castle/index.html
+++ b/content/docs/en/security-bouncy-castle/index.html
@@ -175,7 +175,7 @@ Similar to <code>bouncy-castle-bc</code>, <code>bouncy-castle-bcfips</code> also
   <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
 </code></pre>
 <p>For more example, you can reference module <code>bcfips-include-test</code>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-extending"><span class="arrow-prev">← </span><span>Extending</span></a><a class="docs-next button" href="/docs/en/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how-bouncycastle-modules-packaged- [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-extending"><span class="arrow-prev">← </span><span>Extend Authentication and Authorization</span></a><a class="docs-next button" href="/docs/en/performance-pulsar-perf"><span>Pulsar Perf</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bouncycastle-introduce">BouncyCastle Introduce</a></li><li><a href="#how- [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/security-encryption.html b/content/docs/en/security-encryption.html
index 9bd3239..a144d2e 100644
--- a/content/docs/en/security-encryption.html
+++ b/content/docs/en/security-encryption.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li><li><a href= [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric e [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/docs/en/security-encryption/index.html b/content/docs/en/security-encryption/index.html
index 9bd3239..a144d2e 100644
--- a/content/docs/en/security-encryption/index.html
+++ b/content/docs/en/security-encryption/index.html
@@ -233,7 +233,7 @@ pulsarClient.close();
 </ul></li>
 <li>If decryption fails, the message consumption stops and application notices backlog growth in addition to decryption failure messages in the client log. If application does not have access to the private key to decrypt the message, the only option is to skip or discard backlogged messages.</li>
 </ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/security-extending"><span>Extending</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric encryption</a></li><li><a href= [...]
+</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/security-authorization"><span class="arrow-prev">← </span><span>Authorization and ACLs</span></a><a class="docs-next button" href="/docs/en/security-extending"><span>Extend Authentication and Authorization</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#asymmetric-and-symmetric-encryption">Asymmetric and symmetric e [...]
       const community = document.querySelector("a[href='#community']").parentNode;
       const communityMenu =
         '<li>' +
diff --git a/content/swagger/2.10.0-SNAPSHOT/swagger.json b/content/swagger/2.10.0-SNAPSHOT/swagger.json
index ce5ac5d..21f6c88 100644
--- a/content/swagger/2.10.0-SNAPSHOT/swagger.json
+++ b/content/swagger/2.10.0-SNAPSHOT/swagger.json
@@ -21254,6 +21254,9 @@
     "AuthenticationDataSource" : {
       "type" : "object",
       "properties" : {
+        "subscription" : {
+          "type" : "string"
+        },
         "peerAddress" : {
           "$ref" : "#/definitions/SocketAddress"
         },
@@ -21268,9 +21271,6 @@
         },
         "commandData" : {
           "type" : "string"
-        },
-        "subscription" : {
-          "type" : "string"
         }
       }
     },
@@ -21319,10 +21319,6 @@
           "type" : "string",
           "enum" : [ "producer_request_hold", "producer_exception", "consumer_backlog_eviction" ]
         },
-        "limit" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
         "limitSize" : {
           "type" : "integer",
           "format" : "int64"
@@ -21330,6 +21326,10 @@
         "limitTime" : {
           "type" : "integer",
           "format" : "int32"
+        },
+        "limit" : {
+          "type" : "integer",
+          "format" : "int64"
         }
       }
     },
@@ -21607,15 +21607,15 @@
     "CompletableFuture" : {
       "type" : "object",
       "properties" : {
-        "cancelled" : {
-          "type" : "boolean"
+        "numberOfDependents" : {
+          "type" : "integer",
+          "format" : "int32"
         },
         "done" : {
           "type" : "boolean"
         },
-        "numberOfDependents" : {
-          "type" : "integer",
-          "format" : "int32"
+        "cancelled" : {
+          "type" : "boolean"
         },
         "completedExceptionally" : {
           "type" : "boolean"
@@ -21625,15 +21625,15 @@
     "CompletableFutureClusterData" : {
       "type" : "object",
       "properties" : {
-        "cancelled" : {
-          "type" : "boolean"
+        "numberOfDependents" : {
+          "type" : "integer",
+          "format" : "int32"
         },
         "done" : {
           "type" : "boolean"
         },
-        "numberOfDependents" : {
-          "type" : "integer",
-          "format" : "int32"
+        "cancelled" : {
+          "type" : "boolean"
         },
         "completedExceptionally" : {
           "type" : "boolean"
@@ -21643,15 +21643,15 @@
     "CompletableFuturePartitionedTopicMetadata" : {
       "type" : "object",
       "properties" : {
-        "cancelled" : {
-          "type" : "boolean"
+        "numberOfDependents" : {
+          "type" : "integer",
+          "format" : "int32"
         },
         "done" : {
           "type" : "boolean"
         },
-        "numberOfDependents" : {
-          "type" : "integer",
-          "format" : "int32"
+        "cancelled" : {
+          "type" : "boolean"
         },
         "completedExceptionally" : {
           "type" : "boolean"
@@ -21661,15 +21661,15 @@
     "CompletableFutureVoid" : {
       "type" : "object",
       "properties" : {
-        "cancelled" : {
-          "type" : "boolean"
+        "numberOfDependents" : {
+          "type" : "integer",
+          "format" : "int32"
         },
         "done" : {
           "type" : "boolean"
         },
-        "numberOfDependents" : {
-          "type" : "integer",
-          "format" : "int32"
+        "cancelled" : {
+          "type" : "boolean"
         },
         "completedExceptionally" : {
           "type" : "boolean"
@@ -21711,30 +21711,20 @@
             "type" : "string"
           }
         },
-        "msgRateOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
+        "chunkedMessageRate" : {
           "type" : "number",
           "format" : "double"
         },
-        "bytesOutCounter" : {
-          "type" : "integer",
-          "format" : "int64"
+        "connectedSince" : {
+          "type" : "string"
         },
-        "msgOutCounter" : {
-          "type" : "integer",
-          "format" : "int64"
+        "clientVersion" : {
+          "type" : "string"
         },
         "msgRateRedeliver" : {
           "type" : "number",
           "format" : "double"
         },
-        "chunkedMessageRate" : {
-          "type" : "number",
-          "format" : "double"
-        },
         "unackedMessages" : {
           "type" : "integer",
           "format" : "int32"
@@ -21747,9 +21737,13 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "clientVersion" : {
+        "consumerName" : {
           "type" : "string"
         },
+        "availablePermits" : {
+          "type" : "integer",
+          "format" : "int32"
+        },
         "avgMessagesPerEntry" : {
           "type" : "integer",
           "format" : "int32"
@@ -21766,15 +21760,21 @@
             "type" : "string"
           }
         },
-        "consumerName" : {
-          "type" : "string"
-        },
-        "connectedSince" : {
-          "type" : "string"
+        "bytesOutCounter" : {
+          "type" : "integer",
+          "format" : "int64"
         },
-        "availablePermits" : {
+        "msgOutCounter" : {
           "type" : "integer",
-          "format" : "int32"
+          "format" : "int64"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateOut" : {
+          "type" : "number",
+          "format" : "double"
         }
       }
     },
@@ -21795,13 +21795,13 @@
           "type" : "integer",
           "format" : "int32"
         },
-        "symbol" : {
+        "displayName" : {
           "type" : "string"
         },
         "numericCodeAsString" : {
           "type" : "string"
         },
-        "displayName" : {
+        "symbol" : {
           "type" : "string"
         }
       }
@@ -21889,11 +21889,11 @@
         "numberFormat" : {
           "$ref" : "#/definitions/NumberFormat"
         },
-        "timeZone" : {
-          "$ref" : "#/definitions/TimeZone"
-        },
         "lenient" : {
           "type" : "boolean"
+        },
+        "timeZone" : {
+          "$ref" : "#/definitions/TimeZone"
         }
       }
     },
@@ -21921,15 +21921,15 @@
     "DeserializationConfig" : {
       "type" : "object",
       "properties" : {
+        "nodeFactory" : {
+          "$ref" : "#/definitions/JsonNodeFactory"
+        },
         "annotationIntrospector" : {
           "$ref" : "#/definitions/AnnotationIntrospector"
         },
         "defaultPropertyInclusion" : {
           "$ref" : "#/definitions/Value"
         },
-        "nodeFactory" : {
-          "$ref" : "#/definitions/JsonNodeFactory"
-        },
         "deserializationFeatures" : {
           "type" : "integer",
           "format" : "int32"
@@ -21940,15 +21940,15 @@
         "attributes" : {
           "$ref" : "#/definitions/ContextAttributes"
         },
+        "subtypeResolver" : {
+          "$ref" : "#/definitions/SubtypeResolver"
+        },
         "rootName" : {
           "type" : "string"
         },
         "fullRootName" : {
           "$ref" : "#/definitions/PropertyName"
         },
-        "subtypeResolver" : {
-          "$ref" : "#/definitions/SubtypeResolver"
-        },
         "defaultVisibilityChecker" : {
           "$ref" : "#/definitions/VisibilityCheckerObject"
         },
@@ -21958,18 +21958,18 @@
         "locale" : {
           "$ref" : "#/definitions/Locale"
         },
-        "typeFactory" : {
-          "$ref" : "#/definitions/TypeFactory"
-        },
-        "handlerInstantiator" : {
-          "$ref" : "#/definitions/HandlerInstantiator"
-        },
         "propertyNamingStrategy" : {
           "$ref" : "#/definitions/PropertyNamingStrategy"
         },
         "dateFormat" : {
           "$ref" : "#/definitions/DateFormat"
         },
+        "typeFactory" : {
+          "$ref" : "#/definitions/TypeFactory"
+        },
+        "handlerInstantiator" : {
+          "$ref" : "#/definitions/HandlerInstantiator"
+        },
         "base64Variant" : {
           "$ref" : "#/definitions/Base64Variant"
         },
@@ -21999,15 +21999,15 @@
         "parser" : {
           "$ref" : "#/definitions/JsonParser"
         },
+        "nodeFactory" : {
+          "$ref" : "#/definitions/JsonNodeFactory"
+        },
         "typeFactory" : {
           "$ref" : "#/definitions/TypeFactory"
         },
         "annotationIntrospector" : {
           "$ref" : "#/definitions/AnnotationIntrospector"
         },
-        "nodeFactory" : {
-          "$ref" : "#/definitions/JsonNodeFactory"
-        },
         "contextualType" : {
           "$ref" : "#/definitions/JavaType"
         },
@@ -22101,13 +22101,6 @@
     "FunctionInstanceStatsData" : {
       "type" : "object",
       "properties" : {
-        "userMetrics" : {
-          "type" : "object",
-          "additionalProperties" : {
-            "type" : "number",
-            "format" : "double"
-          }
-        },
         "oneMin" : {
           "$ref" : "#/definitions/FunctionInstanceStatsDataBase"
         },
@@ -22115,15 +22108,18 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "receivedTotal" : {
-          "type" : "integer",
-          "format" : "int64"
+        "userMetrics" : {
+          "type" : "object",
+          "additionalProperties" : {
+            "type" : "number",
+            "format" : "double"
+          }
         },
-        "processedSuccessfullyTotal" : {
+        "systemExceptionsTotal" : {
           "type" : "integer",
           "format" : "int64"
         },
-        "systemExceptionsTotal" : {
+        "processedSuccessfullyTotal" : {
           "type" : "integer",
           "format" : "int64"
         },
@@ -22134,13 +22130,17 @@
         "avgProcessLatency" : {
           "type" : "number",
           "format" : "double"
+        },
+        "receivedTotal" : {
+          "type" : "integer",
+          "format" : "int64"
         }
       }
     },
     "FunctionInstanceStatsDataBase" : {
       "type" : "object",
       "properties" : {
-        "receivedTotal" : {
+        "systemExceptionsTotal" : {
           "type" : "integer",
           "format" : "int64"
         },
@@ -22148,10 +22148,6 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "systemExceptionsTotal" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
         "userExceptionsTotal" : {
           "type" : "integer",
           "format" : "int64"
@@ -22159,6 +22155,10 @@
         "avgProcessLatency" : {
           "type" : "number",
           "format" : "double"
+        },
+        "receivedTotal" : {
+          "type" : "integer",
+          "format" : "int64"
         }
       }
     },
@@ -22362,9 +22362,6 @@
         "referencedType" : {
           "$ref" : "#/definitions/JavaType"
         },
-        "superClass" : {
-          "$ref" : "#/definitions/JavaType"
-        },
         "contentValueHandler" : {
           "type" : "object"
         },
@@ -22377,6 +22374,9 @@
         "collectionLikeType" : {
           "type" : "boolean"
         },
+        "superClass" : {
+          "$ref" : "#/definitions/JavaType"
+        },
         "mapLikeType" : {
           "type" : "boolean"
         },
@@ -22391,9 +22391,6 @@
     "JsonFactory" : {
       "type" : "object",
       "properties" : {
-        "rootValueSeparator" : {
-          "type" : "string"
-        },
         "codec" : {
           "$ref" : "#/definitions/ObjectCodec"
         },
@@ -22408,6 +22405,9 @@
         },
         "outputDecorator" : {
           "$ref" : "#/definitions/OutputDecorator"
+        },
+        "rootValueSeparator" : {
+          "type" : "string"
         }
       }
     },
@@ -22429,14 +22429,6 @@
         "characterEscapes" : {
           "$ref" : "#/definitions/CharacterEscapes"
         },
-        "featureMask" : {
-          "type" : "integer",
-          "format" : "int32"
-        },
-        "formatFeatures" : {
-          "type" : "integer",
-          "format" : "int32"
-        },
         "highestEscapedChar" : {
           "type" : "integer",
           "format" : "int32"
@@ -22453,6 +22445,14 @@
         },
         "currentValue" : {
           "type" : "object"
+        },
+        "featureMask" : {
+          "type" : "integer",
+          "format" : "int32"
+        },
+        "formatFeatures" : {
+          "type" : "integer",
+          "format" : "int32"
         }
       }
     },
@@ -22548,6 +22548,33 @@
         "tokenLocation" : {
           "$ref" : "#/definitions/JsonLocation"
         },
+        "valueAsInt" : {
+          "type" : "integer",
+          "format" : "int32"
+        },
+        "valueAsLong" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "valueAsDouble" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "valueAsBoolean" : {
+          "type" : "boolean"
+        },
+        "valueAsString" : {
+          "type" : "string"
+        },
+        "objectId" : {
+          "type" : "object"
+        },
+        "inputSource" : {
+          "type" : "object"
+        },
+        "currentValue" : {
+          "type" : "object"
+        },
         "featureMask" : {
           "type" : "integer",
           "format" : "int32"
@@ -22602,33 +22629,6 @@
             "type" : "string",
             "format" : "byte"
           }
-        },
-        "valueAsInt" : {
-          "type" : "integer",
-          "format" : "int32"
-        },
-        "valueAsLong" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "valueAsDouble" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "valueAsBoolean" : {
-          "type" : "boolean"
-        },
-        "valueAsString" : {
-          "type" : "string"
-        },
-        "objectId" : {
-          "type" : "object"
-        },
-        "inputSource" : {
-          "type" : "object"
-        },
-        "currentValue" : {
-          "type" : "object"
         }
       }
     },
@@ -22960,47 +22960,50 @@
           "type" : "number",
           "format" : "double"
         },
-        "underLoaded" : {
-          "type" : "boolean"
-        },
-        "overLoaded" : {
-          "type" : "boolean"
-        },
-        "loadReportType" : {
-          "type" : "string"
-        },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "bandwidthIn" : {
+        "cpu" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
-        "bandwidthOut" : {
+        "memory" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
-        "memory" : {
+        "directMemory" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
-        "cpu" : {
+        "bandwidthIn" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
-        "directMemory" : {
+        "bandwidthOut" : {
           "$ref" : "#/definitions/ResourceUsage"
         },
         "lastUpdate" : {
           "type" : "integer",
           "format" : "int64"
+        },
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "underLoaded" : {
+          "type" : "boolean"
+        },
+        "overLoaded" : {
+          "type" : "boolean"
+        },
+        "loadReportType" : {
+          "type" : "string"
         }
       }
     },
     "Locale" : {
       "type" : "object",
       "properties" : {
+        "displayName" : {
+          "type" : "string"
+        },
         "script" : {
           "type" : "string"
         },
@@ -23051,9 +23054,6 @@
         },
         "language" : {
           "type" : "string"
-        },
-        "displayName" : {
-          "type" : "string"
         }
       }
     },
@@ -23267,28 +23267,14 @@
             "type" : "string"
           }
         },
-        "producerName" : {
-          "type" : "string"
-        },
-        "msgRateIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "averageMsgSize" : {
-          "type" : "number",
-          "format" : "double"
+        "accessMode" : {
+          "type" : "string",
+          "enum" : [ "Shared", "Exclusive", "WaitForExclusive" ]
         },
         "chunkedMessageRate" : {
           "type" : "number",
           "format" : "double"
         },
-        "clientVersion" : {
-          "type" : "string"
-        },
         "producerId" : {
           "type" : "integer",
           "format" : "int64"
@@ -23299,38 +23285,36 @@
         "connectedSince" : {
           "type" : "string"
         },
-        "accessMode" : {
-          "type" : "string",
-          "enum" : [ "Shared", "Exclusive", "WaitForExclusive" ]
-        }
-      }
-    },
-    "NonPersistentReplicatorStats" : {
-      "type" : "object",
-      "properties" : {
-        "msgDropRate" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "connected" : {
-          "type" : "boolean"
+        "clientVersion" : {
+          "type" : "string"
         },
-        "msgRateIn" : {
+        "averageMsgSize" : {
           "type" : "number",
           "format" : "double"
         },
+        "producerName" : {
+          "type" : "string"
+        },
         "msgThroughputIn" : {
           "type" : "number",
           "format" : "double"
         },
-        "msgRateOut" : {
+        "msgRateIn" : {
           "type" : "number",
           "format" : "double"
-        },
-        "msgThroughputOut" : {
+        }
+      }
+    },
+    "NonPersistentReplicatorStats" : {
+      "type" : "object",
+      "properties" : {
+        "msgDropRate" : {
           "type" : "number",
           "format" : "double"
         },
+        "connected" : {
+          "type" : "boolean"
+        },
         "msgRateExpired" : {
           "type" : "number",
           "format" : "double"
@@ -23339,6 +23323,10 @@
           "type" : "integer",
           "format" : "int64"
         },
+        "replicationDelayInSeconds" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
         "inboundConnection" : {
           "type" : "string"
         },
@@ -23351,9 +23339,21 @@
         "outboundConnectedSince" : {
           "type" : "string"
         },
-        "replicationDelayInSeconds" : {
-          "type" : "integer",
-          "format" : "int64"
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateOut" : {
+          "type" : "number",
+          "format" : "double"
         }
       }
     },
@@ -23367,45 +23367,13 @@
         "type" : {
           "type" : "string"
         },
-        "replicated" : {
-          "type" : "boolean"
-        },
-        "durable" : {
-          "type" : "boolean"
-        },
-        "consumers" : {
-          "type" : "array",
-          "items" : {
-            "$ref" : "#/definitions/ConsumerStats"
-          }
-        },
-        "msgRateOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "bytesOutCounter" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "msgOutCounter" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "backlogSize" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "nonContiguousDeletedMessagesRanges" : {
+        "chunkedMessageRate" : {
           "type" : "integer",
           "format" : "int32"
         },
-        "nonContiguousDeletedMessagesRangesSerializedSize" : {
-          "type" : "integer",
-          "format" : "int32"
+        "msgRateExpired" : {
+          "type" : "number",
+          "format" : "double"
         },
         "msgBacklog" : {
           "type" : "integer",
@@ -23415,10 +23383,6 @@
           "type" : "number",
           "format" : "double"
         },
-        "chunkedMessageRate" : {
-          "type" : "integer",
-          "format" : "int32"
-        },
         "earliestMsgPublishTimeInBacklog" : {
           "type" : "integer",
           "format" : "int64"
@@ -23441,10 +23405,6 @@
         "activeConsumerName" : {
           "type" : "string"
         },
-        "msgRateExpired" : {
-          "type" : "number",
-          "format" : "double"
-        },
         "totalMsgExpired" : {
           "type" : "integer",
           "format" : "int64"
@@ -23469,35 +23429,69 @@
           "type" : "integer",
           "format" : "int64"
         },
-        "consumersAfterMarkDeletePosition" : {
+        "allowOutOfOrderDelivery" : {
+          "type" : "boolean"
+        },
+        "keySharedMode" : {
+          "type" : "string"
+        },
+        "subscriptionProperties" : {
           "type" : "object",
           "additionalProperties" : {
             "type" : "string"
           }
         },
-        "subscriptionProperties" : {
+        "consumersAfterMarkDeletePosition" : {
           "type" : "object",
           "additionalProperties" : {
             "type" : "string"
           }
         },
-        "allowOutOfOrderDelivery" : {
+        "bytesOutCounter" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "msgOutCounter" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "backlogSize" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "nonContiguousDeletedMessagesRanges" : {
+          "type" : "integer",
+          "format" : "int32"
+        },
+        "nonContiguousDeletedMessagesRangesSerializedSize" : {
+          "type" : "integer",
+          "format" : "int32"
+        },
+        "replicated" : {
           "type" : "boolean"
         },
-        "keySharedMode" : {
-          "type" : "string"
+        "durable" : {
+          "type" : "boolean"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "consumers" : {
+          "type" : "array",
+          "items" : {
+            "$ref" : "#/definitions/ConsumerStats"
+          }
         }
       }
     },
     "NonPersistentTopicStats" : {
       "type" : "object",
       "properties" : {
-        "subscriptions" : {
-          "type" : "object",
-          "additionalProperties" : {
-            "$ref" : "#/definitions/NonPersistentSubscriptionStats"
-          }
-        },
         "publishers" : {
           "type" : "array",
           "items" : {
@@ -23514,24 +23508,11 @@
           "type" : "number",
           "format" : "double"
         },
-        "compaction" : {
-          "$ref" : "#/definitions/CompactionStats"
-        },
-        "msgRateIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgRateOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
+        "subscriptions" : {
+          "type" : "object",
+          "additionalProperties" : {
+            "$ref" : "#/definitions/NonPersistentSubscriptionStats"
+          }
         },
         "bytesInCounter" : {
           "type" : "integer",
@@ -23590,6 +23571,25 @@
         "nonContiguousDeletedMessagesRangesSerializedSize" : {
           "type" : "integer",
           "format" : "int32"
+        },
+        "compaction" : {
+          "$ref" : "#/definitions/CompactionStats"
+        },
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateOut" : {
+          "type" : "number",
+          "format" : "double"
         }
       }
     },
@@ -23621,12 +23621,12 @@
           "type" : "integer",
           "format" : "int32"
         },
-        "currency" : {
-          "$ref" : "#/definitions/Currency"
-        },
         "roundingMode" : {
           "type" : "string",
           "enum" : [ "UP", "DOWN", "CEILING", "FLOOR", "HALF_UP", "HALF_DOWN", "HALF_EVEN", "UNNECESSARY" ]
+        },
+        "currency" : {
+          "$ref" : "#/definitions/Currency"
         }
       }
     },
@@ -23647,8 +23647,8 @@
         "factory" : {
           "$ref" : "#/definitions/JsonFactory"
         },
-        "typeFactory" : {
-          "$ref" : "#/definitions/TypeFactory"
+        "injectableValues" : {
+          "$ref" : "#/definitions/InjectableValues"
         },
         "serializationConfig" : {
           "$ref" : "#/definitions/SerializationConfig"
@@ -23677,6 +23677,9 @@
         "propertyNamingStrategy" : {
           "$ref" : "#/definitions/PropertyNamingStrategy"
         },
+        "typeFactory" : {
+          "$ref" : "#/definitions/TypeFactory"
+        },
         "nodeFactory" : {
           "$ref" : "#/definitions/JsonNodeFactory"
         },
@@ -23685,15 +23688,20 @@
         },
         "dateFormat" : {
           "$ref" : "#/definitions/DateFormat"
-        },
-        "injectableValues" : {
-          "$ref" : "#/definitions/InjectableValues"
         }
       }
     },
     "OffloadPolicies" : {
       "type" : "object",
       "properties" : {
+        "managedLedgerOffloadThresholdInBytes" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
+        "managedLedgerOffloadDeletionLagInMillis" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
         "managedLedgerOffloadDriver" : {
           "type" : "string"
         },
@@ -23704,18 +23712,13 @@
           "type" : "integer",
           "format" : "int32"
         },
-        "managedLedgerOffloadThresholdInBytes" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
-        "managedLedgerOffloadDeletionLagInMillis" : {
-          "type" : "integer",
-          "format" : "int64"
-        },
         "managedLedgerOffloadPrefetchRounds" : {
           "type" : "integer",
           "format" : "int32"
         },
+        "fileSystemURI" : {
+          "type" : "string"
+        },
         "managedLedgerOffloadedReadPriority" : {
           "type" : "string",
           "enum" : [ "BOOKKEEPER_FIRST", "TIERED_STORAGE_FIRST" ]
@@ -23726,9 +23729,6 @@
         "s3ManagedLedgerOffloadBucket" : {
           "type" : "string"
         },
-        "s3ManagedLedgerOffloadServiceEndpoint" : {
-          "type" : "string"
-        },
         "s3ManagedLedgerOffloadMaxBlockSizeInBytes" : {
           "type" : "integer",
           "format" : "int32"
@@ -23769,9 +23769,6 @@
         "fileSystemProfilePath" : {
           "type" : "string"
         },
-        "fileSystemURI" : {
-          "type" : "string"
-        },
         "managedLedgerOffloadBucket" : {
           "type" : "string"
         },
@@ -23788,6 +23785,9 @@
         "managedLedgerOffloadReadBufferSizeInBytes" : {
           "type" : "integer",
           "format" : "int32"
+        },
+        "s3ManagedLedgerOffloadServiceEndpoint" : {
+          "type" : "string"
         }
       }
     },
@@ -24537,34 +24537,20 @@
         "address" : {
           "type" : "string"
         },
-        "metadata" : {
-          "type" : "object",
-          "additionalProperties" : {
-            "type" : "string"
-          }
-        },
-        "producerName" : {
-          "type" : "string"
-        },
-        "msgRateIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
+        "metadata" : {
+          "type" : "object",
+          "additionalProperties" : {
+            "type" : "string"
+          }
         },
-        "averageMsgSize" : {
-          "type" : "number",
-          "format" : "double"
+        "accessMode" : {
+          "type" : "string",
+          "enum" : [ "Shared", "Exclusive", "WaitForExclusive" ]
         },
         "chunkedMessageRate" : {
           "type" : "number",
           "format" : "double"
         },
-        "clientVersion" : {
-          "type" : "string"
-        },
         "producerId" : {
           "type" : "integer",
           "format" : "int64"
@@ -24575,9 +24561,23 @@
         "connectedSince" : {
           "type" : "string"
         },
-        "accessMode" : {
-          "type" : "string",
-          "enum" : [ "Shared", "Exclusive", "WaitForExclusive" ]
+        "clientVersion" : {
+          "type" : "string"
+        },
+        "averageMsgSize" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "producerName" : {
+          "type" : "string"
+        },
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateIn" : {
+          "type" : "number",
+          "format" : "double"
         }
       }
     },
@@ -24595,22 +24595,6 @@
         "connected" : {
           "type" : "boolean"
         },
-        "msgRateIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputIn" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgRateOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
-        "msgThroughputOut" : {
-          "type" : "number",
-          "format" : "double"
-        },
         "msgRateExpired" : {
           "type" : "number",
           "format" : "double"
@@ -24619,6 +24603,10 @@
           "type" : "integer",
           "format" : "int64"
         },
+        "replicationDelayInSeconds" : {
+          "type" : "integer",
+          "format" : "int64"
+        },
         "inboundConnection" : {
           "type" : "string"
         },
@@ -24631,9 +24619,21 @@
         "outboundConnectedSince" : {
           "type" : "string"
         },
-        "replicationDelayInSeconds" : {
-          "type" : "integer",
-          "format" : "int64"
+        "msgThroughputIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgThroughputOut" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateIn" : {
+          "type" : "number",
+          "format" : "double"
+        },
+        "msgRateOut" : {
+          "type" : "number",
+          "format" : "double"
         }
       }
     },
@@ -24808,15 +24808,15 @@
         "attributes" : {
           "$ref" : "#/definitions/ContextAttributes"
         },
+        "subtypeResolver" : {
+          "$ref" : "#/definitions/SubtypeResolver"
+        },
         "rootName" : {
           "type" : "string"
         },
         "fullRootName" : {
           "$ref" : "#/definitions/PropertyName"
         },
-        "subtypeResolver" : {
-          "$ref" : "#/definitions/SubtypeResolver"
-        },
         "defaultVisibilityChecker" : {
           "$ref" : "#/definitions/VisibilityCheckerObject"
         },
@@ -24826,18 +24826,18 @@
         "locale" : {
           "$ref" : "#/definitions/Locale"
         },
-        "typeFactory" : {
-          "$ref" : "#/definitions/TypeFactory"
-        },
-        "handlerInstantiator" : {
-          "$ref" : "#/definitions/HandlerInstantiator"
-        },
         "propertyNamingStrategy" : {
           "$ref" : "#/definitions/PropertyNamingStrategy"
         },
         "dateFormat" : {
           "$ref" : "#/definitions/DateFormat"
         },
+        "typeFactory" : {
+          "$ref" : "#/definitions/TypeFactory"
+        },
+        "handlerInstantiator" : {
+          "$ref" : "#/definitions/HandlerInstantiator"
+        },
         "base64Variant" : {
           "$ref" : "#/definitions/Base64Variant"
         },
@@ -24977,45 +24977,13 @@
         "type" : {
           "type" : "string"
         },
-        "replicated" : {
-          "type" : "boolean"
... 12926 lines suppressed ...