You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/10/10 03:59:50 UTC

[skywalking-banyandb] branch main updated: Add Exist endpoints to all services (#186)

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

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git


The following commit(s) were added to refs/heads/main by this push:
     new 49fc864  Add Exist endpoints to all services (#186)
49fc864 is described below

commit 49fc8648f3890be590cee0e26fc00cc71768856c
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Mon Oct 10 11:59:46 2022 +0800

    Add Exist endpoints to all services (#186)
---
 api/proto/banyandb/database/v1/rpc.pb.go           | 2660 +++++++++++++-------
 api/proto/banyandb/database/v1/rpc.pb.validate.go  | 1802 +++++++++++--
 api/proto/banyandb/database/v1/rpc.proto           |   64 +
 api/proto/banyandb/database/v1/rpc_grpc.pb.go      |  226 ++
 .../openapi/banyandb/database/v1/rpc.swagger.json  |   63 +
 banyand/liaison/grpc/registry.go                   |  118 +
 banyand/liaison/grpc/registry_test.go              |   12 +
 docs/api-reference.md                              |  203 ++
 8 files changed, 4084 insertions(+), 1064 deletions(-)

diff --git a/api/proto/banyandb/database/v1/rpc.pb.go b/api/proto/banyandb/database/v1/rpc.pb.go
index 95656d5..cbf6be0 100644
--- a/api/proto/banyandb/database/v1/rpc.pb.go
+++ b/api/proto/banyandb/database/v1/rpc.pb.go
@@ -398,6 +398,108 @@ func (x *StreamRegistryServiceGetResponse) GetStream() *Stream {
 	return nil
 }
 
+type StreamRegistryServiceExistRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *StreamRegistryServiceExistRequest) Reset() {
+	*x = StreamRegistryServiceExistRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StreamRegistryServiceExistRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceExistRequest) ProtoMessage() {}
+
+func (x *StreamRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StreamRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *StreamRegistryServiceExistRequest) GetMetadata() *v1.Metadata {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+type StreamRegistryServiceExistResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	HasGroup  bool `protobuf:"varint,1,opt,name=has_group,json=hasGroup,proto3" json:"has_group,omitempty"`
+	HasStream bool `protobuf:"varint,2,opt,name=has_stream,json=hasStream,proto3" json:"has_stream,omitempty"`
+}
+
+func (x *StreamRegistryServiceExistResponse) Reset() {
+	*x = StreamRegistryServiceExistResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StreamRegistryServiceExistResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceExistResponse) ProtoMessage() {}
+
+func (x *StreamRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use StreamRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *StreamRegistryServiceExistResponse) GetHasGroup() bool {
+	if x != nil {
+		return x.HasGroup
+	}
+	return false
+}
+
+func (x *StreamRegistryServiceExistResponse) GetHasStream() bool {
+	if x != nil {
+		return x.HasStream
+	}
+	return false
+}
+
 type StreamRegistryServiceListRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -409,7 +511,7 @@ type StreamRegistryServiceListRequest struct {
 func (x *StreamRegistryServiceListRequest) Reset() {
 	*x = StreamRegistryServiceListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[8]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -422,7 +524,7 @@ func (x *StreamRegistryServiceListRequest) String() string {
 func (*StreamRegistryServiceListRequest) ProtoMessage() {}
 
 func (x *StreamRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[8]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -435,7 +537,7 @@ func (x *StreamRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use StreamRegistryServiceListRequest.ProtoReflect.Descriptor instead.
 func (*StreamRegistryServiceListRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{8}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *StreamRegistryServiceListRequest) GetGroup() string {
@@ -456,7 +558,7 @@ type StreamRegistryServiceListResponse struct {
 func (x *StreamRegistryServiceListResponse) Reset() {
 	*x = StreamRegistryServiceListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[9]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -469,7 +571,7 @@ func (x *StreamRegistryServiceListResponse) String() string {
 func (*StreamRegistryServiceListResponse) ProtoMessage() {}
 
 func (x *StreamRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[9]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -482,7 +584,7 @@ func (x *StreamRegistryServiceListResponse) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use StreamRegistryServiceListResponse.ProtoReflect.Descriptor instead.
 func (*StreamRegistryServiceListResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{9}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *StreamRegistryServiceListResponse) GetStream() []*Stream {
@@ -503,7 +605,7 @@ type IndexRuleBindingRegistryServiceCreateRequest struct {
 func (x *IndexRuleBindingRegistryServiceCreateRequest) Reset() {
 	*x = IndexRuleBindingRegistryServiceCreateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[10]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[12]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -516,7 +618,7 @@ func (x *IndexRuleBindingRegistryServiceCreateRequest) String() string {
 func (*IndexRuleBindingRegistryServiceCreateRequest) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[10]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[12]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -529,7 +631,7 @@ func (x *IndexRuleBindingRegistryServiceCreateRequest) ProtoReflect() protorefle
 
 // Deprecated: Use IndexRuleBindingRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{10}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *IndexRuleBindingRegistryServiceCreateRequest) GetIndexRuleBinding() *IndexRuleBinding {
@@ -548,7 +650,7 @@ type IndexRuleBindingRegistryServiceCreateResponse struct {
 func (x *IndexRuleBindingRegistryServiceCreateResponse) Reset() {
 	*x = IndexRuleBindingRegistryServiceCreateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[11]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -561,7 +663,7 @@ func (x *IndexRuleBindingRegistryServiceCreateResponse) String() string {
 func (*IndexRuleBindingRegistryServiceCreateResponse) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[11]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -574,7 +676,7 @@ func (x *IndexRuleBindingRegistryServiceCreateResponse) ProtoReflect() protorefl
 
 // Deprecated: Use IndexRuleBindingRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{11}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{13}
 }
 
 type IndexRuleBindingRegistryServiceUpdateRequest struct {
@@ -588,7 +690,7 @@ type IndexRuleBindingRegistryServiceUpdateRequest struct {
 func (x *IndexRuleBindingRegistryServiceUpdateRequest) Reset() {
 	*x = IndexRuleBindingRegistryServiceUpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[12]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -601,7 +703,7 @@ func (x *IndexRuleBindingRegistryServiceUpdateRequest) String() string {
 func (*IndexRuleBindingRegistryServiceUpdateRequest) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[12]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -614,7 +716,7 @@ func (x *IndexRuleBindingRegistryServiceUpdateRequest) ProtoReflect() protorefle
 
 // Deprecated: Use IndexRuleBindingRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{12}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{14}
 }
 
 func (x *IndexRuleBindingRegistryServiceUpdateRequest) GetIndexRuleBinding() *IndexRuleBinding {
@@ -633,7 +735,7 @@ type IndexRuleBindingRegistryServiceUpdateResponse struct {
 func (x *IndexRuleBindingRegistryServiceUpdateResponse) Reset() {
 	*x = IndexRuleBindingRegistryServiceUpdateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[13]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -646,7 +748,7 @@ func (x *IndexRuleBindingRegistryServiceUpdateResponse) String() string {
 func (*IndexRuleBindingRegistryServiceUpdateResponse) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[13]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -659,7 +761,7 @@ func (x *IndexRuleBindingRegistryServiceUpdateResponse) ProtoReflect() protorefl
 
 // Deprecated: Use IndexRuleBindingRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{13}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{15}
 }
 
 type IndexRuleBindingRegistryServiceDeleteRequest struct {
@@ -673,7 +775,7 @@ type IndexRuleBindingRegistryServiceDeleteRequest struct {
 func (x *IndexRuleBindingRegistryServiceDeleteRequest) Reset() {
 	*x = IndexRuleBindingRegistryServiceDeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[14]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -686,7 +788,7 @@ func (x *IndexRuleBindingRegistryServiceDeleteRequest) String() string {
 func (*IndexRuleBindingRegistryServiceDeleteRequest) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[14]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -699,7 +801,7 @@ func (x *IndexRuleBindingRegistryServiceDeleteRequest) ProtoReflect() protorefle
 
 // Deprecated: Use IndexRuleBindingRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{14}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{16}
 }
 
 func (x *IndexRuleBindingRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
@@ -720,7 +822,7 @@ type IndexRuleBindingRegistryServiceDeleteResponse struct {
 func (x *IndexRuleBindingRegistryServiceDeleteResponse) Reset() {
 	*x = IndexRuleBindingRegistryServiceDeleteResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[15]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -733,7 +835,7 @@ func (x *IndexRuleBindingRegistryServiceDeleteResponse) String() string {
 func (*IndexRuleBindingRegistryServiceDeleteResponse) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[15]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -746,7 +848,7 @@ func (x *IndexRuleBindingRegistryServiceDeleteResponse) ProtoReflect() protorefl
 
 // Deprecated: Use IndexRuleBindingRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{15}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{17}
 }
 
 func (x *IndexRuleBindingRegistryServiceDeleteResponse) GetDeleted() bool {
@@ -767,7 +869,7 @@ type IndexRuleBindingRegistryServiceGetRequest struct {
 func (x *IndexRuleBindingRegistryServiceGetRequest) Reset() {
 	*x = IndexRuleBindingRegistryServiceGetRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[16]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -780,7 +882,7 @@ func (x *IndexRuleBindingRegistryServiceGetRequest) String() string {
 func (*IndexRuleBindingRegistryServiceGetRequest) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[16]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -793,7 +895,7 @@ func (x *IndexRuleBindingRegistryServiceGetRequest) ProtoReflect() protoreflect.
 
 // Deprecated: Use IndexRuleBindingRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{16}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{18}
 }
 
 func (x *IndexRuleBindingRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
@@ -814,7 +916,7 @@ type IndexRuleBindingRegistryServiceGetResponse struct {
 func (x *IndexRuleBindingRegistryServiceGetResponse) Reset() {
 	*x = IndexRuleBindingRegistryServiceGetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[17]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -827,7 +929,7 @@ func (x *IndexRuleBindingRegistryServiceGetResponse) String() string {
 func (*IndexRuleBindingRegistryServiceGetResponse) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[17]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -840,7 +942,7 @@ func (x *IndexRuleBindingRegistryServiceGetResponse) ProtoReflect() protoreflect
 
 // Deprecated: Use IndexRuleBindingRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{17}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{19}
 }
 
 func (x *IndexRuleBindingRegistryServiceGetResponse) GetIndexRuleBinding() *IndexRuleBinding {
@@ -861,7 +963,7 @@ type IndexRuleBindingRegistryServiceListRequest struct {
 func (x *IndexRuleBindingRegistryServiceListRequest) Reset() {
 	*x = IndexRuleBindingRegistryServiceListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[18]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -874,7 +976,7 @@ func (x *IndexRuleBindingRegistryServiceListRequest) String() string {
 func (*IndexRuleBindingRegistryServiceListRequest) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[18]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -887,7 +989,7 @@ func (x *IndexRuleBindingRegistryServiceListRequest) ProtoReflect() protoreflect
 
 // Deprecated: Use IndexRuleBindingRegistryServiceListRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceListRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{18}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *IndexRuleBindingRegistryServiceListRequest) GetGroup() string {
@@ -908,7 +1010,7 @@ type IndexRuleBindingRegistryServiceListResponse struct {
 func (x *IndexRuleBindingRegistryServiceListResponse) Reset() {
 	*x = IndexRuleBindingRegistryServiceListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[19]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -921,7 +1023,7 @@ func (x *IndexRuleBindingRegistryServiceListResponse) String() string {
 func (*IndexRuleBindingRegistryServiceListResponse) ProtoMessage() {}
 
 func (x *IndexRuleBindingRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[19]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -934,7 +1036,7 @@ func (x *IndexRuleBindingRegistryServiceListResponse) ProtoReflect() protoreflec
 
 // Deprecated: Use IndexRuleBindingRegistryServiceListResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleBindingRegistryServiceListResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{19}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{21}
 }
 
 func (x *IndexRuleBindingRegistryServiceListResponse) GetIndexRuleBinding() []*IndexRuleBinding {
@@ -944,6 +1046,108 @@ func (x *IndexRuleBindingRegistryServiceListResponse) GetIndexRuleBinding() []*I
 	return nil
 }
 
+type IndexRuleBindingRegistryServiceExistRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceExistRequest) Reset() {
+	*x = IndexRuleBindingRegistryServiceExistRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *IndexRuleBindingRegistryServiceExistRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceExistRequest) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use IndexRuleBindingRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *IndexRuleBindingRegistryServiceExistRequest) GetMetadata() *v1.Metadata {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+type IndexRuleBindingRegistryServiceExistResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	HasGroup            bool `protobuf:"varint,1,opt,name=has_group,json=hasGroup,proto3" json:"has_group,omitempty"`
+	HasIndexRuleBinding bool `protobuf:"varint,2,opt,name=has_index_rule_binding,json=hasIndexRuleBinding,proto3" json:"has_index_rule_binding,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceExistResponse) Reset() {
+	*x = IndexRuleBindingRegistryServiceExistResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *IndexRuleBindingRegistryServiceExistResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceExistResponse) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use IndexRuleBindingRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *IndexRuleBindingRegistryServiceExistResponse) GetHasGroup() bool {
+	if x != nil {
+		return x.HasGroup
+	}
+	return false
+}
+
+func (x *IndexRuleBindingRegistryServiceExistResponse) GetHasIndexRuleBinding() bool {
+	if x != nil {
+		return x.HasIndexRuleBinding
+	}
+	return false
+}
+
 type IndexRuleRegistryServiceCreateRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -955,7 +1159,7 @@ type IndexRuleRegistryServiceCreateRequest struct {
 func (x *IndexRuleRegistryServiceCreateRequest) Reset() {
 	*x = IndexRuleRegistryServiceCreateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[20]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -968,7 +1172,7 @@ func (x *IndexRuleRegistryServiceCreateRequest) String() string {
 func (*IndexRuleRegistryServiceCreateRequest) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[20]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -981,7 +1185,7 @@ func (x *IndexRuleRegistryServiceCreateRequest) ProtoReflect() protoreflect.Mess
 
 // Deprecated: Use IndexRuleRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{20}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *IndexRuleRegistryServiceCreateRequest) GetIndexRule() *IndexRule {
@@ -1000,7 +1204,7 @@ type IndexRuleRegistryServiceCreateResponse struct {
 func (x *IndexRuleRegistryServiceCreateResponse) Reset() {
 	*x = IndexRuleRegistryServiceCreateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[21]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[25]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1013,7 +1217,7 @@ func (x *IndexRuleRegistryServiceCreateResponse) String() string {
 func (*IndexRuleRegistryServiceCreateResponse) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[21]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[25]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1026,7 +1230,7 @@ func (x *IndexRuleRegistryServiceCreateResponse) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use IndexRuleRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{21}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{25}
 }
 
 type IndexRuleRegistryServiceUpdateRequest struct {
@@ -1040,7 +1244,7 @@ type IndexRuleRegistryServiceUpdateRequest struct {
 func (x *IndexRuleRegistryServiceUpdateRequest) Reset() {
 	*x = IndexRuleRegistryServiceUpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[22]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[26]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1053,7 +1257,7 @@ func (x *IndexRuleRegistryServiceUpdateRequest) String() string {
 func (*IndexRuleRegistryServiceUpdateRequest) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[22]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[26]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1066,7 +1270,7 @@ func (x *IndexRuleRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Mess
 
 // Deprecated: Use IndexRuleRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{22}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{26}
 }
 
 func (x *IndexRuleRegistryServiceUpdateRequest) GetIndexRule() *IndexRule {
@@ -1085,7 +1289,7 @@ type IndexRuleRegistryServiceUpdateResponse struct {
 func (x *IndexRuleRegistryServiceUpdateResponse) Reset() {
 	*x = IndexRuleRegistryServiceUpdateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[23]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[27]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1098,7 +1302,7 @@ func (x *IndexRuleRegistryServiceUpdateResponse) String() string {
 func (*IndexRuleRegistryServiceUpdateResponse) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[23]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[27]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1111,7 +1315,7 @@ func (x *IndexRuleRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use IndexRuleRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{23}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{27}
 }
 
 type IndexRuleRegistryServiceDeleteRequest struct {
@@ -1125,7 +1329,7 @@ type IndexRuleRegistryServiceDeleteRequest struct {
 func (x *IndexRuleRegistryServiceDeleteRequest) Reset() {
 	*x = IndexRuleRegistryServiceDeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[24]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[28]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1138,7 +1342,7 @@ func (x *IndexRuleRegistryServiceDeleteRequest) String() string {
 func (*IndexRuleRegistryServiceDeleteRequest) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[24]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[28]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1151,7 +1355,7 @@ func (x *IndexRuleRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Mess
 
 // Deprecated: Use IndexRuleRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{24}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *IndexRuleRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
@@ -1172,7 +1376,7 @@ type IndexRuleRegistryServiceDeleteResponse struct {
 func (x *IndexRuleRegistryServiceDeleteResponse) Reset() {
 	*x = IndexRuleRegistryServiceDeleteResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[25]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[29]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1185,7 +1389,7 @@ func (x *IndexRuleRegistryServiceDeleteResponse) String() string {
 func (*IndexRuleRegistryServiceDeleteResponse) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[25]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[29]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1198,7 +1402,7 @@ func (x *IndexRuleRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use IndexRuleRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{25}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{29}
 }
 
 func (x *IndexRuleRegistryServiceDeleteResponse) GetDeleted() bool {
@@ -1219,7 +1423,7 @@ type IndexRuleRegistryServiceGetRequest struct {
 func (x *IndexRuleRegistryServiceGetRequest) Reset() {
 	*x = IndexRuleRegistryServiceGetRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[26]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[30]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1232,7 +1436,7 @@ func (x *IndexRuleRegistryServiceGetRequest) String() string {
 func (*IndexRuleRegistryServiceGetRequest) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[26]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[30]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1245,7 +1449,7 @@ func (x *IndexRuleRegistryServiceGetRequest) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use IndexRuleRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{26}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{30}
 }
 
 func (x *IndexRuleRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
@@ -1266,7 +1470,7 @@ type IndexRuleRegistryServiceGetResponse struct {
 func (x *IndexRuleRegistryServiceGetResponse) Reset() {
 	*x = IndexRuleRegistryServiceGetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[27]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[31]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1279,7 +1483,7 @@ func (x *IndexRuleRegistryServiceGetResponse) String() string {
 func (*IndexRuleRegistryServiceGetResponse) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[27]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[31]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1292,7 +1496,7 @@ func (x *IndexRuleRegistryServiceGetResponse) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use IndexRuleRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{27}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *IndexRuleRegistryServiceGetResponse) GetIndexRule() *IndexRule {
@@ -1313,7 +1517,7 @@ type IndexRuleRegistryServiceListRequest struct {
 func (x *IndexRuleRegistryServiceListRequest) Reset() {
 	*x = IndexRuleRegistryServiceListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[28]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[32]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1326,7 +1530,7 @@ func (x *IndexRuleRegistryServiceListRequest) String() string {
 func (*IndexRuleRegistryServiceListRequest) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[28]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[32]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1339,7 +1543,7 @@ func (x *IndexRuleRegistryServiceListRequest) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use IndexRuleRegistryServiceListRequest.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceListRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{28}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{32}
 }
 
 func (x *IndexRuleRegistryServiceListRequest) GetGroup() string {
@@ -1360,7 +1564,7 @@ type IndexRuleRegistryServiceListResponse struct {
 func (x *IndexRuleRegistryServiceListResponse) Reset() {
 	*x = IndexRuleRegistryServiceListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[29]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[33]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1373,7 +1577,7 @@ func (x *IndexRuleRegistryServiceListResponse) String() string {
 func (*IndexRuleRegistryServiceListResponse) ProtoMessage() {}
 
 func (x *IndexRuleRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[29]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[33]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1386,7 +1590,7 @@ func (x *IndexRuleRegistryServiceListResponse) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use IndexRuleRegistryServiceListResponse.ProtoReflect.Descriptor instead.
 func (*IndexRuleRegistryServiceListResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{29}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{33}
 }
 
 func (x *IndexRuleRegistryServiceListResponse) GetIndexRule() []*IndexRule {
@@ -1396,6 +1600,108 @@ func (x *IndexRuleRegistryServiceListResponse) GetIndexRule() []*IndexRule {
 	return nil
 }
 
+type IndexRuleRegistryServiceExistRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceExistRequest) Reset() {
+	*x = IndexRuleRegistryServiceExistRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *IndexRuleRegistryServiceExistRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceExistRequest) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[34]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use IndexRuleRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *IndexRuleRegistryServiceExistRequest) GetMetadata() *v1.Metadata {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+type IndexRuleRegistryServiceExistResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	HasGroup     bool `protobuf:"varint,1,opt,name=has_group,json=hasGroup,proto3" json:"has_group,omitempty"`
+	HasIndexRule bool `protobuf:"varint,2,opt,name=has_index_rule,json=hasIndexRule,proto3" json:"has_index_rule,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceExistResponse) Reset() {
+	*x = IndexRuleRegistryServiceExistResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *IndexRuleRegistryServiceExistResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceExistResponse) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[35]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use IndexRuleRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *IndexRuleRegistryServiceExistResponse) GetHasGroup() bool {
+	if x != nil {
+		return x.HasGroup
+	}
+	return false
+}
+
+func (x *IndexRuleRegistryServiceExistResponse) GetHasIndexRule() bool {
+	if x != nil {
+		return x.HasIndexRule
+	}
+	return false
+}
+
 type MeasureRegistryServiceCreateRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1407,7 +1713,7 @@ type MeasureRegistryServiceCreateRequest struct {
 func (x *MeasureRegistryServiceCreateRequest) Reset() {
 	*x = MeasureRegistryServiceCreateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[30]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[36]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1420,7 +1726,7 @@ func (x *MeasureRegistryServiceCreateRequest) String() string {
 func (*MeasureRegistryServiceCreateRequest) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[30]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[36]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1433,7 +1739,7 @@ func (x *MeasureRegistryServiceCreateRequest) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use MeasureRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{30}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{36}
 }
 
 func (x *MeasureRegistryServiceCreateRequest) GetMeasure() *Measure {
@@ -1452,7 +1758,7 @@ type MeasureRegistryServiceCreateResponse struct {
 func (x *MeasureRegistryServiceCreateResponse) Reset() {
 	*x = MeasureRegistryServiceCreateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[31]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[37]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1465,7 +1771,7 @@ func (x *MeasureRegistryServiceCreateResponse) String() string {
 func (*MeasureRegistryServiceCreateResponse) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[31]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[37]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1478,7 +1784,7 @@ func (x *MeasureRegistryServiceCreateResponse) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use MeasureRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{31}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{37}
 }
 
 type MeasureRegistryServiceUpdateRequest struct {
@@ -1492,7 +1798,7 @@ type MeasureRegistryServiceUpdateRequest struct {
 func (x *MeasureRegistryServiceUpdateRequest) Reset() {
 	*x = MeasureRegistryServiceUpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[32]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1505,7 +1811,7 @@ func (x *MeasureRegistryServiceUpdateRequest) String() string {
 func (*MeasureRegistryServiceUpdateRequest) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[32]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1518,7 +1824,7 @@ func (x *MeasureRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use MeasureRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{32}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{38}
 }
 
 func (x *MeasureRegistryServiceUpdateRequest) GetMeasure() *Measure {
@@ -1537,7 +1843,7 @@ type MeasureRegistryServiceUpdateResponse struct {
 func (x *MeasureRegistryServiceUpdateResponse) Reset() {
 	*x = MeasureRegistryServiceUpdateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[33]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[39]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1550,7 +1856,7 @@ func (x *MeasureRegistryServiceUpdateResponse) String() string {
 func (*MeasureRegistryServiceUpdateResponse) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[33]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[39]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1563,7 +1869,7 @@ func (x *MeasureRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use MeasureRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{33}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{39}
 }
 
 type MeasureRegistryServiceDeleteRequest struct {
@@ -1577,7 +1883,7 @@ type MeasureRegistryServiceDeleteRequest struct {
 func (x *MeasureRegistryServiceDeleteRequest) Reset() {
 	*x = MeasureRegistryServiceDeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[34]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[40]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1590,7 +1896,7 @@ func (x *MeasureRegistryServiceDeleteRequest) String() string {
 func (*MeasureRegistryServiceDeleteRequest) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[34]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[40]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1603,7 +1909,7 @@ func (x *MeasureRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Messag
 
 // Deprecated: Use MeasureRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{34}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{40}
 }
 
 func (x *MeasureRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
@@ -1624,7 +1930,7 @@ type MeasureRegistryServiceDeleteResponse struct {
 func (x *MeasureRegistryServiceDeleteResponse) Reset() {
 	*x = MeasureRegistryServiceDeleteResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[35]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[41]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1637,7 +1943,7 @@ func (x *MeasureRegistryServiceDeleteResponse) String() string {
 func (*MeasureRegistryServiceDeleteResponse) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[35]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[41]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1650,7 +1956,7 @@ func (x *MeasureRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use MeasureRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{35}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{41}
 }
 
 func (x *MeasureRegistryServiceDeleteResponse) GetDeleted() bool {
@@ -1671,7 +1977,7 @@ type MeasureRegistryServiceGetRequest struct {
 func (x *MeasureRegistryServiceGetRequest) Reset() {
 	*x = MeasureRegistryServiceGetRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[36]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[42]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1684,7 +1990,7 @@ func (x *MeasureRegistryServiceGetRequest) String() string {
 func (*MeasureRegistryServiceGetRequest) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[36]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[42]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1697,7 +2003,7 @@ func (x *MeasureRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use MeasureRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{36}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{42}
 }
 
 func (x *MeasureRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
@@ -1718,7 +2024,7 @@ type MeasureRegistryServiceGetResponse struct {
 func (x *MeasureRegistryServiceGetResponse) Reset() {
 	*x = MeasureRegistryServiceGetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[37]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[43]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1731,7 +2037,7 @@ func (x *MeasureRegistryServiceGetResponse) String() string {
 func (*MeasureRegistryServiceGetResponse) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[37]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[43]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1744,7 +2050,7 @@ func (x *MeasureRegistryServiceGetResponse) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use MeasureRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{37}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{43}
 }
 
 func (x *MeasureRegistryServiceGetResponse) GetMeasure() *Measure {
@@ -1765,7 +2071,7 @@ type MeasureRegistryServiceListRequest struct {
 func (x *MeasureRegistryServiceListRequest) Reset() {
 	*x = MeasureRegistryServiceListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[38]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[44]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1778,7 +2084,7 @@ func (x *MeasureRegistryServiceListRequest) String() string {
 func (*MeasureRegistryServiceListRequest) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[38]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[44]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1791,7 +2097,7 @@ func (x *MeasureRegistryServiceListRequest) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use MeasureRegistryServiceListRequest.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceListRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{38}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{44}
 }
 
 func (x *MeasureRegistryServiceListRequest) GetGroup() string {
@@ -1812,7 +2118,7 @@ type MeasureRegistryServiceListResponse struct {
 func (x *MeasureRegistryServiceListResponse) Reset() {
 	*x = MeasureRegistryServiceListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[39]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[45]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1825,7 +2131,7 @@ func (x *MeasureRegistryServiceListResponse) String() string {
 func (*MeasureRegistryServiceListResponse) ProtoMessage() {}
 
 func (x *MeasureRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[39]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[45]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1838,7 +2144,7 @@ func (x *MeasureRegistryServiceListResponse) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use MeasureRegistryServiceListResponse.ProtoReflect.Descriptor instead.
 func (*MeasureRegistryServiceListResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{39}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{45}
 }
 
 func (x *MeasureRegistryServiceListResponse) GetMeasure() []*Measure {
@@ -1848,31 +2154,31 @@ func (x *MeasureRegistryServiceListResponse) GetMeasure() []*Measure {
 	return nil
 }
 
-type GroupRegistryServiceCreateRequest struct {
+type MeasureRegistryServiceExistRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Group *v1.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+	Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
 }
 
-func (x *GroupRegistryServiceCreateRequest) Reset() {
-	*x = GroupRegistryServiceCreateRequest{}
+func (x *MeasureRegistryServiceExistRequest) Reset() {
+	*x = MeasureRegistryServiceExistRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[40]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[46]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *GroupRegistryServiceCreateRequest) String() string {
+func (x *MeasureRegistryServiceExistRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GroupRegistryServiceCreateRequest) ProtoMessage() {}
+func (*MeasureRegistryServiceExistRequest) ProtoMessage() {}
 
-func (x *GroupRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[40]
+func (x *MeasureRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[46]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1883,41 +2189,44 @@ func (x *GroupRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
-func (*GroupRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{40}
+// Deprecated: Use MeasureRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{46}
 }
 
-func (x *GroupRegistryServiceCreateRequest) GetGroup() *v1.Group {
+func (x *MeasureRegistryServiceExistRequest) GetMetadata() *v1.Metadata {
 	if x != nil {
-		return x.Group
+		return x.Metadata
 	}
 	return nil
 }
 
-type GroupRegistryServiceCreateResponse struct {
+type MeasureRegistryServiceExistResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
+
+	HasGroup   bool `protobuf:"varint,1,opt,name=has_group,json=hasGroup,proto3" json:"has_group,omitempty"`
+	HasMeasure bool `protobuf:"varint,2,opt,name=has_measure,json=hasMeasure,proto3" json:"has_measure,omitempty"`
 }
 
-func (x *GroupRegistryServiceCreateResponse) Reset() {
-	*x = GroupRegistryServiceCreateResponse{}
+func (x *MeasureRegistryServiceExistResponse) Reset() {
+	*x = MeasureRegistryServiceExistResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[41]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[47]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *GroupRegistryServiceCreateResponse) String() string {
+func (x *MeasureRegistryServiceExistResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GroupRegistryServiceCreateResponse) ProtoMessage() {}
+func (*MeasureRegistryServiceExistResponse) ProtoMessage() {}
 
-func (x *GroupRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[41]
+func (x *MeasureRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[47]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1928,12 +2237,26 @@ func (x *GroupRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
-func (*GroupRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{41}
+// Deprecated: Use MeasureRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{47}
 }
 
-type GroupRegistryServiceUpdateRequest struct {
+func (x *MeasureRegistryServiceExistResponse) GetHasGroup() bool {
+	if x != nil {
+		return x.HasGroup
+	}
+	return false
+}
+
+func (x *MeasureRegistryServiceExistResponse) GetHasMeasure() bool {
+	if x != nil {
+		return x.HasMeasure
+	}
+	return false
+}
+
+type GroupRegistryServiceCreateRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
@@ -1941,23 +2264,23 @@ type GroupRegistryServiceUpdateRequest struct {
 	Group *v1.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
 }
 
-func (x *GroupRegistryServiceUpdateRequest) Reset() {
-	*x = GroupRegistryServiceUpdateRequest{}
+func (x *GroupRegistryServiceCreateRequest) Reset() {
+	*x = GroupRegistryServiceCreateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[42]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[48]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *GroupRegistryServiceUpdateRequest) String() string {
+func (x *GroupRegistryServiceCreateRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GroupRegistryServiceUpdateRequest) ProtoMessage() {}
+func (*GroupRegistryServiceCreateRequest) ProtoMessage() {}
 
-func (x *GroupRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[42]
+func (x *GroupRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[48]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1968,42 +2291,127 @@ func (x *GroupRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use GroupRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
-func (*GroupRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{42}
+// Deprecated: Use GroupRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{48}
 }
 
-func (x *GroupRegistryServiceUpdateRequest) GetGroup() *v1.Group {
+func (x *GroupRegistryServiceCreateRequest) GetGroup() *v1.Group {
 	if x != nil {
 		return x.Group
 	}
 	return nil
 }
 
-type GroupRegistryServiceUpdateResponse struct {
+type GroupRegistryServiceCreateResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 }
 
-func (x *GroupRegistryServiceUpdateResponse) Reset() {
-	*x = GroupRegistryServiceUpdateResponse{}
+func (x *GroupRegistryServiceCreateResponse) Reset() {
+	*x = GroupRegistryServiceCreateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[43]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[49]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
 }
 
-func (x *GroupRegistryServiceUpdateResponse) String() string {
+func (x *GroupRegistryServiceCreateResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*GroupRegistryServiceUpdateResponse) ProtoMessage() {}
+func (*GroupRegistryServiceCreateResponse) ProtoMessage() {}
 
-func (x *GroupRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[43]
-	if protoimpl.UnsafeEnabled && x != nil {
+func (x *GroupRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[49]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GroupRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{49}
+}
+
+type GroupRegistryServiceUpdateRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Group *v1.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceUpdateRequest) Reset() {
+	*x = GroupRegistryServiceUpdateRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[50]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GroupRegistryServiceUpdateRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceUpdateRequest) ProtoMessage() {}
+
+func (x *GroupRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[50]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GroupRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{50}
+}
+
+func (x *GroupRegistryServiceUpdateRequest) GetGroup() *v1.Group {
+	if x != nil {
+		return x.Group
+	}
+	return nil
+}
+
+type GroupRegistryServiceUpdateResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GroupRegistryServiceUpdateResponse) Reset() {
+	*x = GroupRegistryServiceUpdateResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[51]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GroupRegistryServiceUpdateResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceUpdateResponse) ProtoMessage() {}
+
+func (x *GroupRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[51]
+	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -2015,7 +2423,7 @@ func (x *GroupRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use GroupRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{43}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{51}
 }
 
 type GroupRegistryServiceDeleteRequest struct {
@@ -2029,7 +2437,7 @@ type GroupRegistryServiceDeleteRequest struct {
 func (x *GroupRegistryServiceDeleteRequest) Reset() {
 	*x = GroupRegistryServiceDeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[44]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[52]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2042,7 +2450,7 @@ func (x *GroupRegistryServiceDeleteRequest) String() string {
 func (*GroupRegistryServiceDeleteRequest) ProtoMessage() {}
 
 func (x *GroupRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[44]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[52]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2055,7 +2463,7 @@ func (x *GroupRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use GroupRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{44}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{52}
 }
 
 func (x *GroupRegistryServiceDeleteRequest) GetGroup() string {
@@ -2076,7 +2484,7 @@ type GroupRegistryServiceDeleteResponse struct {
 func (x *GroupRegistryServiceDeleteResponse) Reset() {
 	*x = GroupRegistryServiceDeleteResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[45]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[53]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2089,7 +2497,7 @@ func (x *GroupRegistryServiceDeleteResponse) String() string {
 func (*GroupRegistryServiceDeleteResponse) ProtoMessage() {}
 
 func (x *GroupRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[45]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[53]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2102,7 +2510,7 @@ func (x *GroupRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use GroupRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{45}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{53}
 }
 
 func (x *GroupRegistryServiceDeleteResponse) GetDeleted() bool {
@@ -2123,7 +2531,7 @@ type GroupRegistryServiceGetRequest struct {
 func (x *GroupRegistryServiceGetRequest) Reset() {
 	*x = GroupRegistryServiceGetRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[46]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[54]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2136,7 +2544,7 @@ func (x *GroupRegistryServiceGetRequest) String() string {
 func (*GroupRegistryServiceGetRequest) ProtoMessage() {}
 
 func (x *GroupRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[46]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[54]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2149,7 +2557,7 @@ func (x *GroupRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GroupRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{46}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{54}
 }
 
 func (x *GroupRegistryServiceGetRequest) GetGroup() string {
@@ -2170,7 +2578,7 @@ type GroupRegistryServiceGetResponse struct {
 func (x *GroupRegistryServiceGetResponse) Reset() {
 	*x = GroupRegistryServiceGetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[47]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[55]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2183,7 +2591,7 @@ func (x *GroupRegistryServiceGetResponse) String() string {
 func (*GroupRegistryServiceGetResponse) ProtoMessage() {}
 
 func (x *GroupRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[47]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[55]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2196,7 +2604,7 @@ func (x *GroupRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GroupRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{47}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{55}
 }
 
 func (x *GroupRegistryServiceGetResponse) GetGroup() *v1.Group {
@@ -2215,7 +2623,7 @@ type GroupRegistryServiceListRequest struct {
 func (x *GroupRegistryServiceListRequest) Reset() {
 	*x = GroupRegistryServiceListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[48]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[56]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2228,7 +2636,7 @@ func (x *GroupRegistryServiceListRequest) String() string {
 func (*GroupRegistryServiceListRequest) ProtoMessage() {}
 
 func (x *GroupRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[48]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[56]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2241,7 +2649,7 @@ func (x *GroupRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GroupRegistryServiceListRequest.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceListRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{48}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{56}
 }
 
 type GroupRegistryServiceListResponse struct {
@@ -2255,7 +2663,7 @@ type GroupRegistryServiceListResponse struct {
 func (x *GroupRegistryServiceListResponse) Reset() {
 	*x = GroupRegistryServiceListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[49]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[57]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2268,7 +2676,7 @@ func (x *GroupRegistryServiceListResponse) String() string {
 func (*GroupRegistryServiceListResponse) ProtoMessage() {}
 
 func (x *GroupRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[49]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[57]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2281,7 +2689,7 @@ func (x *GroupRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GroupRegistryServiceListResponse.ProtoReflect.Descriptor instead.
 func (*GroupRegistryServiceListResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{49}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{57}
 }
 
 func (x *GroupRegistryServiceListResponse) GetGroup() []*v1.Group {
@@ -2291,6 +2699,100 @@ func (x *GroupRegistryServiceListResponse) GetGroup() []*v1.Group {
 	return nil
 }
 
+type GroupRegistryServiceExistRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceExistRequest) Reset() {
+	*x = GroupRegistryServiceExistRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[58]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GroupRegistryServiceExistRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceExistRequest) ProtoMessage() {}
+
+func (x *GroupRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[58]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GroupRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{58}
+}
+
+func (x *GroupRegistryServiceExistRequest) GetGroup() string {
+	if x != nil {
+		return x.Group
+	}
+	return ""
+}
+
+type GroupRegistryServiceExistResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	HasGroup bool `protobuf:"varint,1,opt,name=has_group,json=hasGroup,proto3" json:"has_group,omitempty"`
+}
+
+func (x *GroupRegistryServiceExistResponse) Reset() {
+	*x = GroupRegistryServiceExistResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[59]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GroupRegistryServiceExistResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceExistResponse) ProtoMessage() {}
+
+func (x *GroupRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[59]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GroupRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{59}
+}
+
+func (x *GroupRegistryServiceExistResponse) GetHasGroup() bool {
+	if x != nil {
+		return x.HasGroup
+	}
+	return false
+}
+
 type TopNAggregationRegistryServiceCreateRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2302,7 +2804,7 @@ type TopNAggregationRegistryServiceCreateRequest struct {
 func (x *TopNAggregationRegistryServiceCreateRequest) Reset() {
 	*x = TopNAggregationRegistryServiceCreateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[50]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[60]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2315,7 +2817,7 @@ func (x *TopNAggregationRegistryServiceCreateRequest) String() string {
 func (*TopNAggregationRegistryServiceCreateRequest) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[50]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[60]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2328,7 +2830,7 @@ func (x *TopNAggregationRegistryServiceCreateRequest) ProtoReflect() protoreflec
 
 // Deprecated: Use TopNAggregationRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{50}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{60}
 }
 
 func (x *TopNAggregationRegistryServiceCreateRequest) GetTopNAggregation() *TopNAggregation {
@@ -2347,7 +2849,7 @@ type TopNAggregationRegistryServiceCreateResponse struct {
 func (x *TopNAggregationRegistryServiceCreateResponse) Reset() {
 	*x = TopNAggregationRegistryServiceCreateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[51]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[61]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2360,7 +2862,7 @@ func (x *TopNAggregationRegistryServiceCreateResponse) String() string {
 func (*TopNAggregationRegistryServiceCreateResponse) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[51]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[61]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2373,7 +2875,7 @@ func (x *TopNAggregationRegistryServiceCreateResponse) ProtoReflect() protorefle
 
 // Deprecated: Use TopNAggregationRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{51}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{61}
 }
 
 type TopNAggregationRegistryServiceUpdateRequest struct {
@@ -2387,7 +2889,7 @@ type TopNAggregationRegistryServiceUpdateRequest struct {
 func (x *TopNAggregationRegistryServiceUpdateRequest) Reset() {
 	*x = TopNAggregationRegistryServiceUpdateRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[52]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[62]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2400,7 +2902,7 @@ func (x *TopNAggregationRegistryServiceUpdateRequest) String() string {
 func (*TopNAggregationRegistryServiceUpdateRequest) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[52]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[62]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2413,7 +2915,7 @@ func (x *TopNAggregationRegistryServiceUpdateRequest) ProtoReflect() protoreflec
 
 // Deprecated: Use TopNAggregationRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{52}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{62}
 }
 
 func (x *TopNAggregationRegistryServiceUpdateRequest) GetTopNAggregation() *TopNAggregation {
@@ -2432,7 +2934,7 @@ type TopNAggregationRegistryServiceUpdateResponse struct {
 func (x *TopNAggregationRegistryServiceUpdateResponse) Reset() {
 	*x = TopNAggregationRegistryServiceUpdateResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[53]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[63]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2445,7 +2947,7 @@ func (x *TopNAggregationRegistryServiceUpdateResponse) String() string {
 func (*TopNAggregationRegistryServiceUpdateResponse) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[53]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[63]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2458,7 +2960,7 @@ func (x *TopNAggregationRegistryServiceUpdateResponse) ProtoReflect() protorefle
 
 // Deprecated: Use TopNAggregationRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{53}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{63}
 }
 
 type TopNAggregationRegistryServiceDeleteRequest struct {
@@ -2472,7 +2974,7 @@ type TopNAggregationRegistryServiceDeleteRequest struct {
 func (x *TopNAggregationRegistryServiceDeleteRequest) Reset() {
 	*x = TopNAggregationRegistryServiceDeleteRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[54]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[64]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2485,7 +2987,7 @@ func (x *TopNAggregationRegistryServiceDeleteRequest) String() string {
 func (*TopNAggregationRegistryServiceDeleteRequest) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[54]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[64]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2498,7 +3000,7 @@ func (x *TopNAggregationRegistryServiceDeleteRequest) ProtoReflect() protoreflec
 
 // Deprecated: Use TopNAggregationRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{54}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{64}
 }
 
 func (x *TopNAggregationRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
@@ -2519,7 +3021,7 @@ type TopNAggregationRegistryServiceDeleteResponse struct {
 func (x *TopNAggregationRegistryServiceDeleteResponse) Reset() {
 	*x = TopNAggregationRegistryServiceDeleteResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[55]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[65]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2532,7 +3034,7 @@ func (x *TopNAggregationRegistryServiceDeleteResponse) String() string {
 func (*TopNAggregationRegistryServiceDeleteResponse) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[55]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[65]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2545,7 +3047,7 @@ func (x *TopNAggregationRegistryServiceDeleteResponse) ProtoReflect() protorefle
 
 // Deprecated: Use TopNAggregationRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{55}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{65}
 }
 
 func (x *TopNAggregationRegistryServiceDeleteResponse) GetDeleted() bool {
@@ -2566,7 +3068,7 @@ type TopNAggregationRegistryServiceGetRequest struct {
 func (x *TopNAggregationRegistryServiceGetRequest) Reset() {
 	*x = TopNAggregationRegistryServiceGetRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[56]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[66]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2579,7 +3081,7 @@ func (x *TopNAggregationRegistryServiceGetRequest) String() string {
 func (*TopNAggregationRegistryServiceGetRequest) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[56]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[66]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2592,7 +3094,7 @@ func (x *TopNAggregationRegistryServiceGetRequest) ProtoReflect() protoreflect.M
 
 // Deprecated: Use TopNAggregationRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{56}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{66}
 }
 
 func (x *TopNAggregationRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
@@ -2613,7 +3115,7 @@ type TopNAggregationRegistryServiceGetResponse struct {
 func (x *TopNAggregationRegistryServiceGetResponse) Reset() {
 	*x = TopNAggregationRegistryServiceGetResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[57]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[67]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2626,7 +3128,7 @@ func (x *TopNAggregationRegistryServiceGetResponse) String() string {
 func (*TopNAggregationRegistryServiceGetResponse) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[57]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[67]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2639,7 +3141,7 @@ func (x *TopNAggregationRegistryServiceGetResponse) ProtoReflect() protoreflect.
 
 // Deprecated: Use TopNAggregationRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{57}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{67}
 }
 
 func (x *TopNAggregationRegistryServiceGetResponse) GetTopNAggregation() *TopNAggregation {
@@ -2660,7 +3162,7 @@ type TopNAggregationRegistryServiceListRequest struct {
 func (x *TopNAggregationRegistryServiceListRequest) Reset() {
 	*x = TopNAggregationRegistryServiceListRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[58]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[68]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2673,7 +3175,7 @@ func (x *TopNAggregationRegistryServiceListRequest) String() string {
 func (*TopNAggregationRegistryServiceListRequest) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[58]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[68]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2686,7 +3188,7 @@ func (x *TopNAggregationRegistryServiceListRequest) ProtoReflect() protoreflect.
 
 // Deprecated: Use TopNAggregationRegistryServiceListRequest.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceListRequest) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{58}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{68}
 }
 
 func (x *TopNAggregationRegistryServiceListRequest) GetGroup() string {
@@ -2707,7 +3209,7 @@ type TopNAggregationRegistryServiceListResponse struct {
 func (x *TopNAggregationRegistryServiceListResponse) Reset() {
 	*x = TopNAggregationRegistryServiceListResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[59]
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[69]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2720,7 +3222,7 @@ func (x *TopNAggregationRegistryServiceListResponse) String() string {
 func (*TopNAggregationRegistryServiceListResponse) ProtoMessage() {}
 
 func (x *TopNAggregationRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[59]
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[69]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2733,7 +3235,7 @@ func (x *TopNAggregationRegistryServiceListResponse) ProtoReflect() protoreflect
 
 // Deprecated: Use TopNAggregationRegistryServiceListResponse.ProtoReflect.Descriptor instead.
 func (*TopNAggregationRegistryServiceListResponse) Descriptor() ([]byte, []int) {
-	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{59}
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{69}
 }
 
 func (x *TopNAggregationRegistryServiceListResponse) GetTopNAggregation() []*TopNAggregation {
@@ -2743,30 +3245,132 @@ func (x *TopNAggregationRegistryServiceListResponse) GetTopNAggregation() []*Top
 	return nil
 }
 
-var File_banyandb_database_v1_rpc_proto protoreflect.FileDescriptor
+type TopNAggregationRegistryServiceExistRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-var file_banyandb_database_v1_rpc_proto_rawDesc = []byte{
-	0x0a, 0x1e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x12, 0x14, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x21, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
-	0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68,
-	0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f,
-	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
-	0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x22, 0x53, 0x74, 0x72, 0x65,
-	0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34,
-	0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
-	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
-	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74,
-	0x72, 0x65, 0x61, 0x6d, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a, 0x22, 0x53,
+	Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *TopNAggregationRegistryServiceExistRequest) Reset() {
+	*x = TopNAggregationRegistryServiceExistRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[70]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TopNAggregationRegistryServiceExistRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TopNAggregationRegistryServiceExistRequest) ProtoMessage() {}
+
+func (x *TopNAggregationRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[70]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TopNAggregationRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*TopNAggregationRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{70}
+}
+
+func (x *TopNAggregationRegistryServiceExistRequest) GetMetadata() *v1.Metadata {
+	if x != nil {
+		return x.Metadata
+	}
+	return nil
+}
+
+type TopNAggregationRegistryServiceExistResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	HasGroup           bool `protobuf:"varint,1,opt,name=has_group,json=hasGroup,proto3" json:"has_group,omitempty"`
+	HasTopNAggregation bool `protobuf:"varint,2,opt,name=has_top_n_aggregation,json=hasTopNAggregation,proto3" json:"has_top_n_aggregation,omitempty"`
+}
+
+func (x *TopNAggregationRegistryServiceExistResponse) Reset() {
+	*x = TopNAggregationRegistryServiceExistResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_database_v1_rpc_proto_msgTypes[71]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TopNAggregationRegistryServiceExistResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TopNAggregationRegistryServiceExistResponse) ProtoMessage() {}
+
+func (x *TopNAggregationRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_database_v1_rpc_proto_msgTypes[71]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TopNAggregationRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*TopNAggregationRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{71}
+}
+
+func (x *TopNAggregationRegistryServiceExistResponse) GetHasGroup() bool {
+	if x != nil {
+		return x.HasGroup
+	}
+	return false
+}
+
+func (x *TopNAggregationRegistryServiceExistResponse) GetHasTopNAggregation() bool {
+	if x != nil {
+		return x.HasTopNAggregation
+	}
+	return false
+}
+
+var File_banyandb_database_v1_rpc_proto protoreflect.FileDescriptor
+
+var file_banyandb_database_v1_rpc_proto_rawDesc = []byte{
+	0x0a, 0x1e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62,
+	0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x14, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x21, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68,
+	0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x62, 0x61, 0x6e, 0x79, 0x61,
+	0x6e, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,
+	0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x22, 0x53, 0x74, 0x72, 0x65,
+	0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34,
+	0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74,
+	0x72, 0x65, 0x61, 0x6d, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
+	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a, 0x22, 0x53,
 	0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
 	0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 	0x74, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
@@ -2796,178 +3400,230 @@ var file_banyandb_database_v1_rpc_proto_rawDesc = []byte{
 	0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
 	0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
 	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06,
-	0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x38, 0x0a, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72,
-	0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70,
-	0x22, 0x59, 0x0a, 0x21, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18,
-	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
-	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72,
-	0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x84, 0x01, 0x0a, 0x2c,
-	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x12,
-	0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69,
-	0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-	0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69,
-	0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x2d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
-	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
-	0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75,
-	0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
-	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
-	0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52,
-	0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x2d, 0x49, 0x6e,
-	0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x2c, 0x49,
-	0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d,
+	0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x5d, 0x0a, 0x21, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45,
+	0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d,
 	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
 	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
 	0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x49, 0x0a, 0x2d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x22, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68,
+	0x61, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08,
+	0x68, 0x61, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f,
+	0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61,
+	0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x38, 0x0a, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61,
+	0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75,
+	0x70, 0x22, 0x59, 0x0a, 0x21, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74,
+	0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x84, 0x01, 0x0a,
+	0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a,
+	0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x2d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+	0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
 	0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64,
-	0x22, 0x65, 0x0a, 0x29, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e,
-	0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
-	0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x82, 0x01, 0x0a, 0x2a, 0x49, 0x6e, 0x64, 0x65,
-	0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f,
-	0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
-	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
-	0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65,
-	0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x42, 0x0a, 0x2a,
+	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72,
+	0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+	0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
+	0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x2d, 0x49,
+	0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x2c,
 	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72,
-	0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70,
-	0x22, 0x83, 0x01, 0x0a, 0x2b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44,
+	0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08,
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x49, 0x0a, 0x2d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
+	0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x64, 0x22, 0x65, 0x0a, 0x29, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69,
 	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62,
-	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62,
-	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e,
-	0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
-	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x67, 0x0a, 0x25, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
+	0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38,
+	0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08,
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x82, 0x01, 0x0a, 0x2a, 0x49, 0x6e, 0x64,
+	0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
+	0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64,
+	0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x42, 0x0a,
+	0x2a, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75,
+	0x70, 0x22, 0x83, 0x01, 0x0a, 0x2b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
+	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f,
+	0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e,
+	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69,
+	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+	0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x67, 0x0a, 0x2b, 0x49, 0x6e, 0x64, 0x65, 0x78,
+	0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+	0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x22, 0x80, 0x01, 0x0a, 0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69,
+	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x33,
+	0x0a, 0x16, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65,
+	0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13,
+	0x68, 0x61, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x22, 0x67, 0x0a, 0x25, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0a,
+	0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+	0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x28, 0x0a, 0x26,
+	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x25, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
 	0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
 	0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20,
 	0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
 	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
 	0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22,
 	0x28, 0x0a, 0x26, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x25, 0x49, 0x6e, 0x64,
+	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x25, 0x49, 0x6e, 0x64,
 	0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e,
-	0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
-	0x6c, 0x65, 0x22, 0x28, 0x0a, 0x26, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x25,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x26,
 	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
 	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
-	0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22,
-	0x42, 0x0a, 0x26, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x64, 0x22, 0x5e, 0x0a, 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61,
-	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
-	0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x22, 0x65, 0x0a, 0x23, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x69, 0x6e,
-	0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
-	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
-	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52,
-	0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x3b, 0x0a, 0x23, 0x49, 0x6e,
-	0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x66, 0x0a, 0x24, 0x49, 0x6e, 0x64, 0x65, 0x78,
-	0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
-	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
-	0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22,
-	0x5e, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d,
-	0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22,
-	0x26, 0x0a, 0x24, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75,
-	0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37,
-	0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07,
-	0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x65, 0x61, 0x73, 0x75,
-	0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x5f, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
-	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x22, 0x40, 0x0a, 0x24, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x64, 0x22, 0x5c, 0x0a, 0x20, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x22, 0x5e, 0x0a, 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67,
 	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
 	0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
 	0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
 	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x22, 0x5c, 0x0a, 0x21, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
-	0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x39,
-	0x0a, 0x21, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x5d, 0x0a, 0x22, 0x4d, 0x65, 0x61,
+	0x22, 0x65, 0x0a, 0x23, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61,
+	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e,
+	0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x3b, 0x0a, 0x23, 0x49, 0x6e, 0x64, 0x65, 0x78,
+	0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14,
+	0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x22, 0x66, 0x0a, 0x24, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+	0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a,
+	0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+	0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x60, 0x0a, 0x24,
+	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+	0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6a,
+	0x0a, 0x25, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x47,
+	0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65,
+	0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61,
+	0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x5e, 0x0a, 0x23, 0x4d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72,
+	0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x5e, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61,
+	0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e,
+	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
+	0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75,
+	0x72, 0x65, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x23, 0x4d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x24, 0x4d,
+	0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x5c, 0x0a,
+	0x20, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x21, 0x4d,
+	0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+	0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
+	0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x39, 0x0a, 0x21, 0x4d, 0x65, 0x61,
 	0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
-	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52,
-	0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x54, 0x0a, 0x21, 0x47, 0x72, 0x6f, 0x75,
+	0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14,
+	0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x22, 0x5d, 0x0a, 0x22, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61,
+	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73,
+	0x75, 0x72, 0x65, 0x22, 0x5e, 0x0a, 0x22, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65,
+	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61,
+	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+	0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+	0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65,
+	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61,
+	0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68,
+	0x61, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x5f, 0x6d,
+	0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61,
+	0x73, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x54, 0x0a, 0x21, 0x47, 0x72, 0x6f, 0x75,
 	0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
 	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a,
 	0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62,
@@ -3007,194 +3663,233 @@ var file_banyandb_database_v1_rpc_proto_rawDesc = []byte{
 	0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e,
 	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
 	0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22,
-	0x80, 0x01, 0x0a, 0x2b, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x51, 0x0a, 0x11, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x61, 0x6e,
-	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
-	0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x0f, 0x74, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x2c, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x2b, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65,
-	0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x51, 0x0a, 0x11, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x5f, 0x61, 0x67, 0x67, 0x72,
-	0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
-	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
-	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x2c, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67,
-	0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x2b, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67,
-	0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
-	0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48,
-	0x0a, 0x2c, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18,
-	0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x64, 0x0a, 0x28, 0x54, 0x6f, 0x70, 0x4e,
-	0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
-	0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7e,
-	0x0a, 0x29, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x11, 0x74,
+	0x38, 0x0a, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x40, 0x0a, 0x21, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b,
+	0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x80, 0x01, 0x0a, 0x2b,
+	0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x11, 0x74,
 	0x6f, 0x70, 0x5f, 0x6e, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
 	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
 	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f,
 	0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74,
-	0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x41,
-	0x0a, 0x29, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
+	0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e,
+	0x0a, 0x2c, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
 	0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67,
-	0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75,
-	0x70, 0x22, 0x7f, 0x0a, 0x2a, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80,
+	0x01, 0x0a, 0x2b, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51,
+	0x0a, 0x11, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x0f, 0x74, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x22, 0x2e, 0x0a, 0x2c, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x67, 0x0a, 0x2b, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
 	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x51, 0x0a, 0x11, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x61, 0x6e,
+	0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x48, 0x0a, 0x2c, 0x54, 0x6f,
+	0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x64, 0x22, 0x64, 0x0a, 0x28, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72,
+	0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7e, 0x0a, 0x29, 0x54, 0x6f,
+	0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x11, 0x74, 0x6f, 0x70, 0x5f, 0x6e,
+	0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67,
+	0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74, 0x6f, 0x70, 0x4e, 0x41,
+	0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x41, 0x0a, 0x29, 0x54, 0x6f,
+	0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x7f, 0x0a,
+	0x2a, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x11, 0x74,
+	0x6f, 0x70, 0x5f, 0x6e, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f,
+	0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x74,
+	0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x66,
+	0x0a, 0x2a, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08,
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7d, 0x0a, 0x2b, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67,
+	0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x72, 0x6f,
+	0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x12, 0x31, 0x0a, 0x15, 0x68, 0x61, 0x73, 0x5f, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x5f,
+	0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x12, 0x68, 0x61, 0x73, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x90, 0x08, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x9b, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e,
 	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
-	0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x0f, 0x74, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x32, 0x94, 0x07, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67,
-	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9b, 0x01, 0x0a,
-	0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53,
-	0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
-	0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72,
-	0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,
-	0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x55,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65,
+	0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72,
+	0x65, 0x61, 0x6d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01,
+	0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82,
+	0xd3, 0xe4, 0x93, 0x02, 0x45, 0x1a, 0x40, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61,
+	0x6d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d,
+	0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xb9, 0x01, 0x0a, 0x06, 0x44,
+	0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
 	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72,
 	0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 	0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
 	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67,
-	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x45, 0x1a, 0x40, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x73,
-	0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x6d, 0x65,
-	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x73,
-	0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e,
-	0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xb9, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65,
-	0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
-	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62,
-	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x2a,
-	0x32, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x73, 0x63, 0x68, 0x65,
-	0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f,
-	0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61,
-	0x6d, 0x65, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x35, 0x2e, 0x62, 0x61,
-	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
-	0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
-	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x73,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x34, 0x2a, 0x32, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x73,
 	0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e,
 	0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12,
-	0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67,
-	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53,
-	0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74,
-	0x72, 0x65, 0x61, 0x6d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74,
-	0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x32, 0xd6, 0x08, 0x0a, 0x1f, 0x49, 0x6e,
-	0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbb, 0x01,
-	0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x62,
-	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e,
-	0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x69,
-	0x6e, 0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e,
-	0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0x82, 0x02, 0x0a, 0x06,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e,
-	0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x62, 0x61, 0x6e,
+	0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x35,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69,
+	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72,
+	0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82,
+	0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61,
+	0x6d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64,
+	0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x04, 0x4c, 0x69,
+	0x73, 0x74, 0x12, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e,
 	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
-	0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69,
-	0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x1a, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64,
-	0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f,
-	0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75,
-	0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65,
-	0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x6d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a,
-	0x12, 0xd9, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61,
+	0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31,
+	0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c,
+	0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x12, 0x7a, 0x0a, 0x05,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72,
+	0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69,
+	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe7, 0x09, 0x0a, 0x1f, 0x49, 0x6e, 0x64,
+	0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbb, 0x01, 0x0a,
+	0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49,
+	0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x62, 0x61,
 	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
 	0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64,
 	0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x43, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
-	0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x2a, 0x3e, 0x2f, 0x76,
-	0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e,
-	0x64, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65,
-	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xd0, 0x01, 0x0a,
-	0x03, 0x47, 0x65, 0x74, 0x12, 0x3f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
-	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65,
-	0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e,
+	0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
+	0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0x82, 0x02, 0x0a, 0x06, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
 	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64,
 	0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67,
-	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12,
-	0x3e, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d,
-	0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b,
-	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f,
-	0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12,
-	0xc0, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c,
-	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x62, 0x61, 0x6e,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x1a, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65,
+	0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x73,
+	0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c,
+	0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x64, 0x65, 0x78,
+	0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12,
+	0xd9, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e,
 	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
 	0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69,
 	0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82,
-	0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78,
-	0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x63,
-	0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75,
-	0x70, 0x7d, 0x32, 0xd1, 0x07, 0x0a, 0x18, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+	0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
+	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x2a, 0x3e, 0x2f, 0x76, 0x31,
+	0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61,
+	0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xd0, 0x01, 0x0a, 0x03,
+	0x47, 0x65, 0x74, 0x12, 0x3f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
+	0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73,
+	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65,
+	0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69,
+	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e,
+	0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62,
+	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b,
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xc0,
+	0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49,
+	0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e,
+	0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d,
+	0x72, 0x75, 0x6c, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x63, 0x68,
+	0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70,
+	0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x41, 0x2e, 0x62, 0x61,
+	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
+	0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64,
+	0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
+	0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x32, 0xd4, 0x08, 0x0a, 0x18, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
 	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
 	0xa5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x2e, 0x62, 0x61, 0x6e,
 	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
@@ -3255,172 +3950,204 @@ var file_banyandb_database_v1_rpc_proto_rawDesc = []byte{
 	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
 	0x25, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2d, 0x72, 0x75, 0x6c,
 	0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b,
-	0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x32, 0xa6, 0x07, 0x0a, 0x16, 0x4d, 0x65, 0x61, 0x73, 0x75,
-	0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x12, 0x9e, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x62,
+	0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x12, 0x80, 0x01, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74,
+	0x12, 0x3a, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+	0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x62,
 	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d,
-	0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31,
-	0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a,
-	0x01, 0x2a, 0x12, 0xcf, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e,
-	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
-	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x1a, 0x43, 0x2f, 0x76,
-	0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
-	0x2f, 0x7b, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x61, 0x73, 0x75,
-	0x72, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65,
-	0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xbc, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12,
+	0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa4, 0x08, 0x0a, 0x16, 0x4d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12,
 	0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
 	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65,
-	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c,
-	0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x62, 0x61, 0x6e,
+	0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x62, 0x61, 0x6e,
 	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
 	0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x2a, 0x33,
+	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12,
 	0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65,
-	0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f,
-	0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61,
-	0x6d, 0x65, 0x7d, 0x12, 0xb3, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x36, 0x2e, 0x62, 0x61,
+	0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x12, 0xcf, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x12, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x62, 0x61,
 	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
 	0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
-	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75,
-	0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3,
-	0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72,
-	0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x04, 0x4c, 0x69,
-	0x73, 0x74, 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x1a,
+	0x43, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63, 0x68,
+	0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2e, 0x6d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e,
+	0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xbc, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x12, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
 	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72,
 	0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e,
+	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69,
+	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x35, 0x2a, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73,
+	0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e,
+	0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb3, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x36,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
+	0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61,
+	0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x2f, 0x7b, 0x6d, 0x65,
+	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa3, 0x01, 0x0a,
+	0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61,
+	0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22,
+	0x12, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75,
+	0x70, 0x7d, 0x12, 0x7c, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x38, 0x2e, 0x62, 0x61,
 	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
 	0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f,
-	0x76, 0x31, 0x2f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x32,
-	0xb1, 0x06, 0x0a, 0x14, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
-	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62,
-	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10,
-	0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
-	0x3a, 0x01, 0x2a, 0x12, 0xae, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37,
-	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
-	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47,
-	0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x67,
-	0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x67, 0x72, 0x6f,
-	0x75, 0x70, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65,
-	0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61,
+	0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x32, 0xab, 0x07, 0x0a, 0x14, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x06, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75,
+	0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e,
+	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22,
+	0x10, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d,
+	0x61, 0x3a, 0x01, 0x2a, 0x12, 0xae, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12,
 	0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
 	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
 	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
 	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 	0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x76, 0x31, 0x2f,
+	0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f,
 	0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x67, 0x72,
-	0x6f, 0x75, 0x70, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x34, 0x2e, 0x62,
+	0x6f, 0x75, 0x70, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d,
+	0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x9d, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x76, 0x31,
+	0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x34, 0x2e,
+	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47,
+	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x12, 0x95, 0x01, 0x0a,
+	0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x35, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x62,
 	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
 	0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
-	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x35, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
-	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02,
-	0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68,
-	0x65, 0x6d, 0x61, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x04,
-	0x4c, 0x69, 0x73, 0x74, 0x12, 0x35, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
-	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75,
-	0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x62, 0x61,
-	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e,
-	0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31,
-	0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x69,
-	0x73, 0x74, 0x73, 0x32, 0xeb, 0x05, 0x0a, 0x1e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72,
-	0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74,
-	0x65, 0x12, 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76,
+	0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c,
+	0x69, 0x73, 0x74, 0x73, 0x12, 0x78, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x36, 0x2e,
+	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f,
+	0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xfa,
+	0x06, 0x0a, 0x1e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+	0x65, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x41, 0x2e, 0x62,
+	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65,
+	0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x41,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
 	0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67,
 	0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
-	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e,
-	0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x12, 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x12, 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72,
+	0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
 	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41,
 	0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+	0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12,
+	0x3e, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65,
+	0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x3f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65,
+	0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x62, 0x61, 0x6e,
+	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
+	0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a,
+	0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
 	0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f,
 	0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67,
-	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
-	0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70,
-	0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69,
-	0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+	0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
 	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 	0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
-	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a,
-	0x03, 0x47, 0x65, 0x74, 0x12, 0x3e, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
-	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e,
-	0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
-	0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e,
-	0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f,
-	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
-	0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
-	0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4e, 0x41, 0x67, 0x67, 0x72, 0x65,
-	0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x42, 0x7b, 0x0a, 0x2a, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e,
-	0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
-	0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x5a,
-	0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63,
-	0x68, 0x65, 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61,
-	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2f, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
-	0x73, 0x65, 0x2f, 0x76, 0x31, 0x92, 0x41, 0x06, 0x22, 0x04, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x7b, 0x0a, 0x2a, 0x6f,
+	0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+	0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75,
+	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x73, 0x6b, 0x79,
+	0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x6e, 0x79, 0x61,
+	0x6e, 0x64, 0x62, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x92,
+	0x41, 0x06, 0x22, 0x04, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3435,7 +4162,7 @@ func file_banyandb_database_v1_rpc_proto_rawDescGZIP() []byte {
 	return file_banyandb_database_v1_rpc_proto_rawDescData
 }
 
-var file_banyandb_database_v1_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 60)
+var file_banyandb_database_v1_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 72)
 var file_banyandb_database_v1_rpc_proto_goTypes = []interface{}{
 	(*StreamRegistryServiceCreateRequest)(nil),            // 0: banyandb.database.v1.StreamRegistryServiceCreateRequest
 	(*StreamRegistryServiceCreateResponse)(nil),           // 1: banyandb.database.v1.StreamRegistryServiceCreateResponse
@@ -3445,166 +4172,195 @@ var file_banyandb_database_v1_rpc_proto_goTypes = []interface{}{
 	(*StreamRegistryServiceDeleteResponse)(nil),           // 5: banyandb.database.v1.StreamRegistryServiceDeleteResponse
 	(*StreamRegistryServiceGetRequest)(nil),               // 6: banyandb.database.v1.StreamRegistryServiceGetRequest
 	(*StreamRegistryServiceGetResponse)(nil),              // 7: banyandb.database.v1.StreamRegistryServiceGetResponse
-	(*StreamRegistryServiceListRequest)(nil),              // 8: banyandb.database.v1.StreamRegistryServiceListRequest
-	(*StreamRegistryServiceListResponse)(nil),             // 9: banyandb.database.v1.StreamRegistryServiceListResponse
-	(*IndexRuleBindingRegistryServiceCreateRequest)(nil),  // 10: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest
-	(*IndexRuleBindingRegistryServiceCreateResponse)(nil), // 11: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateResponse
-	(*IndexRuleBindingRegistryServiceUpdateRequest)(nil),  // 12: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest
-	(*IndexRuleBindingRegistryServiceUpdateResponse)(nil), // 13: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateResponse
-	(*IndexRuleBindingRegistryServiceDeleteRequest)(nil),  // 14: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest
-	(*IndexRuleBindingRegistryServiceDeleteResponse)(nil), // 15: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteResponse
-	(*IndexRuleBindingRegistryServiceGetRequest)(nil),     // 16: banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest
-	(*IndexRuleBindingRegistryServiceGetResponse)(nil),    // 17: banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse
-	(*IndexRuleBindingRegistryServiceListRequest)(nil),    // 18: banyandb.database.v1.IndexRuleBindingRegistryServiceListRequest
-	(*IndexRuleBindingRegistryServiceListResponse)(nil),   // 19: banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse
-	(*IndexRuleRegistryServiceCreateRequest)(nil),         // 20: banyandb.database.v1.IndexRuleRegistryServiceCreateRequest
-	(*IndexRuleRegistryServiceCreateResponse)(nil),        // 21: banyandb.database.v1.IndexRuleRegistryServiceCreateResponse
-	(*IndexRuleRegistryServiceUpdateRequest)(nil),         // 22: banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest
-	(*IndexRuleRegistryServiceUpdateResponse)(nil),        // 23: banyandb.database.v1.IndexRuleRegistryServiceUpdateResponse
-	(*IndexRuleRegistryServiceDeleteRequest)(nil),         // 24: banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest
-	(*IndexRuleRegistryServiceDeleteResponse)(nil),        // 25: banyandb.database.v1.IndexRuleRegistryServiceDeleteResponse
-	(*IndexRuleRegistryServiceGetRequest)(nil),            // 26: banyandb.database.v1.IndexRuleRegistryServiceGetRequest
-	(*IndexRuleRegistryServiceGetResponse)(nil),           // 27: banyandb.database.v1.IndexRuleRegistryServiceGetResponse
-	(*IndexRuleRegistryServiceListRequest)(nil),           // 28: banyandb.database.v1.IndexRuleRegistryServiceListRequest
-	(*IndexRuleRegistryServiceListResponse)(nil),          // 29: banyandb.database.v1.IndexRuleRegistryServiceListResponse
-	(*MeasureRegistryServiceCreateRequest)(nil),           // 30: banyandb.database.v1.MeasureRegistryServiceCreateRequest
-	(*MeasureRegistryServiceCreateResponse)(nil),          // 31: banyandb.database.v1.MeasureRegistryServiceCreateResponse
-	(*MeasureRegistryServiceUpdateRequest)(nil),           // 32: banyandb.database.v1.MeasureRegistryServiceUpdateRequest
-	(*MeasureRegistryServiceUpdateResponse)(nil),          // 33: banyandb.database.v1.MeasureRegistryServiceUpdateResponse
-	(*MeasureRegistryServiceDeleteRequest)(nil),           // 34: banyandb.database.v1.MeasureRegistryServiceDeleteRequest
-	(*MeasureRegistryServiceDeleteResponse)(nil),          // 35: banyandb.database.v1.MeasureRegistryServiceDeleteResponse
-	(*MeasureRegistryServiceGetRequest)(nil),              // 36: banyandb.database.v1.MeasureRegistryServiceGetRequest
-	(*MeasureRegistryServiceGetResponse)(nil),             // 37: banyandb.database.v1.MeasureRegistryServiceGetResponse
-	(*MeasureRegistryServiceListRequest)(nil),             // 38: banyandb.database.v1.MeasureRegistryServiceListRequest
-	(*MeasureRegistryServiceListResponse)(nil),            // 39: banyandb.database.v1.MeasureRegistryServiceListResponse
-	(*GroupRegistryServiceCreateRequest)(nil),             // 40: banyandb.database.v1.GroupRegistryServiceCreateRequest
-	(*GroupRegistryServiceCreateResponse)(nil),            // 41: banyandb.database.v1.GroupRegistryServiceCreateResponse
-	(*GroupRegistryServiceUpdateRequest)(nil),             // 42: banyandb.database.v1.GroupRegistryServiceUpdateRequest
-	(*GroupRegistryServiceUpdateResponse)(nil),            // 43: banyandb.database.v1.GroupRegistryServiceUpdateResponse
-	(*GroupRegistryServiceDeleteRequest)(nil),             // 44: banyandb.database.v1.GroupRegistryServiceDeleteRequest
-	(*GroupRegistryServiceDeleteResponse)(nil),            // 45: banyandb.database.v1.GroupRegistryServiceDeleteResponse
-	(*GroupRegistryServiceGetRequest)(nil),                // 46: banyandb.database.v1.GroupRegistryServiceGetRequest
-	(*GroupRegistryServiceGetResponse)(nil),               // 47: banyandb.database.v1.GroupRegistryServiceGetResponse
-	(*GroupRegistryServiceListRequest)(nil),               // 48: banyandb.database.v1.GroupRegistryServiceListRequest
-	(*GroupRegistryServiceListResponse)(nil),              // 49: banyandb.database.v1.GroupRegistryServiceListResponse
-	(*TopNAggregationRegistryServiceCreateRequest)(nil),   // 50: banyandb.database.v1.TopNAggregationRegistryServiceCreateRequest
-	(*TopNAggregationRegistryServiceCreateResponse)(nil),  // 51: banyandb.database.v1.TopNAggregationRegistryServiceCreateResponse
-	(*TopNAggregationRegistryServiceUpdateRequest)(nil),   // 52: banyandb.database.v1.TopNAggregationRegistryServiceUpdateRequest
-	(*TopNAggregationRegistryServiceUpdateResponse)(nil),  // 53: banyandb.database.v1.TopNAggregationRegistryServiceUpdateResponse
-	(*TopNAggregationRegistryServiceDeleteRequest)(nil),   // 54: banyandb.database.v1.TopNAggregationRegistryServiceDeleteRequest
-	(*TopNAggregationRegistryServiceDeleteResponse)(nil),  // 55: banyandb.database.v1.TopNAggregationRegistryServiceDeleteResponse
-	(*TopNAggregationRegistryServiceGetRequest)(nil),      // 56: banyandb.database.v1.TopNAggregationRegistryServiceGetRequest
-	(*TopNAggregationRegistryServiceGetResponse)(nil),     // 57: banyandb.database.v1.TopNAggregationRegistryServiceGetResponse
-	(*TopNAggregationRegistryServiceListRequest)(nil),     // 58: banyandb.database.v1.TopNAggregationRegistryServiceListRequest
-	(*TopNAggregationRegistryServiceListResponse)(nil),    // 59: banyandb.database.v1.TopNAggregationRegistryServiceListResponse
-	(*Stream)(nil),           // 60: banyandb.database.v1.Stream
-	(*v1.Metadata)(nil),      // 61: banyandb.common.v1.Metadata
-	(*IndexRuleBinding)(nil), // 62: banyandb.database.v1.IndexRuleBinding
-	(*IndexRule)(nil),        // 63: banyandb.database.v1.IndexRule
-	(*Measure)(nil),          // 64: banyandb.database.v1.Measure
-	(*v1.Group)(nil),         // 65: banyandb.common.v1.Group
-	(*TopNAggregation)(nil),  // 66: banyandb.database.v1.TopNAggregation
+	(*StreamRegistryServiceExistRequest)(nil),             // 8: banyandb.database.v1.StreamRegistryServiceExistRequest
+	(*StreamRegistryServiceExistResponse)(nil),            // 9: banyandb.database.v1.StreamRegistryServiceExistResponse
+	(*StreamRegistryServiceListRequest)(nil),              // 10: banyandb.database.v1.StreamRegistryServiceListRequest
+	(*StreamRegistryServiceListResponse)(nil),             // 11: banyandb.database.v1.StreamRegistryServiceListResponse
+	(*IndexRuleBindingRegistryServiceCreateRequest)(nil),  // 12: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest
+	(*IndexRuleBindingRegistryServiceCreateResponse)(nil), // 13: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateResponse
+	(*IndexRuleBindingRegistryServiceUpdateRequest)(nil),  // 14: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest
+	(*IndexRuleBindingRegistryServiceUpdateResponse)(nil), // 15: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateResponse
+	(*IndexRuleBindingRegistryServiceDeleteRequest)(nil),  // 16: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest
+	(*IndexRuleBindingRegistryServiceDeleteResponse)(nil), // 17: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteResponse
+	(*IndexRuleBindingRegistryServiceGetRequest)(nil),     // 18: banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest
+	(*IndexRuleBindingRegistryServiceGetResponse)(nil),    // 19: banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse
+	(*IndexRuleBindingRegistryServiceListRequest)(nil),    // 20: banyandb.database.v1.IndexRuleBindingRegistryServiceListRequest
+	(*IndexRuleBindingRegistryServiceListResponse)(nil),   // 21: banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse
+	(*IndexRuleBindingRegistryServiceExistRequest)(nil),   // 22: banyandb.database.v1.IndexRuleBindingRegistryServiceExistRequest
+	(*IndexRuleBindingRegistryServiceExistResponse)(nil),  // 23: banyandb.database.v1.IndexRuleBindingRegistryServiceExistResponse
+	(*IndexRuleRegistryServiceCreateRequest)(nil),         // 24: banyandb.database.v1.IndexRuleRegistryServiceCreateRequest
+	(*IndexRuleRegistryServiceCreateResponse)(nil),        // 25: banyandb.database.v1.IndexRuleRegistryServiceCreateResponse
+	(*IndexRuleRegistryServiceUpdateRequest)(nil),         // 26: banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest
+	(*IndexRuleRegistryServiceUpdateResponse)(nil),        // 27: banyandb.database.v1.IndexRuleRegistryServiceUpdateResponse
+	(*IndexRuleRegistryServiceDeleteRequest)(nil),         // 28: banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest
+	(*IndexRuleRegistryServiceDeleteResponse)(nil),        // 29: banyandb.database.v1.IndexRuleRegistryServiceDeleteResponse
+	(*IndexRuleRegistryServiceGetRequest)(nil),            // 30: banyandb.database.v1.IndexRuleRegistryServiceGetRequest
+	(*IndexRuleRegistryServiceGetResponse)(nil),           // 31: banyandb.database.v1.IndexRuleRegistryServiceGetResponse
+	(*IndexRuleRegistryServiceListRequest)(nil),           // 32: banyandb.database.v1.IndexRuleRegistryServiceListRequest
+	(*IndexRuleRegistryServiceListResponse)(nil),          // 33: banyandb.database.v1.IndexRuleRegistryServiceListResponse
+	(*IndexRuleRegistryServiceExistRequest)(nil),          // 34: banyandb.database.v1.IndexRuleRegistryServiceExistRequest
+	(*IndexRuleRegistryServiceExistResponse)(nil),         // 35: banyandb.database.v1.IndexRuleRegistryServiceExistResponse
+	(*MeasureRegistryServiceCreateRequest)(nil),           // 36: banyandb.database.v1.MeasureRegistryServiceCreateRequest
+	(*MeasureRegistryServiceCreateResponse)(nil),          // 37: banyandb.database.v1.MeasureRegistryServiceCreateResponse
+	(*MeasureRegistryServiceUpdateRequest)(nil),           // 38: banyandb.database.v1.MeasureRegistryServiceUpdateRequest
+	(*MeasureRegistryServiceUpdateResponse)(nil),          // 39: banyandb.database.v1.MeasureRegistryServiceUpdateResponse
+	(*MeasureRegistryServiceDeleteRequest)(nil),           // 40: banyandb.database.v1.MeasureRegistryServiceDeleteRequest
+	(*MeasureRegistryServiceDeleteResponse)(nil),          // 41: banyandb.database.v1.MeasureRegistryServiceDeleteResponse
+	(*MeasureRegistryServiceGetRequest)(nil),              // 42: banyandb.database.v1.MeasureRegistryServiceGetRequest
+	(*MeasureRegistryServiceGetResponse)(nil),             // 43: banyandb.database.v1.MeasureRegistryServiceGetResponse
+	(*MeasureRegistryServiceListRequest)(nil),             // 44: banyandb.database.v1.MeasureRegistryServiceListRequest
+	(*MeasureRegistryServiceListResponse)(nil),            // 45: banyandb.database.v1.MeasureRegistryServiceListResponse
+	(*MeasureRegistryServiceExistRequest)(nil),            // 46: banyandb.database.v1.MeasureRegistryServiceExistRequest
+	(*MeasureRegistryServiceExistResponse)(nil),           // 47: banyandb.database.v1.MeasureRegistryServiceExistResponse
+	(*GroupRegistryServiceCreateRequest)(nil),             // 48: banyandb.database.v1.GroupRegistryServiceCreateRequest
+	(*GroupRegistryServiceCreateResponse)(nil),            // 49: banyandb.database.v1.GroupRegistryServiceCreateResponse
+	(*GroupRegistryServiceUpdateRequest)(nil),             // 50: banyandb.database.v1.GroupRegistryServiceUpdateRequest
+	(*GroupRegistryServiceUpdateResponse)(nil),            // 51: banyandb.database.v1.GroupRegistryServiceUpdateResponse
+	(*GroupRegistryServiceDeleteRequest)(nil),             // 52: banyandb.database.v1.GroupRegistryServiceDeleteRequest
+	(*GroupRegistryServiceDeleteResponse)(nil),            // 53: banyandb.database.v1.GroupRegistryServiceDeleteResponse
+	(*GroupRegistryServiceGetRequest)(nil),                // 54: banyandb.database.v1.GroupRegistryServiceGetRequest
+	(*GroupRegistryServiceGetResponse)(nil),               // 55: banyandb.database.v1.GroupRegistryServiceGetResponse
+	(*GroupRegistryServiceListRequest)(nil),               // 56: banyandb.database.v1.GroupRegistryServiceListRequest
+	(*GroupRegistryServiceListResponse)(nil),              // 57: banyandb.database.v1.GroupRegistryServiceListResponse
+	(*GroupRegistryServiceExistRequest)(nil),              // 58: banyandb.database.v1.GroupRegistryServiceExistRequest
+	(*GroupRegistryServiceExistResponse)(nil),             // 59: banyandb.database.v1.GroupRegistryServiceExistResponse
+	(*TopNAggregationRegistryServiceCreateRequest)(nil),   // 60: banyandb.database.v1.TopNAggregationRegistryServiceCreateRequest
+	(*TopNAggregationRegistryServiceCreateResponse)(nil),  // 61: banyandb.database.v1.TopNAggregationRegistryServiceCreateResponse
+	(*TopNAggregationRegistryServiceUpdateRequest)(nil),   // 62: banyandb.database.v1.TopNAggregationRegistryServiceUpdateRequest
+	(*TopNAggregationRegistryServiceUpdateResponse)(nil),  // 63: banyandb.database.v1.TopNAggregationRegistryServiceUpdateResponse
+	(*TopNAggregationRegistryServiceDeleteRequest)(nil),   // 64: banyandb.database.v1.TopNAggregationRegistryServiceDeleteRequest
+	(*TopNAggregationRegistryServiceDeleteResponse)(nil),  // 65: banyandb.database.v1.TopNAggregationRegistryServiceDeleteResponse
+	(*TopNAggregationRegistryServiceGetRequest)(nil),      // 66: banyandb.database.v1.TopNAggregationRegistryServiceGetRequest
+	(*TopNAggregationRegistryServiceGetResponse)(nil),     // 67: banyandb.database.v1.TopNAggregationRegistryServiceGetResponse
+	(*TopNAggregationRegistryServiceListRequest)(nil),     // 68: banyandb.database.v1.TopNAggregationRegistryServiceListRequest
+	(*TopNAggregationRegistryServiceListResponse)(nil),    // 69: banyandb.database.v1.TopNAggregationRegistryServiceListResponse
+	(*TopNAggregationRegistryServiceExistRequest)(nil),    // 70: banyandb.database.v1.TopNAggregationRegistryServiceExistRequest
+	(*TopNAggregationRegistryServiceExistResponse)(nil),   // 71: banyandb.database.v1.TopNAggregationRegistryServiceExistResponse
+	(*Stream)(nil),           // 72: banyandb.database.v1.Stream
+	(*v1.Metadata)(nil),      // 73: banyandb.common.v1.Metadata
+	(*IndexRuleBinding)(nil), // 74: banyandb.database.v1.IndexRuleBinding
+	(*IndexRule)(nil),        // 75: banyandb.database.v1.IndexRule
+	(*Measure)(nil),          // 76: banyandb.database.v1.Measure
+	(*v1.Group)(nil),         // 77: banyandb.common.v1.Group
+	(*TopNAggregation)(nil),  // 78: banyandb.database.v1.TopNAggregation
 }
 var file_banyandb_database_v1_rpc_proto_depIdxs = []int32{
-	60, // 0: banyandb.database.v1.StreamRegistryServiceCreateRequest.stream:type_name -> banyandb.database.v1.Stream
-	60, // 1: banyandb.database.v1.StreamRegistryServiceUpdateRequest.stream:type_name -> banyandb.database.v1.Stream
-	61, // 2: banyandb.database.v1.StreamRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	61, // 3: banyandb.database.v1.StreamRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	60, // 4: banyandb.database.v1.StreamRegistryServiceGetResponse.stream:type_name -> banyandb.database.v1.Stream
-	60, // 5: banyandb.database.v1.StreamRegistryServiceListResponse.stream:type_name -> banyandb.database.v1.Stream
-	62, // 6: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
-	62, // 7: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
-	61, // 8: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	61, // 9: banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	62, // 10: banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
-	62, // 11: banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
-	63, // 12: banyandb.database.v1.IndexRuleRegistryServiceCreateRequest.index_rule:type_name -> banyandb.database.v1.IndexRule
-	63, // 13: banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest.index_rule:type_name -> banyandb.database.v1.IndexRule
-	61, // 14: banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	61, // 15: banyandb.database.v1.IndexRuleRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	63, // 16: banyandb.database.v1.IndexRuleRegistryServiceGetResponse.index_rule:type_name -> banyandb.database.v1.IndexRule
-	63, // 17: banyandb.database.v1.IndexRuleRegistryServiceListResponse.index_rule:type_name -> banyandb.database.v1.IndexRule
-	64, // 18: banyandb.database.v1.MeasureRegistryServiceCreateRequest.measure:type_name -> banyandb.database.v1.Measure
-	64, // 19: banyandb.database.v1.MeasureRegistryServiceUpdateRequest.measure:type_name -> banyandb.database.v1.Measure
-	61, // 20: banyandb.database.v1.MeasureRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	61, // 21: banyandb.database.v1.MeasureRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	64, // 22: banyandb.database.v1.MeasureRegistryServiceGetResponse.measure:type_name -> banyandb.database.v1.Measure
-	64, // 23: banyandb.database.v1.MeasureRegistryServiceListResponse.measure:type_name -> banyandb.database.v1.Measure
-	65, // 24: banyandb.database.v1.GroupRegistryServiceCreateRequest.group:type_name -> banyandb.common.v1.Group
-	65, // 25: banyandb.database.v1.GroupRegistryServiceUpdateRequest.group:type_name -> banyandb.common.v1.Group
-	65, // 26: banyandb.database.v1.GroupRegistryServiceGetResponse.group:type_name -> banyandb.common.v1.Group
-	65, // 27: banyandb.database.v1.GroupRegistryServiceListResponse.group:type_name -> banyandb.common.v1.Group
-	66, // 28: banyandb.database.v1.TopNAggregationRegistryServiceCreateRequest.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
-	66, // 29: banyandb.database.v1.TopNAggregationRegistryServiceUpdateRequest.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
-	61, // 30: banyandb.database.v1.TopNAggregationRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	61, // 31: banyandb.database.v1.TopNAggregationRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
-	66, // 32: banyandb.database.v1.TopNAggregationRegistryServiceGetResponse.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
-	66, // 33: banyandb.database.v1.TopNAggregationRegistryServiceListResponse.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
-	0,  // 34: banyandb.database.v1.StreamRegistryService.Create:input_type -> banyandb.database.v1.StreamRegistryServiceCreateRequest
-	2,  // 35: banyandb.database.v1.StreamRegistryService.Update:input_type -> banyandb.database.v1.StreamRegistryServiceUpdateRequest
-	4,  // 36: banyandb.database.v1.StreamRegistryService.Delete:input_type -> banyandb.database.v1.StreamRegistryServiceDeleteRequest
-	6,  // 37: banyandb.database.v1.StreamRegistryService.Get:input_type -> banyandb.database.v1.StreamRegistryServiceGetRequest
-	8,  // 38: banyandb.database.v1.StreamRegistryService.List:input_type -> banyandb.database.v1.StreamRegistryServiceListRequest
-	10, // 39: banyandb.database.v1.IndexRuleBindingRegistryService.Create:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest
-	12, // 40: banyandb.database.v1.IndexRuleBindingRegistryService.Update:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest
-	14, // 41: banyandb.database.v1.IndexRuleBindingRegistryService.Delete:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest
-	16, // 42: banyandb.database.v1.IndexRuleBindingRegistryService.Get:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest
-	18, // 43: banyandb.database.v1.IndexRuleBindingRegistryService.List:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceListRequest
-	20, // 44: banyandb.database.v1.IndexRuleRegistryService.Create:input_type -> banyandb.database.v1.IndexRuleRegistryServiceCreateRequest
-	22, // 45: banyandb.database.v1.IndexRuleRegistryService.Update:input_type -> banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest
-	24, // 46: banyandb.database.v1.IndexRuleRegistryService.Delete:input_type -> banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest
-	26, // 47: banyandb.database.v1.IndexRuleRegistryService.Get:input_type -> banyandb.database.v1.IndexRuleRegistryServiceGetRequest
-	28, // 48: banyandb.database.v1.IndexRuleRegistryService.List:input_type -> banyandb.database.v1.IndexRuleRegistryServiceListRequest
-	30, // 49: banyandb.database.v1.MeasureRegistryService.Create:input_type -> banyandb.database.v1.MeasureRegistryServiceCreateRequest
-	32, // 50: banyandb.database.v1.MeasureRegistryService.Update:input_type -> banyandb.database.v1.MeasureRegistryServiceUpdateRequest
-	34, // 51: banyandb.database.v1.MeasureRegistryService.Delete:input_type -> banyandb.database.v1.MeasureRegistryServiceDeleteRequest
-	36, // 52: banyandb.database.v1.MeasureRegistryService.Get:input_type -> banyandb.database.v1.MeasureRegistryServiceGetRequest
-	38, // 53: banyandb.database.v1.MeasureRegistryService.List:input_type -> banyandb.database.v1.MeasureRegistryServiceListRequest
-	40, // 54: banyandb.database.v1.GroupRegistryService.Create:input_type -> banyandb.database.v1.GroupRegistryServiceCreateRequest
-	42, // 55: banyandb.database.v1.GroupRegistryService.Update:input_type -> banyandb.database.v1.GroupRegistryServiceUpdateRequest
-	44, // 56: banyandb.database.v1.GroupRegistryService.Delete:input_type -> banyandb.database.v1.GroupRegistryServiceDeleteRequest
-	46, // 57: banyandb.database.v1.GroupRegistryService.Get:input_type -> banyandb.database.v1.GroupRegistryServiceGetRequest
-	48, // 58: banyandb.database.v1.GroupRegistryService.List:input_type -> banyandb.database.v1.GroupRegistryServiceListRequest
-	50, // 59: banyandb.database.v1.TopNAggregationRegistryService.Create:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceCreateRequest
-	52, // 60: banyandb.database.v1.TopNAggregationRegistryService.Update:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceUpdateRequest
-	54, // 61: banyandb.database.v1.TopNAggregationRegistryService.Delete:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceDeleteRequest
-	56, // 62: banyandb.database.v1.TopNAggregationRegistryService.Get:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceGetRequest
-	58, // 63: banyandb.database.v1.TopNAggregationRegistryService.List:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceListRequest
-	1,  // 64: banyandb.database.v1.StreamRegistryService.Create:output_type -> banyandb.database.v1.StreamRegistryServiceCreateResponse
-	3,  // 65: banyandb.database.v1.StreamRegistryService.Update:output_type -> banyandb.database.v1.StreamRegistryServiceUpdateResponse
-	5,  // 66: banyandb.database.v1.StreamRegistryService.Delete:output_type -> banyandb.database.v1.StreamRegistryServiceDeleteResponse
-	7,  // 67: banyandb.database.v1.StreamRegistryService.Get:output_type -> banyandb.database.v1.StreamRegistryServiceGetResponse
-	9,  // 68: banyandb.database.v1.StreamRegistryService.List:output_type -> banyandb.database.v1.StreamRegistryServiceListResponse
-	11, // 69: banyandb.database.v1.IndexRuleBindingRegistryService.Create:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceCreateResponse
-	13, // 70: banyandb.database.v1.IndexRuleBindingRegistryService.Update:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateResponse
-	15, // 71: banyandb.database.v1.IndexRuleBindingRegistryService.Delete:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteResponse
-	17, // 72: banyandb.database.v1.IndexRuleBindingRegistryService.Get:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse
-	19, // 73: banyandb.database.v1.IndexRuleBindingRegistryService.List:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse
-	21, // 74: banyandb.database.v1.IndexRuleRegistryService.Create:output_type -> banyandb.database.v1.IndexRuleRegistryServiceCreateResponse
-	23, // 75: banyandb.database.v1.IndexRuleRegistryService.Update:output_type -> banyandb.database.v1.IndexRuleRegistryServiceUpdateResponse
-	25, // 76: banyandb.database.v1.IndexRuleRegistryService.Delete:output_type -> banyandb.database.v1.IndexRuleRegistryServiceDeleteResponse
-	27, // 77: banyandb.database.v1.IndexRuleRegistryService.Get:output_type -> banyandb.database.v1.IndexRuleRegistryServiceGetResponse
-	29, // 78: banyandb.database.v1.IndexRuleRegistryService.List:output_type -> banyandb.database.v1.IndexRuleRegistryServiceListResponse
-	31, // 79: banyandb.database.v1.MeasureRegistryService.Create:output_type -> banyandb.database.v1.MeasureRegistryServiceCreateResponse
-	33, // 80: banyandb.database.v1.MeasureRegistryService.Update:output_type -> banyandb.database.v1.MeasureRegistryServiceUpdateResponse
-	35, // 81: banyandb.database.v1.MeasureRegistryService.Delete:output_type -> banyandb.database.v1.MeasureRegistryServiceDeleteResponse
-	37, // 82: banyandb.database.v1.MeasureRegistryService.Get:output_type -> banyandb.database.v1.MeasureRegistryServiceGetResponse
-	39, // 83: banyandb.database.v1.MeasureRegistryService.List:output_type -> banyandb.database.v1.MeasureRegistryServiceListResponse
-	41, // 84: banyandb.database.v1.GroupRegistryService.Create:output_type -> banyandb.database.v1.GroupRegistryServiceCreateResponse
-	43, // 85: banyandb.database.v1.GroupRegistryService.Update:output_type -> banyandb.database.v1.GroupRegistryServiceUpdateResponse
-	45, // 86: banyandb.database.v1.GroupRegistryService.Delete:output_type -> banyandb.database.v1.GroupRegistryServiceDeleteResponse
-	47, // 87: banyandb.database.v1.GroupRegistryService.Get:output_type -> banyandb.database.v1.GroupRegistryServiceGetResponse
-	49, // 88: banyandb.database.v1.GroupRegistryService.List:output_type -> banyandb.database.v1.GroupRegistryServiceListResponse
-	51, // 89: banyandb.database.v1.TopNAggregationRegistryService.Create:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceCreateResponse
-	53, // 90: banyandb.database.v1.TopNAggregationRegistryService.Update:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceUpdateResponse
-	55, // 91: banyandb.database.v1.TopNAggregationRegistryService.Delete:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceDeleteResponse
-	57, // 92: banyandb.database.v1.TopNAggregationRegistryService.Get:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceGetResponse
-	59, // 93: banyandb.database.v1.TopNAggregationRegistryService.List:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceListResponse
-	64, // [64:94] is the sub-list for method output_type
-	34, // [34:64] is the sub-list for method input_type
-	34, // [34:34] is the sub-list for extension type_name
-	34, // [34:34] is the sub-list for extension extendee
-	0,  // [0:34] is the sub-list for field type_name
+	72, // 0: banyandb.database.v1.StreamRegistryServiceCreateRequest.stream:type_name -> banyandb.database.v1.Stream
+	72, // 1: banyandb.database.v1.StreamRegistryServiceUpdateRequest.stream:type_name -> banyandb.database.v1.Stream
+	73, // 2: banyandb.database.v1.StreamRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	73, // 3: banyandb.database.v1.StreamRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	72, // 4: banyandb.database.v1.StreamRegistryServiceGetResponse.stream:type_name -> banyandb.database.v1.Stream
+	73, // 5: banyandb.database.v1.StreamRegistryServiceExistRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	72, // 6: banyandb.database.v1.StreamRegistryServiceListResponse.stream:type_name -> banyandb.database.v1.Stream
+	74, // 7: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+	74, // 8: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+	73, // 9: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	73, // 10: banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	74, // 11: banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+	74, // 12: banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+	73, // 13: banyandb.database.v1.IndexRuleBindingRegistryServiceExistRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	75, // 14: banyandb.database.v1.IndexRuleRegistryServiceCreateRequest.index_rule:type_name -> banyandb.database.v1.IndexRule
+	75, // 15: banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest.index_rule:type_name -> banyandb.database.v1.IndexRule
+	73, // 16: banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	73, // 17: banyandb.database.v1.IndexRuleRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	75, // 18: banyandb.database.v1.IndexRuleRegistryServiceGetResponse.index_rule:type_name -> banyandb.database.v1.IndexRule
+	75, // 19: banyandb.database.v1.IndexRuleRegistryServiceListResponse.index_rule:type_name -> banyandb.database.v1.IndexRule
+	73, // 20: banyandb.database.v1.IndexRuleRegistryServiceExistRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	76, // 21: banyandb.database.v1.MeasureRegistryServiceCreateRequest.measure:type_name -> banyandb.database.v1.Measure
+	76, // 22: banyandb.database.v1.MeasureRegistryServiceUpdateRequest.measure:type_name -> banyandb.database.v1.Measure
+	73, // 23: banyandb.database.v1.MeasureRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	73, // 24: banyandb.database.v1.MeasureRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	76, // 25: banyandb.database.v1.MeasureRegistryServiceGetResponse.measure:type_name -> banyandb.database.v1.Measure
+	76, // 26: banyandb.database.v1.MeasureRegistryServiceListResponse.measure:type_name -> banyandb.database.v1.Measure
+	73, // 27: banyandb.database.v1.MeasureRegistryServiceExistRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	77, // 28: banyandb.database.v1.GroupRegistryServiceCreateRequest.group:type_name -> banyandb.common.v1.Group
+	77, // 29: banyandb.database.v1.GroupRegistryServiceUpdateRequest.group:type_name -> banyandb.common.v1.Group
+	77, // 30: banyandb.database.v1.GroupRegistryServiceGetResponse.group:type_name -> banyandb.common.v1.Group
+	77, // 31: banyandb.database.v1.GroupRegistryServiceListResponse.group:type_name -> banyandb.common.v1.Group
+	78, // 32: banyandb.database.v1.TopNAggregationRegistryServiceCreateRequest.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
+	78, // 33: banyandb.database.v1.TopNAggregationRegistryServiceUpdateRequest.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
+	73, // 34: banyandb.database.v1.TopNAggregationRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	73, // 35: banyandb.database.v1.TopNAggregationRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	78, // 36: banyandb.database.v1.TopNAggregationRegistryServiceGetResponse.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
+	78, // 37: banyandb.database.v1.TopNAggregationRegistryServiceListResponse.top_n_aggregation:type_name -> banyandb.database.v1.TopNAggregation
+	73, // 38: banyandb.database.v1.TopNAggregationRegistryServiceExistRequest.metadata:type_name -> banyandb.common.v1.Metadata
+	0,  // 39: banyandb.database.v1.StreamRegistryService.Create:input_type -> banyandb.database.v1.StreamRegistryServiceCreateRequest
+	2,  // 40: banyandb.database.v1.StreamRegistryService.Update:input_type -> banyandb.database.v1.StreamRegistryServiceUpdateRequest
+	4,  // 41: banyandb.database.v1.StreamRegistryService.Delete:input_type -> banyandb.database.v1.StreamRegistryServiceDeleteRequest
+	6,  // 42: banyandb.database.v1.StreamRegistryService.Get:input_type -> banyandb.database.v1.StreamRegistryServiceGetRequest
+	10, // 43: banyandb.database.v1.StreamRegistryService.List:input_type -> banyandb.database.v1.StreamRegistryServiceListRequest
+	8,  // 44: banyandb.database.v1.StreamRegistryService.Exist:input_type -> banyandb.database.v1.StreamRegistryServiceExistRequest
+	12, // 45: banyandb.database.v1.IndexRuleBindingRegistryService.Create:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest
+	14, // 46: banyandb.database.v1.IndexRuleBindingRegistryService.Update:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest
+	16, // 47: banyandb.database.v1.IndexRuleBindingRegistryService.Delete:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest
+	18, // 48: banyandb.database.v1.IndexRuleBindingRegistryService.Get:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest
+	20, // 49: banyandb.database.v1.IndexRuleBindingRegistryService.List:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceListRequest
+	22, // 50: banyandb.database.v1.IndexRuleBindingRegistryService.Exist:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceExistRequest
+	24, // 51: banyandb.database.v1.IndexRuleRegistryService.Create:input_type -> banyandb.database.v1.IndexRuleRegistryServiceCreateRequest
+	26, // 52: banyandb.database.v1.IndexRuleRegistryService.Update:input_type -> banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest
+	28, // 53: banyandb.database.v1.IndexRuleRegistryService.Delete:input_type -> banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest
+	30, // 54: banyandb.database.v1.IndexRuleRegistryService.Get:input_type -> banyandb.database.v1.IndexRuleRegistryServiceGetRequest
+	32, // 55: banyandb.database.v1.IndexRuleRegistryService.List:input_type -> banyandb.database.v1.IndexRuleRegistryServiceListRequest
+	34, // 56: banyandb.database.v1.IndexRuleRegistryService.Exist:input_type -> banyandb.database.v1.IndexRuleRegistryServiceExistRequest
+	36, // 57: banyandb.database.v1.MeasureRegistryService.Create:input_type -> banyandb.database.v1.MeasureRegistryServiceCreateRequest
+	38, // 58: banyandb.database.v1.MeasureRegistryService.Update:input_type -> banyandb.database.v1.MeasureRegistryServiceUpdateRequest
+	40, // 59: banyandb.database.v1.MeasureRegistryService.Delete:input_type -> banyandb.database.v1.MeasureRegistryServiceDeleteRequest
+	42, // 60: banyandb.database.v1.MeasureRegistryService.Get:input_type -> banyandb.database.v1.MeasureRegistryServiceGetRequest
+	44, // 61: banyandb.database.v1.MeasureRegistryService.List:input_type -> banyandb.database.v1.MeasureRegistryServiceListRequest
+	46, // 62: banyandb.database.v1.MeasureRegistryService.Exist:input_type -> banyandb.database.v1.MeasureRegistryServiceExistRequest
+	48, // 63: banyandb.database.v1.GroupRegistryService.Create:input_type -> banyandb.database.v1.GroupRegistryServiceCreateRequest
+	50, // 64: banyandb.database.v1.GroupRegistryService.Update:input_type -> banyandb.database.v1.GroupRegistryServiceUpdateRequest
+	52, // 65: banyandb.database.v1.GroupRegistryService.Delete:input_type -> banyandb.database.v1.GroupRegistryServiceDeleteRequest
+	54, // 66: banyandb.database.v1.GroupRegistryService.Get:input_type -> banyandb.database.v1.GroupRegistryServiceGetRequest
+	56, // 67: banyandb.database.v1.GroupRegistryService.List:input_type -> banyandb.database.v1.GroupRegistryServiceListRequest
+	58, // 68: banyandb.database.v1.GroupRegistryService.Exist:input_type -> banyandb.database.v1.GroupRegistryServiceExistRequest
+	60, // 69: banyandb.database.v1.TopNAggregationRegistryService.Create:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceCreateRequest
+	62, // 70: banyandb.database.v1.TopNAggregationRegistryService.Update:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceUpdateRequest
+	64, // 71: banyandb.database.v1.TopNAggregationRegistryService.Delete:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceDeleteRequest
+	66, // 72: banyandb.database.v1.TopNAggregationRegistryService.Get:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceGetRequest
+	68, // 73: banyandb.database.v1.TopNAggregationRegistryService.List:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceListRequest
+	70, // 74: banyandb.database.v1.TopNAggregationRegistryService.Exist:input_type -> banyandb.database.v1.TopNAggregationRegistryServiceExistRequest
+	1,  // 75: banyandb.database.v1.StreamRegistryService.Create:output_type -> banyandb.database.v1.StreamRegistryServiceCreateResponse
+	3,  // 76: banyandb.database.v1.StreamRegistryService.Update:output_type -> banyandb.database.v1.StreamRegistryServiceUpdateResponse
+	5,  // 77: banyandb.database.v1.StreamRegistryService.Delete:output_type -> banyandb.database.v1.StreamRegistryServiceDeleteResponse
+	7,  // 78: banyandb.database.v1.StreamRegistryService.Get:output_type -> banyandb.database.v1.StreamRegistryServiceGetResponse
+	11, // 79: banyandb.database.v1.StreamRegistryService.List:output_type -> banyandb.database.v1.StreamRegistryServiceListResponse
+	9,  // 80: banyandb.database.v1.StreamRegistryService.Exist:output_type -> banyandb.database.v1.StreamRegistryServiceExistResponse
+	13, // 81: banyandb.database.v1.IndexRuleBindingRegistryService.Create:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceCreateResponse
+	15, // 82: banyandb.database.v1.IndexRuleBindingRegistryService.Update:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateResponse
+	17, // 83: banyandb.database.v1.IndexRuleBindingRegistryService.Delete:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteResponse
+	19, // 84: banyandb.database.v1.IndexRuleBindingRegistryService.Get:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse
+	21, // 85: banyandb.database.v1.IndexRuleBindingRegistryService.List:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse
+	23, // 86: banyandb.database.v1.IndexRuleBindingRegistryService.Exist:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceExistResponse
+	25, // 87: banyandb.database.v1.IndexRuleRegistryService.Create:output_type -> banyandb.database.v1.IndexRuleRegistryServiceCreateResponse
+	27, // 88: banyandb.database.v1.IndexRuleRegistryService.Update:output_type -> banyandb.database.v1.IndexRuleRegistryServiceUpdateResponse
+	29, // 89: banyandb.database.v1.IndexRuleRegistryService.Delete:output_type -> banyandb.database.v1.IndexRuleRegistryServiceDeleteResponse
+	31, // 90: banyandb.database.v1.IndexRuleRegistryService.Get:output_type -> banyandb.database.v1.IndexRuleRegistryServiceGetResponse
+	33, // 91: banyandb.database.v1.IndexRuleRegistryService.List:output_type -> banyandb.database.v1.IndexRuleRegistryServiceListResponse
+	35, // 92: banyandb.database.v1.IndexRuleRegistryService.Exist:output_type -> banyandb.database.v1.IndexRuleRegistryServiceExistResponse
+	37, // 93: banyandb.database.v1.MeasureRegistryService.Create:output_type -> banyandb.database.v1.MeasureRegistryServiceCreateResponse
+	39, // 94: banyandb.database.v1.MeasureRegistryService.Update:output_type -> banyandb.database.v1.MeasureRegistryServiceUpdateResponse
+	41, // 95: banyandb.database.v1.MeasureRegistryService.Delete:output_type -> banyandb.database.v1.MeasureRegistryServiceDeleteResponse
+	43, // 96: banyandb.database.v1.MeasureRegistryService.Get:output_type -> banyandb.database.v1.MeasureRegistryServiceGetResponse
+	45, // 97: banyandb.database.v1.MeasureRegistryService.List:output_type -> banyandb.database.v1.MeasureRegistryServiceListResponse
+	47, // 98: banyandb.database.v1.MeasureRegistryService.Exist:output_type -> banyandb.database.v1.MeasureRegistryServiceExistResponse
+	49, // 99: banyandb.database.v1.GroupRegistryService.Create:output_type -> banyandb.database.v1.GroupRegistryServiceCreateResponse
+	51, // 100: banyandb.database.v1.GroupRegistryService.Update:output_type -> banyandb.database.v1.GroupRegistryServiceUpdateResponse
+	53, // 101: banyandb.database.v1.GroupRegistryService.Delete:output_type -> banyandb.database.v1.GroupRegistryServiceDeleteResponse
+	55, // 102: banyandb.database.v1.GroupRegistryService.Get:output_type -> banyandb.database.v1.GroupRegistryServiceGetResponse
+	57, // 103: banyandb.database.v1.GroupRegistryService.List:output_type -> banyandb.database.v1.GroupRegistryServiceListResponse
+	59, // 104: banyandb.database.v1.GroupRegistryService.Exist:output_type -> banyandb.database.v1.GroupRegistryServiceExistResponse
+	61, // 105: banyandb.database.v1.TopNAggregationRegistryService.Create:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceCreateResponse
+	63, // 106: banyandb.database.v1.TopNAggregationRegistryService.Update:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceUpdateResponse
+	65, // 107: banyandb.database.v1.TopNAggregationRegistryService.Delete:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceDeleteResponse
+	67, // 108: banyandb.database.v1.TopNAggregationRegistryService.Get:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceGetResponse
+	69, // 109: banyandb.database.v1.TopNAggregationRegistryService.List:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceListResponse
+	71, // 110: banyandb.database.v1.TopNAggregationRegistryService.Exist:output_type -> banyandb.database.v1.TopNAggregationRegistryServiceExistResponse
+	75, // [75:111] is the sub-list for method output_type
+	39, // [39:75] is the sub-list for method input_type
+	39, // [39:39] is the sub-list for extension type_name
+	39, // [39:39] is the sub-list for extension extendee
+	0,  // [0:39] is the sub-list for field type_name
 }
 
 func init() { file_banyandb_database_v1_rpc_proto_init() }
@@ -3711,7 +4467,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*StreamRegistryServiceListRequest); i {
+			switch v := v.(*StreamRegistryServiceExistRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3723,7 +4479,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*StreamRegistryServiceListResponse); i {
+			switch v := v.(*StreamRegistryServiceExistResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3735,7 +4491,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceCreateRequest); i {
+			switch v := v.(*StreamRegistryServiceListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3747,7 +4503,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceCreateResponse); i {
+			switch v := v.(*StreamRegistryServiceListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3759,7 +4515,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceUpdateRequest); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceCreateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3771,7 +4527,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceUpdateResponse); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceCreateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3783,7 +4539,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceDeleteRequest); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceUpdateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3795,7 +4551,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceDeleteResponse); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceUpdateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3807,7 +4563,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceGetRequest); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceDeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3819,7 +4575,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceGetResponse); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceDeleteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3831,7 +4587,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceListRequest); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceGetRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3843,7 +4599,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleBindingRegistryServiceListResponse); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceGetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3855,7 +4611,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceCreateRequest); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3867,7 +4623,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceCreateResponse); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3879,7 +4635,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceUpdateRequest); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceExistRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3891,7 +4647,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceUpdateResponse); i {
+			switch v := v.(*IndexRuleBindingRegistryServiceExistResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3903,7 +4659,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceDeleteRequest); i {
+			switch v := v.(*IndexRuleRegistryServiceCreateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3915,7 +4671,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceDeleteResponse); i {
+			switch v := v.(*IndexRuleRegistryServiceCreateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3927,7 +4683,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceGetRequest); i {
+			switch v := v.(*IndexRuleRegistryServiceUpdateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3939,7 +4695,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceGetResponse); i {
+			switch v := v.(*IndexRuleRegistryServiceUpdateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3951,7 +4707,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceListRequest); i {
+			switch v := v.(*IndexRuleRegistryServiceDeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3963,7 +4719,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*IndexRuleRegistryServiceListResponse); i {
+			switch v := v.(*IndexRuleRegistryServiceDeleteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3975,7 +4731,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceCreateRequest); i {
+			switch v := v.(*IndexRuleRegistryServiceGetRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3987,7 +4743,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceCreateResponse); i {
+			switch v := v.(*IndexRuleRegistryServiceGetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3999,7 +4755,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceUpdateRequest); i {
+			switch v := v.(*IndexRuleRegistryServiceListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4011,7 +4767,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceUpdateResponse); i {
+			switch v := v.(*IndexRuleRegistryServiceListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4023,7 +4779,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceDeleteRequest); i {
+			switch v := v.(*IndexRuleRegistryServiceExistRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4035,7 +4791,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceDeleteResponse); i {
+			switch v := v.(*IndexRuleRegistryServiceExistResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4047,7 +4803,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceGetRequest); i {
+			switch v := v.(*MeasureRegistryServiceCreateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4059,7 +4815,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceGetResponse); i {
+			switch v := v.(*MeasureRegistryServiceCreateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4071,7 +4827,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceListRequest); i {
+			switch v := v.(*MeasureRegistryServiceUpdateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4083,7 +4839,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MeasureRegistryServiceListResponse); i {
+			switch v := v.(*MeasureRegistryServiceUpdateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4095,7 +4851,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceCreateRequest); i {
+			switch v := v.(*MeasureRegistryServiceDeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4107,7 +4863,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceCreateResponse); i {
+			switch v := v.(*MeasureRegistryServiceDeleteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4119,7 +4875,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceUpdateRequest); i {
+			switch v := v.(*MeasureRegistryServiceGetRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4131,7 +4887,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceUpdateResponse); i {
+			switch v := v.(*MeasureRegistryServiceGetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4143,7 +4899,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceDeleteRequest); i {
+			switch v := v.(*MeasureRegistryServiceListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4155,7 +4911,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceDeleteResponse); i {
+			switch v := v.(*MeasureRegistryServiceListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4167,7 +4923,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceGetRequest); i {
+			switch v := v.(*MeasureRegistryServiceExistRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4179,7 +4935,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceGetResponse); i {
+			switch v := v.(*MeasureRegistryServiceExistResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4191,7 +4947,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceListRequest); i {
+			switch v := v.(*GroupRegistryServiceCreateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4203,7 +4959,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GroupRegistryServiceListResponse); i {
+			switch v := v.(*GroupRegistryServiceCreateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4215,7 +4971,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceCreateRequest); i {
+			switch v := v.(*GroupRegistryServiceUpdateRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4227,7 +4983,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceCreateResponse); i {
+			switch v := v.(*GroupRegistryServiceUpdateResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4239,7 +4995,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceUpdateRequest); i {
+			switch v := v.(*GroupRegistryServiceDeleteRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4251,7 +5007,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceUpdateResponse); i {
+			switch v := v.(*GroupRegistryServiceDeleteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4263,7 +5019,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceDeleteRequest); i {
+			switch v := v.(*GroupRegistryServiceGetRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4275,7 +5031,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceDeleteResponse); i {
+			switch v := v.(*GroupRegistryServiceGetResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4287,7 +5043,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceGetRequest); i {
+			switch v := v.(*GroupRegistryServiceListRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4299,7 +5055,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceGetResponse); i {
+			switch v := v.(*GroupRegistryServiceListResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4311,7 +5067,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TopNAggregationRegistryServiceListRequest); i {
+			switch v := v.(*GroupRegistryServiceExistRequest); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -4323,6 +5079,126 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			}
 		}
 		file_banyandb_database_v1_rpc_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GroupRegistryServiceExistResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceCreateRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceCreateResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceUpdateRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceUpdateResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceDeleteRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceDeleteResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceGetRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceGetResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceListRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*TopNAggregationRegistryServiceListResponse); i {
 			case 0:
 				return &v.state
@@ -4334,6 +5210,30 @@ func file_banyandb_database_v1_rpc_proto_init() {
 				return nil
 			}
 		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceExistRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_database_v1_rpc_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TopNAggregationRegistryServiceExistResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -4341,7 +5241,7 @@ func file_banyandb_database_v1_rpc_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_banyandb_database_v1_rpc_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   60,
+			NumMessages:   72,
 			NumExtensions: 0,
 			NumServices:   6,
 		},
diff --git a/api/proto/banyandb/database/v1/rpc.pb.validate.go b/api/proto/banyandb/database/v1/rpc.pb.validate.go
index cdb88ec..328ad8c 100644
--- a/api/proto/banyandb/database/v1/rpc.pb.validate.go
+++ b/api/proto/banyandb/database/v1/rpc.pb.validate.go
@@ -1020,6 +1020,249 @@ var _ interface {
 	ErrorName() string
 } = StreamRegistryServiceGetResponseValidationError{}
 
+// Validate checks the field values on StreamRegistryServiceExistRequest with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *StreamRegistryServiceExistRequest) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on StreamRegistryServiceExistRequest
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// StreamRegistryServiceExistRequestMultiError, or nil if none found.
+func (m *StreamRegistryServiceExistRequest) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *StreamRegistryServiceExistRequest) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if all {
+		switch v := interface{}(m.GetMetadata()).(type) {
+		case interface{ ValidateAll() error }:
+			if err := v.ValidateAll(); err != nil {
+				errors = append(errors, StreamRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		case interface{ Validate() error }:
+			if err := v.Validate(); err != nil {
+				errors = append(errors, StreamRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		}
+	} else if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok {
+		if err := v.Validate(); err != nil {
+			return StreamRegistryServiceExistRequestValidationError{
+				field:  "Metadata",
+				reason: "embedded message failed validation",
+				cause:  err,
+			}
+		}
+	}
+
+	if len(errors) > 0 {
+		return StreamRegistryServiceExistRequestMultiError(errors)
+	}
+
+	return nil
+}
+
+// StreamRegistryServiceExistRequestMultiError is an error wrapping multiple
+// validation errors returned by
+// StreamRegistryServiceExistRequest.ValidateAll() if the designated
+// constraints aren't met.
+type StreamRegistryServiceExistRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m StreamRegistryServiceExistRequestMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m StreamRegistryServiceExistRequestMultiError) AllErrors() []error { return m }
+
+// StreamRegistryServiceExistRequestValidationError is the validation error
+// returned by StreamRegistryServiceExistRequest.Validate if the designated
+// constraints aren't met.
+type StreamRegistryServiceExistRequestValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e StreamRegistryServiceExistRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e StreamRegistryServiceExistRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e StreamRegistryServiceExistRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e StreamRegistryServiceExistRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e StreamRegistryServiceExistRequestValidationError) ErrorName() string {
+	return "StreamRegistryServiceExistRequestValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e StreamRegistryServiceExistRequestValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sStreamRegistryServiceExistRequest.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = StreamRegistryServiceExistRequestValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = StreamRegistryServiceExistRequestValidationError{}
+
+// Validate checks the field values on StreamRegistryServiceExistResponse with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *StreamRegistryServiceExistResponse) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on StreamRegistryServiceExistResponse
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// StreamRegistryServiceExistResponseMultiError, or nil if none found.
+func (m *StreamRegistryServiceExistResponse) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *StreamRegistryServiceExistResponse) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	// no validation rules for HasGroup
+
+	// no validation rules for HasStream
+
+	if len(errors) > 0 {
+		return StreamRegistryServiceExistResponseMultiError(errors)
+	}
+
+	return nil
+}
+
+// StreamRegistryServiceExistResponseMultiError is an error wrapping multiple
+// validation errors returned by
+// StreamRegistryServiceExistResponse.ValidateAll() if the designated
+// constraints aren't met.
+type StreamRegistryServiceExistResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m StreamRegistryServiceExistResponseMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m StreamRegistryServiceExistResponseMultiError) AllErrors() []error { return m }
+
+// StreamRegistryServiceExistResponseValidationError is the validation error
+// returned by StreamRegistryServiceExistResponse.Validate if the designated
+// constraints aren't met.
+type StreamRegistryServiceExistResponseValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e StreamRegistryServiceExistResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e StreamRegistryServiceExistResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e StreamRegistryServiceExistResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e StreamRegistryServiceExistResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e StreamRegistryServiceExistResponseValidationError) ErrorName() string {
+	return "StreamRegistryServiceExistResponseValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e StreamRegistryServiceExistResponseValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sStreamRegistryServiceExistResponse.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = StreamRegistryServiceExistResponseValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = StreamRegistryServiceExistResponseValidationError{}
+
 // Validate checks the field values on StreamRegistryServiceListRequest with
 // the rules defined in the proto definition for this message. If any rules
 // are violated, the first error encountered is returned, or nil if there are
@@ -2521,23 +2764,24 @@ var _ interface {
 	ErrorName() string
 } = IndexRuleBindingRegistryServiceListResponseValidationError{}
 
-// Validate checks the field values on IndexRuleRegistryServiceCreateRequest
-// with the rules defined in the proto definition for this message. If any
-// rules are violated, the first error encountered is returned, or nil if
-// there are no violations.
-func (m *IndexRuleRegistryServiceCreateRequest) Validate() error {
+// Validate checks the field values on
+// IndexRuleBindingRegistryServiceExistRequest with the rules defined in the
+// proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *IndexRuleBindingRegistryServiceExistRequest) Validate() error {
 	return m.validate(false)
 }
 
-// ValidateAll checks the field values on IndexRuleRegistryServiceCreateRequest
-// with the rules defined in the proto definition for this message. If any
-// rules are violated, the result is a list of violation errors wrapped in
-// IndexRuleRegistryServiceCreateRequestMultiError, or nil if none found.
-func (m *IndexRuleRegistryServiceCreateRequest) ValidateAll() error {
+// ValidateAll checks the field values on
+// IndexRuleBindingRegistryServiceExistRequest with the rules defined in the
+// proto definition for this message. If any rules are violated, the result is
+// a list of violation errors wrapped in
+// IndexRuleBindingRegistryServiceExistRequestMultiError, or nil if none found.
+func (m *IndexRuleBindingRegistryServiceExistRequest) ValidateAll() error {
 	return m.validate(true)
 }
 
-func (m *IndexRuleRegistryServiceCreateRequest) validate(all bool) error {
+func (m *IndexRuleBindingRegistryServiceExistRequest) validate(all bool) error {
 	if m == nil {
 		return nil
 	}
@@ -2545,28 +2789,28 @@ func (m *IndexRuleRegistryServiceCreateRequest) validate(all bool) error {
 	var errors []error
 
 	if all {
-		switch v := interface{}(m.GetIndexRule()).(type) {
+		switch v := interface{}(m.GetMetadata()).(type) {
 		case interface{ ValidateAll() error }:
 			if err := v.ValidateAll(); err != nil {
-				errors = append(errors, IndexRuleRegistryServiceCreateRequestValidationError{
-					field:  "IndexRule",
+				errors = append(errors, IndexRuleBindingRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
 					reason: "embedded message failed validation",
 					cause:  err,
 				})
 			}
 		case interface{ Validate() error }:
 			if err := v.Validate(); err != nil {
-				errors = append(errors, IndexRuleRegistryServiceCreateRequestValidationError{
-					field:  "IndexRule",
+				errors = append(errors, IndexRuleBindingRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
 					reason: "embedded message failed validation",
 					cause:  err,
 				})
 			}
 		}
-	} else if v, ok := interface{}(m.GetIndexRule()).(interface{ Validate() error }); ok {
+	} else if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok {
 		if err := v.Validate(); err != nil {
-			return IndexRuleRegistryServiceCreateRequestValidationError{
-				field:  "IndexRule",
+			return IndexRuleBindingRegistryServiceExistRequestValidationError{
+				field:  "Metadata",
 				reason: "embedded message failed validation",
 				cause:  err,
 			}
@@ -2574,20 +2818,20 @@ func (m *IndexRuleRegistryServiceCreateRequest) validate(all bool) error {
 	}
 
 	if len(errors) > 0 {
-		return IndexRuleRegistryServiceCreateRequestMultiError(errors)
+		return IndexRuleBindingRegistryServiceExistRequestMultiError(errors)
 	}
 
 	return nil
 }
 
-// IndexRuleRegistryServiceCreateRequestMultiError is an error wrapping
+// IndexRuleBindingRegistryServiceExistRequestMultiError is an error wrapping
 // multiple validation errors returned by
-// IndexRuleRegistryServiceCreateRequest.ValidateAll() if the designated
+// IndexRuleBindingRegistryServiceExistRequest.ValidateAll() if the designated
 // constraints aren't met.
-type IndexRuleRegistryServiceCreateRequestMultiError []error
+type IndexRuleBindingRegistryServiceExistRequestMultiError []error
 
 // Error returns a concatenation of all the error messages it wraps.
-func (m IndexRuleRegistryServiceCreateRequestMultiError) Error() string {
+func (m IndexRuleBindingRegistryServiceExistRequestMultiError) Error() string {
 	var msgs []string
 	for _, err := range m {
 		msgs = append(msgs, err.Error())
@@ -2596,12 +2840,12 @@ func (m IndexRuleRegistryServiceCreateRequestMultiError) Error() string {
 }
 
 // AllErrors returns a list of validation violation errors.
-func (m IndexRuleRegistryServiceCreateRequestMultiError) AllErrors() []error { return m }
+func (m IndexRuleBindingRegistryServiceExistRequestMultiError) AllErrors() []error { return m }
 
-// IndexRuleRegistryServiceCreateRequestValidationError is the validation error
-// returned by IndexRuleRegistryServiceCreateRequest.Validate if the
-// designated constraints aren't met.
-type IndexRuleRegistryServiceCreateRequestValidationError struct {
+// IndexRuleBindingRegistryServiceExistRequestValidationError is the validation
+// error returned by IndexRuleBindingRegistryServiceExistRequest.Validate if
+// the designated constraints aren't met.
+type IndexRuleBindingRegistryServiceExistRequestValidationError struct {
 	field  string
 	reason string
 	cause  error
@@ -2609,24 +2853,24 @@ type IndexRuleRegistryServiceCreateRequestValidationError struct {
 }
 
 // Field function returns field value.
-func (e IndexRuleRegistryServiceCreateRequestValidationError) Field() string { return e.field }
+func (e IndexRuleBindingRegistryServiceExistRequestValidationError) Field() string { return e.field }
 
 // Reason function returns reason value.
-func (e IndexRuleRegistryServiceCreateRequestValidationError) Reason() string { return e.reason }
+func (e IndexRuleBindingRegistryServiceExistRequestValidationError) Reason() string { return e.reason }
 
 // Cause function returns cause value.
-func (e IndexRuleRegistryServiceCreateRequestValidationError) Cause() error { return e.cause }
+func (e IndexRuleBindingRegistryServiceExistRequestValidationError) Cause() error { return e.cause }
 
 // Key function returns key value.
-func (e IndexRuleRegistryServiceCreateRequestValidationError) Key() bool { return e.key }
+func (e IndexRuleBindingRegistryServiceExistRequestValidationError) Key() bool { return e.key }
 
 // ErrorName returns error name.
-func (e IndexRuleRegistryServiceCreateRequestValidationError) ErrorName() string {
-	return "IndexRuleRegistryServiceCreateRequestValidationError"
+func (e IndexRuleBindingRegistryServiceExistRequestValidationError) ErrorName() string {
+	return "IndexRuleBindingRegistryServiceExistRequestValidationError"
 }
 
 // Error satisfies the builtin error interface
-func (e IndexRuleRegistryServiceCreateRequestValidationError) Error() string {
+func (e IndexRuleBindingRegistryServiceExistRequestValidationError) Error() string {
 	cause := ""
 	if e.cause != nil {
 		cause = fmt.Sprintf(" | caused by: %v", e.cause)
@@ -2638,14 +2882,14 @@ func (e IndexRuleRegistryServiceCreateRequestValidationError) Error() string {
 	}
 
 	return fmt.Sprintf(
-		"invalid %sIndexRuleRegistryServiceCreateRequest.%s: %s%s",
+		"invalid %sIndexRuleBindingRegistryServiceExistRequest.%s: %s%s",
 		key,
 		e.field,
 		e.reason,
 		cause)
 }
 
-var _ error = IndexRuleRegistryServiceCreateRequestValidationError{}
+var _ error = IndexRuleBindingRegistryServiceExistRequestValidationError{}
 
 var _ interface {
 	Field() string
@@ -2653,33 +2897,278 @@ var _ interface {
 	Key() bool
 	Cause() error
 	ErrorName() string
-} = IndexRuleRegistryServiceCreateRequestValidationError{}
+} = IndexRuleBindingRegistryServiceExistRequestValidationError{}
 
-// Validate checks the field values on IndexRuleRegistryServiceCreateResponse
-// with the rules defined in the proto definition for this message. If any
-// rules are violated, the first error encountered is returned, or nil if
-// there are no violations.
-func (m *IndexRuleRegistryServiceCreateResponse) Validate() error {
+// Validate checks the field values on
+// IndexRuleBindingRegistryServiceExistResponse with the rules defined in the
+// proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *IndexRuleBindingRegistryServiceExistResponse) Validate() error {
 	return m.validate(false)
 }
 
 // ValidateAll checks the field values on
-// IndexRuleRegistryServiceCreateResponse with the rules defined in the proto
-// definition for this message. If any rules are violated, the result is a
-// list of violation errors wrapped in
-// IndexRuleRegistryServiceCreateResponseMultiError, or nil if none found.
-func (m *IndexRuleRegistryServiceCreateResponse) ValidateAll() error {
+// IndexRuleBindingRegistryServiceExistResponse with the rules defined in the
+// proto definition for this message. If any rules are violated, the result is
+// a list of violation errors wrapped in
+// IndexRuleBindingRegistryServiceExistResponseMultiError, or nil if none found.
+func (m *IndexRuleBindingRegistryServiceExistResponse) ValidateAll() error {
 	return m.validate(true)
 }
 
-func (m *IndexRuleRegistryServiceCreateResponse) validate(all bool) error {
+func (m *IndexRuleBindingRegistryServiceExistResponse) validate(all bool) error {
 	if m == nil {
 		return nil
 	}
 
 	var errors []error
 
-	if len(errors) > 0 {
+	// no validation rules for HasGroup
+
+	// no validation rules for HasIndexRuleBinding
+
+	if len(errors) > 0 {
+		return IndexRuleBindingRegistryServiceExistResponseMultiError(errors)
+	}
+
+	return nil
+}
+
+// IndexRuleBindingRegistryServiceExistResponseMultiError is an error wrapping
+// multiple validation errors returned by
+// IndexRuleBindingRegistryServiceExistResponse.ValidateAll() if the
+// designated constraints aren't met.
+type IndexRuleBindingRegistryServiceExistResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m IndexRuleBindingRegistryServiceExistResponseMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m IndexRuleBindingRegistryServiceExistResponseMultiError) AllErrors() []error { return m }
+
+// IndexRuleBindingRegistryServiceExistResponseValidationError is the
+// validation error returned by
+// IndexRuleBindingRegistryServiceExistResponse.Validate if the designated
+// constraints aren't met.
+type IndexRuleBindingRegistryServiceExistResponseValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e IndexRuleBindingRegistryServiceExistResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e IndexRuleBindingRegistryServiceExistResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e IndexRuleBindingRegistryServiceExistResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e IndexRuleBindingRegistryServiceExistResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e IndexRuleBindingRegistryServiceExistResponseValidationError) ErrorName() string {
+	return "IndexRuleBindingRegistryServiceExistResponseValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e IndexRuleBindingRegistryServiceExistResponseValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sIndexRuleBindingRegistryServiceExistResponse.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = IndexRuleBindingRegistryServiceExistResponseValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = IndexRuleBindingRegistryServiceExistResponseValidationError{}
+
+// Validate checks the field values on IndexRuleRegistryServiceCreateRequest
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the first error encountered is returned, or nil if
+// there are no violations.
+func (m *IndexRuleRegistryServiceCreateRequest) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on IndexRuleRegistryServiceCreateRequest
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// IndexRuleRegistryServiceCreateRequestMultiError, or nil if none found.
+func (m *IndexRuleRegistryServiceCreateRequest) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *IndexRuleRegistryServiceCreateRequest) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if all {
+		switch v := interface{}(m.GetIndexRule()).(type) {
+		case interface{ ValidateAll() error }:
+			if err := v.ValidateAll(); err != nil {
+				errors = append(errors, IndexRuleRegistryServiceCreateRequestValidationError{
+					field:  "IndexRule",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		case interface{ Validate() error }:
+			if err := v.Validate(); err != nil {
+				errors = append(errors, IndexRuleRegistryServiceCreateRequestValidationError{
+					field:  "IndexRule",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		}
+	} else if v, ok := interface{}(m.GetIndexRule()).(interface{ Validate() error }); ok {
+		if err := v.Validate(); err != nil {
+			return IndexRuleRegistryServiceCreateRequestValidationError{
+				field:  "IndexRule",
+				reason: "embedded message failed validation",
+				cause:  err,
+			}
+		}
+	}
+
+	if len(errors) > 0 {
+		return IndexRuleRegistryServiceCreateRequestMultiError(errors)
+	}
+
+	return nil
+}
+
+// IndexRuleRegistryServiceCreateRequestMultiError is an error wrapping
+// multiple validation errors returned by
+// IndexRuleRegistryServiceCreateRequest.ValidateAll() if the designated
+// constraints aren't met.
+type IndexRuleRegistryServiceCreateRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m IndexRuleRegistryServiceCreateRequestMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m IndexRuleRegistryServiceCreateRequestMultiError) AllErrors() []error { return m }
+
+// IndexRuleRegistryServiceCreateRequestValidationError is the validation error
+// returned by IndexRuleRegistryServiceCreateRequest.Validate if the
+// designated constraints aren't met.
+type IndexRuleRegistryServiceCreateRequestValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e IndexRuleRegistryServiceCreateRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e IndexRuleRegistryServiceCreateRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e IndexRuleRegistryServiceCreateRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e IndexRuleRegistryServiceCreateRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e IndexRuleRegistryServiceCreateRequestValidationError) ErrorName() string {
+	return "IndexRuleRegistryServiceCreateRequestValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e IndexRuleRegistryServiceCreateRequestValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sIndexRuleRegistryServiceCreateRequest.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = IndexRuleRegistryServiceCreateRequestValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = IndexRuleRegistryServiceCreateRequestValidationError{}
+
+// Validate checks the field values on IndexRuleRegistryServiceCreateResponse
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the first error encountered is returned, or nil if
+// there are no violations.
+func (m *IndexRuleRegistryServiceCreateResponse) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on
+// IndexRuleRegistryServiceCreateResponse with the rules defined in the proto
+// definition for this message. If any rules are violated, the result is a
+// list of violation errors wrapped in
+// IndexRuleRegistryServiceCreateResponseMultiError, or nil if none found.
+func (m *IndexRuleRegistryServiceCreateResponse) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *IndexRuleRegistryServiceCreateResponse) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if len(errors) > 0 {
 		return IndexRuleRegistryServiceCreateResponseMultiError(errors)
 	}
 
@@ -3757,23 +4246,23 @@ var _ interface {
 	ErrorName() string
 } = IndexRuleRegistryServiceListResponseValidationError{}
 
-// Validate checks the field values on MeasureRegistryServiceCreateRequest with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, the first error encountered is returned, or nil if there are
-// no violations.
-func (m *MeasureRegistryServiceCreateRequest) Validate() error {
+// Validate checks the field values on IndexRuleRegistryServiceExistRequest
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the first error encountered is returned, or nil if
+// there are no violations.
+func (m *IndexRuleRegistryServiceExistRequest) Validate() error {
 	return m.validate(false)
 }
 
-// ValidateAll checks the field values on MeasureRegistryServiceCreateRequest
+// ValidateAll checks the field values on IndexRuleRegistryServiceExistRequest
 // with the rules defined in the proto definition for this message. If any
 // rules are violated, the result is a list of violation errors wrapped in
-// MeasureRegistryServiceCreateRequestMultiError, or nil if none found.
-func (m *MeasureRegistryServiceCreateRequest) ValidateAll() error {
+// IndexRuleRegistryServiceExistRequestMultiError, or nil if none found.
+func (m *IndexRuleRegistryServiceExistRequest) ValidateAll() error {
 	return m.validate(true)
 }
 
-func (m *MeasureRegistryServiceCreateRequest) validate(all bool) error {
+func (m *IndexRuleRegistryServiceExistRequest) validate(all bool) error {
 	if m == nil {
 		return nil
 	}
@@ -3781,28 +4270,28 @@ func (m *MeasureRegistryServiceCreateRequest) validate(all bool) error {
 	var errors []error
 
 	if all {
-		switch v := interface{}(m.GetMeasure()).(type) {
+		switch v := interface{}(m.GetMetadata()).(type) {
 		case interface{ ValidateAll() error }:
 			if err := v.ValidateAll(); err != nil {
-				errors = append(errors, MeasureRegistryServiceCreateRequestValidationError{
-					field:  "Measure",
+				errors = append(errors, IndexRuleRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
 					reason: "embedded message failed validation",
 					cause:  err,
 				})
 			}
 		case interface{ Validate() error }:
 			if err := v.Validate(); err != nil {
-				errors = append(errors, MeasureRegistryServiceCreateRequestValidationError{
-					field:  "Measure",
+				errors = append(errors, IndexRuleRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
 					reason: "embedded message failed validation",
 					cause:  err,
 				})
 			}
 		}
-	} else if v, ok := interface{}(m.GetMeasure()).(interface{ Validate() error }); ok {
+	} else if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok {
 		if err := v.Validate(); err != nil {
-			return MeasureRegistryServiceCreateRequestValidationError{
-				field:  "Measure",
+			return IndexRuleRegistryServiceExistRequestValidationError{
+				field:  "Metadata",
 				reason: "embedded message failed validation",
 				cause:  err,
 			}
@@ -3810,20 +4299,20 @@ func (m *MeasureRegistryServiceCreateRequest) validate(all bool) error {
 	}
 
 	if len(errors) > 0 {
-		return MeasureRegistryServiceCreateRequestMultiError(errors)
+		return IndexRuleRegistryServiceExistRequestMultiError(errors)
 	}
 
 	return nil
 }
 
-// MeasureRegistryServiceCreateRequestMultiError is an error wrapping multiple
+// IndexRuleRegistryServiceExistRequestMultiError is an error wrapping multiple
 // validation errors returned by
-// MeasureRegistryServiceCreateRequest.ValidateAll() if the designated
+// IndexRuleRegistryServiceExistRequest.ValidateAll() if the designated
 // constraints aren't met.
-type MeasureRegistryServiceCreateRequestMultiError []error
+type IndexRuleRegistryServiceExistRequestMultiError []error
 
 // Error returns a concatenation of all the error messages it wraps.
-func (m MeasureRegistryServiceCreateRequestMultiError) Error() string {
+func (m IndexRuleRegistryServiceExistRequestMultiError) Error() string {
 	var msgs []string
 	for _, err := range m {
 		msgs = append(msgs, err.Error())
@@ -3832,7 +4321,250 @@ func (m MeasureRegistryServiceCreateRequestMultiError) Error() string {
 }
 
 // AllErrors returns a list of validation violation errors.
-func (m MeasureRegistryServiceCreateRequestMultiError) AllErrors() []error { return m }
+func (m IndexRuleRegistryServiceExistRequestMultiError) AllErrors() []error { return m }
+
+// IndexRuleRegistryServiceExistRequestValidationError is the validation error
+// returned by IndexRuleRegistryServiceExistRequest.Validate if the designated
+// constraints aren't met.
+type IndexRuleRegistryServiceExistRequestValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e IndexRuleRegistryServiceExistRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e IndexRuleRegistryServiceExistRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e IndexRuleRegistryServiceExistRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e IndexRuleRegistryServiceExistRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e IndexRuleRegistryServiceExistRequestValidationError) ErrorName() string {
+	return "IndexRuleRegistryServiceExistRequestValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e IndexRuleRegistryServiceExistRequestValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sIndexRuleRegistryServiceExistRequest.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = IndexRuleRegistryServiceExistRequestValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = IndexRuleRegistryServiceExistRequestValidationError{}
+
+// Validate checks the field values on IndexRuleRegistryServiceExistResponse
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the first error encountered is returned, or nil if
+// there are no violations.
+func (m *IndexRuleRegistryServiceExistResponse) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on IndexRuleRegistryServiceExistResponse
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// IndexRuleRegistryServiceExistResponseMultiError, or nil if none found.
+func (m *IndexRuleRegistryServiceExistResponse) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *IndexRuleRegistryServiceExistResponse) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	// no validation rules for HasGroup
+
+	// no validation rules for HasIndexRule
+
+	if len(errors) > 0 {
+		return IndexRuleRegistryServiceExistResponseMultiError(errors)
+	}
+
+	return nil
+}
+
+// IndexRuleRegistryServiceExistResponseMultiError is an error wrapping
+// multiple validation errors returned by
+// IndexRuleRegistryServiceExistResponse.ValidateAll() if the designated
+// constraints aren't met.
+type IndexRuleRegistryServiceExistResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m IndexRuleRegistryServiceExistResponseMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m IndexRuleRegistryServiceExistResponseMultiError) AllErrors() []error { return m }
+
+// IndexRuleRegistryServiceExistResponseValidationError is the validation error
+// returned by IndexRuleRegistryServiceExistResponse.Validate if the
+// designated constraints aren't met.
+type IndexRuleRegistryServiceExistResponseValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e IndexRuleRegistryServiceExistResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e IndexRuleRegistryServiceExistResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e IndexRuleRegistryServiceExistResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e IndexRuleRegistryServiceExistResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e IndexRuleRegistryServiceExistResponseValidationError) ErrorName() string {
+	return "IndexRuleRegistryServiceExistResponseValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e IndexRuleRegistryServiceExistResponseValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sIndexRuleRegistryServiceExistResponse.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = IndexRuleRegistryServiceExistResponseValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = IndexRuleRegistryServiceExistResponseValidationError{}
+
+// Validate checks the field values on MeasureRegistryServiceCreateRequest with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *MeasureRegistryServiceCreateRequest) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on MeasureRegistryServiceCreateRequest
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// MeasureRegistryServiceCreateRequestMultiError, or nil if none found.
+func (m *MeasureRegistryServiceCreateRequest) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *MeasureRegistryServiceCreateRequest) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if all {
+		switch v := interface{}(m.GetMeasure()).(type) {
+		case interface{ ValidateAll() error }:
+			if err := v.ValidateAll(); err != nil {
+				errors = append(errors, MeasureRegistryServiceCreateRequestValidationError{
+					field:  "Measure",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		case interface{ Validate() error }:
+			if err := v.Validate(); err != nil {
+				errors = append(errors, MeasureRegistryServiceCreateRequestValidationError{
+					field:  "Measure",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		}
+	} else if v, ok := interface{}(m.GetMeasure()).(interface{ Validate() error }); ok {
+		if err := v.Validate(); err != nil {
+			return MeasureRegistryServiceCreateRequestValidationError{
+				field:  "Measure",
+				reason: "embedded message failed validation",
+				cause:  err,
+			}
+		}
+	}
+
+	if len(errors) > 0 {
+		return MeasureRegistryServiceCreateRequestMultiError(errors)
+	}
+
+	return nil
+}
+
+// MeasureRegistryServiceCreateRequestMultiError is an error wrapping multiple
+// validation errors returned by
+// MeasureRegistryServiceCreateRequest.ValidateAll() if the designated
+// constraints aren't met.
+type MeasureRegistryServiceCreateRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m MeasureRegistryServiceCreateRequestMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m MeasureRegistryServiceCreateRequestMultiError) AllErrors() []error { return m }
 
 // MeasureRegistryServiceCreateRequestValidationError is the validation error
 // returned by MeasureRegistryServiceCreateRequest.Validate if the designated
@@ -4990,23 +5722,23 @@ var _ interface {
 	ErrorName() string
 } = MeasureRegistryServiceListResponseValidationError{}
 
-// Validate checks the field values on GroupRegistryServiceCreateRequest with
+// Validate checks the field values on MeasureRegistryServiceExistRequest with
 // the rules defined in the proto definition for this message. If any rules
 // are violated, the first error encountered is returned, or nil if there are
 // no violations.
-func (m *GroupRegistryServiceCreateRequest) Validate() error {
+func (m *MeasureRegistryServiceExistRequest) Validate() error {
 	return m.validate(false)
 }
 
-// ValidateAll checks the field values on GroupRegistryServiceCreateRequest
+// ValidateAll checks the field values on MeasureRegistryServiceExistRequest
 // with the rules defined in the proto definition for this message. If any
 // rules are violated, the result is a list of violation errors wrapped in
-// GroupRegistryServiceCreateRequestMultiError, or nil if none found.
-func (m *GroupRegistryServiceCreateRequest) ValidateAll() error {
+// MeasureRegistryServiceExistRequestMultiError, or nil if none found.
+func (m *MeasureRegistryServiceExistRequest) ValidateAll() error {
 	return m.validate(true)
 }
 
-func (m *GroupRegistryServiceCreateRequest) validate(all bool) error {
+func (m *MeasureRegistryServiceExistRequest) validate(all bool) error {
 	if m == nil {
 		return nil
 	}
@@ -5014,28 +5746,28 @@ func (m *GroupRegistryServiceCreateRequest) validate(all bool) error {
 	var errors []error
 
 	if all {
-		switch v := interface{}(m.GetGroup()).(type) {
+		switch v := interface{}(m.GetMetadata()).(type) {
 		case interface{ ValidateAll() error }:
 			if err := v.ValidateAll(); err != nil {
-				errors = append(errors, GroupRegistryServiceCreateRequestValidationError{
-					field:  "Group",
+				errors = append(errors, MeasureRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
 					reason: "embedded message failed validation",
 					cause:  err,
 				})
 			}
 		case interface{ Validate() error }:
 			if err := v.Validate(); err != nil {
-				errors = append(errors, GroupRegistryServiceCreateRequestValidationError{
-					field:  "Group",
+				errors = append(errors, MeasureRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
 					reason: "embedded message failed validation",
 					cause:  err,
 				})
 			}
 		}
-	} else if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok {
+	} else if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok {
 		if err := v.Validate(); err != nil {
-			return GroupRegistryServiceCreateRequestValidationError{
-				field:  "Group",
+			return MeasureRegistryServiceExistRequestValidationError{
+				field:  "Metadata",
 				reason: "embedded message failed validation",
 				cause:  err,
 			}
@@ -5043,20 +5775,20 @@ func (m *GroupRegistryServiceCreateRequest) validate(all bool) error {
 	}
 
 	if len(errors) > 0 {
-		return GroupRegistryServiceCreateRequestMultiError(errors)
+		return MeasureRegistryServiceExistRequestMultiError(errors)
 	}
 
 	return nil
 }
 
-// GroupRegistryServiceCreateRequestMultiError is an error wrapping multiple
+// MeasureRegistryServiceExistRequestMultiError is an error wrapping multiple
 // validation errors returned by
-// GroupRegistryServiceCreateRequest.ValidateAll() if the designated
+// MeasureRegistryServiceExistRequest.ValidateAll() if the designated
 // constraints aren't met.
-type GroupRegistryServiceCreateRequestMultiError []error
+type MeasureRegistryServiceExistRequestMultiError []error
 
 // Error returns a concatenation of all the error messages it wraps.
-func (m GroupRegistryServiceCreateRequestMultiError) Error() string {
+func (m MeasureRegistryServiceExistRequestMultiError) Error() string {
 	var msgs []string
 	for _, err := range m {
 		msgs = append(msgs, err.Error())
@@ -5065,12 +5797,12 @@ func (m GroupRegistryServiceCreateRequestMultiError) Error() string {
 }
 
 // AllErrors returns a list of validation violation errors.
-func (m GroupRegistryServiceCreateRequestMultiError) AllErrors() []error { return m }
+func (m MeasureRegistryServiceExistRequestMultiError) AllErrors() []error { return m }
 
-// GroupRegistryServiceCreateRequestValidationError is the validation error
-// returned by GroupRegistryServiceCreateRequest.Validate if the designated
+// MeasureRegistryServiceExistRequestValidationError is the validation error
+// returned by MeasureRegistryServiceExistRequest.Validate if the designated
 // constraints aren't met.
-type GroupRegistryServiceCreateRequestValidationError struct {
+type MeasureRegistryServiceExistRequestValidationError struct {
 	field  string
 	reason string
 	cause  error
@@ -5078,24 +5810,24 @@ type GroupRegistryServiceCreateRequestValidationError struct {
 }
 
 // Field function returns field value.
-func (e GroupRegistryServiceCreateRequestValidationError) Field() string { return e.field }
+func (e MeasureRegistryServiceExistRequestValidationError) Field() string { return e.field }
 
 // Reason function returns reason value.
-func (e GroupRegistryServiceCreateRequestValidationError) Reason() string { return e.reason }
+func (e MeasureRegistryServiceExistRequestValidationError) Reason() string { return e.reason }
 
 // Cause function returns cause value.
-func (e GroupRegistryServiceCreateRequestValidationError) Cause() error { return e.cause }
+func (e MeasureRegistryServiceExistRequestValidationError) Cause() error { return e.cause }
 
 // Key function returns key value.
-func (e GroupRegistryServiceCreateRequestValidationError) Key() bool { return e.key }
+func (e MeasureRegistryServiceExistRequestValidationError) Key() bool { return e.key }
 
 // ErrorName returns error name.
-func (e GroupRegistryServiceCreateRequestValidationError) ErrorName() string {
-	return "GroupRegistryServiceCreateRequestValidationError"
+func (e MeasureRegistryServiceExistRequestValidationError) ErrorName() string {
+	return "MeasureRegistryServiceExistRequestValidationError"
 }
 
 // Error satisfies the builtin error interface
-func (e GroupRegistryServiceCreateRequestValidationError) Error() string {
+func (e MeasureRegistryServiceExistRequestValidationError) Error() string {
 	cause := ""
 	if e.cause != nil {
 		cause = fmt.Sprintf(" | caused by: %v", e.cause)
@@ -5107,14 +5839,14 @@ func (e GroupRegistryServiceCreateRequestValidationError) Error() string {
 	}
 
 	return fmt.Sprintf(
-		"invalid %sGroupRegistryServiceCreateRequest.%s: %s%s",
+		"invalid %sMeasureRegistryServiceExistRequest.%s: %s%s",
 		key,
 		e.field,
 		e.reason,
 		cause)
 }
 
-var _ error = GroupRegistryServiceCreateRequestValidationError{}
+var _ error = MeasureRegistryServiceExistRequestValidationError{}
 
 var _ interface {
 	Field() string
@@ -5122,46 +5854,50 @@ var _ interface {
 	Key() bool
 	Cause() error
 	ErrorName() string
-} = GroupRegistryServiceCreateRequestValidationError{}
+} = MeasureRegistryServiceExistRequestValidationError{}
 
-// Validate checks the field values on GroupRegistryServiceCreateResponse with
+// Validate checks the field values on MeasureRegistryServiceExistResponse with
 // the rules defined in the proto definition for this message. If any rules
 // are violated, the first error encountered is returned, or nil if there are
 // no violations.
-func (m *GroupRegistryServiceCreateResponse) Validate() error {
+func (m *MeasureRegistryServiceExistResponse) Validate() error {
 	return m.validate(false)
 }
 
-// ValidateAll checks the field values on GroupRegistryServiceCreateResponse
+// ValidateAll checks the field values on MeasureRegistryServiceExistResponse
 // with the rules defined in the proto definition for this message. If any
 // rules are violated, the result is a list of violation errors wrapped in
-// GroupRegistryServiceCreateResponseMultiError, or nil if none found.
-func (m *GroupRegistryServiceCreateResponse) ValidateAll() error {
+// MeasureRegistryServiceExistResponseMultiError, or nil if none found.
+func (m *MeasureRegistryServiceExistResponse) ValidateAll() error {
 	return m.validate(true)
 }
 
-func (m *GroupRegistryServiceCreateResponse) validate(all bool) error {
+func (m *MeasureRegistryServiceExistResponse) validate(all bool) error {
 	if m == nil {
 		return nil
 	}
 
 	var errors []error
 
+	// no validation rules for HasGroup
+
+	// no validation rules for HasMeasure
+
 	if len(errors) > 0 {
-		return GroupRegistryServiceCreateResponseMultiError(errors)
+		return MeasureRegistryServiceExistResponseMultiError(errors)
 	}
 
 	return nil
 }
 
-// GroupRegistryServiceCreateResponseMultiError is an error wrapping multiple
+// MeasureRegistryServiceExistResponseMultiError is an error wrapping multiple
 // validation errors returned by
-// GroupRegistryServiceCreateResponse.ValidateAll() if the designated
+// MeasureRegistryServiceExistResponse.ValidateAll() if the designated
 // constraints aren't met.
-type GroupRegistryServiceCreateResponseMultiError []error
+type MeasureRegistryServiceExistResponseMultiError []error
 
 // Error returns a concatenation of all the error messages it wraps.
-func (m GroupRegistryServiceCreateResponseMultiError) Error() string {
+func (m MeasureRegistryServiceExistResponseMultiError) Error() string {
 	var msgs []string
 	for _, err := range m {
 		msgs = append(msgs, err.Error())
@@ -5170,9 +5906,248 @@ func (m GroupRegistryServiceCreateResponseMultiError) Error() string {
 }
 
 // AllErrors returns a list of validation violation errors.
-func (m GroupRegistryServiceCreateResponseMultiError) AllErrors() []error { return m }
+func (m MeasureRegistryServiceExistResponseMultiError) AllErrors() []error { return m }
 
-// GroupRegistryServiceCreateResponseValidationError is the validation error
+// MeasureRegistryServiceExistResponseValidationError is the validation error
+// returned by MeasureRegistryServiceExistResponse.Validate if the designated
+// constraints aren't met.
+type MeasureRegistryServiceExistResponseValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e MeasureRegistryServiceExistResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e MeasureRegistryServiceExistResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e MeasureRegistryServiceExistResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e MeasureRegistryServiceExistResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e MeasureRegistryServiceExistResponseValidationError) ErrorName() string {
+	return "MeasureRegistryServiceExistResponseValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e MeasureRegistryServiceExistResponseValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sMeasureRegistryServiceExistResponse.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = MeasureRegistryServiceExistResponseValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = MeasureRegistryServiceExistResponseValidationError{}
+
+// Validate checks the field values on GroupRegistryServiceCreateRequest with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *GroupRegistryServiceCreateRequest) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on GroupRegistryServiceCreateRequest
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// GroupRegistryServiceCreateRequestMultiError, or nil if none found.
+func (m *GroupRegistryServiceCreateRequest) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *GroupRegistryServiceCreateRequest) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if all {
+		switch v := interface{}(m.GetGroup()).(type) {
+		case interface{ ValidateAll() error }:
+			if err := v.ValidateAll(); err != nil {
+				errors = append(errors, GroupRegistryServiceCreateRequestValidationError{
+					field:  "Group",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		case interface{ Validate() error }:
+			if err := v.Validate(); err != nil {
+				errors = append(errors, GroupRegistryServiceCreateRequestValidationError{
+					field:  "Group",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		}
+	} else if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok {
+		if err := v.Validate(); err != nil {
+			return GroupRegistryServiceCreateRequestValidationError{
+				field:  "Group",
+				reason: "embedded message failed validation",
+				cause:  err,
+			}
+		}
+	}
+
+	if len(errors) > 0 {
+		return GroupRegistryServiceCreateRequestMultiError(errors)
+	}
+
+	return nil
+}
+
+// GroupRegistryServiceCreateRequestMultiError is an error wrapping multiple
+// validation errors returned by
+// GroupRegistryServiceCreateRequest.ValidateAll() if the designated
+// constraints aren't met.
+type GroupRegistryServiceCreateRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m GroupRegistryServiceCreateRequestMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m GroupRegistryServiceCreateRequestMultiError) AllErrors() []error { return m }
+
+// GroupRegistryServiceCreateRequestValidationError is the validation error
+// returned by GroupRegistryServiceCreateRequest.Validate if the designated
+// constraints aren't met.
+type GroupRegistryServiceCreateRequestValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e GroupRegistryServiceCreateRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e GroupRegistryServiceCreateRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e GroupRegistryServiceCreateRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e GroupRegistryServiceCreateRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e GroupRegistryServiceCreateRequestValidationError) ErrorName() string {
+	return "GroupRegistryServiceCreateRequestValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e GroupRegistryServiceCreateRequestValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sGroupRegistryServiceCreateRequest.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = GroupRegistryServiceCreateRequestValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = GroupRegistryServiceCreateRequestValidationError{}
+
+// Validate checks the field values on GroupRegistryServiceCreateResponse with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *GroupRegistryServiceCreateResponse) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on GroupRegistryServiceCreateResponse
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// GroupRegistryServiceCreateResponseMultiError, or nil if none found.
+func (m *GroupRegistryServiceCreateResponse) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *GroupRegistryServiceCreateResponse) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if len(errors) > 0 {
+		return GroupRegistryServiceCreateResponseMultiError(errors)
+	}
+
+	return nil
+}
+
+// GroupRegistryServiceCreateResponseMultiError is an error wrapping multiple
+// validation errors returned by
+// GroupRegistryServiceCreateResponse.ValidateAll() if the designated
+// constraints aren't met.
+type GroupRegistryServiceCreateResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m GroupRegistryServiceCreateResponseMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m GroupRegistryServiceCreateResponseMultiError) AllErrors() []error { return m }
+
+// GroupRegistryServiceCreateResponseValidationError is the validation error
 // returned by GroupRegistryServiceCreateResponse.Validate if the designated
 // constraints aren't met.
 type GroupRegistryServiceCreateResponseValidationError struct {
@@ -5993,7 +6968,253 @@ func (e GroupRegistryServiceListRequestValidationError) ErrorName() string {
 }
 
 // Error satisfies the builtin error interface
-func (e GroupRegistryServiceListRequestValidationError) Error() string {
+func (e GroupRegistryServiceListRequestValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sGroupRegistryServiceListRequest.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = GroupRegistryServiceListRequestValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = GroupRegistryServiceListRequestValidationError{}
+
+// Validate checks the field values on GroupRegistryServiceListResponse with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *GroupRegistryServiceListResponse) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on GroupRegistryServiceListResponse with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the result is a list of violation errors wrapped in
+// GroupRegistryServiceListResponseMultiError, or nil if none found.
+func (m *GroupRegistryServiceListResponse) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *GroupRegistryServiceListResponse) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	for idx, item := range m.GetGroup() {
+		_, _ = idx, item
+
+		if all {
+			switch v := interface{}(item).(type) {
+			case interface{ ValidateAll() error }:
+				if err := v.ValidateAll(); err != nil {
+					errors = append(errors, GroupRegistryServiceListResponseValidationError{
+						field:  fmt.Sprintf("Group[%v]", idx),
+						reason: "embedded message failed validation",
+						cause:  err,
+					})
+				}
+			case interface{ Validate() error }:
+				if err := v.Validate(); err != nil {
+					errors = append(errors, GroupRegistryServiceListResponseValidationError{
+						field:  fmt.Sprintf("Group[%v]", idx),
+						reason: "embedded message failed validation",
+						cause:  err,
+					})
+				}
+			}
+		} else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
+			if err := v.Validate(); err != nil {
+				return GroupRegistryServiceListResponseValidationError{
+					field:  fmt.Sprintf("Group[%v]", idx),
+					reason: "embedded message failed validation",
+					cause:  err,
+				}
+			}
+		}
+
+	}
+
+	if len(errors) > 0 {
+		return GroupRegistryServiceListResponseMultiError(errors)
+	}
+
+	return nil
+}
+
+// GroupRegistryServiceListResponseMultiError is an error wrapping multiple
+// validation errors returned by
+// GroupRegistryServiceListResponse.ValidateAll() if the designated
+// constraints aren't met.
+type GroupRegistryServiceListResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m GroupRegistryServiceListResponseMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m GroupRegistryServiceListResponseMultiError) AllErrors() []error { return m }
+
+// GroupRegistryServiceListResponseValidationError is the validation error
+// returned by GroupRegistryServiceListResponse.Validate if the designated
+// constraints aren't met.
+type GroupRegistryServiceListResponseValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e GroupRegistryServiceListResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e GroupRegistryServiceListResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e GroupRegistryServiceListResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e GroupRegistryServiceListResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e GroupRegistryServiceListResponseValidationError) ErrorName() string {
+	return "GroupRegistryServiceListResponseValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e GroupRegistryServiceListResponseValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sGroupRegistryServiceListResponse.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = GroupRegistryServiceListResponseValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = GroupRegistryServiceListResponseValidationError{}
+
+// Validate checks the field values on GroupRegistryServiceExistRequest with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the first error encountered is returned, or nil if there are
+// no violations.
+func (m *GroupRegistryServiceExistRequest) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on GroupRegistryServiceExistRequest with
+// the rules defined in the proto definition for this message. If any rules
+// are violated, the result is a list of violation errors wrapped in
+// GroupRegistryServiceExistRequestMultiError, or nil if none found.
+func (m *GroupRegistryServiceExistRequest) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *GroupRegistryServiceExistRequest) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	// no validation rules for Group
+
+	if len(errors) > 0 {
+		return GroupRegistryServiceExistRequestMultiError(errors)
+	}
+
+	return nil
+}
+
+// GroupRegistryServiceExistRequestMultiError is an error wrapping multiple
+// validation errors returned by
+// GroupRegistryServiceExistRequest.ValidateAll() if the designated
+// constraints aren't met.
+type GroupRegistryServiceExistRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m GroupRegistryServiceExistRequestMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m GroupRegistryServiceExistRequestMultiError) AllErrors() []error { return m }
+
+// GroupRegistryServiceExistRequestValidationError is the validation error
+// returned by GroupRegistryServiceExistRequest.Validate if the designated
+// constraints aren't met.
+type GroupRegistryServiceExistRequestValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e GroupRegistryServiceExistRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e GroupRegistryServiceExistRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e GroupRegistryServiceExistRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e GroupRegistryServiceExistRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e GroupRegistryServiceExistRequestValidationError) ErrorName() string {
+	return "GroupRegistryServiceExistRequestValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e GroupRegistryServiceExistRequestValidationError) Error() string {
 	cause := ""
 	if e.cause != nil {
 		cause = fmt.Sprintf(" | caused by: %v", e.cause)
@@ -6005,14 +7226,14 @@ func (e GroupRegistryServiceListRequestValidationError) Error() string {
 	}
 
 	return fmt.Sprintf(
-		"invalid %sGroupRegistryServiceListRequest.%s: %s%s",
+		"invalid %sGroupRegistryServiceExistRequest.%s: %s%s",
 		key,
 		e.field,
 		e.reason,
 		cause)
 }
 
-var _ error = GroupRegistryServiceListRequestValidationError{}
+var _ error = GroupRegistryServiceExistRequestValidationError{}
 
 var _ interface {
 	Field() string
@@ -6020,80 +7241,48 @@ var _ interface {
 	Key() bool
 	Cause() error
 	ErrorName() string
-} = GroupRegistryServiceListRequestValidationError{}
+} = GroupRegistryServiceExistRequestValidationError{}
 
-// Validate checks the field values on GroupRegistryServiceListResponse with
+// Validate checks the field values on GroupRegistryServiceExistResponse with
 // the rules defined in the proto definition for this message. If any rules
 // are violated, the first error encountered is returned, or nil if there are
 // no violations.
-func (m *GroupRegistryServiceListResponse) Validate() error {
+func (m *GroupRegistryServiceExistResponse) Validate() error {
 	return m.validate(false)
 }
 
-// ValidateAll checks the field values on GroupRegistryServiceListResponse with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, the result is a list of violation errors wrapped in
-// GroupRegistryServiceListResponseMultiError, or nil if none found.
-func (m *GroupRegistryServiceListResponse) ValidateAll() error {
+// ValidateAll checks the field values on GroupRegistryServiceExistResponse
+// with the rules defined in the proto definition for this message. If any
+// rules are violated, the result is a list of violation errors wrapped in
+// GroupRegistryServiceExistResponseMultiError, or nil if none found.
+func (m *GroupRegistryServiceExistResponse) ValidateAll() error {
 	return m.validate(true)
 }
 
-func (m *GroupRegistryServiceListResponse) validate(all bool) error {
+func (m *GroupRegistryServiceExistResponse) validate(all bool) error {
 	if m == nil {
 		return nil
 	}
 
 	var errors []error
 
-	for idx, item := range m.GetGroup() {
-		_, _ = idx, item
-
-		if all {
-			switch v := interface{}(item).(type) {
-			case interface{ ValidateAll() error }:
-				if err := v.ValidateAll(); err != nil {
-					errors = append(errors, GroupRegistryServiceListResponseValidationError{
-						field:  fmt.Sprintf("Group[%v]", idx),
-						reason: "embedded message failed validation",
-						cause:  err,
-					})
-				}
-			case interface{ Validate() error }:
-				if err := v.Validate(); err != nil {
-					errors = append(errors, GroupRegistryServiceListResponseValidationError{
-						field:  fmt.Sprintf("Group[%v]", idx),
-						reason: "embedded message failed validation",
-						cause:  err,
-					})
-				}
-			}
-		} else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return GroupRegistryServiceListResponseValidationError{
-					field:  fmt.Sprintf("Group[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
+	// no validation rules for HasGroup
 
 	if len(errors) > 0 {
-		return GroupRegistryServiceListResponseMultiError(errors)
+		return GroupRegistryServiceExistResponseMultiError(errors)
 	}
 
 	return nil
 }
 
-// GroupRegistryServiceListResponseMultiError is an error wrapping multiple
+// GroupRegistryServiceExistResponseMultiError is an error wrapping multiple
 // validation errors returned by
-// GroupRegistryServiceListResponse.ValidateAll() if the designated
+// GroupRegistryServiceExistResponse.ValidateAll() if the designated
 // constraints aren't met.
-type GroupRegistryServiceListResponseMultiError []error
+type GroupRegistryServiceExistResponseMultiError []error
 
 // Error returns a concatenation of all the error messages it wraps.
-func (m GroupRegistryServiceListResponseMultiError) Error() string {
+func (m GroupRegistryServiceExistResponseMultiError) Error() string {
 	var msgs []string
 	for _, err := range m {
 		msgs = append(msgs, err.Error())
@@ -6102,12 +7291,12 @@ func (m GroupRegistryServiceListResponseMultiError) Error() string {
 }
 
 // AllErrors returns a list of validation violation errors.
-func (m GroupRegistryServiceListResponseMultiError) AllErrors() []error { return m }
+func (m GroupRegistryServiceExistResponseMultiError) AllErrors() []error { return m }
 
-// GroupRegistryServiceListResponseValidationError is the validation error
-// returned by GroupRegistryServiceListResponse.Validate if the designated
+// GroupRegistryServiceExistResponseValidationError is the validation error
+// returned by GroupRegistryServiceExistResponse.Validate if the designated
 // constraints aren't met.
-type GroupRegistryServiceListResponseValidationError struct {
+type GroupRegistryServiceExistResponseValidationError struct {
 	field  string
 	reason string
 	cause  error
@@ -6115,24 +7304,24 @@ type GroupRegistryServiceListResponseValidationError struct {
 }
 
 // Field function returns field value.
-func (e GroupRegistryServiceListResponseValidationError) Field() string { return e.field }
+func (e GroupRegistryServiceExistResponseValidationError) Field() string { return e.field }
 
 // Reason function returns reason value.
-func (e GroupRegistryServiceListResponseValidationError) Reason() string { return e.reason }
+func (e GroupRegistryServiceExistResponseValidationError) Reason() string { return e.reason }
 
 // Cause function returns cause value.
-func (e GroupRegistryServiceListResponseValidationError) Cause() error { return e.cause }
+func (e GroupRegistryServiceExistResponseValidationError) Cause() error { return e.cause }
 
 // Key function returns key value.
-func (e GroupRegistryServiceListResponseValidationError) Key() bool { return e.key }
+func (e GroupRegistryServiceExistResponseValidationError) Key() bool { return e.key }
 
 // ErrorName returns error name.
-func (e GroupRegistryServiceListResponseValidationError) ErrorName() string {
-	return "GroupRegistryServiceListResponseValidationError"
+func (e GroupRegistryServiceExistResponseValidationError) ErrorName() string {
+	return "GroupRegistryServiceExistResponseValidationError"
 }
 
 // Error satisfies the builtin error interface
-func (e GroupRegistryServiceListResponseValidationError) Error() string {
+func (e GroupRegistryServiceExistResponseValidationError) Error() string {
 	cause := ""
 	if e.cause != nil {
 		cause = fmt.Sprintf(" | caused by: %v", e.cause)
@@ -6144,14 +7333,14 @@ func (e GroupRegistryServiceListResponseValidationError) Error() string {
 	}
 
 	return fmt.Sprintf(
-		"invalid %sGroupRegistryServiceListResponse.%s: %s%s",
+		"invalid %sGroupRegistryServiceExistResponse.%s: %s%s",
 		key,
 		e.field,
 		e.reason,
 		cause)
 }
 
-var _ error = GroupRegistryServiceListResponseValidationError{}
+var _ error = GroupRegistryServiceExistResponseValidationError{}
 
 var _ interface {
 	Field() string
@@ -6159,7 +7348,7 @@ var _ interface {
 	Key() bool
 	Cause() error
 	ErrorName() string
-} = GroupRegistryServiceListResponseValidationError{}
+} = GroupRegistryServiceExistResponseValidationError{}
 
 // Validate checks the field values on
 // TopNAggregationRegistryServiceCreateRequest with the rules defined in the
@@ -7406,3 +8595,248 @@ var _ interface {
 	Cause() error
 	ErrorName() string
 } = TopNAggregationRegistryServiceListResponseValidationError{}
+
+// Validate checks the field values on
+// TopNAggregationRegistryServiceExistRequest with the rules defined in the
+// proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *TopNAggregationRegistryServiceExistRequest) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on
+// TopNAggregationRegistryServiceExistRequest with the rules defined in the
+// proto definition for this message. If any rules are violated, the result is
+// a list of violation errors wrapped in
+// TopNAggregationRegistryServiceExistRequestMultiError, or nil if none found.
+func (m *TopNAggregationRegistryServiceExistRequest) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *TopNAggregationRegistryServiceExistRequest) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	if all {
+		switch v := interface{}(m.GetMetadata()).(type) {
+		case interface{ ValidateAll() error }:
+			if err := v.ValidateAll(); err != nil {
+				errors = append(errors, TopNAggregationRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		case interface{ Validate() error }:
+			if err := v.Validate(); err != nil {
+				errors = append(errors, TopNAggregationRegistryServiceExistRequestValidationError{
+					field:  "Metadata",
+					reason: "embedded message failed validation",
+					cause:  err,
+				})
+			}
+		}
+	} else if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok {
+		if err := v.Validate(); err != nil {
+			return TopNAggregationRegistryServiceExistRequestValidationError{
+				field:  "Metadata",
+				reason: "embedded message failed validation",
+				cause:  err,
+			}
+		}
+	}
+
+	if len(errors) > 0 {
+		return TopNAggregationRegistryServiceExistRequestMultiError(errors)
+	}
+
+	return nil
+}
+
+// TopNAggregationRegistryServiceExistRequestMultiError is an error wrapping
+// multiple validation errors returned by
+// TopNAggregationRegistryServiceExistRequest.ValidateAll() if the designated
+// constraints aren't met.
+type TopNAggregationRegistryServiceExistRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m TopNAggregationRegistryServiceExistRequestMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m TopNAggregationRegistryServiceExistRequestMultiError) AllErrors() []error { return m }
+
+// TopNAggregationRegistryServiceExistRequestValidationError is the validation
+// error returned by TopNAggregationRegistryServiceExistRequest.Validate if
+// the designated constraints aren't met.
+type TopNAggregationRegistryServiceExistRequestValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e TopNAggregationRegistryServiceExistRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e TopNAggregationRegistryServiceExistRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e TopNAggregationRegistryServiceExistRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e TopNAggregationRegistryServiceExistRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e TopNAggregationRegistryServiceExistRequestValidationError) ErrorName() string {
+	return "TopNAggregationRegistryServiceExistRequestValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e TopNAggregationRegistryServiceExistRequestValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sTopNAggregationRegistryServiceExistRequest.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = TopNAggregationRegistryServiceExistRequestValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = TopNAggregationRegistryServiceExistRequestValidationError{}
+
+// Validate checks the field values on
+// TopNAggregationRegistryServiceExistResponse with the rules defined in the
+// proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *TopNAggregationRegistryServiceExistResponse) Validate() error {
+	return m.validate(false)
+}
+
+// ValidateAll checks the field values on
+// TopNAggregationRegistryServiceExistResponse with the rules defined in the
+// proto definition for this message. If any rules are violated, the result is
+// a list of violation errors wrapped in
+// TopNAggregationRegistryServiceExistResponseMultiError, or nil if none found.
+func (m *TopNAggregationRegistryServiceExistResponse) ValidateAll() error {
+	return m.validate(true)
+}
+
+func (m *TopNAggregationRegistryServiceExistResponse) validate(all bool) error {
+	if m == nil {
+		return nil
+	}
+
+	var errors []error
+
+	// no validation rules for HasGroup
+
+	// no validation rules for HasTopNAggregation
+
+	if len(errors) > 0 {
+		return TopNAggregationRegistryServiceExistResponseMultiError(errors)
+	}
+
+	return nil
+}
+
+// TopNAggregationRegistryServiceExistResponseMultiError is an error wrapping
+// multiple validation errors returned by
+// TopNAggregationRegistryServiceExistResponse.ValidateAll() if the designated
+// constraints aren't met.
+type TopNAggregationRegistryServiceExistResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m TopNAggregationRegistryServiceExistResponseMultiError) Error() string {
+	var msgs []string
+	for _, err := range m {
+		msgs = append(msgs, err.Error())
+	}
+	return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m TopNAggregationRegistryServiceExistResponseMultiError) AllErrors() []error { return m }
+
+// TopNAggregationRegistryServiceExistResponseValidationError is the validation
+// error returned by TopNAggregationRegistryServiceExistResponse.Validate if
+// the designated constraints aren't met.
+type TopNAggregationRegistryServiceExistResponseValidationError struct {
+	field  string
+	reason string
+	cause  error
+	key    bool
+}
+
+// Field function returns field value.
+func (e TopNAggregationRegistryServiceExistResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e TopNAggregationRegistryServiceExistResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e TopNAggregationRegistryServiceExistResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e TopNAggregationRegistryServiceExistResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e TopNAggregationRegistryServiceExistResponseValidationError) ErrorName() string {
+	return "TopNAggregationRegistryServiceExistResponseValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e TopNAggregationRegistryServiceExistResponseValidationError) Error() string {
+	cause := ""
+	if e.cause != nil {
+		cause = fmt.Sprintf(" | caused by: %v", e.cause)
+	}
+
+	key := ""
+	if e.key {
+		key = "key for "
+	}
+
+	return fmt.Sprintf(
+		"invalid %sTopNAggregationRegistryServiceExistResponse.%s: %s%s",
+		key,
+		e.field,
+		e.reason,
+		cause)
+}
+
+var _ error = TopNAggregationRegistryServiceExistResponseValidationError{}
+
+var _ interface {
+	Field() string
+	Reason() string
+	Key() bool
+	Cause() error
+	ErrorName() string
+} = TopNAggregationRegistryServiceExistResponseValidationError{}
diff --git a/api/proto/banyandb/database/v1/rpc.proto b/api/proto/banyandb/database/v1/rpc.proto
index 3f5d4ff..a452d30 100644
--- a/api/proto/banyandb/database/v1/rpc.proto
+++ b/api/proto/banyandb/database/v1/rpc.proto
@@ -61,6 +61,15 @@ message StreamRegistryServiceGetResponse {
   banyandb.database.v1.Stream stream = 1;
 }
 
+message StreamRegistryServiceExistRequest {
+  banyandb.common.v1.Metadata metadata = 1;
+}
+
+message StreamRegistryServiceExistResponse {
+  bool has_group = 1;
+  bool has_stream = 2;
+}
+
 message StreamRegistryServiceListRequest {
   string group = 1;
 }
@@ -97,6 +106,8 @@ service StreamRegistryService {
       get:"/v1/stream/schema/lists/{group}"
     };
   };
+  // Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+  rpc Exist(StreamRegistryServiceExistRequest) returns (StreamRegistryServiceExistResponse);
 }
 
 message IndexRuleBindingRegistryServiceCreateRequest {
@@ -137,6 +148,15 @@ message IndexRuleBindingRegistryServiceListResponse {
   repeated banyandb.database.v1.IndexRuleBinding index_rule_binding = 1;
 }
 
+message IndexRuleBindingRegistryServiceExistRequest {
+  banyandb.common.v1.Metadata metadata = 1;
+}
+
+message IndexRuleBindingRegistryServiceExistResponse {
+  bool has_group = 1;
+  bool has_index_rule_binding = 2;
+}
+
 service IndexRuleBindingRegistryService {
   rpc Create(IndexRuleBindingRegistryServiceCreateRequest) returns (IndexRuleBindingRegistryServiceCreateResponse){
     option(google.api.http) = {
@@ -165,6 +185,8 @@ service IndexRuleBindingRegistryService {
       get:"/v1/index-rule-binding/schema/lists/{group}"
     };
   };
+  // Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+  rpc Exist(IndexRuleBindingRegistryServiceExistRequest) returns (IndexRuleBindingRegistryServiceExistResponse);
 }
 
 message IndexRuleRegistryServiceCreateRequest {
@@ -205,6 +227,15 @@ message IndexRuleRegistryServiceListResponse {
   repeated banyandb.database.v1.IndexRule index_rule = 1;
 }
 
+message IndexRuleRegistryServiceExistRequest {
+  banyandb.common.v1.Metadata metadata = 1;
+}
+
+message IndexRuleRegistryServiceExistResponse {
+  bool has_group = 1;
+  bool has_index_rule = 2;
+}
+
 service IndexRuleRegistryService {
   rpc Create(IndexRuleRegistryServiceCreateRequest) returns (IndexRuleRegistryServiceCreateResponse){
     option(google.api.http) = {
@@ -233,6 +264,8 @@ service IndexRuleRegistryService {
       get:"/v1/index-rule/schema/lists/{group}"
     };
   };
+  // Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+  rpc Exist(IndexRuleRegistryServiceExistRequest) returns (IndexRuleRegistryServiceExistResponse);
 }
 
 message MeasureRegistryServiceCreateRequest {
@@ -273,6 +306,15 @@ message MeasureRegistryServiceListResponse {
   repeated banyandb.database.v1.Measure measure = 1;
 }
 
+message MeasureRegistryServiceExistRequest {
+  banyandb.common.v1.Metadata metadata = 1;
+}
+
+message MeasureRegistryServiceExistResponse {
+  bool has_group = 1;
+  bool has_measure = 2;
+}
+
 service MeasureRegistryService {
   rpc Create(MeasureRegistryServiceCreateRequest) returns (MeasureRegistryServiceCreateResponse){
     option(google.api.http) = {
@@ -301,6 +343,8 @@ service MeasureRegistryService {
       get:"/v1/measure/schema/lists/{group}"
     };
   };
+  // Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+  rpc Exist(MeasureRegistryServiceExistRequest) returns (MeasureRegistryServiceExistResponse);
 }
 
 message GroupRegistryServiceCreateRequest {
@@ -342,6 +386,14 @@ message GroupRegistryServiceListResponse {
   repeated banyandb.common.v1.Group group = 1;
 }
 
+message GroupRegistryServiceExistRequest {
+  string group = 1;
+}
+
+message GroupRegistryServiceExistResponse {
+  bool has_group = 1;
+}
+
 service GroupRegistryService {
   rpc Create(GroupRegistryServiceCreateRequest) returns (GroupRegistryServiceCreateResponse){
     option(google.api.http) = {
@@ -370,6 +422,8 @@ service GroupRegistryService {
       get:"/v1/group/schema/lists"
     };
   };
+  // Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+  rpc Exist(GroupRegistryServiceExistRequest) returns (GroupRegistryServiceExistResponse);
 }
 
 message TopNAggregationRegistryServiceCreateRequest {
@@ -410,10 +464,20 @@ message TopNAggregationRegistryServiceListResponse {
   repeated banyandb.database.v1.TopNAggregation top_n_aggregation = 1;
 }
 
+message TopNAggregationRegistryServiceExistRequest {
+  banyandb.common.v1.Metadata metadata = 1;
+}
+
+message TopNAggregationRegistryServiceExistResponse {
+  bool has_group = 1;
+  bool has_top_n_aggregation = 2;
+}
+
 service TopNAggregationRegistryService {
   rpc Create(TopNAggregationRegistryServiceCreateRequest) returns (TopNAggregationRegistryServiceCreateResponse);
   rpc Update(TopNAggregationRegistryServiceUpdateRequest) returns (TopNAggregationRegistryServiceUpdateResponse);
   rpc Delete(TopNAggregationRegistryServiceDeleteRequest) returns (TopNAggregationRegistryServiceDeleteResponse);
   rpc Get(TopNAggregationRegistryServiceGetRequest) returns (TopNAggregationRegistryServiceGetResponse);
   rpc List(TopNAggregationRegistryServiceListRequest) returns (TopNAggregationRegistryServiceListResponse);
+  rpc Exist(TopNAggregationRegistryServiceExistRequest) returns (TopNAggregationRegistryServiceExistResponse);
 }
diff --git a/api/proto/banyandb/database/v1/rpc_grpc.pb.go b/api/proto/banyandb/database/v1/rpc_grpc.pb.go
index 0136c5e..1d487a2 100644
--- a/api/proto/banyandb/database/v1/rpc_grpc.pb.go
+++ b/api/proto/banyandb/database/v1/rpc_grpc.pb.go
@@ -27,6 +27,8 @@ type StreamRegistryServiceClient interface {
 	Delete(ctx context.Context, in *StreamRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*StreamRegistryServiceDeleteResponse, error)
 	Get(ctx context.Context, in *StreamRegistryServiceGetRequest, opts ...grpc.CallOption) (*StreamRegistryServiceGetResponse, error)
 	List(ctx context.Context, in *StreamRegistryServiceListRequest, opts ...grpc.CallOption) (*StreamRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(ctx context.Context, in *StreamRegistryServiceExistRequest, opts ...grpc.CallOption) (*StreamRegistryServiceExistResponse, error)
 }
 
 type streamRegistryServiceClient struct {
@@ -82,6 +84,15 @@ func (c *streamRegistryServiceClient) List(ctx context.Context, in *StreamRegist
 	return out, nil
 }
 
+func (c *streamRegistryServiceClient) Exist(ctx context.Context, in *StreamRegistryServiceExistRequest, opts ...grpc.CallOption) (*StreamRegistryServiceExistResponse, error) {
+	out := new(StreamRegistryServiceExistResponse)
+	err := c.cc.Invoke(ctx, "/banyandb.database.v1.StreamRegistryService/Exist", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // StreamRegistryServiceServer is the server API for StreamRegistryService service.
 // All implementations must embed UnimplementedStreamRegistryServiceServer
 // for forward compatibility
@@ -91,6 +102,8 @@ type StreamRegistryServiceServer interface {
 	Delete(context.Context, *StreamRegistryServiceDeleteRequest) (*StreamRegistryServiceDeleteResponse, error)
 	Get(context.Context, *StreamRegistryServiceGetRequest) (*StreamRegistryServiceGetResponse, error)
 	List(context.Context, *StreamRegistryServiceListRequest) (*StreamRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(context.Context, *StreamRegistryServiceExistRequest) (*StreamRegistryServiceExistResponse, error)
 	mustEmbedUnimplementedStreamRegistryServiceServer()
 }
 
@@ -113,6 +126,9 @@ func (UnimplementedStreamRegistryServiceServer) Get(context.Context, *StreamRegi
 func (UnimplementedStreamRegistryServiceServer) List(context.Context, *StreamRegistryServiceListRequest) (*StreamRegistryServiceListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
 }
+func (UnimplementedStreamRegistryServiceServer) Exist(context.Context, *StreamRegistryServiceExistRequest) (*StreamRegistryServiceExistResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
 func (UnimplementedStreamRegistryServiceServer) mustEmbedUnimplementedStreamRegistryServiceServer() {}
 
 // UnsafeStreamRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
@@ -216,6 +232,24 @@ func _StreamRegistryService_List_Handler(srv interface{}, ctx context.Context, d
 	return interceptor(ctx, in, info, handler)
 }
 
+func _StreamRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(StreamRegistryServiceExistRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(StreamRegistryServiceServer).Exist(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/banyandb.database.v1.StreamRegistryService/Exist",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(StreamRegistryServiceServer).Exist(ctx, req.(*StreamRegistryServiceExistRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // StreamRegistryService_ServiceDesc is the grpc.ServiceDesc for StreamRegistryService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -243,6 +277,10 @@ var StreamRegistryService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "List",
 			Handler:    _StreamRegistryService_List_Handler,
 		},
+		{
+			MethodName: "Exist",
+			Handler:    _StreamRegistryService_Exist_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "banyandb/database/v1/rpc.proto",
@@ -257,6 +295,8 @@ type IndexRuleBindingRegistryServiceClient interface {
 	Delete(ctx context.Context, in *IndexRuleBindingRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceDeleteResponse, error)
 	Get(ctx context.Context, in *IndexRuleBindingRegistryServiceGetRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceGetResponse, error)
 	List(ctx context.Context, in *IndexRuleBindingRegistryServiceListRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(ctx context.Context, in *IndexRuleBindingRegistryServiceExistRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceExistResponse, error)
 }
 
 type indexRuleBindingRegistryServiceClient struct {
@@ -312,6 +352,15 @@ func (c *indexRuleBindingRegistryServiceClient) List(ctx context.Context, in *In
 	return out, nil
 }
 
+func (c *indexRuleBindingRegistryServiceClient) Exist(ctx context.Context, in *IndexRuleBindingRegistryServiceExistRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceExistResponse, error) {
+	out := new(IndexRuleBindingRegistryServiceExistResponse)
+	err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleBindingRegistryService/Exist", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // IndexRuleBindingRegistryServiceServer is the server API for IndexRuleBindingRegistryService service.
 // All implementations must embed UnimplementedIndexRuleBindingRegistryServiceServer
 // for forward compatibility
@@ -321,6 +370,8 @@ type IndexRuleBindingRegistryServiceServer interface {
 	Delete(context.Context, *IndexRuleBindingRegistryServiceDeleteRequest) (*IndexRuleBindingRegistryServiceDeleteResponse, error)
 	Get(context.Context, *IndexRuleBindingRegistryServiceGetRequest) (*IndexRuleBindingRegistryServiceGetResponse, error)
 	List(context.Context, *IndexRuleBindingRegistryServiceListRequest) (*IndexRuleBindingRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(context.Context, *IndexRuleBindingRegistryServiceExistRequest) (*IndexRuleBindingRegistryServiceExistResponse, error)
 	mustEmbedUnimplementedIndexRuleBindingRegistryServiceServer()
 }
 
@@ -343,6 +394,9 @@ func (UnimplementedIndexRuleBindingRegistryServiceServer) Get(context.Context, *
 func (UnimplementedIndexRuleBindingRegistryServiceServer) List(context.Context, *IndexRuleBindingRegistryServiceListRequest) (*IndexRuleBindingRegistryServiceListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
 }
+func (UnimplementedIndexRuleBindingRegistryServiceServer) Exist(context.Context, *IndexRuleBindingRegistryServiceExistRequest) (*IndexRuleBindingRegistryServiceExistResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
 func (UnimplementedIndexRuleBindingRegistryServiceServer) mustEmbedUnimplementedIndexRuleBindingRegistryServiceServer() {
 }
 
@@ -447,6 +501,24 @@ func _IndexRuleBindingRegistryService_List_Handler(srv interface{}, ctx context.
 	return interceptor(ctx, in, info, handler)
 }
 
+func _IndexRuleBindingRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(IndexRuleBindingRegistryServiceExistRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(IndexRuleBindingRegistryServiceServer).Exist(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/banyandb.database.v1.IndexRuleBindingRegistryService/Exist",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(IndexRuleBindingRegistryServiceServer).Exist(ctx, req.(*IndexRuleBindingRegistryServiceExistRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // IndexRuleBindingRegistryService_ServiceDesc is the grpc.ServiceDesc for IndexRuleBindingRegistryService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -474,6 +546,10 @@ var IndexRuleBindingRegistryService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "List",
 			Handler:    _IndexRuleBindingRegistryService_List_Handler,
 		},
+		{
+			MethodName: "Exist",
+			Handler:    _IndexRuleBindingRegistryService_Exist_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "banyandb/database/v1/rpc.proto",
@@ -488,6 +564,8 @@ type IndexRuleRegistryServiceClient interface {
 	Delete(ctx context.Context, in *IndexRuleRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceDeleteResponse, error)
 	Get(ctx context.Context, in *IndexRuleRegistryServiceGetRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceGetResponse, error)
 	List(ctx context.Context, in *IndexRuleRegistryServiceListRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(ctx context.Context, in *IndexRuleRegistryServiceExistRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceExistResponse, error)
 }
 
 type indexRuleRegistryServiceClient struct {
@@ -543,6 +621,15 @@ func (c *indexRuleRegistryServiceClient) List(ctx context.Context, in *IndexRule
 	return out, nil
 }
 
+func (c *indexRuleRegistryServiceClient) Exist(ctx context.Context, in *IndexRuleRegistryServiceExistRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceExistResponse, error) {
+	out := new(IndexRuleRegistryServiceExistResponse)
+	err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleRegistryService/Exist", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // IndexRuleRegistryServiceServer is the server API for IndexRuleRegistryService service.
 // All implementations must embed UnimplementedIndexRuleRegistryServiceServer
 // for forward compatibility
@@ -552,6 +639,8 @@ type IndexRuleRegistryServiceServer interface {
 	Delete(context.Context, *IndexRuleRegistryServiceDeleteRequest) (*IndexRuleRegistryServiceDeleteResponse, error)
 	Get(context.Context, *IndexRuleRegistryServiceGetRequest) (*IndexRuleRegistryServiceGetResponse, error)
 	List(context.Context, *IndexRuleRegistryServiceListRequest) (*IndexRuleRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(context.Context, *IndexRuleRegistryServiceExistRequest) (*IndexRuleRegistryServiceExistResponse, error)
 	mustEmbedUnimplementedIndexRuleRegistryServiceServer()
 }
 
@@ -574,6 +663,9 @@ func (UnimplementedIndexRuleRegistryServiceServer) Get(context.Context, *IndexRu
 func (UnimplementedIndexRuleRegistryServiceServer) List(context.Context, *IndexRuleRegistryServiceListRequest) (*IndexRuleRegistryServiceListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
 }
+func (UnimplementedIndexRuleRegistryServiceServer) Exist(context.Context, *IndexRuleRegistryServiceExistRequest) (*IndexRuleRegistryServiceExistResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
 func (UnimplementedIndexRuleRegistryServiceServer) mustEmbedUnimplementedIndexRuleRegistryServiceServer() {
 }
 
@@ -678,6 +770,24 @@ func _IndexRuleRegistryService_List_Handler(srv interface{}, ctx context.Context
 	return interceptor(ctx, in, info, handler)
 }
 
+func _IndexRuleRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(IndexRuleRegistryServiceExistRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(IndexRuleRegistryServiceServer).Exist(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/banyandb.database.v1.IndexRuleRegistryService/Exist",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(IndexRuleRegistryServiceServer).Exist(ctx, req.(*IndexRuleRegistryServiceExistRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // IndexRuleRegistryService_ServiceDesc is the grpc.ServiceDesc for IndexRuleRegistryService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -705,6 +815,10 @@ var IndexRuleRegistryService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "List",
 			Handler:    _IndexRuleRegistryService_List_Handler,
 		},
+		{
+			MethodName: "Exist",
+			Handler:    _IndexRuleRegistryService_Exist_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "banyandb/database/v1/rpc.proto",
@@ -719,6 +833,8 @@ type MeasureRegistryServiceClient interface {
 	Delete(ctx context.Context, in *MeasureRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceDeleteResponse, error)
 	Get(ctx context.Context, in *MeasureRegistryServiceGetRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceGetResponse, error)
 	List(ctx context.Context, in *MeasureRegistryServiceListRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(ctx context.Context, in *MeasureRegistryServiceExistRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceExistResponse, error)
 }
 
 type measureRegistryServiceClient struct {
@@ -774,6 +890,15 @@ func (c *measureRegistryServiceClient) List(ctx context.Context, in *MeasureRegi
 	return out, nil
 }
 
+func (c *measureRegistryServiceClient) Exist(ctx context.Context, in *MeasureRegistryServiceExistRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceExistResponse, error) {
+	out := new(MeasureRegistryServiceExistResponse)
+	err := c.cc.Invoke(ctx, "/banyandb.database.v1.MeasureRegistryService/Exist", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // MeasureRegistryServiceServer is the server API for MeasureRegistryService service.
 // All implementations must embed UnimplementedMeasureRegistryServiceServer
 // for forward compatibility
@@ -783,6 +908,8 @@ type MeasureRegistryServiceServer interface {
 	Delete(context.Context, *MeasureRegistryServiceDeleteRequest) (*MeasureRegistryServiceDeleteResponse, error)
 	Get(context.Context, *MeasureRegistryServiceGetRequest) (*MeasureRegistryServiceGetResponse, error)
 	List(context.Context, *MeasureRegistryServiceListRequest) (*MeasureRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(context.Context, *MeasureRegistryServiceExistRequest) (*MeasureRegistryServiceExistResponse, error)
 	mustEmbedUnimplementedMeasureRegistryServiceServer()
 }
 
@@ -805,6 +932,9 @@ func (UnimplementedMeasureRegistryServiceServer) Get(context.Context, *MeasureRe
 func (UnimplementedMeasureRegistryServiceServer) List(context.Context, *MeasureRegistryServiceListRequest) (*MeasureRegistryServiceListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
 }
+func (UnimplementedMeasureRegistryServiceServer) Exist(context.Context, *MeasureRegistryServiceExistRequest) (*MeasureRegistryServiceExistResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
 func (UnimplementedMeasureRegistryServiceServer) mustEmbedUnimplementedMeasureRegistryServiceServer() {
 }
 
@@ -909,6 +1039,24 @@ func _MeasureRegistryService_List_Handler(srv interface{}, ctx context.Context,
 	return interceptor(ctx, in, info, handler)
 }
 
+func _MeasureRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MeasureRegistryServiceExistRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MeasureRegistryServiceServer).Exist(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/banyandb.database.v1.MeasureRegistryService/Exist",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MeasureRegistryServiceServer).Exist(ctx, req.(*MeasureRegistryServiceExistRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // MeasureRegistryService_ServiceDesc is the grpc.ServiceDesc for MeasureRegistryService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -936,6 +1084,10 @@ var MeasureRegistryService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "List",
 			Handler:    _MeasureRegistryService_List_Handler,
 		},
+		{
+			MethodName: "Exist",
+			Handler:    _MeasureRegistryService_Exist_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "banyandb/database/v1/rpc.proto",
@@ -950,6 +1102,8 @@ type GroupRegistryServiceClient interface {
 	Delete(ctx context.Context, in *GroupRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*GroupRegistryServiceDeleteResponse, error)
 	Get(ctx context.Context, in *GroupRegistryServiceGetRequest, opts ...grpc.CallOption) (*GroupRegistryServiceGetResponse, error)
 	List(ctx context.Context, in *GroupRegistryServiceListRequest, opts ...grpc.CallOption) (*GroupRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(ctx context.Context, in *GroupRegistryServiceExistRequest, opts ...grpc.CallOption) (*GroupRegistryServiceExistResponse, error)
 }
 
 type groupRegistryServiceClient struct {
@@ -1005,6 +1159,15 @@ func (c *groupRegistryServiceClient) List(ctx context.Context, in *GroupRegistry
 	return out, nil
 }
 
+func (c *groupRegistryServiceClient) Exist(ctx context.Context, in *GroupRegistryServiceExistRequest, opts ...grpc.CallOption) (*GroupRegistryServiceExistResponse, error) {
+	out := new(GroupRegistryServiceExistResponse)
+	err := c.cc.Invoke(ctx, "/banyandb.database.v1.GroupRegistryService/Exist", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // GroupRegistryServiceServer is the server API for GroupRegistryService service.
 // All implementations must embed UnimplementedGroupRegistryServiceServer
 // for forward compatibility
@@ -1014,6 +1177,8 @@ type GroupRegistryServiceServer interface {
 	Delete(context.Context, *GroupRegistryServiceDeleteRequest) (*GroupRegistryServiceDeleteResponse, error)
 	Get(context.Context, *GroupRegistryServiceGetRequest) (*GroupRegistryServiceGetResponse, error)
 	List(context.Context, *GroupRegistryServiceListRequest) (*GroupRegistryServiceListResponse, error)
+	// Exist doesn't expose an HTTP endpoint. Please use HEAD method to touch Get instead
+	Exist(context.Context, *GroupRegistryServiceExistRequest) (*GroupRegistryServiceExistResponse, error)
 	mustEmbedUnimplementedGroupRegistryServiceServer()
 }
 
@@ -1036,6 +1201,9 @@ func (UnimplementedGroupRegistryServiceServer) Get(context.Context, *GroupRegist
 func (UnimplementedGroupRegistryServiceServer) List(context.Context, *GroupRegistryServiceListRequest) (*GroupRegistryServiceListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
 }
+func (UnimplementedGroupRegistryServiceServer) Exist(context.Context, *GroupRegistryServiceExistRequest) (*GroupRegistryServiceExistResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
 func (UnimplementedGroupRegistryServiceServer) mustEmbedUnimplementedGroupRegistryServiceServer() {}
 
 // UnsafeGroupRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
@@ -1139,6 +1307,24 @@ func _GroupRegistryService_List_Handler(srv interface{}, ctx context.Context, de
 	return interceptor(ctx, in, info, handler)
 }
 
+func _GroupRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GroupRegistryServiceExistRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GroupRegistryServiceServer).Exist(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/banyandb.database.v1.GroupRegistryService/Exist",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GroupRegistryServiceServer).Exist(ctx, req.(*GroupRegistryServiceExistRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // GroupRegistryService_ServiceDesc is the grpc.ServiceDesc for GroupRegistryService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -1166,6 +1352,10 @@ var GroupRegistryService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "List",
 			Handler:    _GroupRegistryService_List_Handler,
 		},
+		{
+			MethodName: "Exist",
+			Handler:    _GroupRegistryService_Exist_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "banyandb/database/v1/rpc.proto",
@@ -1180,6 +1370,7 @@ type TopNAggregationRegistryServiceClient interface {
 	Delete(ctx context.Context, in *TopNAggregationRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*TopNAggregationRegistryServiceDeleteResponse, error)
 	Get(ctx context.Context, in *TopNAggregationRegistryServiceGetRequest, opts ...grpc.CallOption) (*TopNAggregationRegistryServiceGetResponse, error)
 	List(ctx context.Context, in *TopNAggregationRegistryServiceListRequest, opts ...grpc.CallOption) (*TopNAggregationRegistryServiceListResponse, error)
+	Exist(ctx context.Context, in *TopNAggregationRegistryServiceExistRequest, opts ...grpc.CallOption) (*TopNAggregationRegistryServiceExistResponse, error)
 }
 
 type topNAggregationRegistryServiceClient struct {
@@ -1235,6 +1426,15 @@ func (c *topNAggregationRegistryServiceClient) List(ctx context.Context, in *Top
 	return out, nil
 }
 
+func (c *topNAggregationRegistryServiceClient) Exist(ctx context.Context, in *TopNAggregationRegistryServiceExistRequest, opts ...grpc.CallOption) (*TopNAggregationRegistryServiceExistResponse, error) {
+	out := new(TopNAggregationRegistryServiceExistResponse)
+	err := c.cc.Invoke(ctx, "/banyandb.database.v1.TopNAggregationRegistryService/Exist", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // TopNAggregationRegistryServiceServer is the server API for TopNAggregationRegistryService service.
 // All implementations must embed UnimplementedTopNAggregationRegistryServiceServer
 // for forward compatibility
@@ -1244,6 +1444,7 @@ type TopNAggregationRegistryServiceServer interface {
 	Delete(context.Context, *TopNAggregationRegistryServiceDeleteRequest) (*TopNAggregationRegistryServiceDeleteResponse, error)
 	Get(context.Context, *TopNAggregationRegistryServiceGetRequest) (*TopNAggregationRegistryServiceGetResponse, error)
 	List(context.Context, *TopNAggregationRegistryServiceListRequest) (*TopNAggregationRegistryServiceListResponse, error)
+	Exist(context.Context, *TopNAggregationRegistryServiceExistRequest) (*TopNAggregationRegistryServiceExistResponse, error)
 	mustEmbedUnimplementedTopNAggregationRegistryServiceServer()
 }
 
@@ -1266,6 +1467,9 @@ func (UnimplementedTopNAggregationRegistryServiceServer) Get(context.Context, *T
 func (UnimplementedTopNAggregationRegistryServiceServer) List(context.Context, *TopNAggregationRegistryServiceListRequest) (*TopNAggregationRegistryServiceListResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
 }
+func (UnimplementedTopNAggregationRegistryServiceServer) Exist(context.Context, *TopNAggregationRegistryServiceExistRequest) (*TopNAggregationRegistryServiceExistResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
 func (UnimplementedTopNAggregationRegistryServiceServer) mustEmbedUnimplementedTopNAggregationRegistryServiceServer() {
 }
 
@@ -1370,6 +1574,24 @@ func _TopNAggregationRegistryService_List_Handler(srv interface{}, ctx context.C
 	return interceptor(ctx, in, info, handler)
 }
 
+func _TopNAggregationRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(TopNAggregationRegistryServiceExistRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TopNAggregationRegistryServiceServer).Exist(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/banyandb.database.v1.TopNAggregationRegistryService/Exist",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TopNAggregationRegistryServiceServer).Exist(ctx, req.(*TopNAggregationRegistryServiceExistRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // TopNAggregationRegistryService_ServiceDesc is the grpc.ServiceDesc for TopNAggregationRegistryService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -1397,6 +1619,10 @@ var TopNAggregationRegistryService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "List",
 			Handler:    _TopNAggregationRegistryService_List_Handler,
 		},
+		{
+			MethodName: "Exist",
+			Handler:    _TopNAggregationRegistryService_Exist_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "banyandb/database/v1/rpc.proto",
diff --git a/api/proto/openapi/banyandb/database/v1/rpc.swagger.json b/api/proto/openapi/banyandb/database/v1/rpc.swagger.json
index 4a5cbd3..357f24d 100644
--- a/api/proto/openapi/banyandb/database/v1/rpc.swagger.json
+++ b/api/proto/openapi/banyandb/database/v1/rpc.swagger.json
@@ -1567,6 +1567,14 @@
         }
       }
     },
+    "v1GroupRegistryServiceExistResponse": {
+      "type": "object",
+      "properties": {
+        "hasGroup": {
+          "type": "boolean"
+        }
+      }
+    },
     "v1GroupRegistryServiceGetResponse": {
       "type": "object",
       "properties": {
@@ -1686,6 +1694,17 @@
         }
       }
     },
+    "v1IndexRuleBindingRegistryServiceExistResponse": {
+      "type": "object",
+      "properties": {
+        "hasGroup": {
+          "type": "boolean"
+        },
+        "hasIndexRuleBinding": {
+          "type": "boolean"
+        }
+      }
+    },
     "v1IndexRuleBindingRegistryServiceGetResponse": {
       "type": "object",
       "properties": {
@@ -1736,6 +1755,17 @@
         }
       }
     },
+    "v1IndexRuleRegistryServiceExistResponse": {
+      "type": "object",
+      "properties": {
+        "hasGroup": {
+          "type": "boolean"
+        },
+        "hasIndexRule": {
+          "type": "boolean"
+        }
+      }
+    },
     "v1IndexRuleRegistryServiceGetResponse": {
       "type": "object",
       "properties": {
@@ -1875,6 +1905,17 @@
         }
       }
     },
+    "v1MeasureRegistryServiceExistResponse": {
+      "type": "object",
+      "properties": {
+        "hasGroup": {
+          "type": "boolean"
+        },
+        "hasMeasure": {
+          "type": "boolean"
+        }
+      }
+    },
     "v1MeasureRegistryServiceGetResponse": {
       "type": "object",
       "properties": {
@@ -2020,6 +2061,17 @@
         }
       }
     },
+    "v1StreamRegistryServiceExistResponse": {
+      "type": "object",
+      "properties": {
+        "hasGroup": {
+          "type": "boolean"
+        },
+        "hasStream": {
+          "type": "boolean"
+        }
+      }
+    },
     "v1StreamRegistryServiceGetResponse": {
       "type": "object",
       "properties": {
@@ -2183,6 +2235,17 @@
         }
       }
     },
+    "v1TopNAggregationRegistryServiceExistResponse": {
+      "type": "object",
+      "properties": {
+        "hasGroup": {
+          "type": "boolean"
+        },
+        "hasTopNAggregation": {
+          "type": "boolean"
+        }
+      }
+    },
     "v1TopNAggregationRegistryServiceGetResponse": {
       "type": "object",
       "properties": {
diff --git a/banyand/liaison/grpc/registry.go b/banyand/liaison/grpc/registry.go
index 65aed87..8fe916b 100644
--- a/banyand/liaison/grpc/registry.go
+++ b/banyand/liaison/grpc/registry.go
@@ -19,7 +19,12 @@ package grpc
 
 import (
 	"context"
+	"errors"
 
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+
+	commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
 	databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
 	"github.com/apache/skywalking-banyandb/banyand/metadata"
 	"github.com/apache/skywalking-banyandb/banyand/metadata/schema"
@@ -84,6 +89,38 @@ func (rs *streamRegistryServer) List(ctx context.Context,
 	}, nil
 }
 
+func (rs *streamRegistryServer) Exist(ctx context.Context, req *databasev1.StreamRegistryServiceExistRequest) (*databasev1.StreamRegistryServiceExistResponse, error) {
+	_, err := rs.Get(ctx, &databasev1.StreamRegistryServiceGetRequest{Metadata: req.Metadata})
+	if err == nil {
+		return &databasev1.StreamRegistryServiceExistResponse{
+			HasGroup:  true,
+			HasStream: true,
+		}, nil
+	}
+	exist, errGroup := groupExist(ctx, err, req.Metadata, rs.schemaRegistry.GroupRegistry())
+	if errGroup != nil {
+		return nil, errGroup
+	}
+	return &databasev1.StreamRegistryServiceExistResponse{HasGroup: exist, HasStream: false}, nil
+}
+
+func groupExist(ctx context.Context, errResource error, metadata *commonv1.Metadata, groupRegistry schema.Group) (bool, error) {
+	if !errors.Is(errResource, schema.ErrGRPCResourceNotFound) {
+		return false, errResource
+	}
+	if metadata == nil {
+		return false, status.Error(codes.InvalidArgument, "metadata is absent")
+	}
+	_, errGroup := groupRegistry.GetGroup(ctx, metadata.Group)
+	if errGroup == nil {
+		return true, nil
+	}
+	if errors.Is(errGroup, schema.ErrGRPCResourceNotFound) {
+		return false, nil
+	}
+	return false, errGroup
+}
+
 type indexRuleBindingRegistryServer struct {
 	schemaRegistry metadata.Service
 	databasev1.UnimplementedIndexRuleBindingRegistryServiceServer
@@ -149,6 +186,23 @@ func (rs *indexRuleBindingRegistryServer) List(ctx context.Context,
 	}, nil
 }
 
+func (rs *indexRuleBindingRegistryServer) Exist(ctx context.Context, req *databasev1.IndexRuleBindingRegistryServiceExistRequest) (
+	*databasev1.IndexRuleBindingRegistryServiceExistResponse, error,
+) {
+	_, err := rs.Get(ctx, &databasev1.IndexRuleBindingRegistryServiceGetRequest{Metadata: req.Metadata})
+	if err == nil {
+		return &databasev1.IndexRuleBindingRegistryServiceExistResponse{
+			HasGroup:            true,
+			HasIndexRuleBinding: true,
+		}, nil
+	}
+	exist, errGroup := groupExist(ctx, err, req.Metadata, rs.schemaRegistry.GroupRegistry())
+	if errGroup != nil {
+		return nil, errGroup
+	}
+	return &databasev1.IndexRuleBindingRegistryServiceExistResponse{HasGroup: exist, HasIndexRuleBinding: false}, nil
+}
+
 type indexRuleRegistryServer struct {
 	schemaRegistry metadata.Service
 	databasev1.UnimplementedIndexRuleRegistryServiceServer
@@ -208,6 +262,23 @@ func (rs *indexRuleRegistryServer) List(ctx context.Context, req *databasev1.Ind
 	}, nil
 }
 
+func (rs *indexRuleRegistryServer) Exist(ctx context.Context, req *databasev1.IndexRuleRegistryServiceExistRequest) (
+	*databasev1.IndexRuleRegistryServiceExistResponse, error,
+) {
+	_, err := rs.Get(ctx, &databasev1.IndexRuleRegistryServiceGetRequest{Metadata: req.Metadata})
+	if err == nil {
+		return &databasev1.IndexRuleRegistryServiceExistResponse{
+			HasGroup:     true,
+			HasIndexRule: true,
+		}, nil
+	}
+	exist, errGroup := groupExist(ctx, err, req.Metadata, rs.schemaRegistry.GroupRegistry())
+	if errGroup != nil {
+		return nil, errGroup
+	}
+	return &databasev1.IndexRuleRegistryServiceExistResponse{HasGroup: exist, HasIndexRule: false}, nil
+}
+
 type measureRegistryServer struct {
 	schemaRegistry metadata.Service
 	databasev1.UnimplementedMeasureRegistryServiceServer
@@ -267,6 +338,21 @@ func (rs *measureRegistryServer) List(ctx context.Context, req *databasev1.Measu
 	}, nil
 }
 
+func (rs *measureRegistryServer) Exist(ctx context.Context, req *databasev1.MeasureRegistryServiceExistRequest) (*databasev1.MeasureRegistryServiceExistResponse, error) {
+	_, err := rs.Get(ctx, &databasev1.MeasureRegistryServiceGetRequest{Metadata: req.Metadata})
+	if err == nil {
+		return &databasev1.MeasureRegistryServiceExistResponse{
+			HasGroup:   true,
+			HasMeasure: true,
+		}, nil
+	}
+	exist, errGroup := groupExist(ctx, err, req.Metadata, rs.schemaRegistry.GroupRegistry())
+	if errGroup != nil {
+		return nil, errGroup
+	}
+	return &databasev1.MeasureRegistryServiceExistResponse{HasGroup: exist, HasMeasure: false}, nil
+}
+
 type groupRegistryServer struct {
 	schemaRegistry metadata.Service
 	databasev1.UnimplementedGroupRegistryServiceServer
@@ -326,6 +412,21 @@ func (rs *groupRegistryServer) List(ctx context.Context, req *databasev1.GroupRe
 	}, nil
 }
 
+func (rs *groupRegistryServer) Exist(ctx context.Context, req *databasev1.GroupRegistryServiceExistRequest) (*databasev1.GroupRegistryServiceExistResponse, error) {
+	_, err := rs.Get(ctx, &databasev1.GroupRegistryServiceGetRequest{Group: req.Group})
+	if err == nil {
+		return &databasev1.GroupRegistryServiceExistResponse{
+			HasGroup: true,
+		}, nil
+	}
+	if errors.Is(err, schema.ErrGRPCResourceNotFound) {
+		return &databasev1.GroupRegistryServiceExistResponse{
+			HasGroup: false,
+		}, nil
+	}
+	return nil, err
+}
+
 type topNAggregationRegistryServer struct {
 	schemaRegistry metadata.Service
 	databasev1.UnimplementedTopNAggregationRegistryServiceServer
@@ -384,3 +485,20 @@ func (ts *topNAggregationRegistryServer) List(ctx context.Context,
 		TopNAggregation: entities,
 	}, nil
 }
+
+func (ts *topNAggregationRegistryServer) Exist(ctx context.Context, req *databasev1.TopNAggregationRegistryServiceExistRequest) (
+	*databasev1.TopNAggregationRegistryServiceExistResponse, error,
+) {
+	_, err := ts.Get(ctx, &databasev1.TopNAggregationRegistryServiceGetRequest{Metadata: req.Metadata})
+	if err == nil {
+		return &databasev1.TopNAggregationRegistryServiceExistResponse{
+			HasGroup:           true,
+			HasTopNAggregation: true,
+		}, nil
+	}
+	exist, errGroup := groupExist(ctx, err, req.Metadata, ts.schemaRegistry.GroupRegistry())
+	if errGroup != nil {
+		return nil, errGroup
+	}
+	return &databasev1.TopNAggregationRegistryServiceExistResponse{HasGroup: exist, HasTopNAggregation: false}, nil
+}
diff --git a/banyand/liaison/grpc/registry_test.go b/banyand/liaison/grpc/registry_test.go
index 03c6d84..e2fc8c6 100644
--- a/banyand/liaison/grpc/registry_test.go
+++ b/banyand/liaison/grpc/registry_test.go
@@ -69,6 +69,12 @@ var _ = Describe("Registry", func() {
 		})
 		errStatus, _ := status.FromError(err)
 		Expect(errStatus.Code()).To(Equal(codes.NotFound))
+		existResp, err := client.Exist(context.TODO(), &databasev1.StreamRegistryServiceExistRequest{
+			Metadata: meta,
+		})
+		Expect(err).ShouldNot(HaveOccurred())
+		Expect(existResp.HasGroup).To(BeTrue())
+		Expect(existResp.HasStream).To(BeFalse())
 		By("Creating a new stream")
 		_, err = client.Create(context.TODO(), &databasev1.StreamRegistryServiceCreateRequest{Stream: getResp.GetStream()})
 		Expect(err).ShouldNot(HaveOccurred())
@@ -78,6 +84,12 @@ var _ = Describe("Registry", func() {
 		})
 		Expect(err).ShouldNot(HaveOccurred())
 		Expect(getResp).NotTo(BeNil())
+		existResp, err = client.Exist(context.TODO(), &databasev1.StreamRegistryServiceExistRequest{
+			Metadata: meta,
+		})
+		Expect(err).ShouldNot(HaveOccurred())
+		Expect(existResp.HasGroup).To(BeTrue())
+		Expect(existResp.HasStream).To(BeTrue())
 	})
 	It("manages the index-rule-binding", func() {
 		client := databasev1.NewIndexRuleBindingRegistryServiceClient(conn)
diff --git a/docs/api-reference.md b/docs/api-reference.md
index f781426..c7de7c6 100644
--- a/docs/api-reference.md
+++ b/docs/api-reference.md
@@ -75,6 +75,8 @@
     - [GroupRegistryServiceCreateResponse](#banyandb-database-v1-GroupRegistryServiceCreateResponse)
     - [GroupRegistryServiceDeleteRequest](#banyandb-database-v1-GroupRegistryServiceDeleteRequest)
     - [GroupRegistryServiceDeleteResponse](#banyandb-database-v1-GroupRegistryServiceDeleteResponse)
+    - [GroupRegistryServiceExistRequest](#banyandb-database-v1-GroupRegistryServiceExistRequest)
+    - [GroupRegistryServiceExistResponse](#banyandb-database-v1-GroupRegistryServiceExistResponse)
     - [GroupRegistryServiceGetRequest](#banyandb-database-v1-GroupRegistryServiceGetRequest)
     - [GroupRegistryServiceGetResponse](#banyandb-database-v1-GroupRegistryServiceGetResponse)
     - [GroupRegistryServiceListRequest](#banyandb-database-v1-GroupRegistryServiceListRequest)
@@ -85,6 +87,8 @@
     - [IndexRuleBindingRegistryServiceCreateResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceCreateResponse)
     - [IndexRuleBindingRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteRequest)
     - [IndexRuleBindingRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteResponse)
+    - [IndexRuleBindingRegistryServiceExistRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceExistRequest)
+    - [IndexRuleBindingRegistryServiceExistResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceExistResponse)
     - [IndexRuleBindingRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetRequest)
     - [IndexRuleBindingRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetResponse)
     - [IndexRuleBindingRegistryServiceListRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceListRequest)
@@ -95,6 +99,8 @@
     - [IndexRuleRegistryServiceCreateResponse](#banyandb-database-v1-IndexRuleRegistryServiceCreateResponse)
     - [IndexRuleRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleRegistryServiceDeleteRequest)
     - [IndexRuleRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleRegistryServiceDeleteResponse)
+    - [IndexRuleRegistryServiceExistRequest](#banyandb-database-v1-IndexRuleRegistryServiceExistRequest)
+    - [IndexRuleRegistryServiceExistResponse](#banyandb-database-v1-IndexRuleRegistryServiceExistResponse)
     - [IndexRuleRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleRegistryServiceGetRequest)
     - [IndexRuleRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleRegistryServiceGetResponse)
     - [IndexRuleRegistryServiceListRequest](#banyandb-database-v1-IndexRuleRegistryServiceListRequest)
@@ -105,6 +111,8 @@
     - [MeasureRegistryServiceCreateResponse](#banyandb-database-v1-MeasureRegistryServiceCreateResponse)
     - [MeasureRegistryServiceDeleteRequest](#banyandb-database-v1-MeasureRegistryServiceDeleteRequest)
     - [MeasureRegistryServiceDeleteResponse](#banyandb-database-v1-MeasureRegistryServiceDeleteResponse)
+    - [MeasureRegistryServiceExistRequest](#banyandb-database-v1-MeasureRegistryServiceExistRequest)
+    - [MeasureRegistryServiceExistResponse](#banyandb-database-v1-MeasureRegistryServiceExistResponse)
     - [MeasureRegistryServiceGetRequest](#banyandb-database-v1-MeasureRegistryServiceGetRequest)
     - [MeasureRegistryServiceGetResponse](#banyandb-database-v1-MeasureRegistryServiceGetResponse)
     - [MeasureRegistryServiceListRequest](#banyandb-database-v1-MeasureRegistryServiceListRequest)
@@ -115,6 +123,8 @@
     - [StreamRegistryServiceCreateResponse](#banyandb-database-v1-StreamRegistryServiceCreateResponse)
     - [StreamRegistryServiceDeleteRequest](#banyandb-database-v1-StreamRegistryServiceDeleteRequest)
     - [StreamRegistryServiceDeleteResponse](#banyandb-database-v1-StreamRegistryServiceDeleteResponse)
+    - [StreamRegistryServiceExistRequest](#banyandb-database-v1-StreamRegistryServiceExistRequest)
+    - [StreamRegistryServiceExistResponse](#banyandb-database-v1-StreamRegistryServiceExistResponse)
     - [StreamRegistryServiceGetRequest](#banyandb-database-v1-StreamRegistryServiceGetRequest)
     - [StreamRegistryServiceGetResponse](#banyandb-database-v1-StreamRegistryServiceGetResponse)
     - [StreamRegistryServiceListRequest](#banyandb-database-v1-StreamRegistryServiceListRequest)
@@ -125,6 +135,8 @@
     - [TopNAggregationRegistryServiceCreateResponse](#banyandb-database-v1-TopNAggregationRegistryServiceCreateResponse)
     - [TopNAggregationRegistryServiceDeleteRequest](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteRequest)
     - [TopNAggregationRegistryServiceDeleteResponse](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteResponse)
+    - [TopNAggregationRegistryServiceExistRequest](#banyandb-database-v1-TopNAggregationRegistryServiceExistRequest)
+    - [TopNAggregationRegistryServiceExistResponse](#banyandb-database-v1-TopNAggregationRegistryServiceExistResponse)
     - [TopNAggregationRegistryServiceGetRequest](#banyandb-database-v1-TopNAggregationRegistryServiceGetRequest)
     - [TopNAggregationRegistryServiceGetResponse](#banyandb-database-v1-TopNAggregationRegistryServiceGetResponse)
     - [TopNAggregationRegistryServiceListRequest](#banyandb-database-v1-TopNAggregationRegistryServiceListRequest)
@@ -1189,6 +1201,36 @@ Type determine the index structure under the hood
 
 
 
+<a name="banyandb-database-v1-GroupRegistryServiceExistRequest"></a>
+
+### GroupRegistryServiceExistRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceExistResponse"></a>
+
+### GroupRegistryServiceExistResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| has_group | [bool](#bool) |  |  |
+
+
+
+
+
+
 <a name="banyandb-database-v1-GroupRegistryServiceGetRequest"></a>
 
 ### GroupRegistryServiceGetRequest
@@ -1324,6 +1366,37 @@ Type determine the index structure under the hood
 
 
 
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceExistRequest"></a>
+
+### IndexRuleBindingRegistryServiceExistRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceExistResponse"></a>
+
+### IndexRuleBindingRegistryServiceExistResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| has_group | [bool](#bool) |  |  |
+| has_index_rule_binding | [bool](#bool) |  |  |
+
+
+
+
+
+
 <a name="banyandb-database-v1-IndexRuleBindingRegistryServiceGetRequest"></a>
 
 ### IndexRuleBindingRegistryServiceGetRequest
@@ -1464,6 +1537,37 @@ Type determine the index structure under the hood
 
 
 
+<a name="banyandb-database-v1-IndexRuleRegistryServiceExistRequest"></a>
+
+### IndexRuleRegistryServiceExistRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceExistResponse"></a>
+
+### IndexRuleRegistryServiceExistResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| has_group | [bool](#bool) |  |  |
+| has_index_rule | [bool](#bool) |  |  |
+
+
+
+
+
+
 <a name="banyandb-database-v1-IndexRuleRegistryServiceGetRequest"></a>
 
 ### IndexRuleRegistryServiceGetRequest
@@ -1604,6 +1708,37 @@ Type determine the index structure under the hood
 
 
 
+<a name="banyandb-database-v1-MeasureRegistryServiceExistRequest"></a>
+
+### MeasureRegistryServiceExistRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceExistResponse"></a>
+
+### MeasureRegistryServiceExistResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| has_group | [bool](#bool) |  |  |
+| has_measure | [bool](#bool) |  |  |
+
+
+
+
+
+
 <a name="banyandb-database-v1-MeasureRegistryServiceGetRequest"></a>
 
 ### MeasureRegistryServiceGetRequest
@@ -1744,6 +1879,37 @@ Type determine the index structure under the hood
 
 
 
+<a name="banyandb-database-v1-StreamRegistryServiceExistRequest"></a>
+
+### StreamRegistryServiceExistRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceExistResponse"></a>
+
+### StreamRegistryServiceExistResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| has_group | [bool](#bool) |  |  |
+| has_stream | [bool](#bool) |  |  |
+
+
+
+
+
+
 <a name="banyandb-database-v1-StreamRegistryServiceGetRequest"></a>
 
 ### StreamRegistryServiceGetRequest
@@ -1884,6 +2050,37 @@ Type determine the index structure under the hood
 
 
 
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceExistRequest"></a>
+
+### TopNAggregationRegistryServiceExistRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceExistResponse"></a>
+
+### TopNAggregationRegistryServiceExistResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| has_group | [bool](#bool) |  |  |
+| has_top_n_aggregation | [bool](#bool) |  |  |
+
+
+
+
+
+
 <a name="banyandb-database-v1-TopNAggregationRegistryServiceGetRequest"></a>
 
 ### TopNAggregationRegistryServiceGetRequest
@@ -1987,6 +2184,7 @@ Type determine the index structure under the hood
 | Delete | [GroupRegistryServiceDeleteRequest](#banyandb-database-v1-GroupRegistryServiceDeleteRequest) | [GroupRegistryServiceDeleteResponse](#banyandb-database-v1-GroupRegistryServiceDeleteResponse) |  |
 | Get | [GroupRegistryServiceGetRequest](#banyandb-database-v1-GroupRegistryServiceGetRequest) | [GroupRegistryServiceGetResponse](#banyandb-database-v1-GroupRegistryServiceGetResponse) |  |
 | List | [GroupRegistryServiceListRequest](#banyandb-database-v1-GroupRegistryServiceListRequest) | [GroupRegistryServiceListResponse](#banyandb-database-v1-GroupRegistryServiceListResponse) |  |
+| Exist | [GroupRegistryServiceExistRequest](#banyandb-database-v1-GroupRegistryServiceExistRequest) | [GroupRegistryServiceExistResponse](#banyandb-database-v1-GroupRegistryServiceExistResponse) | Exist doesn&#39;t expose an HTTP endpoint. Please use HEAD method to touch Get instead |
 
 
 <a name="banyandb-database-v1-IndexRuleBindingRegistryService"></a>
@@ -2001,6 +2199,7 @@ Type determine the index structure under the hood
 | Delete | [IndexRuleBindingRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteRequest) | [IndexRuleBindingRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteResponse) |  |
 | Get | [IndexRuleBindingRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetRequest) | [IndexRuleBindingRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetResponse) |  |
 | List | [IndexRuleBindingRegistryServiceListRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceListRequest) | [IndexRuleBindingRegistryServiceListResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceListResponse) |  |
+| Exist | [IndexRuleBindingRegistryServiceExistRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceExistRequest) | [IndexRuleBindingRegistryServiceExistResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceExistResponse) | Exist doesn&#39;t expose an HTTP endpoint. Please use HEAD method to touch Get instead |
 
 
 <a name="banyandb-database-v1-IndexRuleRegistryService"></a>
@@ -2015,6 +2214,7 @@ Type determine the index structure under the hood
 | Delete | [IndexRuleRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleRegistryServiceDeleteRequest) | [IndexRuleRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleRegistryServiceDeleteResponse) |  |
 | Get | [IndexRuleRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleRegistryServiceGetRequest) | [IndexRuleRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleRegistryServiceGetResponse) |  |
 | List | [IndexRuleRegistryServiceListRequest](#banyandb-database-v1-IndexRuleRegistryServiceListRequest) | [IndexRuleRegistryServiceListResponse](#banyandb-database-v1-IndexRuleRegistryServiceListResponse) |  |
+| Exist | [IndexRuleRegistryServiceExistRequest](#banyandb-database-v1-IndexRuleRegistryServiceExistRequest) | [IndexRuleRegistryServiceExistResponse](#banyandb-database-v1-IndexRuleRegistryServiceExistResponse) | Exist doesn&#39;t expose an HTTP endpoint. Please use HEAD method to touch Get instead |
 
 
 <a name="banyandb-database-v1-MeasureRegistryService"></a>
@@ -2029,6 +2229,7 @@ Type determine the index structure under the hood
 | Delete | [MeasureRegistryServiceDeleteRequest](#banyandb-database-v1-MeasureRegistryServiceDeleteRequest) | [MeasureRegistryServiceDeleteResponse](#banyandb-database-v1-MeasureRegistryServiceDeleteResponse) |  |
 | Get | [MeasureRegistryServiceGetRequest](#banyandb-database-v1-MeasureRegistryServiceGetRequest) | [MeasureRegistryServiceGetResponse](#banyandb-database-v1-MeasureRegistryServiceGetResponse) |  |
 | List | [MeasureRegistryServiceListRequest](#banyandb-database-v1-MeasureRegistryServiceListRequest) | [MeasureRegistryServiceListResponse](#banyandb-database-v1-MeasureRegistryServiceListResponse) |  |
+| Exist | [MeasureRegistryServiceExistRequest](#banyandb-database-v1-MeasureRegistryServiceExistRequest) | [MeasureRegistryServiceExistResponse](#banyandb-database-v1-MeasureRegistryServiceExistResponse) | Exist doesn&#39;t expose an HTTP endpoint. Please use HEAD method to touch Get instead |
 
 
 <a name="banyandb-database-v1-StreamRegistryService"></a>
@@ -2043,6 +2244,7 @@ Type determine the index structure under the hood
 | Delete | [StreamRegistryServiceDeleteRequest](#banyandb-database-v1-StreamRegistryServiceDeleteRequest) | [StreamRegistryServiceDeleteResponse](#banyandb-database-v1-StreamRegistryServiceDeleteResponse) |  |
 | Get | [StreamRegistryServiceGetRequest](#banyandb-database-v1-StreamRegistryServiceGetRequest) | [StreamRegistryServiceGetResponse](#banyandb-database-v1-StreamRegistryServiceGetResponse) |  |
 | List | [StreamRegistryServiceListRequest](#banyandb-database-v1-StreamRegistryServiceListRequest) | [StreamRegistryServiceListResponse](#banyandb-database-v1-StreamRegistryServiceListResponse) |  |
+| Exist | [StreamRegistryServiceExistRequest](#banyandb-database-v1-StreamRegistryServiceExistRequest) | [StreamRegistryServiceExistResponse](#banyandb-database-v1-StreamRegistryServiceExistResponse) | Exist doesn&#39;t expose an HTTP endpoint. Please use HEAD method to touch Get instead |
 
 
 <a name="banyandb-database-v1-TopNAggregationRegistryService"></a>
@@ -2057,6 +2259,7 @@ Type determine the index structure under the hood
 | Delete | [TopNAggregationRegistryServiceDeleteRequest](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteRequest) | [TopNAggregationRegistryServiceDeleteResponse](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteResponse) |  |
 | Get | [TopNAggregationRegistryServiceGetRequest](#banyandb-database-v1-TopNAggregationRegistryServiceGetRequest) | [TopNAggregationRegistryServiceGetResponse](#banyandb-database-v1-TopNAggregationRegistryServiceGetResponse) |  |
 | List | [TopNAggregationRegistryServiceListRequest](#banyandb-database-v1-TopNAggregationRegistryServiceListRequest) | [TopNAggregationRegistryServiceListResponse](#banyandb-database-v1-TopNAggregationRegistryServiceListResponse) |  |
+| Exist | [TopNAggregationRegistryServiceExistRequest](#banyandb-database-v1-TopNAggregationRegistryServiceExistRequest) | [TopNAggregationRegistryServiceExistResponse](#banyandb-database-v1-TopNAggregationRegistryServiceExistResponse) |  |