diff --git a/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go b/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go index 45589ca2..543a44b8 100644 --- a/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go +++ b/gen/go/qdrant/cloud/cluster/v1/cluster.pb.go @@ -3298,6 +3298,7 @@ type ClusterState struct { // If enabled, you can generate JWT tokens with fine-grained rules for access control. JwtRbac bool `protobuf:"varint,10,opt,name=jwt_rbac,json=jwtRbac,proto3" json:"jwt_rbac,omitempty"` // Specifies whether some operations are supported by cluster or not. + // Optional during rollout; will become required once all producers populate it. Capabilities *ClusterCapabilities `protobuf:"bytes,11,opt,name=capabilities,proto3" json:"capabilities,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -3910,11 +3911,14 @@ type ClusterCapabilities struct { state protoimpl.MessageState `protogen:"open.v1"` // Whether the StorageClass used by the cluster supports disk expansion or not. // Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. + // Optional during rollout; will become required once all producers populate it. DiskExpansion *ClusterDiskExpansionSupportInfo `protobuf:"bytes,1,opt,name=disk_expansion,json=diskExpansion,proto3" json:"disk_expansion,omitempty"` // Whether it is possible to take a backup for the cluster or not. // Backup tab will be shown or hidden based on this for hybrid cloud clusters. + // Optional during rollout; will become required once all producers populate it. Backup *ClusterBackupSupportInfo `protobuf:"bytes,2,opt,name=backup,proto3" json:"backup,omitempty"` // Whether the cluster can be scaled up or down. + // Optional during rollout; will become required once all producers populate it. ScalabilityInfo *ClusterScalabilityInfo `protobuf:"bytes,3,opt,name=scalability_info,json=scalabilityInfo,proto3" json:"scalability_info,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -4436,7 +4440,7 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x17_database_storage_classB\x19\n" + "\x17_snapshot_storage_classB\x18\n" + "\x16_volume_snapshot_classB\x1a\n" + - "\x18_volume_attributes_class\"\xaf\x05\n" + + "\x18_volume_attributes_class\"\xa7\x05\n" + "\fClusterState\x12!\n" + "\aversion\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\aversion\x12\x19\n" + "\bnodes_up\x18\x02 \x01(\rR\anodesUp\x12=\n" + @@ -4448,8 +4452,8 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x10scalability_info\x18\b \x01(\v2/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\b\xbaH\x03\xc8\x01\x01\x18\x01R\x0fscalabilityInfo\x12>\n" + "\x05nodes\x18\t \x03(\v2(.qdrant.cloud.cluster.v1.ClusterNodeInfoR\x05nodes\x12\x19\n" + "\bjwt_rbac\x18\n" + - " \x01(\bR\ajwtRbac\x12X\n" + - "\fcapabilities\x18\v \x01(\v2,.qdrant.cloud.cluster.v1.ClusterCapabilitiesB\x06\xbaH\x03\xc8\x01\x01R\fcapabilities\"\xdc\x02\n" + + " \x01(\bR\ajwtRbac\x12P\n" + + "\fcapabilities\x18\v \x01(\v2,.qdrant.cloud.cluster.v1.ClusterCapabilitiesR\fcapabilities\"\xdc\x02\n" + "\x0fClusterNodeInfo\x12\x1b\n" + "\x04name\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x129\n" + "\n" + @@ -4495,11 +4499,11 @@ const file_qdrant_cloud_cluster_v1_cluster_proto_rawDesc = "" + "\x06status\x18\x01 \x01(\x0e23.qdrant.cloud.cluster.v1.ClusterBackupSupportStatusB\n" + "\xbaH\a\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n" + "\x06reason\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01B\t\n" + - "\a_reason\"\xb5\x02\n" + - "\x13ClusterCapabilities\x12g\n" + - "\x0edisk_expansion\x18\x01 \x01(\v28.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportInfoB\x06\xbaH\x03\xc8\x01\x01R\rdiskExpansion\x12Q\n" + - "\x06backup\x18\x02 \x01(\v21.qdrant.cloud.cluster.v1.ClusterBackupSupportInfoB\x06\xbaH\x03\xc8\x01\x01R\x06backup\x12b\n" + - "\x10scalability_info\x18\x03 \x01(\v2/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x06\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\"\x93\x02\n" + + "\a_reason\"\x9d\x02\n" + + "\x13ClusterCapabilities\x12_\n" + + "\x0edisk_expansion\x18\x01 \x01(\v28.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportInfoR\rdiskExpansion\x12I\n" + + "\x06backup\x18\x02 \x01(\v21.qdrant.cloud.cluster.v1.ClusterBackupSupportInfoR\x06backup\x12Z\n" + + "\x10scalability_info\x18\x03 \x01(\v2/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoR\x0fscalabilityInfo\"\x93\x02\n" + "\rQdrantRelease\x12!\n" + "\aversion\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\aversion\x12\x18\n" + "\adefault\x18\x02 \x01(\bR\adefault\x129\n" + diff --git a/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json b/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json index 2a4b219c..428b8289 100644 --- a/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json +++ b/gen/openapiv2/qdrant/cloud/cluster/v1/cluster.swagger.json @@ -807,15 +807,15 @@ "properties": { "diskExpansion": { "$ref": "#/definitions/v1ClusterDiskExpansionSupportInfo", - "description": "Whether the StorageClass used by the cluster supports disk expansion or not.\nDisk scaling will be enabled or disabled based on this for hybrid cloud clusters." + "description": "Whether the StorageClass used by the cluster supports disk expansion or not.\nDisk scaling will be enabled or disabled based on this for hybrid cloud clusters.\nOptional during rollout; will become required once all producers populate it." }, "backup": { "$ref": "#/definitions/v1ClusterBackupSupportInfo", - "description": "Whether it is possible to take a backup for the cluster or not.\nBackup tab will be shown or hidden based on this for hybrid cloud clusters." + "description": "Whether it is possible to take a backup for the cluster or not.\nBackup tab will be shown or hidden based on this for hybrid cloud clusters.\nOptional during rollout; will become required once all producers populate it." }, "scalabilityInfo": { "$ref": "#/definitions/v1ClusterScalabilityInfo", - "description": "Whether the cluster can be scaled up or down." + "description": "Whether the cluster can be scaled up or down.\nOptional during rollout; will become required once all producers populate it." } }, "description": "ClusterCapabilities specifies whether some actions are supported by the cluster or not." @@ -1227,7 +1227,7 @@ }, "capabilities": { "$ref": "#/definitions/v1ClusterCapabilities", - "description": "Specifies whether some operations are supported by cluster or not." + "description": "Specifies whether some operations are supported by cluster or not.\nOptional during rollout; will become required once all producers populate it." } }, "description": "ClusterState represents the current state of a cluster\nAll fields in this message are read-only." diff --git a/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py b/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py index a6320a3e..dad6a124 100644 --- a/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py +++ b/gen/python/qdrant/cloud/cluster/v1/cluster_pb2.py @@ -29,7 +29,7 @@ from qdrant.cloud.event.v1 import events_pb2 as qdrant_dot_cloud_dot_event_dot_v1_dot_events__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%qdrant/cloud/cluster/v1/cluster.proto\x12\x17qdrant.cloud.cluster.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a#qdrant/cloud/common/v1/common.proto\x1a\"qdrant/cloud/event/v1/events.proto\"\xb2\x06\n\x13ListClustersRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x38\n\x11\x63loud_provider_id\x18\n \x01(\tB\x07\xbaH\x04r\x02\x10\x03H\x00R\x0f\x63loudProviderId\x88\x01\x01\x12\x45\n\x18\x63loud_provider_region_id\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x15\x63loudProviderRegionId\x88\x01\x01\x12,\n\tpage_size\x18\x14 \x01(\x05\x42\n\xbaH\x07\x1a\x05\x18\xfa\x01 \x00H\x02R\x08pageSize\x88\x01\x01\x12+\n\npage_token\x18\x15 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x03R\tpageToken\x88\x01\x01:\xc5\x03\xbaH\xc1\x03\x1a\xb1\x01\n\'list_clusters.cloud_provider_id_present\x12\x42\x63loud_provider_id is required when cloud_provider_region_id is set\x1a\x42!has(this.cloud_provider_region_id) || has(this.cloud_provider_id)\x1a\x8a\x02\n cluster.cloud_provider_region_id\x12Hcloud_provider_region_id must be a UUID if cloud_provider_id is \'hybrid\'\x1a\x9b\x01this.cloud_provider_region_id.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') || this.cloud_provider_id!= \'hybrid\'B\x14\n\x12_cloud_provider_idB\x1b\n\x19_cloud_provider_region_idB\x0c\n\n_page_sizeB\r\n\x0b_page_token\"\xd4\x01\n\x14ListClustersResponse\x12\x36\n\x05items\x18\x01 \x03(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterR\x05items\x12+\n\ntotal_size\x18\n \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x00H\x00R\ttotalSize\x88\x01\x01\x12\x34\n\x0fnext_page_token\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\rnextPageToken\x88\x01\x01\x42\r\n\x0b_total_sizeB\x12\n\x10_next_page_token\"e\n\x11GetClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"X\n\x12GetClusterResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster\"\xcd\x02\n\x14\x43reateClusterRequest\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:\xf0\x01\xbaH\xec\x01\x1a\xe9\x01\n\"create_cluster.no_read_only_fields\x12Nread-only fields (id, created_at, deleted_at, state) must not be set on create\x1asthis.cluster.id == \'\' && !has(this.cluster.created_at) && !has(this.cluster.deleted_at) && !has(this.cluster.state)\"\xc4\x01\n\x15\x43reateClusterResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:g\xbaHd\x1a\x62\n\x1c\x63reate_cluster.state_present\x12)state is required for an existing cluster\x1a\x17has(this.cluster.state)\"\xb9\x01\n\x14UpdateClusterRequest\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:]\xbaHZ\x1aX\n\x19update_cluster.id_present\x12$cluster.id is required for an update\x1a\x15this.cluster.id != \'\'\"\xc4\x01\n\x15UpdateClusterResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster:g\xbaHd\x1a\x62\n\x1cupdate_cluster.state_present\x12)state is required for an existing cluster\x1a\x17has(this.cluster.state)\"\xa7\x01\n\x14\x44\x65leteClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\x12*\n\x0e\x64\x65lete_backups\x18\x03 \x01(\x08H\x00R\rdeleteBackups\x88\x01\x01\x42\x11\n\x0f_delete_backups\"\x17\n\x15\x44\x65leteClusterResponse\"i\n\x15RestartClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x18\n\x16RestartClusterResponse\"i\n\x15SuspendClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x18\n\x16SuspendClusterResponse\"k\n\x17UnsuspendClusterRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x1a\n\x18UnsuspendClusterResponse\"o\n\x1b\x45nableClusterJwtRbacRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\'\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tclusterId\"\x1e\n\x1c\x45nableClusterJwtRbacResponse\"D\n\x19SuggestClusterNameRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"9\n\x1aSuggestClusterNameResponse\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\"\x81\x01\n\x19ListQdrantReleasesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12,\n\ncluster_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\tclusterId\x88\x01\x01\x42\r\n\x0b_cluster_id\"Z\n\x1aListQdrantReleasesResponse\x12<\n\x05items\x18\x01 \x03(\x0b\x32&.qdrant.cloud.cluster.v1.QdrantReleaseR\x05items\"e\n\x17GetQdrantReleaseRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12!\n\x07version\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\"d\n\x18GetQdrantReleaseResponse\x12H\n\x07release\x18\x01 \x01(\x0b\x32&.qdrant.cloud.cluster.v1.QdrantReleaseB\x06\xbaH\x03\xc8\x01\x01R\x07release\"\xdc\t\n\x07\x43luster\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\'\n\naccount_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12/\n\x04name\x18\x04 \x01(\tB\x1b\xbaH\x18r\x16\x10\x02\x18@2\x10^[a-zA-Z0-9-_]+$R\x04name\x12\x39\n\ndeleted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tdeletedAt\x12\x33\n\x11\x63loud_provider_id\x18\n \x01(\tB\x07\xbaH\x04r\x02\x10\x03R\x0f\x63loudProviderId\x12@\n\x18\x63loud_provider_region_id\x18\x0b \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x15\x63loudProviderRegionId\x12\x42\n\x06labels\x18\x0c \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\x06labels\x12\xc7\x01\n\x15\x63ost_allocation_label\x18\r \x01(\tB\x8d\x01\xbaH\x89\x01r\x86\x01\x18\xfd\x01\x32\x80\x01^([a-z0-9A-Z]([-a-z0-9A-Z]*[a-z0-9A-Z])?(\\.[a-z0-9A-Z]([-a-z0-9A-Z]*[a-z0-9A-Z])?)*\\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$H\x00R\x13\x63ostAllocationLabel\x88\x01\x01\x12[\n\rconfiguration\x18\x14 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterConfigurationB\x06\xbaH\x03\xc8\x01\x01R\rconfiguration\x12;\n\x05state\x18\x64 \x01(\x0b\x32%.qdrant.cloud.cluster.v1.ClusterStateR\x05state:\xb7\x03\xbaH\xb3\x03\x1a\xa3\x01\n\ncluster.id\x12\x1avalue must be a valid UUID\x1aythis.id.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') || !has(this.created_at)\x1a\x8a\x02\n cluster.cloud_provider_region_id\x12Hcloud_provider_region_id must be a UUID if cloud_provider_id is \'hybrid\'\x1a\x9b\x01this.cloud_provider_region_id.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') || this.cloud_provider_id!= \'hybrid\'B\x18\n\x16_cost_allocation_label\"\xde\x0f\n\x14\x43lusterConfiguration\x12\x44\n\x10last_modified_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0elastModifiedAt\x12/\n\x0fnumber_of_nodes\x18\x02 \x01(\rB\x07\xbaH\x04*\x02(\x01R\rnumberOfNodes\x12\x45\n\x07version\x18\x03 \x01(\tB&\xbaH#r!2\x1f^(v(\\d+)\\.(\\d+)\\.(\\d+)|latest)$H\x00R\x07version\x88\x01\x01\x12\'\n\npackage_id\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\tpackageId\x12\x64\n\x14\x61\x64\x64itional_resources\x18\x05 \x01(\x0b\x32,.qdrant.cloud.cluster.v1.AdditionalResourcesH\x01R\x13\x61\x64\x64itionalResources\x88\x01\x01\x12j\n\x16\x64\x61tabase_configuration\x18\x07 \x01(\x0b\x32..qdrant.cloud.cluster.v1.DatabaseConfigurationH\x02R\x15\x64\x61tabaseConfiguration\x88\x01\x01\x12O\n\rnode_selector\x18\x08 \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\x0cnodeSelector\x12O\n\x0btolerations\x18\t \x03(\x0b\x32#.qdrant.cloud.cluster.v1.TolerationB\x08\xbaH\x05\x92\x01\x02\x10\nR\x0btolerations\x12L\n\x0b\x61nnotations\x18\n \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\x0b\x61nnotations\x12H\n\x18\x61llowed_ip_source_ranges\x18\x0b \x03(\tB\x0f\xbaH\x0c\x92\x01\t\x10(\"\x05r\x03\xf0\x01\x01R\x15\x61llowedIpSourceRanges\x12_\n\x0cservice_type\x18\x0c \x01(\x0e\x32+.qdrant.cloud.cluster.v1.ClusterServiceTypeB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x0bserviceType\x88\x01\x01\x12[\n\x13service_annotations\x18\r \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10@R\x12serviceAnnotations\x12I\n\npod_labels\x18\x0e \x03(\x0b\x32 .qdrant.cloud.common.v1.KeyValueB\x08\xbaH\x05\x92\x01\x02\x10\nR\tpodLabels\x12\x46\n\x17reserved_cpu_percentage\x18\x14 \x01(\rB\t\xbaH\x06*\x04\x18P(\x01H\x04R\x15reservedCpuPercentage\x88\x01\x01\x12L\n\x1areserved_memory_percentage\x18\x15 \x01(\rB\t\xbaH\x06*\x04\x18P(\x01H\x05R\x18reservedMemoryPercentage\x88\x01\x01\x12`\n\x08gpu_type\x18\x16 \x01(\x0e\x32\x34.qdrant.cloud.cluster.v1.ClusterConfigurationGpuTypeB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x06R\x07gpuType\x88\x01\x01\x12r\n\x0erestart_policy\x18\x17 \x01(\x0e\x32:.qdrant.cloud.cluster.v1.ClusterConfigurationRestartPolicyB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x07R\rrestartPolicy\x88\x01\x01\x12~\n\x12rebalance_strategy\x18\x18 \x01(\x0e\x32>.qdrant.cloud.cluster.v1.ClusterConfigurationRebalanceStrategyB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x08R\x11rebalanceStrategy\x88\x01\x01\x12z\n\x1btopology_spread_constraints\x18\x19 \x03(\x0b\x32\x30.qdrant.cloud.common.v1.TopologySpreadConstraintB\x08\xbaH\x05\x92\x01\x02\x10\nR\x19topologySpreadConstraints\x12}\n\x1d\x63luster_storage_configuration\x18\x1a \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterStorageConfigurationH\tR\x1b\x63lusterStorageConfiguration\x88\x01\x01\x42\n\n\x08_versionB\x17\n\x15_additional_resourcesB\x19\n\x17_database_configurationB\x0f\n\r_service_typeB\x1a\n\x18_reserved_cpu_percentageB\x1d\n\x1b_reserved_memory_percentageB\x0b\n\t_gpu_typeB\x11\n\x0f_restart_policyB\x15\n\x13_rebalance_strategyB \n\x1e_cluster_storage_configuration\"\xf1\x05\n\x15\x44\x61tabaseConfiguration\x12]\n\ncollection\x18\x01 \x01(\x0b\x32\x38.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionH\x00R\ncollection\x88\x01\x01\x12T\n\x07storage\x18\x02 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationStorageH\x01R\x07storage\x88\x01\x01\x12T\n\x07service\x18\x03 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationServiceH\x02R\x07service\x88\x01\x01\x12\x64\n\tlog_level\x18\x04 \x01(\x0e\x32\x36.qdrant.cloud.cluster.v1.DatabaseConfigurationLogLevelB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x08logLevel\x88\x01\x01\x12H\n\x03tls\x18\x05 \x01(\x0b\x32\x31.qdrant.cloud.cluster.v1.DatabaseConfigurationTlsH\x04R\x03tls\x88\x01\x01\x12Z\n\tinference\x18\x06 \x01(\x0b\x32\x37.qdrant.cloud.cluster.v1.DatabaseConfigurationInferenceH\x05R\tinference\x88\x01\x01\x12\x64\n\raudit_logging\x18\x07 \x01(\x0b\x32:.qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLoggingH\x06R\x0c\x61uditLogging\x88\x01\x01\x42\r\n\x0b_collectionB\n\n\x08_storageB\n\n\x08_serviceB\x0c\n\n_log_levelB\x06\n\x04_tlsB\x0c\n\n_inferenceB\x10\n\x0e_audit_logging\"\xc6\x02\n\x1f\x44\x61tabaseConfigurationCollection\x12;\n\x12replication_factor\x18\x01 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x11replicationFactor\x88\x01\x01\x12\x46\n\x18write_consistency_factor\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x01H\x01R\x16writeConsistencyFactor\x88\x01\x01\x12^\n\x07vectors\x18\x03 \x01(\x0b\x32?.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectorsH\x02R\x07vectors\x88\x01\x01\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\n\n\x08_vectors\"R\n&DatabaseConfigurationCollectionVectors\x12\x1c\n\x07on_disk\x18\x01 \x01(\x08H\x00R\x06onDisk\x88\x01\x01\x42\n\n\x08_on_disk\"\x97\x01\n\x1c\x44\x61tabaseConfigurationStorage\x12g\n\x0bperformance\x18\x01 \x01(\x0b\x32@.qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformanceH\x00R\x0bperformance\x88\x01\x01\x42\x0e\n\x0c_performance\"\xb2\x01\n\'DatabaseConfigurationStoragePerformance\x12\x35\n\x14optimizer_cpu_budget\x18\x01 \x01(\x05H\x00R\x12optimizerCpuBudget\x88\x01\x01\x12&\n\x0c\x61sync_scorer\x18\x02 \x01(\x08H\x01R\x0b\x61syncScorer\x88\x01\x01\x42\x17\n\x15_optimizer_cpu_budgetB\x0f\n\r_async_scorer\"\x93\x02\n\x1c\x44\x61tabaseConfigurationService\x12\x42\n\x07\x61pi_key\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x00R\x06\x61piKey\x88\x01\x01\x12T\n\x11read_only_api_key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x01R\x0ereadOnlyApiKey\x88\x01\x01\x12\"\n\nenable_tls\x18\x04 \x01(\x08H\x02R\tenableTls\x88\x01\x01\x42\n\n\x08_api_keyB\x14\n\x12_read_only_api_keyB\r\n\x0b_enable_tlsJ\x04\x08\x03\x10\x04\"\x9c\x01\n\x18\x44\x61tabaseConfigurationTls\x12@\n\x04\x63\x65rt\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x04\x63\x65rt\x12>\n\x03key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x03key\":\n\x1e\x44\x61tabaseConfigurationInference\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\")\n\x13\x41\x64\x64itionalResources\x12\x12\n\x04\x64isk\x18\x03 \x01(\rR\x04\x64isk\"\xb6\x02\n!DatabaseConfigurationAuditLogging\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12J\n\x08rotation\x18\x02 \x01(\x0e\x32).qdrant.cloud.cluster.v1.AuditLogRotationH\x00R\x08rotation\x88\x01\x01\x12\x33\n\rmax_log_files\x18\x03 \x01(\rB\n\xbaH\x07*\x05\x18\xe8\x07(\x01H\x01R\x0bmaxLogFiles\x88\x01\x01\x12;\n\x17trust_forwarded_headers\x18\x04 \x01(\x08H\x02R\x15trustForwardedHeaders\x88\x01\x01\x42\x0b\n\t_rotationB\x10\n\x0e_max_log_filesB\x1a\n\x18_trust_forwarded_headers\"\xa4\n\n\nToleration\x12\x1f\n\x03key\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xbd\x02H\x00R\x03key\x88\x01\x01\x12X\n\x08operator\x18\x02 \x01(\x0e\x32+.qdrant.cloud.cluster.v1.TolerationOperatorB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x01R\x08operator\x88\x01\x01\x12M\n\x05value\x18\x03 \x01(\tB2\xbaH/r-2+(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?H\x02R\x05value\x88\x01\x01\x12R\n\x06\x65\x66\x66\x65\x63t\x18\x04 \x01(\x0e\x32).qdrant.cloud.cluster.v1.TolerationEffectB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x06\x65\x66\x66\x65\x63t\x88\x01\x01\x12;\n\x12toleration_seconds\x18\x05 \x01(\x04\x42\x07\xbaH\x04\x32\x02(\x00H\x04R\x11tolerationSeconds\x88\x01\x01:\xf9\x06\xbaH\xf5\x06\x1at\n\x1btoleration.value_for_exists\x12-value must not be set when operator is Exists\x1a&this.operator != 1 || !has(this.value)\x1a\xae\x01\n\x1atoleration.value_for_equal\x12Qvalue must be set when operator is Equal (or is not set, which defaults to Equal)\x1a=(has(this.operator) && this.operator != 2) || has(this.value)\x1a\xa7\x02\n\"toleration.key_format_when_present\x12\x44key must be a valid Kubernetes qualified name when set and non-empty\x1a\xba\x01!has(this.key) || this.key == \'\' || this.key.matches(\'^([A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?(\\\\.[A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?)*\\\\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\')\x1a\x8a\x01\n$toleration.key_empty_requires_exists\x12)operator must be \'Exists\' if key is empty\x1a\x37(has(this.key) && this.key != \'\') || this.operator == 1\x1a\x94\x01\n%toleration.seconds_only_for_noexecute\x12\x38tolerationSeconds is only valid when effect is NoExecute\x1a\x31!has(this.toleration_seconds) || this.effect == 3B\x06\n\x04_keyB\x0b\n\t_operatorB\x08\n\x06_valueB\t\n\x07_effectB\x15\n\x13_toleration_seconds\"\xee\x03\n\x1b\x43lusterStorageConfiguration\x12S\n\x11storage_tier_type\x18\x01 \x01(\x0e\x32\'.qdrant.cloud.common.v1.StorageTierTypeR\x0fstorageTierType\x12\x42\n\x16\x64\x61tabase_storage_class\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x14\x64\x61tabaseStorageClass\x88\x01\x01\x12\x42\n\x16snapshot_storage_class\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x14snapshotStorageClass\x88\x01\x01\x12@\n\x15volume_snapshot_class\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x02R\x13volumeSnapshotClass\x88\x01\x01\x12\x44\n\x17volume_attributes_class\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x03R\x15volumeAttributesClass\x88\x01\x01\x42\x19\n\x17_database_storage_classB\x19\n\x17_snapshot_storage_classB\x18\n\x16_volume_snapshot_classB\x1a\n\x18_volume_attributes_class\"\xaf\x05\n\x0c\x43lusterState\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x19\n\x08nodes_up\x18\x02 \x01(\rR\x07nodesUp\x12=\n\x0crestarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0brestartedAt\x12\x45\n\x05phase\x18\x04 \x01(\x0e\x32%.qdrant.cloud.cluster.v1.ClusterPhaseB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05phase\x12\x16\n\x06reason\x18\x05 \x01(\tR\x06reason\x12L\n\x08\x65ndpoint\x18\x06 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointB\x06\xbaH\x03\xc8\x01\x01R\x08\x65ndpoint\x12Z\n\tresources\x18\x07 \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterNodeResourcesSummaryB\x06\xbaH\x03\xc8\x01\x01R\tresources\x12\x64\n\x10scalability_info\x18\x08 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x08\x18\x01\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\x12>\n\x05nodes\x18\t \x03(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterNodeInfoR\x05nodes\x12\x19\n\x08jwt_rbac\x18\n \x01(\x08R\x07jwtRbac\x12X\n\x0c\x63\x61pabilities\x18\x0b \x01(\x0b\x32,.qdrant.cloud.cluster.v1.ClusterCapabilitiesB\x06\xbaH\x03\xc8\x01\x01R\x0c\x63\x61pabilities\"\xdc\x02\n\x0f\x43lusterNodeInfo\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12\x39\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x44\n\x08\x65ndpoint\x18\x04 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointR\x08\x65ndpoint\x12I\n\x05state\x18\n \x01(\x0e\x32).qdrant.cloud.cluster.v1.ClusterNodeStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\x12\x30\n\x11\x61vailability_zone\x18\x0b \x01(\tH\x00R\x10\x61vailabilityZone\x88\x01\x01\x42\x14\n\x12_availability_zone\"y\n\x0f\x43lusterEndpoint\x12\x1a\n\x03url\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01R\x03url\x12$\n\trest_port\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08restPort\x12$\n\tgrpc_port\x18\x03 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08grpcPort\"\xa1\x03\n\x1b\x43lusterNodeResourcesSummary\x12I\n\x04\x64isk\x18\x01 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x04\x64isk\x12G\n\x03ram\x18\x02 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03ram\x12G\n\x03\x63pu\x18\x03 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03\x63pu\x12\x44\n\x03gpu\x18\x04 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x00R\x03gpu\x88\x01\x01\x12K\n\x07gpu_ram\x18\x05 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x01R\x06gpuRam\x88\x01\x01\x42\x06\n\x04_gpuB\n\n\x08_gpu_ram\"\xfa\x01\n\x14\x43lusterNodeResources\x12\"\n\x04\x62\x61se\x18\x01 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x04\x62\x61se\x12\x34\n\rcomplimentary\x18\x02 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\rcomplimentary\x12.\n\nadditional\x18\x03 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\nadditional\x12*\n\x08reserved\x18\x04 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x08reserved\x12,\n\tavailable\x18\x05 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\tavailable\"\xa0\x01\n\x16\x43lusterScalabilityInfo\x12U\n\x06status\x18\x01 \x01(\x0e\x32\x31.qdrant.cloud.cluster.v1.ClusterScalabilityStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\xb2\x01\n\x1f\x43lusterDiskExpansionSupportInfo\x12^\n\x06status\x18\x01 \x01(\x0e\x32:.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\xa4\x01\n\x18\x43lusterBackupSupportInfo\x12W\n\x06status\x18\x01 \x01(\x0e\x32\x33.qdrant.cloud.cluster.v1.ClusterBackupSupportStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\xb5\x02\n\x13\x43lusterCapabilities\x12g\n\x0e\x64isk_expansion\x18\x01 \x01(\x0b\x32\x38.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportInfoB\x06\xbaH\x03\xc8\x01\x01R\rdiskExpansion\x12Q\n\x06\x62\x61\x63kup\x18\x02 \x01(\x0b\x32\x31.qdrant.cloud.cluster.v1.ClusterBackupSupportInfoB\x06\xbaH\x03\xc8\x01\x01R\x06\x62\x61\x63kup\x12\x62\n\x10scalability_info\x18\x03 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x06\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\"\x93\x02\n\rQdrantRelease\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x18\n\x07\x64\x65\x66\x61ult\x18\x02 \x01(\x08R\x07\x64\x65\x66\x61ult\x12\x39\n\x11release_notes_url\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01H\x00R\x0freleaseNotesUrl\x88\x01\x01\x12&\n\x07remarks\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x07remarks\x88\x01\x01\x12\x1e\n\x0b\x65nd_of_life\x18\x05 \x01(\x08R\tendOfLife\x12 \n\x0bunavailable\x18\x06 \x01(\x08R\x0bunavailableB\x14\n\x12_release_notes_urlB\n\n\x08_remarks\"\xb0\x01\n\x1e\x43reateClusterFromBackupRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12%\n\tbackup_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x62\x61\x63kupId\x12>\n\x0c\x63luster_name\x18\x03 \x01(\tB\x1b\xbaH\x18r\x16\x10\x04\x18@2\x10^[a-zA-Z0-9-_]+$R\x0b\x63lusterName\"e\n\x1f\x43reateClusterFromBackupResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster*\xab\x01\n\x12\x43lusterServiceType\x12$\n CLUSTER_SERVICE_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1f\x43LUSTER_SERVICE_TYPE_CLUSTER_IP\x10\x01\x12\"\n\x1e\x43LUSTER_SERVICE_TYPE_NODE_PORT\x10\x02\x12&\n\"CLUSTER_SERVICE_TYPE_LOAD_BALANCER\x10\x03*\xa0\x01\n\x1b\x43lusterConfigurationGpuType\x12.\n*CLUSTER_CONFIGURATION_GPU_TYPE_UNSPECIFIED\x10\x00\x12)\n%CLUSTER_CONFIGURATION_GPU_TYPE_NVIDIA\x10\x01\x12&\n\"CLUSTER_CONFIGURATION_GPU_TYPE_AMD\x10\x02*\xf2\x01\n!ClusterConfigurationRestartPolicy\x12\x34\n0CLUSTER_CONFIGURATION_RESTART_POLICY_UNSPECIFIED\x10\x00\x12\x30\n,CLUSTER_CONFIGURATION_RESTART_POLICY_ROLLING\x10\x01\x12\x31\n-CLUSTER_CONFIGURATION_RESTART_POLICY_PARALLEL\x10\x02\x12\x32\n.CLUSTER_CONFIGURATION_RESTART_POLICY_AUTOMATIC\x10\x03*\x8e\x02\n%ClusterConfigurationRebalanceStrategy\x12\x38\n4CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_UNSPECIFIED\x10\x00\x12\x35\n1CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT\x10\x01\x12\x34\n0CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_SIZE\x10\x02\x12>\n:CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT_AND_SIZE\x10\x03*\xd5\x02\n\x1d\x44\x61tabaseConfigurationLogLevel\x12\x30\n,DATABASE_CONFIGURATION_LOG_LEVEL_UNSPECIFIED\x10\x00\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_TRACE\x10\x01\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_DEBUG\x10\x02\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_INFO\x10\x03\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_WARN\x10\x04\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_ERROR\x10\x05\x12(\n$DATABASE_CONFIGURATION_LOG_LEVEL_OFF\x10\x06*s\n\x10\x41uditLogRotation\x12\"\n\x1e\x41UDIT_LOG_ROTATION_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41UDIT_LOG_ROTATION_DAILY\x10\x01\x12\x1d\n\x19\x41UDIT_LOG_ROTATION_HOURLY\x10\x02*x\n\x12TolerationOperator\x12#\n\x1fTOLERATION_OPERATOR_UNSPECIFIED\x10\x00\x12\x1e\n\x1aTOLERATION_OPERATOR_EXISTS\x10\x01\x12\x1d\n\x19TOLERATION_OPERATOR_EQUAL\x10\x02*\xa4\x01\n\x10TolerationEffect\x12!\n\x1dTOLERATION_EFFECT_UNSPECIFIED\x10\x00\x12!\n\x1dTOLERATION_EFFECT_NO_SCHEDULE\x10\x01\x12(\n$TOLERATION_EFFECT_PREFER_NO_SCHEDULE\x10\x02\x12 \n\x1cTOLERATION_EFFECT_NO_EXECUTE\x10\x03*\xdf\x04\n\x0c\x43lusterPhase\x12\x1d\n\x19\x43LUSTER_PHASE_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43LUSTER_PHASE_CREATING\x10\x01\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_CREATE\x10\x02\x12\x1a\n\x16\x43LUSTER_PHASE_UPDATING\x10\x03\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_UPDATE\x10\x04\x12\x19\n\x15\x43LUSTER_PHASE_SCALING\x10\x05\x12\x1b\n\x17\x43LUSTER_PHASE_UPGRADING\x10\x06\x12\x1c\n\x18\x43LUSTER_PHASE_SUSPENDING\x10\x07\x12\x1b\n\x17\x43LUSTER_PHASE_SUSPENDED\x10\x08\x12#\n\x1f\x43LUSTER_PHASE_FAILED_TO_SUSPEND\x10\t\x12\x1a\n\x16\x43LUSTER_PHASE_RESUMING\x10\n\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_RESUME\x10\x0b\x12\x19\n\x15\x43LUSTER_PHASE_HEALTHY\x10\x0c\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_READY\x10\r\x12\x1f\n\x1b\x43LUSTER_PHASE_RECOVERY_MODE\x10\x0e\x12$\n CLUSTER_PHASE_MANUAL_MAINTENANCE\x10\x0f\x12 \n\x1c\x43LUSTER_PHASE_FAILED_TO_SYNC\x10\x10\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_FOUND\x10\x11\x12\x1a\n\x16\x43LUSTER_PHASE_DELETING\x10\x12*\xde\x01\n\x10\x43lusterNodeState\x12\"\n\x1e\x43LUSTER_NODE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43LUSTER_NODE_STATE_STARTING\x10\x01\x12\x1e\n\x1a\x43LUSTER_NODE_STATE_HEALTHY\x10\x02\x12 \n\x1c\x43LUSTER_NODE_STATE_UNHEALTHY\x10\x03\x12 \n\x1c\x43LUSTER_NODE_STATE_SUSPENDED\x10\x04\x12!\n\x1d\x43LUSTER_NODE_STATE_RECOVERING\x10\x05*\x9c\x01\n\x18\x43lusterScalabilityStatus\x12*\n&CLUSTER_SCALABILITY_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_SCALABILITY_STATUS_NOT_SCALABLE\x10\x01\x12\'\n#CLUSTER_SCALABILITY_STATUS_SCALABLE\x10\x02*\xc8\x01\n!ClusterDiskExpansionSupportStatus\x12\x35\n1CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12\x33\n/CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED\x10\x01\x12\x37\n3CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02*\xa9\x01\n\x1a\x43lusterBackupSupportStatus\x12-\n)CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED\x10\x01\x12/\n+CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02\x32\xcb\x1e\n\x0e\x43lusterService\x12\xb4\x01\n\x0cListClusters\x12,.qdrant.cloud.cluster.v1.ListClustersRequest\x1a-.qdrant.cloud.cluster.v1.ListClustersResponse\"G\x8a\xb5\x18\rread:clusters\x82\xd3\xe4\x93\x02\x30\x12./api/cluster/v1/accounts/{account_id}/clusters\x12\xd7\x01\n\nGetCluster\x12*.qdrant.cloud.cluster.v1.GetClusterRequest\x1a+.qdrant.cloud.cluster.v1.GetClusterResponse\"p\x8a\xb5\x18\rread:clusters\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster_id\x82\xd3\xe4\x93\x02=\x12;/api/cluster/v1/accounts/{account_id}/clusters/{cluster_id}\x12\xd9\x02\n\rCreateCluster\x12-.qdrant.cloud.cluster.v1.CreateClusterRequest\x1a..qdrant.cloud.cluster.v1.CreateClusterResponse\"\xe8\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster.name\xca\xf3\x18[\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*=/accounts/{req.cluster.account_id}/clusters/{resp.cluster.id}\x82\xd3\xe4\x93\x02;\"6/api/cluster/v1/accounts/{cluster.account_id}/clusters:\x01*\x12\xb4\x03\n\x17\x43reateClusterFromBackup\x12\x37.qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest\x1a\x38.qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse\"\xa5\x02\x8a\xb5\x18\x0frestore:backups\x8a\xb5\x18\x0ewrite:clusters\xa8\xb5\x18\x01\xba\xb5\x18\x16\n\tbackup_id\x12\tbackup_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster_name\xca\xf3\x18t\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*5/accounts/{req.account_id}/clusters/{resp.cluster.id}R\x1f\n\x0e\x66rom_backup_id\x12\rreq.backup_id\x82\xd3\xe4\x93\x02\x44\"B/api/cluster/v1/accounts/{account_id}/backups/{backup_id}/clusters\x12\xe0\x02\n\rUpdateCluster\x12-.qdrant.cloud.cluster.v1.UpdateClusterRequest\x1a..qdrant.cloud.cluster.v1.UpdateClusterResponse\"\xef\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster.id\xca\xf3\x18Y\x08\x02\x12\x07\x63luster\"\x0ereq.cluster.id*.qdrant.cloud.cluster.v1.ClusterConfigurationRebalanceStrategyB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x08R\x11rebalanceStrategy\x88\x01\x01\x12z\n\x1btopology_spread_constraints\x18\x19 \x03(\x0b\x32\x30.qdrant.cloud.common.v1.TopologySpreadConstraintB\x08\xbaH\x05\x92\x01\x02\x10\nR\x19topologySpreadConstraints\x12}\n\x1d\x63luster_storage_configuration\x18\x1a \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterStorageConfigurationH\tR\x1b\x63lusterStorageConfiguration\x88\x01\x01\x42\n\n\x08_versionB\x17\n\x15_additional_resourcesB\x19\n\x17_database_configurationB\x0f\n\r_service_typeB\x1a\n\x18_reserved_cpu_percentageB\x1d\n\x1b_reserved_memory_percentageB\x0b\n\t_gpu_typeB\x11\n\x0f_restart_policyB\x15\n\x13_rebalance_strategyB \n\x1e_cluster_storage_configuration\"\xf1\x05\n\x15\x44\x61tabaseConfiguration\x12]\n\ncollection\x18\x01 \x01(\x0b\x32\x38.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionH\x00R\ncollection\x88\x01\x01\x12T\n\x07storage\x18\x02 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationStorageH\x01R\x07storage\x88\x01\x01\x12T\n\x07service\x18\x03 \x01(\x0b\x32\x35.qdrant.cloud.cluster.v1.DatabaseConfigurationServiceH\x02R\x07service\x88\x01\x01\x12\x64\n\tlog_level\x18\x04 \x01(\x0e\x32\x36.qdrant.cloud.cluster.v1.DatabaseConfigurationLogLevelB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x08logLevel\x88\x01\x01\x12H\n\x03tls\x18\x05 \x01(\x0b\x32\x31.qdrant.cloud.cluster.v1.DatabaseConfigurationTlsH\x04R\x03tls\x88\x01\x01\x12Z\n\tinference\x18\x06 \x01(\x0b\x32\x37.qdrant.cloud.cluster.v1.DatabaseConfigurationInferenceH\x05R\tinference\x88\x01\x01\x12\x64\n\raudit_logging\x18\x07 \x01(\x0b\x32:.qdrant.cloud.cluster.v1.DatabaseConfigurationAuditLoggingH\x06R\x0c\x61uditLogging\x88\x01\x01\x42\r\n\x0b_collectionB\n\n\x08_storageB\n\n\x08_serviceB\x0c\n\n_log_levelB\x06\n\x04_tlsB\x0c\n\n_inferenceB\x10\n\x0e_audit_logging\"\xc6\x02\n\x1f\x44\x61tabaseConfigurationCollection\x12;\n\x12replication_factor\x18\x01 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x11replicationFactor\x88\x01\x01\x12\x46\n\x18write_consistency_factor\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x01H\x01R\x16writeConsistencyFactor\x88\x01\x01\x12^\n\x07vectors\x18\x03 \x01(\x0b\x32?.qdrant.cloud.cluster.v1.DatabaseConfigurationCollectionVectorsH\x02R\x07vectors\x88\x01\x01\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\n\n\x08_vectors\"R\n&DatabaseConfigurationCollectionVectors\x12\x1c\n\x07on_disk\x18\x01 \x01(\x08H\x00R\x06onDisk\x88\x01\x01\x42\n\n\x08_on_disk\"\x97\x01\n\x1c\x44\x61tabaseConfigurationStorage\x12g\n\x0bperformance\x18\x01 \x01(\x0b\x32@.qdrant.cloud.cluster.v1.DatabaseConfigurationStoragePerformanceH\x00R\x0bperformance\x88\x01\x01\x42\x0e\n\x0c_performance\"\xb2\x01\n\'DatabaseConfigurationStoragePerformance\x12\x35\n\x14optimizer_cpu_budget\x18\x01 \x01(\x05H\x00R\x12optimizerCpuBudget\x88\x01\x01\x12&\n\x0c\x61sync_scorer\x18\x02 \x01(\x08H\x01R\x0b\x61syncScorer\x88\x01\x01\x42\x17\n\x15_optimizer_cpu_budgetB\x0f\n\r_async_scorer\"\x93\x02\n\x1c\x44\x61tabaseConfigurationService\x12\x42\n\x07\x61pi_key\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x00R\x06\x61piKey\x88\x01\x01\x12T\n\x11read_only_api_key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefH\x01R\x0ereadOnlyApiKey\x88\x01\x01\x12\"\n\nenable_tls\x18\x04 \x01(\x08H\x02R\tenableTls\x88\x01\x01\x42\n\n\x08_api_keyB\x14\n\x12_read_only_api_keyB\r\n\x0b_enable_tlsJ\x04\x08\x03\x10\x04\"\x9c\x01\n\x18\x44\x61tabaseConfigurationTls\x12@\n\x04\x63\x65rt\x18\x01 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x04\x63\x65rt\x12>\n\x03key\x18\x02 \x01(\x0b\x32$.qdrant.cloud.common.v1.SecretKeyRefB\x06\xbaH\x03\xc8\x01\x01R\x03key\":\n\x1e\x44\x61tabaseConfigurationInference\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\")\n\x13\x41\x64\x64itionalResources\x12\x12\n\x04\x64isk\x18\x03 \x01(\rR\x04\x64isk\"\xb6\x02\n!DatabaseConfigurationAuditLogging\x12\x18\n\x07\x65nabled\x18\x01 \x01(\x08R\x07\x65nabled\x12J\n\x08rotation\x18\x02 \x01(\x0e\x32).qdrant.cloud.cluster.v1.AuditLogRotationH\x00R\x08rotation\x88\x01\x01\x12\x33\n\rmax_log_files\x18\x03 \x01(\rB\n\xbaH\x07*\x05\x18\xe8\x07(\x01H\x01R\x0bmaxLogFiles\x88\x01\x01\x12;\n\x17trust_forwarded_headers\x18\x04 \x01(\x08H\x02R\x15trustForwardedHeaders\x88\x01\x01\x42\x0b\n\t_rotationB\x10\n\x0e_max_log_filesB\x1a\n\x18_trust_forwarded_headers\"\xa4\n\n\nToleration\x12\x1f\n\x03key\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\xbd\x02H\x00R\x03key\x88\x01\x01\x12X\n\x08operator\x18\x02 \x01(\x0e\x32+.qdrant.cloud.cluster.v1.TolerationOperatorB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x01R\x08operator\x88\x01\x01\x12M\n\x05value\x18\x03 \x01(\tB2\xbaH/r-2+(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?H\x02R\x05value\x88\x01\x01\x12R\n\x06\x65\x66\x66\x65\x63t\x18\x04 \x01(\x0e\x32).qdrant.cloud.cluster.v1.TolerationEffectB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00H\x03R\x06\x65\x66\x66\x65\x63t\x88\x01\x01\x12;\n\x12toleration_seconds\x18\x05 \x01(\x04\x42\x07\xbaH\x04\x32\x02(\x00H\x04R\x11tolerationSeconds\x88\x01\x01:\xf9\x06\xbaH\xf5\x06\x1at\n\x1btoleration.value_for_exists\x12-value must not be set when operator is Exists\x1a&this.operator != 1 || !has(this.value)\x1a\xae\x01\n\x1atoleration.value_for_equal\x12Qvalue must be set when operator is Equal (or is not set, which defaults to Equal)\x1a=(has(this.operator) && this.operator != 2) || has(this.value)\x1a\xa7\x02\n\"toleration.key_format_when_present\x12\x44key must be a valid Kubernetes qualified name when set and non-empty\x1a\xba\x01!has(this.key) || this.key == \'\' || this.key.matches(\'^([A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?(\\\\.[A-Za-z0-9]([-A-Za-z0-9]*[A-Za-z0-9])?)*\\\\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$\')\x1a\x8a\x01\n$toleration.key_empty_requires_exists\x12)operator must be \'Exists\' if key is empty\x1a\x37(has(this.key) && this.key != \'\') || this.operator == 1\x1a\x94\x01\n%toleration.seconds_only_for_noexecute\x12\x38tolerationSeconds is only valid when effect is NoExecute\x1a\x31!has(this.toleration_seconds) || this.effect == 3B\x06\n\x04_keyB\x0b\n\t_operatorB\x08\n\x06_valueB\t\n\x07_effectB\x15\n\x13_toleration_seconds\"\xee\x03\n\x1b\x43lusterStorageConfiguration\x12S\n\x11storage_tier_type\x18\x01 \x01(\x0e\x32\'.qdrant.cloud.common.v1.StorageTierTypeR\x0fstorageTierType\x12\x42\n\x16\x64\x61tabase_storage_class\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x14\x64\x61tabaseStorageClass\x88\x01\x01\x12\x42\n\x16snapshot_storage_class\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x14snapshotStorageClass\x88\x01\x01\x12@\n\x15volume_snapshot_class\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x02R\x13volumeSnapshotClass\x88\x01\x01\x12\x44\n\x17volume_attributes_class\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x03R\x15volumeAttributesClass\x88\x01\x01\x42\x19\n\x17_database_storage_classB\x19\n\x17_snapshot_storage_classB\x18\n\x16_volume_snapshot_classB\x1a\n\x18_volume_attributes_class\"\xa7\x05\n\x0c\x43lusterState\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x19\n\x08nodes_up\x18\x02 \x01(\rR\x07nodesUp\x12=\n\x0crestarted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0brestartedAt\x12\x45\n\x05phase\x18\x04 \x01(\x0e\x32%.qdrant.cloud.cluster.v1.ClusterPhaseB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05phase\x12\x16\n\x06reason\x18\x05 \x01(\tR\x06reason\x12L\n\x08\x65ndpoint\x18\x06 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointB\x06\xbaH\x03\xc8\x01\x01R\x08\x65ndpoint\x12Z\n\tresources\x18\x07 \x01(\x0b\x32\x34.qdrant.cloud.cluster.v1.ClusterNodeResourcesSummaryB\x06\xbaH\x03\xc8\x01\x01R\tresources\x12\x64\n\x10scalability_info\x18\x08 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoB\x08\x18\x01\xbaH\x03\xc8\x01\x01R\x0fscalabilityInfo\x12>\n\x05nodes\x18\t \x03(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterNodeInfoR\x05nodes\x12\x19\n\x08jwt_rbac\x18\n \x01(\x08R\x07jwtRbac\x12P\n\x0c\x63\x61pabilities\x18\x0b \x01(\x0b\x32,.qdrant.cloud.cluster.v1.ClusterCapabilitiesR\x0c\x63\x61pabilities\"\xdc\x02\n\x0f\x43lusterNodeInfo\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12\x39\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x44\n\x08\x65ndpoint\x18\x04 \x01(\x0b\x32(.qdrant.cloud.cluster.v1.ClusterEndpointR\x08\x65ndpoint\x12I\n\x05state\x18\n \x01(\x0e\x32).qdrant.cloud.cluster.v1.ClusterNodeStateB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x05state\x12\x30\n\x11\x61vailability_zone\x18\x0b \x01(\tH\x00R\x10\x61vailabilityZone\x88\x01\x01\x42\x14\n\x12_availability_zone\"y\n\x0f\x43lusterEndpoint\x12\x1a\n\x03url\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01R\x03url\x12$\n\trest_port\x18\x02 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08restPort\x12$\n\tgrpc_port\x18\x03 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x08grpcPort\"\xa1\x03\n\x1b\x43lusterNodeResourcesSummary\x12I\n\x04\x64isk\x18\x01 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x04\x64isk\x12G\n\x03ram\x18\x02 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03ram\x12G\n\x03\x63pu\x18\x03 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesB\x06\xbaH\x03\xc8\x01\x01R\x03\x63pu\x12\x44\n\x03gpu\x18\x04 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x00R\x03gpu\x88\x01\x01\x12K\n\x07gpu_ram\x18\x05 \x01(\x0b\x32-.qdrant.cloud.cluster.v1.ClusterNodeResourcesH\x01R\x06gpuRam\x88\x01\x01\x42\x06\n\x04_gpuB\n\n\x08_gpu_ram\"\xfa\x01\n\x14\x43lusterNodeResources\x12\"\n\x04\x62\x61se\x18\x01 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x04\x62\x61se\x12\x34\n\rcomplimentary\x18\x02 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\rcomplimentary\x12.\n\nadditional\x18\x03 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\nadditional\x12*\n\x08reserved\x18\x04 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\x08reserved\x12,\n\tavailable\x18\x05 \x01(\x01\x42\x0e\xbaH\x0b\x12\t)\x00\x00\x00\x00\x00\x00\x00\x00R\tavailable\"\xa0\x01\n\x16\x43lusterScalabilityInfo\x12U\n\x06status\x18\x01 \x01(\x0e\x32\x31.qdrant.cloud.cluster.v1.ClusterScalabilityStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\xb2\x01\n\x1f\x43lusterDiskExpansionSupportInfo\x12^\n\x06status\x18\x01 \x01(\x0e\x32:.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\xa4\x01\n\x18\x43lusterBackupSupportInfo\x12W\n\x06status\x18\x01 \x01(\x0e\x32\x33.qdrant.cloud.cluster.v1.ClusterBackupSupportStatusB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06status\x12$\n\x06reason\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x06reason\x88\x01\x01\x42\t\n\x07_reason\"\x9d\x02\n\x13\x43lusterCapabilities\x12_\n\x0e\x64isk_expansion\x18\x01 \x01(\x0b\x32\x38.qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportInfoR\rdiskExpansion\x12I\n\x06\x62\x61\x63kup\x18\x02 \x01(\x0b\x32\x31.qdrant.cloud.cluster.v1.ClusterBackupSupportInfoR\x06\x62\x61\x63kup\x12Z\n\x10scalability_info\x18\x03 \x01(\x0b\x32/.qdrant.cloud.cluster.v1.ClusterScalabilityInfoR\x0fscalabilityInfo\"\x93\x02\n\rQdrantRelease\x12!\n\x07version\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07version\x12\x18\n\x07\x64\x65\x66\x61ult\x18\x02 \x01(\x08R\x07\x64\x65\x66\x61ult\x12\x39\n\x11release_notes_url\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\x88\x01\x01H\x00R\x0freleaseNotesUrl\x88\x01\x01\x12&\n\x07remarks\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x01R\x07remarks\x88\x01\x01\x12\x1e\n\x0b\x65nd_of_life\x18\x05 \x01(\x08R\tendOfLife\x12 \n\x0bunavailable\x18\x06 \x01(\x08R\x0bunavailableB\x14\n\x12_release_notes_urlB\n\n\x08_remarks\"\xb0\x01\n\x1e\x43reateClusterFromBackupRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12%\n\tbackup_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x08\x62\x61\x63kupId\x12>\n\x0c\x63luster_name\x18\x03 \x01(\tB\x1b\xbaH\x18r\x16\x10\x04\x18@2\x10^[a-zA-Z0-9-_]+$R\x0b\x63lusterName\"e\n\x1f\x43reateClusterFromBackupResponse\x12\x42\n\x07\x63luster\x18\x01 \x01(\x0b\x32 .qdrant.cloud.cluster.v1.ClusterB\x06\xbaH\x03\xc8\x01\x01R\x07\x63luster*\xab\x01\n\x12\x43lusterServiceType\x12$\n CLUSTER_SERVICE_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1f\x43LUSTER_SERVICE_TYPE_CLUSTER_IP\x10\x01\x12\"\n\x1e\x43LUSTER_SERVICE_TYPE_NODE_PORT\x10\x02\x12&\n\"CLUSTER_SERVICE_TYPE_LOAD_BALANCER\x10\x03*\xa0\x01\n\x1b\x43lusterConfigurationGpuType\x12.\n*CLUSTER_CONFIGURATION_GPU_TYPE_UNSPECIFIED\x10\x00\x12)\n%CLUSTER_CONFIGURATION_GPU_TYPE_NVIDIA\x10\x01\x12&\n\"CLUSTER_CONFIGURATION_GPU_TYPE_AMD\x10\x02*\xf2\x01\n!ClusterConfigurationRestartPolicy\x12\x34\n0CLUSTER_CONFIGURATION_RESTART_POLICY_UNSPECIFIED\x10\x00\x12\x30\n,CLUSTER_CONFIGURATION_RESTART_POLICY_ROLLING\x10\x01\x12\x31\n-CLUSTER_CONFIGURATION_RESTART_POLICY_PARALLEL\x10\x02\x12\x32\n.CLUSTER_CONFIGURATION_RESTART_POLICY_AUTOMATIC\x10\x03*\x8e\x02\n%ClusterConfigurationRebalanceStrategy\x12\x38\n4CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_UNSPECIFIED\x10\x00\x12\x35\n1CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT\x10\x01\x12\x34\n0CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_SIZE\x10\x02\x12>\n:CLUSTER_CONFIGURATION_REBALANCE_STRATEGY_BY_COUNT_AND_SIZE\x10\x03*\xd5\x02\n\x1d\x44\x61tabaseConfigurationLogLevel\x12\x30\n,DATABASE_CONFIGURATION_LOG_LEVEL_UNSPECIFIED\x10\x00\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_TRACE\x10\x01\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_DEBUG\x10\x02\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_INFO\x10\x03\x12)\n%DATABASE_CONFIGURATION_LOG_LEVEL_WARN\x10\x04\x12*\n&DATABASE_CONFIGURATION_LOG_LEVEL_ERROR\x10\x05\x12(\n$DATABASE_CONFIGURATION_LOG_LEVEL_OFF\x10\x06*s\n\x10\x41uditLogRotation\x12\"\n\x1e\x41UDIT_LOG_ROTATION_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x41UDIT_LOG_ROTATION_DAILY\x10\x01\x12\x1d\n\x19\x41UDIT_LOG_ROTATION_HOURLY\x10\x02*x\n\x12TolerationOperator\x12#\n\x1fTOLERATION_OPERATOR_UNSPECIFIED\x10\x00\x12\x1e\n\x1aTOLERATION_OPERATOR_EXISTS\x10\x01\x12\x1d\n\x19TOLERATION_OPERATOR_EQUAL\x10\x02*\xa4\x01\n\x10TolerationEffect\x12!\n\x1dTOLERATION_EFFECT_UNSPECIFIED\x10\x00\x12!\n\x1dTOLERATION_EFFECT_NO_SCHEDULE\x10\x01\x12(\n$TOLERATION_EFFECT_PREFER_NO_SCHEDULE\x10\x02\x12 \n\x1cTOLERATION_EFFECT_NO_EXECUTE\x10\x03*\xdf\x04\n\x0c\x43lusterPhase\x12\x1d\n\x19\x43LUSTER_PHASE_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43LUSTER_PHASE_CREATING\x10\x01\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_CREATE\x10\x02\x12\x1a\n\x16\x43LUSTER_PHASE_UPDATING\x10\x03\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_UPDATE\x10\x04\x12\x19\n\x15\x43LUSTER_PHASE_SCALING\x10\x05\x12\x1b\n\x17\x43LUSTER_PHASE_UPGRADING\x10\x06\x12\x1c\n\x18\x43LUSTER_PHASE_SUSPENDING\x10\x07\x12\x1b\n\x17\x43LUSTER_PHASE_SUSPENDED\x10\x08\x12#\n\x1f\x43LUSTER_PHASE_FAILED_TO_SUSPEND\x10\t\x12\x1a\n\x16\x43LUSTER_PHASE_RESUMING\x10\n\x12\"\n\x1e\x43LUSTER_PHASE_FAILED_TO_RESUME\x10\x0b\x12\x19\n\x15\x43LUSTER_PHASE_HEALTHY\x10\x0c\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_READY\x10\r\x12\x1f\n\x1b\x43LUSTER_PHASE_RECOVERY_MODE\x10\x0e\x12$\n CLUSTER_PHASE_MANUAL_MAINTENANCE\x10\x0f\x12 \n\x1c\x43LUSTER_PHASE_FAILED_TO_SYNC\x10\x10\x12\x1b\n\x17\x43LUSTER_PHASE_NOT_FOUND\x10\x11\x12\x1a\n\x16\x43LUSTER_PHASE_DELETING\x10\x12*\xde\x01\n\x10\x43lusterNodeState\x12\"\n\x1e\x43LUSTER_NODE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1b\x43LUSTER_NODE_STATE_STARTING\x10\x01\x12\x1e\n\x1a\x43LUSTER_NODE_STATE_HEALTHY\x10\x02\x12 \n\x1c\x43LUSTER_NODE_STATE_UNHEALTHY\x10\x03\x12 \n\x1c\x43LUSTER_NODE_STATE_SUSPENDED\x10\x04\x12!\n\x1d\x43LUSTER_NODE_STATE_RECOVERING\x10\x05*\x9c\x01\n\x18\x43lusterScalabilityStatus\x12*\n&CLUSTER_SCALABILITY_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_SCALABILITY_STATUS_NOT_SCALABLE\x10\x01\x12\'\n#CLUSTER_SCALABILITY_STATUS_SCALABLE\x10\x02*\xc8\x01\n!ClusterDiskExpansionSupportStatus\x12\x35\n1CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12\x33\n/CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_SUPPORTED\x10\x01\x12\x37\n3CLUSTER_DISK_EXPANSION_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02*\xa9\x01\n\x1a\x43lusterBackupSupportStatus\x12-\n)CLUSTER_BACKUP_SUPPORT_STATUS_UNSPECIFIED\x10\x00\x12+\n\'CLUSTER_BACKUP_SUPPORT_STATUS_SUPPORTED\x10\x01\x12/\n+CLUSTER_BACKUP_SUPPORT_STATUS_NOT_SUPPORTED\x10\x02\x32\xcb\x1e\n\x0e\x43lusterService\x12\xb4\x01\n\x0cListClusters\x12,.qdrant.cloud.cluster.v1.ListClustersRequest\x1a-.qdrant.cloud.cluster.v1.ListClustersResponse\"G\x8a\xb5\x18\rread:clusters\x82\xd3\xe4\x93\x02\x30\x12./api/cluster/v1/accounts/{account_id}/clusters\x12\xd7\x01\n\nGetCluster\x12*.qdrant.cloud.cluster.v1.GetClusterRequest\x1a+.qdrant.cloud.cluster.v1.GetClusterResponse\"p\x8a\xb5\x18\rread:clusters\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster_id\x82\xd3\xe4\x93\x02=\x12;/api/cluster/v1/accounts/{account_id}/clusters/{cluster_id}\x12\xd9\x02\n\rCreateCluster\x12-.qdrant.cloud.cluster.v1.CreateClusterRequest\x1a..qdrant.cloud.cluster.v1.CreateClusterResponse\"\xe8\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster.name\xca\xf3\x18[\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*=/accounts/{req.cluster.account_id}/clusters/{resp.cluster.id}\x82\xd3\xe4\x93\x02;\"6/api/cluster/v1/accounts/{cluster.account_id}/clusters:\x01*\x12\xb4\x03\n\x17\x43reateClusterFromBackup\x12\x37.qdrant.cloud.cluster.v1.CreateClusterFromBackupRequest\x1a\x38.qdrant.cloud.cluster.v1.CreateClusterFromBackupResponse\"\xa5\x02\x8a\xb5\x18\x0frestore:backups\x8a\xb5\x18\x0ewrite:clusters\xa8\xb5\x18\x01\xba\xb5\x18\x16\n\tbackup_id\x12\tbackup_id\xba\xb5\x18\x1c\n\x0c\x63luster_name\x12\x0c\x63luster_name\xca\xf3\x18t\x08\x01\x12\x07\x63luster\"\x0fresp.cluster.id*5/accounts/{req.account_id}/clusters/{resp.cluster.id}R\x1f\n\x0e\x66rom_backup_id\x12\rreq.backup_id\x82\xd3\xe4\x93\x02\x44\"B/api/cluster/v1/accounts/{account_id}/backups/{backup_id}/clusters\x12\xe0\x02\n\rUpdateCluster\x12-.qdrant.cloud.cluster.v1.UpdateClusterRequest\x1a..qdrant.cloud.cluster.v1.UpdateClusterResponse\"\xef\x01\x8a\xb5\x18\x0ewrite:clusters\x92\xb5\x18\x12\x63luster.account_id\xba\xb5\x18\x18\n\ncluster_id\x12\ncluster.id\xca\xf3\x18Y\x08\x02\x12\x07\x63luster\"\x0ereq.cluster.id* & { - /** - * Whether the StorageClass used by the cluster supports disk expansion or not. - * Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. - * - * @generated from field: qdrant.cloud.cluster.v1.ClusterDiskExpansionSupportInfo disk_expansion = 1; - */ - diskExpansion: ClusterDiskExpansionSupportInfoValid; - - /** - * Whether it is possible to take a backup for the cluster or not. - * Backup tab will be shown or hidden based on this for hybrid cloud clusters. - * - * @generated from field: qdrant.cloud.cluster.v1.ClusterBackupSupportInfo backup = 2; - */ - backup: ClusterBackupSupportInfoValid; - - /** - * Whether the cluster can be scaled up or down. - * - * @generated from field: qdrant.cloud.cluster.v1.ClusterScalabilityInfo scalability_info = 3; - */ - scalabilityInfo: ClusterScalabilityInfoValid; -}; +export declare type ClusterCapabilitiesValid = ClusterCapabilities; /** * Describes the message qdrant.cloud.cluster.v1.ClusterCapabilities. diff --git a/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js b/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js index b2015e98..8472012e 100644 --- a/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js +++ b/gen/typescript/qdrant/cloud/cluster/v1/cluster_pb.js @@ -13,7 +13,7 @@ import { file_qdrant_cloud_event_v1_events } from "../../event/v1/events_pb.js"; * Describes the file qdrant/cloud/cluster/v1/cluster.proto. */ export const file_qdrant_cloud_cluster_v1_cluster = /*@__PURE__*/ - fileDesc("CiVxZHJhbnQvY2xvdWQvY2x1c3Rlci92MS9jbHVzdGVyLnByb3RvEhdxZHJhbnQuY2xvdWQuY2x1c3Rlci52MSLqBQoTTGlzdENsdXN0ZXJzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARInChFjbG91ZF9wcm92aWRlcl9pZBgKIAEoCUIHukgEcgIQA0gAiAEBEi4KGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQAUgBiAEBEiIKCXBhZ2Vfc2l6ZRgUIAEoBUIKukgHGgUY+gEgAEgCiAEBEiAKCnBhZ2VfdG9rZW4YFSABKAlCB7pIBHICEAFIA4gBATrFA7pIwQMasQEKJ2xpc3RfY2x1c3RlcnMuY2xvdWRfcHJvdmlkZXJfaWRfcHJlc2VudBJCY2xvdWRfcHJvdmlkZXJfaWQgaXMgcmVxdWlyZWQgd2hlbiBjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgaXMgc2V0GkIhaGFzKHRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkKSB8fCBoYXModGhpcy5jbG91ZF9wcm92aWRlcl9pZCkaigIKIGNsdXN0ZXIuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkEkhjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgbXVzdCBiZSBhIFVVSUQgaWYgY2xvdWRfcHJvdmlkZXJfaWQgaXMgJ2h5YnJpZCcamwF0aGlzLmNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8IHRoaXMuY2xvdWRfcHJvdmlkZXJfaWQhPSAnaHlicmlkJ0IUChJfY2xvdWRfcHJvdmlkZXJfaWRCGwoZX2Nsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZEIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuIrMBChRMaXN0Q2x1c3RlcnNSZXNwb25zZRIvCgVpdGVtcxgBIAMoCzIgLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXISIAoKdG90YWxfc2l6ZRgKIAEoBUIHukgEGgIoAEgAiAEBEiUKD25leHRfcGFnZV90b2tlbhgLIAEoCUIHukgEcgIQAUgBiAEBQg0KC190b3RhbF9zaXplQhIKEF9uZXh0X3BhZ2VfdG9rZW4iTwoRR2V0Q2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiTwoSR2V0Q2x1c3RlclJlc3BvbnNlEjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQEixAIKFENyZWF0ZUNsdXN0ZXJSZXF1ZXN0EjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQE68AG6SOwBGukBCiJjcmVhdGVfY2x1c3Rlci5ub19yZWFkX29ubHlfZmllbGRzEk5yZWFkLW9ubHkgZmllbGRzIChpZCwgY3JlYXRlZF9hdCwgZGVsZXRlZF9hdCwgc3RhdGUpIG11c3Qgbm90IGJlIHNldCBvbiBjcmVhdGUac3RoaXMuY2x1c3Rlci5pZCA9PSAnJyAmJiAhaGFzKHRoaXMuY2x1c3Rlci5jcmVhdGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5kZWxldGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5zdGF0ZSkiuwEKFUNyZWF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocY3JlYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIrABChRVcGRhdGVDbHVzdGVyUmVxdWVzdBI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOl26SFoaWAoZdXBkYXRlX2NsdXN0ZXIuaWRfcHJlc2VudBIkY2x1c3Rlci5pZCBpcyByZXF1aXJlZCBmb3IgYW4gdXBkYXRlGhV0aGlzLmNsdXN0ZXIuaWQgIT0gJyciuwEKFVVwZGF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocdXBkYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIoIBChREZWxldGVDbHVzdGVyUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABARIbCg5kZWxldGVfYmFja3VwcxgDIAEoCEgAiAEBQhEKD19kZWxldGVfYmFja3VwcyIXChVEZWxldGVDbHVzdGVyUmVzcG9uc2UiUwoVUmVzdGFydENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlJlc3RhcnRDbHVzdGVyUmVzcG9uc2UiUwoVU3VzcGVuZENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlN1c3BlbmRDbHVzdGVyUmVzcG9uc2UiVQoXVW5zdXNwZW5kQ2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiGgoYVW5zdXNwZW5kQ2x1c3RlclJlc3BvbnNlIlkKG0VuYWJsZUNsdXN0ZXJKd3RSYmFjUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABASIeChxFbmFibGVDbHVzdGVySnd0UmJhY1Jlc3BvbnNlIjkKGVN1Z2dlc3RDbHVzdGVyTmFtZVJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQEiMwoaU3VnZ2VzdENsdXN0ZXJOYW1lUmVzcG9uc2USFQoEbmFtZRgBIAEoCUIHukgEcgIQASJrChlMaXN0UWRyYW50UmVsZWFzZXNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEiEKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBSACIAQFCDQoLX2NsdXN0ZXJfaWQiUwoaTGlzdFFkcmFudFJlbGVhc2VzUmVzcG9uc2USNQoFaXRlbXMYASADKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlIlEKF0dldFFkcmFudFJlbGVhc2VSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhgKB3ZlcnNpb24YAiABKAlCB7pIBHICEAEiWwoYR2V0UWRyYW50UmVsZWFzZVJlc3BvbnNlEj8KB3JlbGVhc2UYASABKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlQga6SAPIAQEi1ggKB0NsdXN0ZXISCgoCaWQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHAoKYWNjb3VudF9pZBgDIAEoCUIIukgFcgOwAQESKQoEbmFtZRgEIAEoCUIbukgYchYQAhhAMhBeW2EtekEtWjAtOS1fXSskEi4KCmRlbGV0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiIKEWNsb3VkX3Byb3ZpZGVyX2lkGAogASgJQge6SARyAhADEikKGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQARI6CgZsYWJlbHMYDCADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQChKyAQoVY29zdF9hbGxvY2F0aW9uX2xhYmVsGA0gASgJQo0BukiJAXKGARj9ATKAAV4oW2EtejAtOUEtWl0oWy1hLXowLTlBLVpdKlthLXowLTlBLVpdKT8oXC5bYS16MC05QS1aXShbLWEtejAtOUEtWl0qW2EtejAtOUEtWl0pPykqXC8pPyhbQS1aYS16MC05XVstQS1aYS16MC05Xy5dKik/W0EtWmEtejAtOV0kSACIAQESTAoNY29uZmlndXJhdGlvbhgUIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uQga6SAPIAQESNAoFc3RhdGUYZCABKAsyJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU3RhdGU6twO6SLMDGqMBCgpjbHVzdGVyLmlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp5dGhpcy5pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8ICFoYXModGhpcy5jcmVhdGVkX2F0KRqKAgogY2x1c3Rlci5jbG91ZF9wcm92aWRlcl9yZWdpb25faWQSSGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZCBtdXN0IGJlIGEgVVVJRCBpZiBjbG91ZF9wcm92aWRlcl9pZCBpcyAnaHlicmlkJxqbAXRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykgfHwgdGhpcy5jbG91ZF9wcm92aWRlcl9pZCE9ICdoeWJyaWQnQhgKFl9jb3N0X2FsbG9jYXRpb25fbGFiZWwigA0KFENsdXN0ZXJDb25maWd1cmF0aW9uEjQKEGxhc3RfbW9kaWZpZWRfYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiAKD251bWJlcl9vZl9ub2RlcxgCIAEoDUIHukgEKgIoARI8Cgd2ZXJzaW9uGAMgASgJQia6SCNyITIfXih2KFxkKylcLihcZCspXC4oXGQrKXxsYXRlc3QpJEgAiAEBEhwKCnBhY2thZ2VfaWQYBCABKAlCCLpIBXIDsAEBEk8KFGFkZGl0aW9uYWxfcmVzb3VyY2VzGAUgASgLMiwucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQWRkaXRpb25hbFJlc291cmNlc0gBiAEBElMKFmRhdGFiYXNlX2NvbmZpZ3VyYXRpb24YByABKAsyLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25IAogBARJBCg1ub2RlX3NlbGVjdG9yGAggAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSQgoLdG9sZXJhdGlvbnMYCSADKAsyIy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5Ub2xlcmF0aW9uQgi6SAWSAQIQChI/Cgthbm5vdGF0aW9ucxgKIAMoCzIgLnFkcmFudC5jbG91ZC5jb21tb24udjEuS2V5VmFsdWVCCLpIBZIBAhAKEjEKGGFsbG93ZWRfaXBfc291cmNlX3JhbmdlcxgLIAMoCUIPukgMkgEJECgiBXID8AEBElIKDHNlcnZpY2VfdHlwZRgMIAEoDjIrLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTZXJ2aWNlVHlwZUIKukgHggEEEAEgAEgDiAEBEkcKE3NlcnZpY2VfYW5ub3RhdGlvbnMYDSADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQQBI+Cgpwb2RfbGFiZWxzGA4gAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSLwoXcmVzZXJ2ZWRfY3B1X3BlcmNlbnRhZ2UYFCABKA1CCbpIBioEGFAoAUgEiAEBEjIKGnJlc2VydmVkX21lbW9yeV9wZXJjZW50YWdlGBUgASgNQgm6SAYqBBhQKAFIBYgBARJXCghncHVfdHlwZRgWIAEoDjI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uR3B1VHlwZUIKukgHggEEEAEgAEgGiAEBEmMKDnJlc3RhcnRfcG9saWN5GBcgASgOMjoucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZXN0YXJ0UG9saWN5Qgq6SAeCAQQQASAASAeIAQESawoScmViYWxhbmNlX3N0cmF0ZWd5GBggASgOMj4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZWJhbGFuY2VTdHJhdGVneUIKukgHggEEEAEgAEgIiAEBEl8KG3RvcG9sb2d5X3NwcmVhZF9jb25zdHJhaW50cxgZIAMoCzIwLnFkcmFudC5jbG91ZC5jb21tb24udjEuVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50Qgi6SAWSAQIQChJgCh1jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbhgaIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTdG9yYWdlQ29uZmlndXJhdGlvbkgJiAEBQgoKCF92ZXJzaW9uQhcKFV9hZGRpdGlvbmFsX3Jlc291cmNlc0IZChdfZGF0YWJhc2VfY29uZmlndXJhdGlvbkIPCg1fc2VydmljZV90eXBlQhoKGF9yZXNlcnZlZF9jcHVfcGVyY2VudGFnZUIdChtfcmVzZXJ2ZWRfbWVtb3J5X3BlcmNlbnRhZ2VCCwoJX2dwdV90eXBlQhEKD19yZXN0YXJ0X3BvbGljeUIVChNfcmViYWxhbmNlX3N0cmF0ZWd5QiAKHl9jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbiKrBQoVRGF0YWJhc2VDb25maWd1cmF0aW9uElEKCmNvbGxlY3Rpb24YASABKAsyOC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uSACIAQESSwoHc3RvcmFnZRgCIAEoCzI1LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VIAYgBARJLCgdzZXJ2aWNlGAMgASgLMjUucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uU2VydmljZUgCiAEBEloKCWxvZ19sZXZlbBgEIAEoDjI2LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkxvZ0xldmVsQgq6SAeCAQQQASAASAOIAQESQwoDdGxzGAUgASgLMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uVGxzSASIAQESTwoJaW5mZXJlbmNlGAYgASgLMjcucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uSW5mZXJlbmNlSAWIAQESVgoNYXVkaXRfbG9nZ2luZxgHIAEoCzI6LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZ0gGiAEBQg0KC19jb2xsZWN0aW9uQgoKCF9zdG9yYWdlQgoKCF9zZXJ2aWNlQgwKCl9sb2dfbGV2ZWxCBgoEX3Rsc0IMCgpfaW5mZXJlbmNlQhAKDl9hdWRpdF9sb2dnaW5nIpICCh9EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uEigKEnJlcGxpY2F0aW9uX2ZhY3RvchgBIAEoDUIHukgEKgIoAUgAiAEBEi4KGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgCIAEoBUIHukgEGgIoAUgBiAEBElUKB3ZlY3RvcnMYAyABKAsyPy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9yc0gCiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIKCghfdmVjdG9ycyJKCiZEYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9ycxIUCgdvbl9kaXNrGAEgASgISACIAQFCCgoIX29uX2Rpc2siigEKHERhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2USWgoLcGVyZm9ybWFuY2UYASABKAsyQC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25TdG9yYWdlUGVyZm9ybWFuY2VIAIgBAUIOCgxfcGVyZm9ybWFuY2UikQEKJ0RhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VQZXJmb3JtYW5jZRIhChRvcHRpbWl6ZXJfY3B1X2J1ZGdldBgBIAEoBUgAiAEBEhkKDGFzeW5jX3Njb3JlchgCIAEoCEgBiAEBQhcKFV9vcHRpbWl6ZXJfY3B1X2J1ZGdldEIPCg1fYXN5bmNfc2NvcmVyIvABChxEYXRhYmFzZUNvbmZpZ3VyYXRpb25TZXJ2aWNlEjoKB2FwaV9rZXkYASABKAsyJC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlNlY3JldEtleVJlZkgAiAEBEkQKEXJlYWRfb25seV9hcGlfa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZIAYgBARIXCgplbmFibGVfdGxzGAQgASgISAKIAQFCCgoIX2FwaV9rZXlCFAoSX3JlYWRfb25seV9hcGlfa2V5Qg0KC19lbmFibGVfdGxzSgQIAxAEIpEBChhEYXRhYmFzZUNvbmZpZ3VyYXRpb25UbHMSOgoEY2VydBgBIAEoCzIkLnFkcmFudC5jbG91ZC5jb21tb24udjEuU2VjcmV0S2V5UmVmQga6SAPIAQESOQoDa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZCBrpIA8gBASIxCh5EYXRhYmFzZUNvbmZpZ3VyYXRpb25JbmZlcmVuY2USDwoHZW5hYmxlZBgBIAEoCCIjChNBZGRpdGlvbmFsUmVzb3VyY2VzEgwKBGRpc2sYAyABKA0i/wEKIURhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZxIPCgdlbmFibGVkGAEgASgIEkAKCHJvdGF0aW9uGAIgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQXVkaXRMb2dSb3RhdGlvbkgAiAEBEiYKDW1heF9sb2dfZmlsZXMYAyABKA1CCrpIByoFGOgHKAFIAYgBARIkChd0cnVzdF9mb3J3YXJkZWRfaGVhZGVycxgEIAEoCEgCiAEBQgsKCV9yb3RhdGlvbkIQCg5fbWF4X2xvZ19maWxlc0IaChhfdHJ1c3RfZm9yd2FyZGVkX2hlYWRlcnMi8wkKClRvbGVyYXRpb24SGgoDa2V5GAEgASgJQgi6SAVyAxi9AkgAiAEBEk4KCG9wZXJhdG9yGAIgASgOMisucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbk9wZXJhdG9yQgq6SAeCAQQQASAASAGIAQESRgoFdmFsdWUYAyABKAlCMrpIL3ItMisoKFtBLVphLXowLTldWy1BLVphLXowLTlfLl0qKT9bQS1aYS16MC05XSk/SAKIAQESSgoGZWZmZWN0GAQgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbkVmZmVjdEIKukgHggEEEAEgAEgDiAEBEigKEnRvbGVyYXRpb25fc2Vjb25kcxgFIAEoBEIHukgEMgIoAEgEiAEBOvkGukj1Bhp0Cht0b2xlcmF0aW9uLnZhbHVlX2Zvcl9leGlzdHMSLXZhbHVlIG11c3Qgbm90IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEV4aXN0cxomdGhpcy5vcGVyYXRvciAhPSAxIHx8ICFoYXModGhpcy52YWx1ZSkargEKGnRvbGVyYXRpb24udmFsdWVfZm9yX2VxdWFsElF2YWx1ZSBtdXN0IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEVxdWFsIChvciBpcyBub3Qgc2V0LCB3aGljaCBkZWZhdWx0cyB0byBFcXVhbCkaPShoYXModGhpcy5vcGVyYXRvcikgJiYgdGhpcy5vcGVyYXRvciAhPSAyKSB8fCBoYXModGhpcy52YWx1ZSkapwIKInRvbGVyYXRpb24ua2V5X2Zvcm1hdF93aGVuX3ByZXNlbnQSRGtleSBtdXN0IGJlIGEgdmFsaWQgS3ViZXJuZXRlcyBxdWFsaWZpZWQgbmFtZSB3aGVuIHNldCBhbmQgbm9uLWVtcHR5GroBIWhhcyh0aGlzLmtleSkgfHwgdGhpcy5rZXkgPT0gJycgfHwgdGhpcy5rZXkubWF0Y2hlcygnXihbQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPyhcXC5bQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPykqXFwvKT8oW0EtWmEtejAtOV1bLUEtWmEtejAtOV8uXSopP1tBLVphLXowLTldJCcpGooBCiR0b2xlcmF0aW9uLmtleV9lbXB0eV9yZXF1aXJlc19leGlzdHMSKW9wZXJhdG9yIG11c3QgYmUgJ0V4aXN0cycgaWYga2V5IGlzIGVtcHR5GjcoaGFzKHRoaXMua2V5KSAmJiB0aGlzLmtleSAhPSAnJykgfHwgdGhpcy5vcGVyYXRvciA9PSAxGpQBCiV0b2xlcmF0aW9uLnNlY29uZHNfb25seV9mb3Jfbm9leGVjdXRlEjh0b2xlcmF0aW9uU2Vjb25kcyBpcyBvbmx5IHZhbGlkIHdoZW4gZWZmZWN0IGlzIE5vRXhlY3V0ZRoxIWhhcyh0aGlzLnRvbGVyYXRpb25fc2Vjb25kcykgfHwgdGhpcy5lZmZlY3QgPT0gM0IGCgRfa2V5QgsKCV9vcGVyYXRvckIICgZfdmFsdWVCCQoHX2VmZmVjdEIVChNfdG9sZXJhdGlvbl9zZWNvbmRzIoUDChtDbHVzdGVyU3RvcmFnZUNvbmZpZ3VyYXRpb24SQgoRc3RvcmFnZV90aWVyX3R5cGUYASABKA4yJy5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlN0b3JhZ2VUaWVyVHlwZRIsChZkYXRhYmFzZV9zdG9yYWdlX2NsYXNzGAIgASgJQge6SARyAhABSACIAQESLAoWc25hcHNob3Rfc3RvcmFnZV9jbGFzcxgDIAEoCUIHukgEcgIQAUgBiAEBEisKFXZvbHVtZV9zbmFwc2hvdF9jbGFzcxgEIAEoCUIHukgEcgIQAUgCiAEBEi0KF3ZvbHVtZV9hdHRyaWJ1dGVzX2NsYXNzGAUgASgJQge6SARyAhABSAOIAQFCGQoXX2RhdGFiYXNlX3N0b3JhZ2VfY2xhc3NCGQoXX3NuYXBzaG90X3N0b3JhZ2VfY2xhc3NCGAoWX3ZvbHVtZV9zbmFwc2hvdF9jbGFzc0IaChhfdm9sdW1lX2F0dHJpYnV0ZXNfY2xhc3MivQQKDENsdXN0ZXJTdGF0ZRIYCgd2ZXJzaW9uGAEgASgJQge6SARyAhABEhAKCG5vZGVzX3VwGAIgASgNEjAKDHJlc3RhcnRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPgoFcGhhc2UYBCABKA4yJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyUGhhc2VCCLpIBYIBAhABEg4KBnJlYXNvbhgFIAEoCRJCCghlbmRwb2ludBgGIAEoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJFbmRwb2ludEIGukgDyAEBEk8KCXJlc291cmNlcxgHIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzU3VtbWFyeUIGukgDyAEBElMKEHNjYWxhYmlsaXR5X2luZm8YCCABKAsyLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU2NhbGFiaWxpdHlJbmZvQggYAbpIA8gBARI3CgVub2RlcxgJIAMoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlSW5mbxIQCghqd3RfcmJhYxgKIAEoCBJKCgxjYXBhYmlsaXRpZXMYCyABKAsyLC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQ2FwYWJpbGl0aWVzQga6SAPIAQEinwIKD0NsdXN0ZXJOb2RlSW5mbxIVCgRuYW1lGAEgASgJQge6SARyAhABEi4KCnN0YXJ0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3ZlcnNpb24YAyABKAkSOgoIZW5kcG9pbnQYBCABKAsyKC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyRW5kcG9pbnQSQgoFc3RhdGUYCiABKA4yKS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVN0YXRlQgi6SAWCAQIQARIeChFhdmFpbGFiaWxpdHlfem9uZRgLIAEoCUgAiAEBQhQKEl9hdmFpbGFiaWxpdHlfem9uZSJgCg9DbHVzdGVyRW5kcG9pbnQSFQoDdXJsGAEgASgJQgi6SAVyA4gBARIaCglyZXN0X3BvcnQYAiABKAVCB7pIBBoCIAASGgoJZ3JwY19wb3J0GAMgASgFQge6SAQaAiAAIoQDChtDbHVzdGVyTm9kZVJlc291cmNlc1N1bW1hcnkSQwoEZGlzaxgBIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzQga6SAPIAQESQgoDcmFtGAIgASgLMi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3Rlck5vZGVSZXNvdXJjZXNCBrpIA8gBARJCCgNjcHUYAyABKAsyLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVJlc291cmNlc0IGukgDyAEBEj8KA2dwdRgEIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzSACIAQESQwoHZ3B1X3JhbRgFIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzSAGIAQFCBgoEX2dwdUIKCghfZ3B1X3JhbSLEAQoUQ2x1c3Rlck5vZGVSZXNvdXJjZXMSHAoEYmFzZRgBIAEoAUIOukgLEgkpAAAAAAAAAAASJQoNY29tcGxpbWVudGFyeRgCIAEoAUIOukgLEgkpAAAAAAAAAAASIgoKYWRkaXRpb25hbBgDIAEoAUIOukgLEgkpAAAAAAAAAAASIAoIcmVzZXJ2ZWQYBCABKAFCDrpICxIJKQAAAAAAAAAAEiEKCWF2YWlsYWJsZRgFIAEoAUIOukgLEgkpAAAAAAAAAAAikAEKFkNsdXN0ZXJTY2FsYWJpbGl0eUluZm8STQoGc3RhdHVzGAEgASgOMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlclNjYWxhYmlsaXR5U3RhdHVzQgq6SAeCAQQQASAAEhwKBnJlYXNvbhgCIAEoCUIHukgEcgIQAUgAiAEBQgkKB19yZWFzb24iogEKH0NsdXN0ZXJEaXNrRXhwYW5zaW9uU3VwcG9ydEluZm8SVgoGc3RhdHVzGAEgASgOMjoucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckRpc2tFeHBhbnNpb25TdXBwb3J0U3RhdHVzQgq6SAeCAQQQASAAEhwKBnJlYXNvbhgCIAEoCUIHukgEcgIQAUgAiAEBQgkKB19yZWFzb24ilAEKGENsdXN0ZXJCYWNrdXBTdXBwb3J0SW5mbxJPCgZzdGF0dXMYASABKA4yMy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQmFja3VwU3VwcG9ydFN0YXR1c0IKukgHggEEEAEgABIcCgZyZWFzb24YAiABKAlCB7pIBHICEAFIAIgBAUIJCgdfcmVhc29uIo0CChNDbHVzdGVyQ2FwYWJpbGl0aWVzElgKDmRpc2tfZXhwYW5zaW9uGAEgASgLMjgucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckRpc2tFeHBhbnNpb25TdXBwb3J0SW5mb0IGukgDyAEBEkkKBmJhY2t1cBgCIAEoCzIxLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJCYWNrdXBTdXBwb3J0SW5mb0IGukgDyAEBElEKEHNjYWxhYmlsaXR5X2luZm8YAyABKAsyLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU2NhbGFiaWxpdHlJbmZvQga6SAPIAQEizwEKDVFkcmFudFJlbGVhc2USGAoHdmVyc2lvbhgBIAEoCUIHukgEcgIQARIPCgdkZWZhdWx0GAIgASgIEigKEXJlbGVhc2Vfbm90ZXNfdXJsGAMgASgJQgi6SAVyA4gBAUgAiAEBEh0KB3JlbWFya3MYBCABKAlCB7pIBHICEAFIAYgBARITCgtlbmRfb2ZfbGlmZRgFIAEoCBITCgt1bmF2YWlsYWJsZRgGIAEoCEIUChJfcmVsZWFzZV9ub3Rlc191cmxCCgoIX3JlbWFya3MijgEKHkNyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIbCgliYWNrdXBfaWQYAiABKAlCCLpIBXIDsAEBEjEKDGNsdXN0ZXJfbmFtZRgDIAEoCUIbukgYchYQBBhAMhBeW2EtekEtWjAtOS1fXSskIlwKH0NyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwUmVzcG9uc2USOQoHY2x1c3RlchgBIAEoCzIgLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJCBrpIA8gBASqrAQoSQ2x1c3RlclNlcnZpY2VUeXBlEiQKIENMVVNURVJfU0VSVklDRV9UWVBFX1VOU1BFQ0lGSUVEEAASIwofQ0xVU1RFUl9TRVJWSUNFX1RZUEVfQ0xVU1RFUl9JUBABEiIKHkNMVVNURVJfU0VSVklDRV9UWVBFX05PREVfUE9SVBACEiYKIkNMVVNURVJfU0VSVklDRV9UWVBFX0xPQURfQkFMQU5DRVIQAyqgAQobQ2x1c3RlckNvbmZpZ3VyYXRpb25HcHVUeXBlEi4KKkNMVVNURVJfQ09ORklHVVJBVElPTl9HUFVfVFlQRV9VTlNQRUNJRklFRBAAEikKJUNMVVNURVJfQ09ORklHVVJBVElPTl9HUFVfVFlQRV9OVklESUEQARImCiJDTFVTVEVSX0NPTkZJR1VSQVRJT05fR1BVX1RZUEVfQU1EEAIq8gEKIUNsdXN0ZXJDb25maWd1cmF0aW9uUmVzdGFydFBvbGljeRI0CjBDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVTVEFSVF9QT0xJQ1lfVU5TUEVDSUZJRUQQABIwCixDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVTVEFSVF9QT0xJQ1lfUk9MTElORxABEjEKLUNMVVNURVJfQ09ORklHVVJBVElPTl9SRVNUQVJUX1BPTElDWV9QQVJBTExFTBACEjIKLkNMVVNURVJfQ09ORklHVVJBVElPTl9SRVNUQVJUX1BPTElDWV9BVVRPTUFUSUMQAyqOAgolQ2x1c3RlckNvbmZpZ3VyYXRpb25SZWJhbGFuY2VTdHJhdGVneRI4CjRDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVCQUxBTkNFX1NUUkFURUdZX1VOU1BFQ0lGSUVEEAASNQoxQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFQkFMQU5DRV9TVFJBVEVHWV9CWV9DT1VOVBABEjQKMENMVVNURVJfQ09ORklHVVJBVElPTl9SRUJBTEFOQ0VfU1RSQVRFR1lfQllfU0laRRACEj4KOkNMVVNURVJfQ09ORklHVVJBVElPTl9SRUJBTEFOQ0VfU1RSQVRFR1lfQllfQ09VTlRfQU5EX1NJWkUQAyrVAgodRGF0YWJhc2VDb25maWd1cmF0aW9uTG9nTGV2ZWwSMAosREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfVU5TUEVDSUZJRUQQABIqCiZEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9UUkFDRRABEioKJkRBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX0RFQlVHEAISKQolREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfSU5GTxADEikKJURBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX1dBUk4QBBIqCiZEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9FUlJPUhAFEigKJERBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX09GRhAGKnMKEEF1ZGl0TG9nUm90YXRpb24SIgoeQVVESVRfTE9HX1JPVEFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYQVVESVRfTE9HX1JPVEFUSU9OX0RBSUxZEAESHQoZQVVESVRfTE9HX1JPVEFUSU9OX0hPVVJMWRACKngKElRvbGVyYXRpb25PcGVyYXRvchIjCh9UT0xFUkFUSU9OX09QRVJBVE9SX1VOU1BFQ0lGSUVEEAASHgoaVE9MRVJBVElPTl9PUEVSQVRPUl9FWElTVFMQARIdChlUT0xFUkFUSU9OX09QRVJBVE9SX0VRVUFMEAIqpAEKEFRvbGVyYXRpb25FZmZlY3QSIQodVE9MRVJBVElPTl9FRkZFQ1RfVU5TUEVDSUZJRUQQABIhCh1UT0xFUkFUSU9OX0VGRkVDVF9OT19TQ0hFRFVMRRABEigKJFRPTEVSQVRJT05fRUZGRUNUX1BSRUZFUl9OT19TQ0hFRFVMRRACEiAKHFRPTEVSQVRJT05fRUZGRUNUX05PX0VYRUNVVEUQAyrfBAoMQ2x1c3RlclBoYXNlEh0KGUNMVVNURVJfUEhBU0VfVU5TUEVDSUZJRUQQABIaChZDTFVTVEVSX1BIQVNFX0NSRUFUSU5HEAESIgoeQ0xVU1RFUl9QSEFTRV9GQUlMRURfVE9fQ1JFQVRFEAISGgoWQ0xVU1RFUl9QSEFTRV9VUERBVElORxADEiIKHkNMVVNURVJfUEhBU0VfRkFJTEVEX1RPX1VQREFURRAEEhkKFUNMVVNURVJfUEhBU0VfU0NBTElORxAFEhsKF0NMVVNURVJfUEhBU0VfVVBHUkFESU5HEAYSHAoYQ0xVU1RFUl9QSEFTRV9TVVNQRU5ESU5HEAcSGwoXQ0xVU1RFUl9QSEFTRV9TVVNQRU5ERUQQCBIjCh9DTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19TVVNQRU5EEAkSGgoWQ0xVU1RFUl9QSEFTRV9SRVNVTUlORxAKEiIKHkNMVVNURVJfUEhBU0VfRkFJTEVEX1RPX1JFU1VNRRALEhkKFUNMVVNURVJfUEhBU0VfSEVBTFRIWRAMEhsKF0NMVVNURVJfUEhBU0VfTk9UX1JFQURZEA0SHwobQ0xVU1RFUl9QSEFTRV9SRUNPVkVSWV9NT0RFEA4SJAogQ0xVU1RFUl9QSEFTRV9NQU5VQUxfTUFJTlRFTkFOQ0UQDxIgChxDTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19TWU5DEBASGwoXQ0xVU1RFUl9QSEFTRV9OT1RfRk9VTkQQERIaChZDTFVTVEVSX1BIQVNFX0RFTEVUSU5HEBIq3gEKEENsdXN0ZXJOb2RlU3RhdGUSIgoeQ0xVU1RFUl9OT0RFX1NUQVRFX1VOU1BFQ0lGSUVEEAASHwobQ0xVU1RFUl9OT0RFX1NUQVRFX1NUQVJUSU5HEAESHgoaQ0xVU1RFUl9OT0RFX1NUQVRFX0hFQUxUSFkQAhIgChxDTFVTVEVSX05PREVfU1RBVEVfVU5IRUFMVEhZEAMSIAocQ0xVU1RFUl9OT0RFX1NUQVRFX1NVU1BFTkRFRBAEEiEKHUNMVVNURVJfTk9ERV9TVEFURV9SRUNPVkVSSU5HEAUqnAEKGENsdXN0ZXJTY2FsYWJpbGl0eVN0YXR1cxIqCiZDTFVTVEVSX1NDQUxBQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NMVVNURVJfU0NBTEFCSUxJVFlfU1RBVFVTX05PVF9TQ0FMQUJMRRABEicKI0NMVVNURVJfU0NBTEFCSUxJVFlfU1RBVFVTX1NDQUxBQkxFEAIqyAEKIUNsdXN0ZXJEaXNrRXhwYW5zaW9uU3VwcG9ydFN0YXR1cxI1CjFDTFVTVEVSX0RJU0tfRVhQQU5TSU9OX1NVUFBPUlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASMwovQ0xVU1RFUl9ESVNLX0VYUEFOU0lPTl9TVVBQT1JUX1NUQVRVU19TVVBQT1JURUQQARI3CjNDTFVTVEVSX0RJU0tfRVhQQU5TSU9OX1NVUFBPUlRfU1RBVFVTX05PVF9TVVBQT1JURUQQAiqpAQoaQ2x1c3RlckJhY2t1cFN1cHBvcnRTdGF0dXMSLQopQ0xVU1RFUl9CQUNLVVBfU1VQUE9SVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIrCidDTFVTVEVSX0JBQ0tVUF9TVVBQT1JUX1NUQVRVU19TVVBQT1JURUQQARIvCitDTFVTVEVSX0JBQ0tVUF9TVVBQT1JUX1NUQVRVU19OT1RfU1VQUE9SVEVEEAIyyx4KDkNsdXN0ZXJTZXJ2aWNlErQBCgxMaXN0Q2x1c3RlcnMSLC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5MaXN0Q2x1c3RlcnNSZXF1ZXN0Gi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuTGlzdENsdXN0ZXJzUmVzcG9uc2UiR4q1GA1yZWFkOmNsdXN0ZXJzgtPkkwIwEi4vYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzEtcBCgpHZXRDbHVzdGVyEioucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuR2V0Q2x1c3RlclJlcXVlc3QaKy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5HZXRDbHVzdGVyUmVzcG9uc2UicIq1GA1yZWFkOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZILT5JMCPRI7L2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0S2QIKDUNyZWF0ZUNsdXN0ZXISLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DcmVhdGVDbHVzdGVyUmVxdWVzdBouLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNyZWF0ZUNsdXN0ZXJSZXNwb25zZSLoAYq1GA53cml0ZTpjbHVzdGVyc5K1GBJjbHVzdGVyLmFjY291bnRfaWS6tRgcCgxjbHVzdGVyX25hbWUSDGNsdXN0ZXIubmFtZcrzGFsIARIHY2x1c3RlciIPcmVzcC5jbHVzdGVyLmlkKj0vYWNjb3VudHMve3JlcS5jbHVzdGVyLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXNwLmNsdXN0ZXIuaWR9gtPkkwI7OgEqIjYvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2NsdXN0ZXIuYWNjb3VudF9pZH0vY2x1c3RlcnMStAMKF0NyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwEjcucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXBSZXF1ZXN0GjgucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ3JlYXRlQ2x1c3RlckZyb21CYWNrdXBSZXNwb25zZSKlAoq1GA9yZXN0b3JlOmJhY2t1cHOKtRgOd3JpdGU6Y2x1c3RlcnOotRgBurUYFgoJYmFja3VwX2lkEgliYWNrdXBfaWS6tRgcCgxjbHVzdGVyX25hbWUSDGNsdXN0ZXJfbmFtZcrzGHQIARIHY2x1c3RlciIPcmVzcC5jbHVzdGVyLmlkKjUvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVzcC5jbHVzdGVyLmlkfVIfCg5mcm9tX2JhY2t1cF9pZBINcmVxLmJhY2t1cF9pZILT5JMCRCJCL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9iYWNrdXBzL3tiYWNrdXBfaWR9L2NsdXN0ZXJzEuACCg1VcGRhdGVDbHVzdGVyEi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVXBkYXRlQ2x1c3RlclJlcXVlc3QaLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5VcGRhdGVDbHVzdGVyUmVzcG9uc2Ui7wGKtRgOd3JpdGU6Y2x1c3RlcnOStRgSY2x1c3Rlci5hY2NvdW50X2lkurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlci5pZMrzGFkIAhIHY2x1c3RlciIOcmVxLmNsdXN0ZXIuaWQqPC9hY2NvdW50cy97cmVxLmNsdXN0ZXIuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyLmlkfYLT5JMCSDoBKhpDL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3tjbHVzdGVyLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyLmlkfRK4AgoNRGVsZXRlQ2x1c3RlchItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRlbGV0ZUNsdXN0ZXJSZXF1ZXN0Gi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGVsZXRlQ2x1c3RlclJlc3BvbnNlIscBirUYD2RlbGV0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhRCAMSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9gtPkkwI9KjsvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfRLLAgoOUmVzdGFydENsdXN0ZXISLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5SZXN0YXJ0Q2x1c3RlclJlcXVlc3QaLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5SZXN0YXJ0Q2x1c3RlclJlc3BvbnNlItcBirUYDndyaXRlOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZMrzGFoIBBIHY2x1c3RlciIOcmVxLmNsdXN0ZXJfaWQqNC9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlcl9pZH0yB3Jlc3RhcnSC0+STAkUiQy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9L3Jlc3RhcnQSywIKDlN1c3BlbmRDbHVzdGVyEi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VzcGVuZENsdXN0ZXJSZXF1ZXN0Gi8ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VzcGVuZENsdXN0ZXJSZXNwb25zZSLXAYq1GA53cml0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhaCAQSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9MgdzdXNwZW5kgtPkkwJFIkMvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS9zdXNwZW5kEtUCChBVbnN1c3BlbmRDbHVzdGVyEjAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVW5zdXNwZW5kQ2x1c3RlclJlcXVlc3QaMS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5VbnN1c3BlbmRDbHVzdGVyUmVzcG9uc2Ui2wGKtRgOd3JpdGU6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkyvMYXAgEEgdjbHVzdGVyIg5yZXEuY2x1c3Rlcl9pZCo0L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyX2lkfTIJdW5zdXNwZW5kgtPkkwJHIkUvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS91bnN1c3BlbmQS6QIKFEVuYWJsZUNsdXN0ZXJKd3RSYmFjEjQucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRW5hYmxlQ2x1c3Rlckp3dFJiYWNSZXF1ZXN0GjUucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRW5hYmxlQ2x1c3Rlckp3dFJiYWNSZXNwb25zZSLjAYq1GA53cml0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhjCAQSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9MhBlbmFibGVkLWp3dC1yYmFjgtPkkwJIIkYvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS9lbmFibGUtand0EsYBChJTdWdnZXN0Q2x1c3Rlck5hbWUSMi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5TdWdnZXN0Q2x1c3Rlck5hbWVSZXF1ZXN0GjMucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VnZ2VzdENsdXN0ZXJOYW1lUmVzcG9uc2UiR4q1GACC0+STAj0SOy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMvc3VnZ2VzdC1uYW1lEuIBChJMaXN0UWRyYW50UmVsZWFzZXMSMi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5MaXN0UWRyYW50UmVsZWFzZXNSZXF1ZXN0GjMucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuTGlzdFFkcmFudFJlbGVhc2VzUmVzcG9uc2UiY4q1GA1yZWFkOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZILT5JMCMBIuL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9yZWxlYXNlcxLgAQoQR2V0UWRyYW50UmVsZWFzZRIwLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkdldFFkcmFudFJlbGVhc2VSZXF1ZXN0GjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuR2V0UWRyYW50UmVsZWFzZVJlc3BvbnNlImeKtRgNcmVhZDpjbHVzdGVyc7q1GBIKB3ZlcnNpb24SB3ZlcnNpb26C0+STAjoSOC9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vcmVsZWFzZXMve3ZlcnNpb259GgbCtRgCCAFC/gEKG2NvbS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MUIMQ2x1c3RlclByb3RvUAFaUmdpdGh1Yi5jb20vcWRyYW50L3FkcmFudC1jbG91ZC1wdWJsaWMtYXBpL2dlbi9nby9xZHJhbnQvY2xvdWQvY2x1c3Rlci92MTtjbHVzdGVydjGiAgNRQ0OqAhdRZHJhbnQuQ2xvdWQuQ2x1c3Rlci5WMcoCF1FkcmFudFxDbG91ZFxDbHVzdGVyXFYx4gIjUWRyYW50XENsb3VkXENsdXN0ZXJcVjFcR1BCTWV0YWRhdGHqAhpRZHJhbnQ6OkNsb3VkOjpDbHVzdGVyOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_google_api_annotations, file_google_protobuf_timestamp, file_qdrant_cloud_common_v1_common, file_qdrant_cloud_event_v1_events]); + fileDesc("CiVxZHJhbnQvY2xvdWQvY2x1c3Rlci92MS9jbHVzdGVyLnByb3RvEhdxZHJhbnQuY2xvdWQuY2x1c3Rlci52MSLqBQoTTGlzdENsdXN0ZXJzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARInChFjbG91ZF9wcm92aWRlcl9pZBgKIAEoCUIHukgEcgIQA0gAiAEBEi4KGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQAUgBiAEBEiIKCXBhZ2Vfc2l6ZRgUIAEoBUIKukgHGgUY+gEgAEgCiAEBEiAKCnBhZ2VfdG9rZW4YFSABKAlCB7pIBHICEAFIA4gBATrFA7pIwQMasQEKJ2xpc3RfY2x1c3RlcnMuY2xvdWRfcHJvdmlkZXJfaWRfcHJlc2VudBJCY2xvdWRfcHJvdmlkZXJfaWQgaXMgcmVxdWlyZWQgd2hlbiBjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgaXMgc2V0GkIhaGFzKHRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkKSB8fCBoYXModGhpcy5jbG91ZF9wcm92aWRlcl9pZCkaigIKIGNsdXN0ZXIuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkEkhjbG91ZF9wcm92aWRlcl9yZWdpb25faWQgbXVzdCBiZSBhIFVVSUQgaWYgY2xvdWRfcHJvdmlkZXJfaWQgaXMgJ2h5YnJpZCcamwF0aGlzLmNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8IHRoaXMuY2xvdWRfcHJvdmlkZXJfaWQhPSAnaHlicmlkJ0IUChJfY2xvdWRfcHJvdmlkZXJfaWRCGwoZX2Nsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZEIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuIrMBChRMaXN0Q2x1c3RlcnNSZXNwb25zZRIvCgVpdGVtcxgBIAMoCzIgLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXISIAoKdG90YWxfc2l6ZRgKIAEoBUIHukgEGgIoAEgAiAEBEiUKD25leHRfcGFnZV90b2tlbhgLIAEoCUIHukgEcgIQAUgBiAEBQg0KC190b3RhbF9zaXplQhIKEF9uZXh0X3BhZ2VfdG9rZW4iTwoRR2V0Q2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiTwoSR2V0Q2x1c3RlclJlc3BvbnNlEjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQEixAIKFENyZWF0ZUNsdXN0ZXJSZXF1ZXN0EjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQE68AG6SOwBGukBCiJjcmVhdGVfY2x1c3Rlci5ub19yZWFkX29ubHlfZmllbGRzEk5yZWFkLW9ubHkgZmllbGRzIChpZCwgY3JlYXRlZF9hdCwgZGVsZXRlZF9hdCwgc3RhdGUpIG11c3Qgbm90IGJlIHNldCBvbiBjcmVhdGUac3RoaXMuY2x1c3Rlci5pZCA9PSAnJyAmJiAhaGFzKHRoaXMuY2x1c3Rlci5jcmVhdGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5kZWxldGVkX2F0KSAmJiAhaGFzKHRoaXMuY2x1c3Rlci5zdGF0ZSkiuwEKFUNyZWF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocY3JlYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIrABChRVcGRhdGVDbHVzdGVyUmVxdWVzdBI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOl26SFoaWAoZdXBkYXRlX2NsdXN0ZXIuaWRfcHJlc2VudBIkY2x1c3Rlci5pZCBpcyByZXF1aXJlZCBmb3IgYW4gdXBkYXRlGhV0aGlzLmNsdXN0ZXIuaWQgIT0gJyciuwEKFVVwZGF0ZUNsdXN0ZXJSZXNwb25zZRI5CgdjbHVzdGVyGAEgASgLMiAucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckIGukgDyAEBOme6SGQaYgocdXBkYXRlX2NsdXN0ZXIuc3RhdGVfcHJlc2VudBIpc3RhdGUgaXMgcmVxdWlyZWQgZm9yIGFuIGV4aXN0aW5nIGNsdXN0ZXIaF2hhcyh0aGlzLmNsdXN0ZXIuc3RhdGUpIoIBChREZWxldGVDbHVzdGVyUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABARIbCg5kZWxldGVfYmFja3VwcxgDIAEoCEgAiAEBQhEKD19kZWxldGVfYmFja3VwcyIXChVEZWxldGVDbHVzdGVyUmVzcG9uc2UiUwoVUmVzdGFydENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlJlc3RhcnRDbHVzdGVyUmVzcG9uc2UiUwoVU3VzcGVuZENsdXN0ZXJSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhwKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBIhgKFlN1c3BlbmRDbHVzdGVyUmVzcG9uc2UiVQoXVW5zdXNwZW5kQ2x1c3RlclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESHAoKY2x1c3Rlcl9pZBgCIAEoCUIIukgFcgOwAQEiGgoYVW5zdXNwZW5kQ2x1c3RlclJlc3BvbnNlIlkKG0VuYWJsZUNsdXN0ZXJKd3RSYmFjUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIcCgpjbHVzdGVyX2lkGAIgASgJQgi6SAVyA7ABASIeChxFbmFibGVDbHVzdGVySnd0UmJhY1Jlc3BvbnNlIjkKGVN1Z2dlc3RDbHVzdGVyTmFtZVJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQEiMwoaU3VnZ2VzdENsdXN0ZXJOYW1lUmVzcG9uc2USFQoEbmFtZRgBIAEoCUIHukgEcgIQASJrChlMaXN0UWRyYW50UmVsZWFzZXNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEiEKCmNsdXN0ZXJfaWQYAiABKAlCCLpIBXIDsAEBSACIAQFCDQoLX2NsdXN0ZXJfaWQiUwoaTGlzdFFkcmFudFJlbGVhc2VzUmVzcG9uc2USNQoFaXRlbXMYASADKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlIlEKF0dldFFkcmFudFJlbGVhc2VSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBEhgKB3ZlcnNpb24YAiABKAlCB7pIBHICEAEiWwoYR2V0UWRyYW50UmVsZWFzZVJlc3BvbnNlEj8KB3JlbGVhc2UYASABKAsyJi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5RZHJhbnRSZWxlYXNlQga6SAPIAQEi1ggKB0NsdXN0ZXISCgoCaWQYASABKAkSLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHAoKYWNjb3VudF9pZBgDIAEoCUIIukgFcgOwAQESKQoEbmFtZRgEIAEoCUIbukgYchYQAhhAMhBeW2EtekEtWjAtOS1fXSskEi4KCmRlbGV0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiIKEWNsb3VkX3Byb3ZpZGVyX2lkGAogASgJQge6SARyAhADEikKGGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZBgLIAEoCUIHukgEcgIQARI6CgZsYWJlbHMYDCADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQChKyAQoVY29zdF9hbGxvY2F0aW9uX2xhYmVsGA0gASgJQo0BukiJAXKGARj9ATKAAV4oW2EtejAtOUEtWl0oWy1hLXowLTlBLVpdKlthLXowLTlBLVpdKT8oXC5bYS16MC05QS1aXShbLWEtejAtOUEtWl0qW2EtejAtOUEtWl0pPykqXC8pPyhbQS1aYS16MC05XVstQS1aYS16MC05Xy5dKik/W0EtWmEtejAtOV0kSACIAQESTAoNY29uZmlndXJhdGlvbhgUIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uQga6SAPIAQESNAoFc3RhdGUYZCABKAsyJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU3RhdGU6twO6SLMDGqMBCgpjbHVzdGVyLmlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp5dGhpcy5pZC5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpIHx8ICFoYXModGhpcy5jcmVhdGVkX2F0KRqKAgogY2x1c3Rlci5jbG91ZF9wcm92aWRlcl9yZWdpb25faWQSSGNsb3VkX3Byb3ZpZGVyX3JlZ2lvbl9pZCBtdXN0IGJlIGEgVVVJRCBpZiBjbG91ZF9wcm92aWRlcl9pZCBpcyAnaHlicmlkJxqbAXRoaXMuY2xvdWRfcHJvdmlkZXJfcmVnaW9uX2lkLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykgfHwgdGhpcy5jbG91ZF9wcm92aWRlcl9pZCE9ICdoeWJyaWQnQhgKFl9jb3N0X2FsbG9jYXRpb25fbGFiZWwigA0KFENsdXN0ZXJDb25maWd1cmF0aW9uEjQKEGxhc3RfbW9kaWZpZWRfYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiAKD251bWJlcl9vZl9ub2RlcxgCIAEoDUIHukgEKgIoARI8Cgd2ZXJzaW9uGAMgASgJQia6SCNyITIfXih2KFxkKylcLihcZCspXC4oXGQrKXxsYXRlc3QpJEgAiAEBEhwKCnBhY2thZ2VfaWQYBCABKAlCCLpIBXIDsAEBEk8KFGFkZGl0aW9uYWxfcmVzb3VyY2VzGAUgASgLMiwucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQWRkaXRpb25hbFJlc291cmNlc0gBiAEBElMKFmRhdGFiYXNlX2NvbmZpZ3VyYXRpb24YByABKAsyLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25IAogBARJBCg1ub2RlX3NlbGVjdG9yGAggAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSQgoLdG9sZXJhdGlvbnMYCSADKAsyIy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5Ub2xlcmF0aW9uQgi6SAWSAQIQChI/Cgthbm5vdGF0aW9ucxgKIAMoCzIgLnFkcmFudC5jbG91ZC5jb21tb24udjEuS2V5VmFsdWVCCLpIBZIBAhAKEjEKGGFsbG93ZWRfaXBfc291cmNlX3JhbmdlcxgLIAMoCUIPukgMkgEJECgiBXID8AEBElIKDHNlcnZpY2VfdHlwZRgMIAEoDjIrLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTZXJ2aWNlVHlwZUIKukgHggEEEAEgAEgDiAEBEkcKE3NlcnZpY2VfYW5ub3RhdGlvbnMYDSADKAsyIC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLktleVZhbHVlQgi6SAWSAQIQQBI+Cgpwb2RfbGFiZWxzGA4gAygLMiAucWRyYW50LmNsb3VkLmNvbW1vbi52MS5LZXlWYWx1ZUIIukgFkgECEAoSLwoXcmVzZXJ2ZWRfY3B1X3BlcmNlbnRhZ2UYFCABKA1CCbpIBioEGFAoAUgEiAEBEjIKGnJlc2VydmVkX21lbW9yeV9wZXJjZW50YWdlGBUgASgNQgm6SAYqBBhQKAFIBYgBARJXCghncHVfdHlwZRgWIAEoDjI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJDb25maWd1cmF0aW9uR3B1VHlwZUIKukgHggEEEAEgAEgGiAEBEmMKDnJlc3RhcnRfcG9saWN5GBcgASgOMjoucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZXN0YXJ0UG9saWN5Qgq6SAeCAQQQASAASAeIAQESawoScmViYWxhbmNlX3N0cmF0ZWd5GBggASgOMj4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckNvbmZpZ3VyYXRpb25SZWJhbGFuY2VTdHJhdGVneUIKukgHggEEEAEgAEgIiAEBEl8KG3RvcG9sb2d5X3NwcmVhZF9jb25zdHJhaW50cxgZIAMoCzIwLnFkcmFudC5jbG91ZC5jb21tb24udjEuVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50Qgi6SAWSAQIQChJgCh1jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbhgaIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTdG9yYWdlQ29uZmlndXJhdGlvbkgJiAEBQgoKCF92ZXJzaW9uQhcKFV9hZGRpdGlvbmFsX3Jlc291cmNlc0IZChdfZGF0YWJhc2VfY29uZmlndXJhdGlvbkIPCg1fc2VydmljZV90eXBlQhoKGF9yZXNlcnZlZF9jcHVfcGVyY2VudGFnZUIdChtfcmVzZXJ2ZWRfbWVtb3J5X3BlcmNlbnRhZ2VCCwoJX2dwdV90eXBlQhEKD19yZXN0YXJ0X3BvbGljeUIVChNfcmViYWxhbmNlX3N0cmF0ZWd5QiAKHl9jbHVzdGVyX3N0b3JhZ2VfY29uZmlndXJhdGlvbiKrBQoVRGF0YWJhc2VDb25maWd1cmF0aW9uElEKCmNvbGxlY3Rpb24YASABKAsyOC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uSACIAQESSwoHc3RvcmFnZRgCIAEoCzI1LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VIAYgBARJLCgdzZXJ2aWNlGAMgASgLMjUucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uU2VydmljZUgCiAEBEloKCWxvZ19sZXZlbBgEIAEoDjI2LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkxvZ0xldmVsQgq6SAeCAQQQASAASAOIAQESQwoDdGxzGAUgASgLMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uVGxzSASIAQESTwoJaW5mZXJlbmNlGAYgASgLMjcucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuRGF0YWJhc2VDb25maWd1cmF0aW9uSW5mZXJlbmNlSAWIAQESVgoNYXVkaXRfbG9nZ2luZxgHIAEoCzI6LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZ0gGiAEBQg0KC19jb2xsZWN0aW9uQgoKCF9zdG9yYWdlQgoKCF9zZXJ2aWNlQgwKCl9sb2dfbGV2ZWxCBgoEX3Rsc0IMCgpfaW5mZXJlbmNlQhAKDl9hdWRpdF9sb2dnaW5nIpICCh9EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uEigKEnJlcGxpY2F0aW9uX2ZhY3RvchgBIAEoDUIHukgEKgIoAUgAiAEBEi4KGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgCIAEoBUIHukgEGgIoAUgBiAEBElUKB3ZlY3RvcnMYAyABKAsyPy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9yc0gCiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIKCghfdmVjdG9ycyJKCiZEYXRhYmFzZUNvbmZpZ3VyYXRpb25Db2xsZWN0aW9uVmVjdG9ycxIUCgdvbl9kaXNrGAEgASgISACIAQFCCgoIX29uX2Rpc2siigEKHERhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2USWgoLcGVyZm9ybWFuY2UYASABKAsyQC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25TdG9yYWdlUGVyZm9ybWFuY2VIAIgBAUIOCgxfcGVyZm9ybWFuY2UikQEKJ0RhdGFiYXNlQ29uZmlndXJhdGlvblN0b3JhZ2VQZXJmb3JtYW5jZRIhChRvcHRpbWl6ZXJfY3B1X2J1ZGdldBgBIAEoBUgAiAEBEhkKDGFzeW5jX3Njb3JlchgCIAEoCEgBiAEBQhcKFV9vcHRpbWl6ZXJfY3B1X2J1ZGdldEIPCg1fYXN5bmNfc2NvcmVyIvABChxEYXRhYmFzZUNvbmZpZ3VyYXRpb25TZXJ2aWNlEjoKB2FwaV9rZXkYASABKAsyJC5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlNlY3JldEtleVJlZkgAiAEBEkQKEXJlYWRfb25seV9hcGlfa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZIAYgBARIXCgplbmFibGVfdGxzGAQgASgISAKIAQFCCgoIX2FwaV9rZXlCFAoSX3JlYWRfb25seV9hcGlfa2V5Qg0KC19lbmFibGVfdGxzSgQIAxAEIpEBChhEYXRhYmFzZUNvbmZpZ3VyYXRpb25UbHMSOgoEY2VydBgBIAEoCzIkLnFkcmFudC5jbG91ZC5jb21tb24udjEuU2VjcmV0S2V5UmVmQga6SAPIAQESOQoDa2V5GAIgASgLMiQucWRyYW50LmNsb3VkLmNvbW1vbi52MS5TZWNyZXRLZXlSZWZCBrpIA8gBASIxCh5EYXRhYmFzZUNvbmZpZ3VyYXRpb25JbmZlcmVuY2USDwoHZW5hYmxlZBgBIAEoCCIjChNBZGRpdGlvbmFsUmVzb3VyY2VzEgwKBGRpc2sYAyABKA0i/wEKIURhdGFiYXNlQ29uZmlndXJhdGlvbkF1ZGl0TG9nZ2luZxIPCgdlbmFibGVkGAEgASgIEkAKCHJvdGF0aW9uGAIgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQXVkaXRMb2dSb3RhdGlvbkgAiAEBEiYKDW1heF9sb2dfZmlsZXMYAyABKA1CCrpIByoFGOgHKAFIAYgBARIkChd0cnVzdF9mb3J3YXJkZWRfaGVhZGVycxgEIAEoCEgCiAEBQgsKCV9yb3RhdGlvbkIQCg5fbWF4X2xvZ19maWxlc0IaChhfdHJ1c3RfZm9yd2FyZGVkX2hlYWRlcnMi8wkKClRvbGVyYXRpb24SGgoDa2V5GAEgASgJQgi6SAVyAxi9AkgAiAEBEk4KCG9wZXJhdG9yGAIgASgOMisucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbk9wZXJhdG9yQgq6SAeCAQQQASAASAGIAQESRgoFdmFsdWUYAyABKAlCMrpIL3ItMisoKFtBLVphLXowLTldWy1BLVphLXowLTlfLl0qKT9bQS1aYS16MC05XSk/SAKIAQESSgoGZWZmZWN0GAQgASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVG9sZXJhdGlvbkVmZmVjdEIKukgHggEEEAEgAEgDiAEBEigKEnRvbGVyYXRpb25fc2Vjb25kcxgFIAEoBEIHukgEMgIoAEgEiAEBOvkGukj1Bhp0Cht0b2xlcmF0aW9uLnZhbHVlX2Zvcl9leGlzdHMSLXZhbHVlIG11c3Qgbm90IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEV4aXN0cxomdGhpcy5vcGVyYXRvciAhPSAxIHx8ICFoYXModGhpcy52YWx1ZSkargEKGnRvbGVyYXRpb24udmFsdWVfZm9yX2VxdWFsElF2YWx1ZSBtdXN0IGJlIHNldCB3aGVuIG9wZXJhdG9yIGlzIEVxdWFsIChvciBpcyBub3Qgc2V0LCB3aGljaCBkZWZhdWx0cyB0byBFcXVhbCkaPShoYXModGhpcy5vcGVyYXRvcikgJiYgdGhpcy5vcGVyYXRvciAhPSAyKSB8fCBoYXModGhpcy52YWx1ZSkapwIKInRvbGVyYXRpb24ua2V5X2Zvcm1hdF93aGVuX3ByZXNlbnQSRGtleSBtdXN0IGJlIGEgdmFsaWQgS3ViZXJuZXRlcyBxdWFsaWZpZWQgbmFtZSB3aGVuIHNldCBhbmQgbm9uLWVtcHR5GroBIWhhcyh0aGlzLmtleSkgfHwgdGhpcy5rZXkgPT0gJycgfHwgdGhpcy5rZXkubWF0Y2hlcygnXihbQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPyhcXC5bQS1aYS16MC05XShbLUEtWmEtejAtOV0qW0EtWmEtejAtOV0pPykqXFwvKT8oW0EtWmEtejAtOV1bLUEtWmEtejAtOV8uXSopP1tBLVphLXowLTldJCcpGooBCiR0b2xlcmF0aW9uLmtleV9lbXB0eV9yZXF1aXJlc19leGlzdHMSKW9wZXJhdG9yIG11c3QgYmUgJ0V4aXN0cycgaWYga2V5IGlzIGVtcHR5GjcoaGFzKHRoaXMua2V5KSAmJiB0aGlzLmtleSAhPSAnJykgfHwgdGhpcy5vcGVyYXRvciA9PSAxGpQBCiV0b2xlcmF0aW9uLnNlY29uZHNfb25seV9mb3Jfbm9leGVjdXRlEjh0b2xlcmF0aW9uU2Vjb25kcyBpcyBvbmx5IHZhbGlkIHdoZW4gZWZmZWN0IGlzIE5vRXhlY3V0ZRoxIWhhcyh0aGlzLnRvbGVyYXRpb25fc2Vjb25kcykgfHwgdGhpcy5lZmZlY3QgPT0gM0IGCgRfa2V5QgsKCV9vcGVyYXRvckIICgZfdmFsdWVCCQoHX2VmZmVjdEIVChNfdG9sZXJhdGlvbl9zZWNvbmRzIoUDChtDbHVzdGVyU3RvcmFnZUNvbmZpZ3VyYXRpb24SQgoRc3RvcmFnZV90aWVyX3R5cGUYASABKA4yJy5xZHJhbnQuY2xvdWQuY29tbW9uLnYxLlN0b3JhZ2VUaWVyVHlwZRIsChZkYXRhYmFzZV9zdG9yYWdlX2NsYXNzGAIgASgJQge6SARyAhABSACIAQESLAoWc25hcHNob3Rfc3RvcmFnZV9jbGFzcxgDIAEoCUIHukgEcgIQAUgBiAEBEisKFXZvbHVtZV9zbmFwc2hvdF9jbGFzcxgEIAEoCUIHukgEcgIQAUgCiAEBEi0KF3ZvbHVtZV9hdHRyaWJ1dGVzX2NsYXNzGAUgASgJQge6SARyAhABSAOIAQFCGQoXX2RhdGFiYXNlX3N0b3JhZ2VfY2xhc3NCGQoXX3NuYXBzaG90X3N0b3JhZ2VfY2xhc3NCGAoWX3ZvbHVtZV9zbmFwc2hvdF9jbGFzc0IaChhfdm9sdW1lX2F0dHJpYnV0ZXNfY2xhc3MitQQKDENsdXN0ZXJTdGF0ZRIYCgd2ZXJzaW9uGAEgASgJQge6SARyAhABEhAKCG5vZGVzX3VwGAIgASgNEjAKDHJlc3RhcnRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPgoFcGhhc2UYBCABKA4yJS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyUGhhc2VCCLpIBYIBAhABEg4KBnJlYXNvbhgFIAEoCRJCCghlbmRwb2ludBgGIAEoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJFbmRwb2ludEIGukgDyAEBEk8KCXJlc291cmNlcxgHIAEoCzI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzU3VtbWFyeUIGukgDyAEBElMKEHNjYWxhYmlsaXR5X2luZm8YCCABKAsyLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU2NhbGFiaWxpdHlJbmZvQggYAbpIA8gBARI3CgVub2RlcxgJIAMoCzIoLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlSW5mbxIQCghqd3RfcmJhYxgKIAEoCBJCCgxjYXBhYmlsaXRpZXMYCyABKAsyLC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQ2FwYWJpbGl0aWVzIp8CCg9DbHVzdGVyTm9kZUluZm8SFQoEbmFtZRgBIAEoCUIHukgEcgIQARIuCgpzdGFydGVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIPCgd2ZXJzaW9uGAMgASgJEjoKCGVuZHBvaW50GAQgASgLMigucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckVuZHBvaW50EkIKBXN0YXRlGAogASgOMikucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3Rlck5vZGVTdGF0ZUIIukgFggECEAESHgoRYXZhaWxhYmlsaXR5X3pvbmUYCyABKAlIAIgBAUIUChJfYXZhaWxhYmlsaXR5X3pvbmUiYAoPQ2x1c3RlckVuZHBvaW50EhUKA3VybBgBIAEoCUIIukgFcgOIAQESGgoJcmVzdF9wb3J0GAIgASgFQge6SAQaAiAAEhoKCWdycGNfcG9ydBgDIAEoBUIHukgEGgIgACKEAwobQ2x1c3Rlck5vZGVSZXNvdXJjZXNTdW1tYXJ5EkMKBGRpc2sYASABKAsyLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVJlc291cmNlc0IGukgDyAEBEkIKA3JhbRgCIAEoCzItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJOb2RlUmVzb3VyY2VzQga6SAPIAQESQgoDY3B1GAMgASgLMi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3Rlck5vZGVSZXNvdXJjZXNCBrpIA8gBARI/CgNncHUYBCABKAsyLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVJlc291cmNlc0gAiAEBEkMKB2dwdV9yYW0YBSABKAsyLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyTm9kZVJlc291cmNlc0gBiAEBQgYKBF9ncHVCCgoIX2dwdV9yYW0ixAEKFENsdXN0ZXJOb2RlUmVzb3VyY2VzEhwKBGJhc2UYASABKAFCDrpICxIJKQAAAAAAAAAAEiUKDWNvbXBsaW1lbnRhcnkYAiABKAFCDrpICxIJKQAAAAAAAAAAEiIKCmFkZGl0aW9uYWwYAyABKAFCDrpICxIJKQAAAAAAAAAAEiAKCHJlc2VydmVkGAQgASgBQg66SAsSCSkAAAAAAAAAABIhCglhdmFpbGFibGUYBSABKAFCDrpICxIJKQAAAAAAAAAAIpABChZDbHVzdGVyU2NhbGFiaWxpdHlJbmZvEk0KBnN0YXR1cxgBIAEoDjIxLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJTY2FsYWJpbGl0eVN0YXR1c0IKukgHggEEEAEgABIcCgZyZWFzb24YAiABKAlCB7pIBHICEAFIAIgBAUIJCgdfcmVhc29uIqIBCh9DbHVzdGVyRGlza0V4cGFuc2lvblN1cHBvcnRJbmZvElYKBnN0YXR1cxgBIAEoDjI6LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJEaXNrRXhwYW5zaW9uU3VwcG9ydFN0YXR1c0IKukgHggEEEAEgABIcCgZyZWFzb24YAiABKAlCB7pIBHICEAFIAIgBAUIJCgdfcmVhc29uIpQBChhDbHVzdGVyQmFja3VwU3VwcG9ydEluZm8STwoGc3RhdHVzGAEgASgOMjMucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckJhY2t1cFN1cHBvcnRTdGF0dXNCCrpIB4IBBBABIAASHAoGcmVhc29uGAIgASgJQge6SARyAhABSACIAQFCCQoHX3JlYXNvbiL1AQoTQ2x1c3RlckNhcGFiaWxpdGllcxJQCg5kaXNrX2V4cGFuc2lvbhgBIAEoCzI4LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNsdXN0ZXJEaXNrRXhwYW5zaW9uU3VwcG9ydEluZm8SQQoGYmFja3VwGAIgASgLMjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ2x1c3RlckJhY2t1cFN1cHBvcnRJbmZvEkkKEHNjYWxhYmlsaXR5X2luZm8YAyABKAsyLy5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyU2NhbGFiaWxpdHlJbmZvIs8BCg1RZHJhbnRSZWxlYXNlEhgKB3ZlcnNpb24YASABKAlCB7pIBHICEAESDwoHZGVmYXVsdBgCIAEoCBIoChFyZWxlYXNlX25vdGVzX3VybBgDIAEoCUIIukgFcgOIAQFIAIgBARIdCgdyZW1hcmtzGAQgASgJQge6SARyAhABSAGIAQESEwoLZW5kX29mX2xpZmUYBSABKAgSEwoLdW5hdmFpbGFibGUYBiABKAhCFAoSX3JlbGVhc2Vfbm90ZXNfdXJsQgoKCF9yZW1hcmtzIo4BCh5DcmVhdGVDbHVzdGVyRnJvbUJhY2t1cFJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESGwoJYmFja3VwX2lkGAIgASgJQgi6SAVyA7ABARIxCgxjbHVzdGVyX25hbWUYAyABKAlCG7pIGHIWEAQYQDIQXlthLXpBLVowLTktX10rJCJcCh9DcmVhdGVDbHVzdGVyRnJvbUJhY2t1cFJlc3BvbnNlEjkKB2NsdXN0ZXIYASABKAsyIC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DbHVzdGVyQga6SAPIAQEqqwEKEkNsdXN0ZXJTZXJ2aWNlVHlwZRIkCiBDTFVTVEVSX1NFUlZJQ0VfVFlQRV9VTlNQRUNJRklFRBAAEiMKH0NMVVNURVJfU0VSVklDRV9UWVBFX0NMVVNURVJfSVAQARIiCh5DTFVTVEVSX1NFUlZJQ0VfVFlQRV9OT0RFX1BPUlQQAhImCiJDTFVTVEVSX1NFUlZJQ0VfVFlQRV9MT0FEX0JBTEFOQ0VSEAMqoAEKG0NsdXN0ZXJDb25maWd1cmF0aW9uR3B1VHlwZRIuCipDTFVTVEVSX0NPTkZJR1VSQVRJT05fR1BVX1RZUEVfVU5TUEVDSUZJRUQQABIpCiVDTFVTVEVSX0NPTkZJR1VSQVRJT05fR1BVX1RZUEVfTlZJRElBEAESJgoiQ0xVU1RFUl9DT05GSUdVUkFUSU9OX0dQVV9UWVBFX0FNRBACKvIBCiFDbHVzdGVyQ29uZmlndXJhdGlvblJlc3RhcnRQb2xpY3kSNAowQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFU1RBUlRfUE9MSUNZX1VOU1BFQ0lGSUVEEAASMAosQ0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFU1RBUlRfUE9MSUNZX1JPTExJTkcQARIxCi1DTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVTVEFSVF9QT0xJQ1lfUEFSQUxMRUwQAhIyCi5DTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVTVEFSVF9QT0xJQ1lfQVVUT01BVElDEAMqjgIKJUNsdXN0ZXJDb25maWd1cmF0aW9uUmViYWxhbmNlU3RyYXRlZ3kSOAo0Q0xVU1RFUl9DT05GSUdVUkFUSU9OX1JFQkFMQU5DRV9TVFJBVEVHWV9VTlNQRUNJRklFRBAAEjUKMUNMVVNURVJfQ09ORklHVVJBVElPTl9SRUJBTEFOQ0VfU1RSQVRFR1lfQllfQ09VTlQQARI0CjBDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVCQUxBTkNFX1NUUkFURUdZX0JZX1NJWkUQAhI+CjpDTFVTVEVSX0NPTkZJR1VSQVRJT05fUkVCQUxBTkNFX1NUUkFURUdZX0JZX0NPVU5UX0FORF9TSVpFEAMq1QIKHURhdGFiYXNlQ29uZmlndXJhdGlvbkxvZ0xldmVsEjAKLERBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX1VOU1BFQ0lGSUVEEAASKgomREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfVFJBQ0UQARIqCiZEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9ERUJVRxACEikKJURBVEFCQVNFX0NPTkZJR1VSQVRJT05fTE9HX0xFVkVMX0lORk8QAxIpCiVEQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9XQVJOEAQSKgomREFUQUJBU0VfQ09ORklHVVJBVElPTl9MT0dfTEVWRUxfRVJST1IQBRIoCiREQVRBQkFTRV9DT05GSUdVUkFUSU9OX0xPR19MRVZFTF9PRkYQBipzChBBdWRpdExvZ1JvdGF0aW9uEiIKHkFVRElUX0xPR19ST1RBVElPTl9VTlNQRUNJRklFRBAAEhwKGEFVRElUX0xPR19ST1RBVElPTl9EQUlMWRABEh0KGUFVRElUX0xPR19ST1RBVElPTl9IT1VSTFkQAip4ChJUb2xlcmF0aW9uT3BlcmF0b3ISIwofVE9MRVJBVElPTl9PUEVSQVRPUl9VTlNQRUNJRklFRBAAEh4KGlRPTEVSQVRJT05fT1BFUkFUT1JfRVhJU1RTEAESHQoZVE9MRVJBVElPTl9PUEVSQVRPUl9FUVVBTBACKqQBChBUb2xlcmF0aW9uRWZmZWN0EiEKHVRPTEVSQVRJT05fRUZGRUNUX1VOU1BFQ0lGSUVEEAASIQodVE9MRVJBVElPTl9FRkZFQ1RfTk9fU0NIRURVTEUQARIoCiRUT0xFUkFUSU9OX0VGRkVDVF9QUkVGRVJfTk9fU0NIRURVTEUQAhIgChxUT0xFUkFUSU9OX0VGRkVDVF9OT19FWEVDVVRFEAMq3wQKDENsdXN0ZXJQaGFzZRIdChlDTFVTVEVSX1BIQVNFX1VOU1BFQ0lGSUVEEAASGgoWQ0xVU1RFUl9QSEFTRV9DUkVBVElORxABEiIKHkNMVVNURVJfUEhBU0VfRkFJTEVEX1RPX0NSRUFURRACEhoKFkNMVVNURVJfUEhBU0VfVVBEQVRJTkcQAxIiCh5DTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19VUERBVEUQBBIZChVDTFVTVEVSX1BIQVNFX1NDQUxJTkcQBRIbChdDTFVTVEVSX1BIQVNFX1VQR1JBRElORxAGEhwKGENMVVNURVJfUEhBU0VfU1VTUEVORElORxAHEhsKF0NMVVNURVJfUEhBU0VfU1VTUEVOREVEEAgSIwofQ0xVU1RFUl9QSEFTRV9GQUlMRURfVE9fU1VTUEVORBAJEhoKFkNMVVNURVJfUEhBU0VfUkVTVU1JTkcQChIiCh5DTFVTVEVSX1BIQVNFX0ZBSUxFRF9UT19SRVNVTUUQCxIZChVDTFVTVEVSX1BIQVNFX0hFQUxUSFkQDBIbChdDTFVTVEVSX1BIQVNFX05PVF9SRUFEWRANEh8KG0NMVVNURVJfUEhBU0VfUkVDT1ZFUllfTU9ERRAOEiQKIENMVVNURVJfUEhBU0VfTUFOVUFMX01BSU5URU5BTkNFEA8SIAocQ0xVU1RFUl9QSEFTRV9GQUlMRURfVE9fU1lOQxAQEhsKF0NMVVNURVJfUEhBU0VfTk9UX0ZPVU5EEBESGgoWQ0xVU1RFUl9QSEFTRV9ERUxFVElORxASKt4BChBDbHVzdGVyTm9kZVN0YXRlEiIKHkNMVVNURVJfTk9ERV9TVEFURV9VTlNQRUNJRklFRBAAEh8KG0NMVVNURVJfTk9ERV9TVEFURV9TVEFSVElORxABEh4KGkNMVVNURVJfTk9ERV9TVEFURV9IRUFMVEhZEAISIAocQ0xVU1RFUl9OT0RFX1NUQVRFX1VOSEVBTFRIWRADEiAKHENMVVNURVJfTk9ERV9TVEFURV9TVVNQRU5ERUQQBBIhCh1DTFVTVEVSX05PREVfU1RBVEVfUkVDT1ZFUklORxAFKpwBChhDbHVzdGVyU2NhbGFiaWxpdHlTdGF0dXMSKgomQ0xVU1RFUl9TQ0FMQUJJTElUWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIrCidDTFVTVEVSX1NDQUxBQklMSVRZX1NUQVRVU19OT1RfU0NBTEFCTEUQARInCiNDTFVTVEVSX1NDQUxBQklMSVRZX1NUQVRVU19TQ0FMQUJMRRACKsgBCiFDbHVzdGVyRGlza0V4cGFuc2lvblN1cHBvcnRTdGF0dXMSNQoxQ0xVU1RFUl9ESVNLX0VYUEFOU0lPTl9TVVBQT1JUX1NUQVRVU19VTlNQRUNJRklFRBAAEjMKL0NMVVNURVJfRElTS19FWFBBTlNJT05fU1VQUE9SVF9TVEFUVVNfU1VQUE9SVEVEEAESNwozQ0xVU1RFUl9ESVNLX0VYUEFOU0lPTl9TVVBQT1JUX1NUQVRVU19OT1RfU1VQUE9SVEVEEAIqqQEKGkNsdXN0ZXJCYWNrdXBTdXBwb3J0U3RhdHVzEi0KKUNMVVNURVJfQkFDS1VQX1NVUFBPUlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKwonQ0xVU1RFUl9CQUNLVVBfU1VQUE9SVF9TVEFUVVNfU1VQUE9SVEVEEAESLworQ0xVU1RFUl9CQUNLVVBfU1VQUE9SVF9TVEFUVVNfTk9UX1NVUFBPUlRFRBACMsseCg5DbHVzdGVyU2VydmljZRK0AQoMTGlzdENsdXN0ZXJzEiwucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuTGlzdENsdXN0ZXJzUmVxdWVzdBotLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkxpc3RDbHVzdGVyc1Jlc3BvbnNlIkeKtRgNcmVhZDpjbHVzdGVyc4LT5JMCMBIuL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycxLXAQoKR2V0Q2x1c3RlchIqLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkdldENsdXN0ZXJSZXF1ZXN0GisucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuR2V0Q2x1c3RlclJlc3BvbnNlInCKtRgNcmVhZDpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWSC0+STAj0SOy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vY2x1c3RlcnMve2NsdXN0ZXJfaWR9EtkCCg1DcmVhdGVDbHVzdGVyEi0ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuQ3JlYXRlQ2x1c3RlclJlcXVlc3QaLi5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5DcmVhdGVDbHVzdGVyUmVzcG9uc2Ui6AGKtRgOd3JpdGU6Y2x1c3RlcnOStRgSY2x1c3Rlci5hY2NvdW50X2lkurUYHAoMY2x1c3Rlcl9uYW1lEgxjbHVzdGVyLm5hbWXK8xhbCAESB2NsdXN0ZXIiD3Jlc3AuY2x1c3Rlci5pZCo9L2FjY291bnRzL3tyZXEuY2x1c3Rlci5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVzcC5jbHVzdGVyLmlkfYLT5JMCOzoBKiI2L2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3tjbHVzdGVyLmFjY291bnRfaWR9L2NsdXN0ZXJzErQDChdDcmVhdGVDbHVzdGVyRnJvbUJhY2t1cBI3LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwUmVxdWVzdBo4LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkNyZWF0ZUNsdXN0ZXJGcm9tQmFja3VwUmVzcG9uc2UipQKKtRgPcmVzdG9yZTpiYWNrdXBzirUYDndyaXRlOmNsdXN0ZXJzqLUYAbq1GBYKCWJhY2t1cF9pZBIJYmFja3VwX2lkurUYHAoMY2x1c3Rlcl9uYW1lEgxjbHVzdGVyX25hbWXK8xh0CAESB2NsdXN0ZXIiD3Jlc3AuY2x1c3Rlci5pZCo1L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3Jlc3AuY2x1c3Rlci5pZH1SHwoOZnJvbV9iYWNrdXBfaWQSDXJlcS5iYWNrdXBfaWSC0+STAkQiQi9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vYmFja3Vwcy97YmFja3VwX2lkfS9jbHVzdGVycxLgAgoNVXBkYXRlQ2x1c3RlchItLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlVwZGF0ZUNsdXN0ZXJSZXF1ZXN0Gi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVXBkYXRlQ2x1c3RlclJlc3BvbnNlIu8BirUYDndyaXRlOmNsdXN0ZXJzkrUYEmNsdXN0ZXIuYWNjb3VudF9pZLq1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXIuaWTK8xhZCAISB2NsdXN0ZXIiDnJlcS5jbHVzdGVyLmlkKjwvYWNjb3VudHMve3JlcS5jbHVzdGVyLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlci5pZH2C0+STAkg6ASoaQy9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97Y2x1c3Rlci5hY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlci5pZH0SuAIKDURlbGV0ZUNsdXN0ZXISLS5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5EZWxldGVDbHVzdGVyUmVxdWVzdBouLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkRlbGV0ZUNsdXN0ZXJSZXNwb25zZSLHAYq1GA9kZWxldGU6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkyvMYUQgDEgdjbHVzdGVyIg5yZXEuY2x1c3Rlcl9pZCo0L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyX2lkfYLT5JMCPSo7L2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0SywIKDlJlc3RhcnRDbHVzdGVyEi4ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuUmVzdGFydENsdXN0ZXJSZXF1ZXN0Gi8ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuUmVzdGFydENsdXN0ZXJSZXNwb25zZSLXAYq1GA53cml0ZTpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWTK8xhaCAQSB2NsdXN0ZXIiDnJlcS5jbHVzdGVyX2lkKjQvYWNjb3VudHMve3JlcS5hY2NvdW50X2lkfS9jbHVzdGVycy97cmVxLmNsdXN0ZXJfaWR9MgdyZXN0YXJ0gtPkkwJFIkMvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3tjbHVzdGVyX2lkfS9yZXN0YXJ0EssCCg5TdXNwZW5kQ2x1c3RlchIuLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlN1c3BlbmRDbHVzdGVyUmVxdWVzdBovLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlN1c3BlbmRDbHVzdGVyUmVzcG9uc2Ui1wGKtRgOd3JpdGU6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkyvMYWggEEgdjbHVzdGVyIg5yZXEuY2x1c3Rlcl9pZCo0L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyX2lkfTIHc3VzcGVuZILT5JMCRSJDL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0vc3VzcGVuZBLVAgoQVW5zdXNwZW5kQ2x1c3RlchIwLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlVuc3VzcGVuZENsdXN0ZXJSZXF1ZXN0GjEucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuVW5zdXNwZW5kQ2x1c3RlclJlc3BvbnNlItsBirUYDndyaXRlOmNsdXN0ZXJzurUYGAoKY2x1c3Rlcl9pZBIKY2x1c3Rlcl9pZMrzGFwIBBIHY2x1c3RlciIOcmVxLmNsdXN0ZXJfaWQqNC9hY2NvdW50cy97cmVxLmFjY291bnRfaWR9L2NsdXN0ZXJzL3tyZXEuY2x1c3Rlcl9pZH0yCXVuc3VzcGVuZILT5JMCRyJFL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0vdW5zdXNwZW5kEukCChRFbmFibGVDbHVzdGVySnd0UmJhYxI0LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkVuYWJsZUNsdXN0ZXJKd3RSYmFjUmVxdWVzdBo1LnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkVuYWJsZUNsdXN0ZXJKd3RSYmFjUmVzcG9uc2Ui4wGKtRgOd3JpdGU6Y2x1c3RlcnO6tRgYCgpjbHVzdGVyX2lkEgpjbHVzdGVyX2lkyvMYYwgEEgdjbHVzdGVyIg5yZXEuY2x1c3Rlcl9pZCo0L2FjY291bnRzL3tyZXEuYWNjb3VudF9pZH0vY2x1c3RlcnMve3JlcS5jbHVzdGVyX2lkfTIQZW5hYmxlZC1qd3QtcmJhY4LT5JMCSCJGL2FwaS9jbHVzdGVyL3YxL2FjY291bnRzL3thY2NvdW50X2lkfS9jbHVzdGVycy97Y2x1c3Rlcl9pZH0vZW5hYmxlLWp3dBLGAQoSU3VnZ2VzdENsdXN0ZXJOYW1lEjIucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuU3VnZ2VzdENsdXN0ZXJOYW1lUmVxdWVzdBozLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLlN1Z2dlc3RDbHVzdGVyTmFtZVJlc3BvbnNlIkeKtRgAgtPkkwI9EjsvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L2NsdXN0ZXJzL3N1Z2dlc3QtbmFtZRLiAQoSTGlzdFFkcmFudFJlbGVhc2VzEjIucWRyYW50LmNsb3VkLmNsdXN0ZXIudjEuTGlzdFFkcmFudFJlbGVhc2VzUmVxdWVzdBozLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkxpc3RRZHJhbnRSZWxlYXNlc1Jlc3BvbnNlImOKtRgNcmVhZDpjbHVzdGVyc7q1GBgKCmNsdXN0ZXJfaWQSCmNsdXN0ZXJfaWSC0+STAjASLi9hcGkvY2x1c3Rlci92MS9hY2NvdW50cy97YWNjb3VudF9pZH0vcmVsZWFzZXMS4AEKEEdldFFkcmFudFJlbGVhc2USMC5xZHJhbnQuY2xvdWQuY2x1c3Rlci52MS5HZXRRZHJhbnRSZWxlYXNlUmVxdWVzdBoxLnFkcmFudC5jbG91ZC5jbHVzdGVyLnYxLkdldFFkcmFudFJlbGVhc2VSZXNwb25zZSJnirUYDXJlYWQ6Y2x1c3RlcnO6tRgSCgd2ZXJzaW9uEgd2ZXJzaW9ugtPkkwI6EjgvYXBpL2NsdXN0ZXIvdjEvYWNjb3VudHMve2FjY291bnRfaWR9L3JlbGVhc2VzL3t2ZXJzaW9ufRoGwrUYAggBQv4BChtjb20ucWRyYW50LmNsb3VkLmNsdXN0ZXIudjFCDENsdXN0ZXJQcm90b1ABWlJnaXRodWIuY29tL3FkcmFudC9xZHJhbnQtY2xvdWQtcHVibGljLWFwaS9nZW4vZ28vcWRyYW50L2Nsb3VkL2NsdXN0ZXIvdjE7Y2x1c3RlcnYxogIDUUNDqgIXUWRyYW50LkNsb3VkLkNsdXN0ZXIuVjHKAhdRZHJhbnRcQ2xvdWRcQ2x1c3RlclxWMeICI1FkcmFudFxDbG91ZFxDbHVzdGVyXFYxXEdQQk1ldGFkYXRh6gIaUWRyYW50OjpDbG91ZDo6Q2x1c3Rlcjo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_google_api_annotations, file_google_protobuf_timestamp, file_qdrant_cloud_common_v1_common, file_qdrant_cloud_event_v1_events]); /** * Describes the message qdrant.cloud.cluster.v1.ListClustersRequest. diff --git a/proto/qdrant/cloud/cluster/v1/cluster.proto b/proto/qdrant/cloud/cluster/v1/cluster.proto index 5dd074e1..519f26c1 100644 --- a/proto/qdrant/cloud/cluster/v1/cluster.proto +++ b/proto/qdrant/cloud/cluster/v1/cluster.proto @@ -1064,7 +1064,8 @@ message ClusterState { // If enabled, you can generate JWT tokens with fine-grained rules for access control. bool jwt_rbac = 10; // Specifies whether some operations are supported by cluster or not. - ClusterCapabilities capabilities = 11 [(buf.validate.field).required = true]; + // Optional during rollout; will become required once all producers populate it. + ClusterCapabilities capabilities = 11; } // ClusterNodeInfo represents a node in a cluster. @@ -1214,12 +1215,15 @@ message ClusterBackupSupportInfo { message ClusterCapabilities { // Whether the StorageClass used by the cluster supports disk expansion or not. // Disk scaling will be enabled or disabled based on this for hybrid cloud clusters. - ClusterDiskExpansionSupportInfo disk_expansion = 1 [(buf.validate.field).required = true]; + // Optional during rollout; will become required once all producers populate it. + ClusterDiskExpansionSupportInfo disk_expansion = 1; // Whether it is possible to take a backup for the cluster or not. // Backup tab will be shown or hidden based on this for hybrid cloud clusters. - ClusterBackupSupportInfo backup = 2 [(buf.validate.field).required = true]; + // Optional during rollout; will become required once all producers populate it. + ClusterBackupSupportInfo backup = 2; // Whether the cluster can be scaled up or down. - ClusterScalabilityInfo scalability_info = 3 [(buf.validate.field).required = true]; + // Optional during rollout; will become required once all producers populate it. + ClusterScalabilityInfo scalability_info = 3; } // buf:lint:ignore QDRANT_CLOUD_REQUIRED_ENTITY_FIELDS