diff --git a/internal/core/src/pb/milvus.pb.cc b/internal/core/src/pb/milvus.pb.cc index c65e4586a1a54052a08ccc535fb606cf86720e59..b31aa5e869804e0b9f54342d810d75a2673a9f0a 100644 --- a/internal/core/src/pb/milvus.pb.cc +++ b/internal/core/src/pb/milvus.pb.cc @@ -872,6 +872,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_milvus_2eproto::offsets[] PROT ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::DescribeCollectionResponse, status_), PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::DescribeCollectionResponse, schema_), + PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::DescribeCollectionResponse, collectionid_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::LoadCollectionRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -1159,40 +1160,40 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB { 32, -1, sizeof(::milvus::proto::milvus::StringResponse)}, { 39, -1, sizeof(::milvus::proto::milvus::DescribeCollectionRequest)}, { 47, -1, sizeof(::milvus::proto::milvus::DescribeCollectionResponse)}, - { 54, -1, sizeof(::milvus::proto::milvus::LoadCollectionRequest)}, - { 62, -1, sizeof(::milvus::proto::milvus::ReleaseCollectionRequest)}, - { 70, -1, sizeof(::milvus::proto::milvus::CollectionStatsRequest)}, - { 78, -1, sizeof(::milvus::proto::milvus::CollectionStatsResponse)}, - { 85, -1, sizeof(::milvus::proto::milvus::ShowCollectionRequest)}, - { 92, -1, sizeof(::milvus::proto::milvus::ShowCollectionResponse)}, - { 99, -1, sizeof(::milvus::proto::milvus::CreatePartitionRequest)}, - { 108, -1, sizeof(::milvus::proto::milvus::DropPartitionRequest)}, - { 117, -1, sizeof(::milvus::proto::milvus::HasPartitionRequest)}, - { 126, -1, sizeof(::milvus::proto::milvus::LoadPartitonRequest)}, - { 135, -1, sizeof(::milvus::proto::milvus::ReleasePartitionRequest)}, - { 144, -1, sizeof(::milvus::proto::milvus::PartitionStatsRequest)}, - { 153, -1, sizeof(::milvus::proto::milvus::PartitionStatsResponse)}, - { 160, -1, sizeof(::milvus::proto::milvus::ShowPartitionRequest)}, - { 169, -1, sizeof(::milvus::proto::milvus::ShowPartitionResponse)}, - { 177, -1, sizeof(::milvus::proto::milvus::DescribeSegmentRequest)}, - { 185, -1, sizeof(::milvus::proto::milvus::DescribeSegmentResponse)}, - { 192, -1, sizeof(::milvus::proto::milvus::ShowSegmentRequest)}, - { 200, -1, sizeof(::milvus::proto::milvus::ShowSegmentResponse)}, - { 207, -1, sizeof(::milvus::proto::milvus::CreateIndexRequest)}, - { 217, -1, sizeof(::milvus::proto::milvus::DescribeIndexRequest)}, - { 227, -1, sizeof(::milvus::proto::milvus::IndexDescription)}, - { 234, -1, sizeof(::milvus::proto::milvus::DescribeIndexResponse)}, - { 241, -1, sizeof(::milvus::proto::milvus::IndexStateRequest)}, - { 251, -1, sizeof(::milvus::proto::milvus::IndexStateResponse)}, - { 258, -1, sizeof(::milvus::proto::milvus::InsertRequest)}, - { 269, -1, sizeof(::milvus::proto::milvus::InsertResponse)}, - { 277, -1, sizeof(::milvus::proto::milvus::PlaceholderValue)}, - { 285, -1, sizeof(::milvus::proto::milvus::PlaceholderGroup)}, - { 291, -1, sizeof(::milvus::proto::milvus::SearchRequest)}, - { 302, -1, sizeof(::milvus::proto::milvus::Hits)}, - { 310, -1, sizeof(::milvus::proto::milvus::SearchResults)}, - { 317, -1, sizeof(::milvus::proto::milvus::FlushRequest)}, - { 325, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)}, + { 55, -1, sizeof(::milvus::proto::milvus::LoadCollectionRequest)}, + { 63, -1, sizeof(::milvus::proto::milvus::ReleaseCollectionRequest)}, + { 71, -1, sizeof(::milvus::proto::milvus::CollectionStatsRequest)}, + { 79, -1, sizeof(::milvus::proto::milvus::CollectionStatsResponse)}, + { 86, -1, sizeof(::milvus::proto::milvus::ShowCollectionRequest)}, + { 93, -1, sizeof(::milvus::proto::milvus::ShowCollectionResponse)}, + { 100, -1, sizeof(::milvus::proto::milvus::CreatePartitionRequest)}, + { 109, -1, sizeof(::milvus::proto::milvus::DropPartitionRequest)}, + { 118, -1, sizeof(::milvus::proto::milvus::HasPartitionRequest)}, + { 127, -1, sizeof(::milvus::proto::milvus::LoadPartitonRequest)}, + { 136, -1, sizeof(::milvus::proto::milvus::ReleasePartitionRequest)}, + { 145, -1, sizeof(::milvus::proto::milvus::PartitionStatsRequest)}, + { 154, -1, sizeof(::milvus::proto::milvus::PartitionStatsResponse)}, + { 161, -1, sizeof(::milvus::proto::milvus::ShowPartitionRequest)}, + { 170, -1, sizeof(::milvus::proto::milvus::ShowPartitionResponse)}, + { 178, -1, sizeof(::milvus::proto::milvus::DescribeSegmentRequest)}, + { 186, -1, sizeof(::milvus::proto::milvus::DescribeSegmentResponse)}, + { 193, -1, sizeof(::milvus::proto::milvus::ShowSegmentRequest)}, + { 201, -1, sizeof(::milvus::proto::milvus::ShowSegmentResponse)}, + { 208, -1, sizeof(::milvus::proto::milvus::CreateIndexRequest)}, + { 218, -1, sizeof(::milvus::proto::milvus::DescribeIndexRequest)}, + { 228, -1, sizeof(::milvus::proto::milvus::IndexDescription)}, + { 235, -1, sizeof(::milvus::proto::milvus::DescribeIndexResponse)}, + { 242, -1, sizeof(::milvus::proto::milvus::IndexStateRequest)}, + { 252, -1, sizeof(::milvus::proto::milvus::IndexStateResponse)}, + { 259, -1, sizeof(::milvus::proto::milvus::InsertRequest)}, + { 270, -1, sizeof(::milvus::proto::milvus::InsertResponse)}, + { 278, -1, sizeof(::milvus::proto::milvus::PlaceholderValue)}, + { 286, -1, sizeof(::milvus::proto::milvus::PlaceholderGroup)}, + { 292, -1, sizeof(::milvus::proto::milvus::SearchRequest)}, + { 303, -1, sizeof(::milvus::proto::milvus::Hits)}, + { 311, -1, sizeof(::milvus::proto::milvus::SearchResults)}, + { 318, -1, sizeof(::milvus::proto::milvus::FlushRequest)}, + { 326, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { @@ -1257,171 +1258,172 @@ const char descriptor_table_protodef_milvus_2eproto[] PROTOBUF_SECTION_VARIABLE( "e\030\002 \001(\t\"q\n\031DescribeCollectionRequest\022*\n\004" "base\030\001 \001(\0132\034.milvus.proto.common.MsgBase" "\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030\003 \001" - "(\t\"\200\001\n\032DescribeCollectionResponse\022+\n\006sta" + "(\t\"\226\001\n\032DescribeCollectionResponse\022+\n\006sta" "tus\030\001 \001(\0132\033.milvus.proto.common.Status\0225" "\n\006schema\030\002 \001(\0132%.milvus.proto.schema.Col" - "lectionSchema\"m\n\025LoadCollectionRequest\022*" - "\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgBa" - "se\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030\003" - " \001(\t\"p\n\030ReleaseCollectionRequest\022*\n\004base" - "\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022\017\n\007" - "db_name\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\"n" - "\n\026CollectionStatsRequest\022*\n\004base\030\001 \001(\0132\034" - ".milvus.proto.common.MsgBase\022\017\n\007db_name\030" - "\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\"x\n\027Collec" - "tionStatsResponse\022+\n\006status\030\001 \001(\0132\033.milv" - "us.proto.common.Status\0220\n\005stats\030\002 \003(\0132!." - "milvus.proto.common.KeyValuePair\"T\n\025Show" - "CollectionRequest\022*\n\004base\030\001 \001(\0132\034.milvus" - ".proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\"_" - "\n\026ShowCollectionResponse\022+\n\006status\030\001 \001(\013" - "2\033.milvus.proto.common.Status\022\030\n\020collect" - "ion_names\030\002 \003(\t\"\206\001\n\026CreatePartitionReque" - "st\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common.M" - "sgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_na" - "me\030\003 \001(\t\022\026\n\016partition_name\030\004 \001(\t\"\204\001\n\024Dro" - "pPartitionRequest\022*\n\004base\030\001 \001(\0132\034.milvus" - ".proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027" - "\n\017collection_name\030\003 \001(\t\022\026\n\016partition_nam" - "e\030\004 \001(\t\"\203\001\n\023HasPartitionRequest\022*\n\004base\030" - "\001 \001(\0132\034.milvus.proto.common.MsgBase\022\017\n\007d" - "b_name\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\026\n" - "\016partition_name\030\004 \001(\t\"\204\001\n\023LoadPartitonRe" - "quest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.commo" - "n.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection" - "_name\030\003 \001(\t\022\027\n\017partition_names\030\004 \003(\t\"\210\001\n" - "\027ReleasePartitionRequest\022*\n\004base\030\001 \001(\0132\034" + "lectionSchema\022\024\n\014collectionID\030\003 \001(\003\"m\n\025L" + "oadCollectionRequest\022*\n\004base\030\001 \001(\0132\034.mil" + "vus.proto.common.MsgBase\022\017\n\007db_name\030\002 \001(" + "\t\022\027\n\017collection_name\030\003 \001(\t\"p\n\030ReleaseCol" + "lectionRequest\022*\n\004base\030\001 \001(\0132\034.milvus.pr" + "oto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017c" + "ollection_name\030\003 \001(\t\"n\n\026CollectionStatsR" + "equest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.comm" + "on.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collectio" + "n_name\030\003 \001(\t\"x\n\027CollectionStatsResponse\022" + "+\n\006status\030\001 \001(\0132\033.milvus.proto.common.St" + "atus\0220\n\005stats\030\002 \003(\0132!.milvus.proto.commo" + "n.KeyValuePair\"T\n\025ShowCollectionRequest\022" + "*\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgB" + "ase\022\017\n\007db_name\030\002 \001(\t\"_\n\026ShowCollectionRe" + "sponse\022+\n\006status\030\001 \001(\0132\033.milvus.proto.co" + "mmon.Status\022\030\n\020collection_names\030\002 \003(\t\"\206\001" + "\n\026CreatePartitionRequest\022*\n\004base\030\001 \001(\0132\034" ".milvus.proto.common.MsgBase\022\017\n\007db_name\030" - "\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\027\n\017partit" - "ion_names\030\004 \003(\t\"\205\001\n\025PartitionStatsReques" - "t\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common.Ms" - "gBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_nam" - "e\030\003 \001(\t\022\026\n\016partition_name\030\004 \001(\t\"w\n\026Parti" - "tionStatsResponse\022+\n\006status\030\001 \001(\0132\033.milv" - "us.proto.common.Status\0220\n\005stats\030\002 \003(\0132!." - "milvus.proto.common.KeyValuePair\"\202\001\n\024Sho" - "wPartitionRequest\022*\n\004base\030\001 \001(\0132\034.milvus" - ".proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027" - "\n\017collection_name\030\003 \001(\t\022\024\n\014collectionID\030" - "\004 \001(\003\"s\n\025ShowPartitionResponse\022+\n\006status" - "\030\001 \001(\0132\033.milvus.proto.common.Status\022\027\n\017p" - "artition_names\030\002 \003(\t\022\024\n\014partitionIDs\030\003 \003" - "(\003\"m\n\026DescribeSegmentRequest\022*\n\004base\030\001 \001" - "(\0132\034.milvus.proto.common.MsgBase\022\024\n\014coll" - "ectionID\030\002 \001(\003\022\021\n\tsegmentID\030\003 \001(\003\"W\n\027Des" - "cribeSegmentResponse\022+\n\006status\030\001 \001(\0132\033.m" - "ilvus.proto.common.Status\022\017\n\007indexID\030\002 \001" - "(\003\"k\n\022ShowSegmentRequest\022*\n\004base\030\001 \001(\0132\034" - ".milvus.proto.common.MsgBase\022\024\n\014collecti" - "onID\030\002 \001(\003\022\023\n\013partitionID\030\003 \001(\003\"V\n\023ShowS" - "egmentResponse\022+\n\006status\030\001 \001(\0132\033.milvus." - "proto.common.Status\022\022\n\nsegmentIDs\030\002 \003(\003\"" - "\267\001\n\022CreateIndexRequest\022*\n\004base\030\001 \001(\0132\034.m" - "ilvus.proto.common.MsgBase\022\017\n\007db_name\030\002 " - "\001(\t\022\027\n\017collection_name\030\003 \001(\t\022\022\n\nfield_na" - "me\030\004 \001(\t\0227\n\014extra_params\030\005 \003(\0132!.milvus." - "proto.common.KeyValuePair\"\224\001\n\024DescribeIn" - "dexRequest\022*\n\004base\030\001 \001(\0132\034.milvus.proto." - "common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017colle" - "ction_name\030\003 \001(\t\022\022\n\nfield_name\030\004 \001(\t\022\022\n\n" - "index_name\030\005 \001(\t\"Y\n\020IndexDescription\022\022\n\n" - "index_name\030\001 \001(\t\0221\n\006params\030\002 \003(\0132!.milvu" - "s.proto.common.KeyValuePair\"\207\001\n\025Describe" - "IndexResponse\022+\n\006status\030\001 \001(\0132\033.milvus.p" - "roto.common.Status\022A\n\022index_descriptions" - "\030\002 \003(\0132%.milvus.proto.milvus.IndexDescri" - "ption\"\221\001\n\021IndexStateRequest\022*\n\004base\030\001 \001(" + "\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\026\n\016partit" + "ion_name\030\004 \001(\t\"\204\001\n\024DropPartitionRequest\022" + "*\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgB" + "ase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030" + "\003 \001(\t\022\026\n\016partition_name\030\004 \001(\t\"\203\001\n\023HasPar" + "titionRequest\022*\n\004base\030\001 \001(\0132\034.milvus.pro" + "to.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017co" + "llection_name\030\003 \001(\t\022\026\n\016partition_name\030\004 " + "\001(\t\"\204\001\n\023LoadPartitonRequest\022*\n\004base\030\001 \001(" "\0132\034.milvus.proto.common.MsgBase\022\017\n\007db_na" - "me\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\022\n\nfie" - "ld_name\030\004 \001(\t\022\022\n\nindex_name\030\005 \001(\t\"q\n\022Ind" - "exStateResponse\022+\n\006status\030\001 \001(\0132\033.milvus" - ".proto.common.Status\022.\n\005state\030\002 \001(\0162\037.mi" - "lvus.proto.common.IndexState\"\275\001\n\rInsertR" + "me\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\027\n\017par" + "tition_names\030\004 \003(\t\"\210\001\n\027ReleasePartitionR" "equest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.comm" "on.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collectio" - "n_name\030\003 \001(\t\022\026\n\016partition_name\030\004 \001(\t\022+\n\010" - "row_data\030\005 \003(\0132\031.milvus.proto.common.Blo" - "b\022\021\n\thash_keys\030\006 \003(\r\"e\n\016InsertResponse\022+" - "\n\006status\030\001 \001(\0132\033.milvus.proto.common.Sta" - "tus\022\023\n\013rowID_begin\030\002 \001(\003\022\021\n\trowID_end\030\003 " - "\001(\003\"c\n\020PlaceholderValue\022\013\n\003tag\030\001 \001(\t\0222\n\004" - "type\030\002 \001(\0162$.milvus.proto.milvus.Placeho" - "lderType\022\016\n\006values\030\003 \003(\014\"O\n\020PlaceholderG" - "roup\022;\n\014placeholders\030\001 \003(\0132%.milvus.prot" - "o.milvus.PlaceholderValue\"\246\001\n\rSearchRequ" + "n_name\030\003 \001(\t\022\027\n\017partition_names\030\004 \003(\t\"\205\001" + "\n\025PartitionStatsRequest\022*\n\004base\030\001 \001(\0132\034." + "milvus.proto.common.MsgBase\022\017\n\007db_name\030\002" + " \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\026\n\016partiti" + "on_name\030\004 \001(\t\"w\n\026PartitionStatsResponse\022" + "+\n\006status\030\001 \001(\0132\033.milvus.proto.common.St" + "atus\0220\n\005stats\030\002 \003(\0132!.milvus.proto.commo" + "n.KeyValuePair\"\202\001\n\024ShowPartitionRequest\022" + "*\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgB" + "ase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030" + "\003 \001(\t\022\024\n\014collectionID\030\004 \001(\003\"s\n\025ShowParti" + "tionResponse\022+\n\006status\030\001 \001(\0132\033.milvus.pr" + "oto.common.Status\022\027\n\017partition_names\030\002 \003" + "(\t\022\024\n\014partitionIDs\030\003 \003(\003\"m\n\026DescribeSegm" + "entRequest\022*\n\004base\030\001 \001(\0132\034.milvus.proto." + "common.MsgBase\022\024\n\014collectionID\030\002 \001(\003\022\021\n\t" + "segmentID\030\003 \001(\003\"W\n\027DescribeSegmentRespon" + "se\022+\n\006status\030\001 \001(\0132\033.milvus.proto.common" + ".Status\022\017\n\007indexID\030\002 \001(\003\"k\n\022ShowSegmentR" + "equest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.comm" + "on.MsgBase\022\024\n\014collectionID\030\002 \001(\003\022\023\n\013part" + "itionID\030\003 \001(\003\"V\n\023ShowSegmentResponse\022+\n\006" + "status\030\001 \001(\0132\033.milvus.proto.common.Statu" + "s\022\022\n\nsegmentIDs\030\002 \003(\003\"\267\001\n\022CreateIndexReq" + "uest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common" + ".MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_" + "name\030\003 \001(\t\022\022\n\nfield_name\030\004 \001(\t\0227\n\014extra_" + "params\030\005 \003(\0132!.milvus.proto.common.KeyVa" + "luePair\"\224\001\n\024DescribeIndexRequest\022*\n\004base" + "\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022\017\n\007" + "db_name\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\022" + "\n\nfield_name\030\004 \001(\t\022\022\n\nindex_name\030\005 \001(\t\"Y" + "\n\020IndexDescription\022\022\n\nindex_name\030\001 \001(\t\0221" + "\n\006params\030\002 \003(\0132!.milvus.proto.common.Key" + "ValuePair\"\207\001\n\025DescribeIndexResponse\022+\n\006s" + "tatus\030\001 \001(\0132\033.milvus.proto.common.Status" + "\022A\n\022index_descriptions\030\002 \003(\0132%.milvus.pr" + "oto.milvus.IndexDescription\"\221\001\n\021IndexSta" + "teRequest\022*\n\004base\030\001 \001(\0132\034.milvus.proto.c" + "ommon.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collec" + "tion_name\030\003 \001(\t\022\022\n\nfield_name\030\004 \001(\t\022\022\n\ni" + "ndex_name\030\005 \001(\t\"q\n\022IndexStateResponse\022+\n" + "\006status\030\001 \001(\0132\033.milvus.proto.common.Stat" + "us\022.\n\005state\030\002 \001(\0162\037.milvus.proto.common." + "IndexState\"\275\001\n\rInsertRequest\022*\n\004base\030\001 \001" + "(\0132\034.milvus.proto.common.MsgBase\022\017\n\007db_n" + "ame\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\026\n\016pa" + "rtition_name\030\004 \001(\t\022+\n\010row_data\030\005 \003(\0132\031.m" + "ilvus.proto.common.Blob\022\021\n\thash_keys\030\006 \003" + "(\r\"e\n\016InsertResponse\022+\n\006status\030\001 \001(\0132\033.m" + "ilvus.proto.common.Status\022\023\n\013rowID_begin" + "\030\002 \001(\003\022\021\n\trowID_end\030\003 \001(\003\"c\n\020Placeholder" + "Value\022\013\n\003tag\030\001 \001(\t\0222\n\004type\030\002 \001(\0162$.milvu" + "s.proto.milvus.PlaceholderType\022\016\n\006values" + "\030\003 \003(\014\"O\n\020PlaceholderGroup\022;\n\014placeholde" + "rs\030\001 \003(\0132%.milvus.proto.milvus.Placehold" + "erValue\"\246\001\n\rSearchRequest\022*\n\004base\030\001 \001(\0132" + "\034.milvus.proto.common.MsgBase\022\017\n\007db_name" + "\030\002 \001(\t\022\027\n\017collection_name\030\003 \001(\t\022\027\n\017parti" + "tion_names\030\004 \003(\t\022\013\n\003dsl\030\005 \001(\t\022\031\n\021placeho" + "lder_group\030\006 \001(\014\"5\n\004Hits\022\013\n\003IDs\030\001 \003(\003\022\020\n" + "\010row_data\030\002 \003(\014\022\016\n\006scores\030\003 \003(\002\"J\n\rSearc" + "hResults\022+\n\006status\030\001 \001(\0132\033.milvus.proto." + "common.Status\022\014\n\004hits\030\002 \003(\014\"d\n\014FlushRequ" "est\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common." "MsgBase\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_n" - "ame\030\003 \001(\t\022\027\n\017partition_names\030\004 \003(\t\022\013\n\003ds" - "l\030\005 \001(\t\022\031\n\021placeholder_group\030\006 \001(\014\"5\n\004Hi" - "ts\022\013\n\003IDs\030\001 \003(\003\022\020\n\010row_data\030\002 \003(\014\022\016\n\006sco" - "res\030\003 \003(\002\"J\n\rSearchResults\022+\n\006status\030\001 \001" - "(\0132\033.milvus.proto.common.Status\022\014\n\004hits\030" - "\002 \003(\014\"d\n\014FlushRequest\022*\n\004base\030\001 \001(\0132\034.mi" - "lvus.proto.common.MsgBase\022\017\n\007db_name\030\002 \001" - "(\t\022\027\n\017collection_name\030\003 \001(\t\"r\n\024RegisterL" - "inkResponse\022-\n\007address\030\001 \001(\0132\034.milvus.pr" - "oto.common.Address\022+\n\006status\030\002 \001(\0132\033.mil" - "vus.proto.common.Status*@\n\017PlaceholderTy" - "pe\022\010\n\004NONE\020\000\022\021\n\rVECTOR_BINARY\020d\022\020\n\014VECTO" - "R_FLOAT\020e2\357\020\n\rMilvusService\022_\n\020CreateCol" - "lection\022,.milvus.proto.milvus.CreateColl" - "ectionRequest\032\033.milvus.proto.common.Stat" - "us\"\000\022[\n\016DropCollection\022*.milvus.proto.mi" - "lvus.DropCollectionRequest\032\033.milvus.prot" - "o.common.Status\"\000\022_\n\rHasCollection\022).mil" - "vus.proto.milvus.HasCollectionRequest\032!." - "milvus.proto.milvus.BoolResponse\"\000\022[\n\016Lo" - "adCollection\022*.milvus.proto.milvus.LoadC" - "ollectionRequest\032\033.milvus.proto.common.S" - "tatus\"\000\022a\n\021ReleaseCollection\022-.milvus.pr" - "oto.milvus.ReleaseCollectionRequest\032\033.mi" - "lvus.proto.common.Status\"\000\022w\n\022DescribeCo" - "llection\022..milvus.proto.milvus.DescribeC" - "ollectionRequest\032/.milvus.proto.milvus.D" - "escribeCollectionResponse\"\000\022v\n\027GetCollec" - "tionStatistics\022+.milvus.proto.milvus.Col" - "lectionStatsRequest\032,.milvus.proto.milvu" - "s.CollectionStatsResponse\"\000\022l\n\017ShowColle" - "ctions\022*.milvus.proto.milvus.ShowCollect" - "ionRequest\032+.milvus.proto.milvus.ShowCol" - "lectionResponse\"\000\022]\n\017CreatePartition\022+.m" - "ilvus.proto.milvus.CreatePartitionReques" - "t\032\033.milvus.proto.common.Status\"\000\022Y\n\rDrop" - "Partition\022).milvus.proto.milvus.DropPart" - "itionRequest\032\033.milvus.proto.common.Statu" - "s\"\000\022]\n\014HasPartition\022(.milvus.proto.milvu" - "s.HasPartitionRequest\032!.milvus.proto.mil" - "vus.BoolResponse\"\000\022Y\n\016LoadPartitions\022(.m" - "ilvus.proto.milvus.LoadPartitonRequest\032\033" - ".milvus.proto.common.Status\"\000\022`\n\021Release" - "Partitions\022,.milvus.proto.milvus.Release" - "PartitionRequest\032\033.milvus.proto.common.S" - "tatus\"\000\022s\n\026GetPartitionStatistics\022*.milv" - "us.proto.milvus.PartitionStatsRequest\032+." - "milvus.proto.milvus.PartitionStatsRespon" - "se\"\000\022i\n\016ShowPartitions\022).milvus.proto.mi" - "lvus.ShowPartitionRequest\032*.milvus.proto" - ".milvus.ShowPartitionResponse\"\000\022U\n\013Creat" - "eIndex\022\'.milvus.proto.milvus.CreateIndex" - "Request\032\033.milvus.proto.common.Status\"\000\022h" - "\n\rDescribeIndex\022).milvus.proto.milvus.De" - "scribeIndexRequest\032*.milvus.proto.milvus" - ".DescribeIndexResponse\"\000\022b\n\rGetIndexStat" - "e\022&.milvus.proto.milvus.IndexStateReques" - "t\032\'.milvus.proto.milvus.IndexStateRespon" - "se\"\000\022S\n\006Insert\022\".milvus.proto.milvus.Ins" - "ertRequest\032#.milvus.proto.milvus.InsertR" - "esponse\"\000\022R\n\006Search\022\".milvus.proto.milvu" - "s.SearchRequest\032\".milvus.proto.milvus.Se" - "archResults\"\000\022I\n\005Flush\022!.milvus.proto.mi" - "lvus.FlushRequest\032\033.milvus.proto.common." - "Status\"\000\022Q\n\014GetDdChannel\022\032.milvus.proto." - "common.Empty\032#.milvus.proto.milvus.Strin" - "gResponse\"\0002g\n\014ProxyService\022W\n\014RegisterL" - "ink\022\032.milvus.proto.common.Empty\032).milvus" - ".proto.milvus.RegisterLinkResponse\"\000BBZ@" - "github.com/zilliztech/milvus-distributed" - "/internal/proto/milvuspbb\006proto3" + "ame\030\003 \001(\t\"r\n\024RegisterLinkResponse\022-\n\007add" + "ress\030\001 \001(\0132\034.milvus.proto.common.Address" + "\022+\n\006status\030\002 \001(\0132\033.milvus.proto.common.S" + "tatus*@\n\017PlaceholderType\022\010\n\004NONE\020\000\022\021\n\rVE" + "CTOR_BINARY\020d\022\020\n\014VECTOR_FLOAT\020e2\357\020\n\rMilv" + "usService\022_\n\020CreateCollection\022,.milvus.p" + "roto.milvus.CreateCollectionRequest\032\033.mi" + "lvus.proto.common.Status\"\000\022[\n\016DropCollec" + "tion\022*.milvus.proto.milvus.DropCollectio" + "nRequest\032\033.milvus.proto.common.Status\"\000\022" + "_\n\rHasCollection\022).milvus.proto.milvus.H" + "asCollectionRequest\032!.milvus.proto.milvu" + "s.BoolResponse\"\000\022[\n\016LoadCollection\022*.mil" + "vus.proto.milvus.LoadCollectionRequest\032\033" + ".milvus.proto.common.Status\"\000\022a\n\021Release" + "Collection\022-.milvus.proto.milvus.Release" + "CollectionRequest\032\033.milvus.proto.common." + "Status\"\000\022w\n\022DescribeCollection\022..milvus." + "proto.milvus.DescribeCollectionRequest\032/" + ".milvus.proto.milvus.DescribeCollectionR" + "esponse\"\000\022v\n\027GetCollectionStatistics\022+.m" + "ilvus.proto.milvus.CollectionStatsReques" + "t\032,.milvus.proto.milvus.CollectionStatsR" + "esponse\"\000\022l\n\017ShowCollections\022*.milvus.pr" + "oto.milvus.ShowCollectionRequest\032+.milvu" + "s.proto.milvus.ShowCollectionResponse\"\000\022" + "]\n\017CreatePartition\022+.milvus.proto.milvus" + ".CreatePartitionRequest\032\033.milvus.proto.c" + "ommon.Status\"\000\022Y\n\rDropPartition\022).milvus" + ".proto.milvus.DropPartitionRequest\032\033.mil" + "vus.proto.common.Status\"\000\022]\n\014HasPartitio" + "n\022(.milvus.proto.milvus.HasPartitionRequ" + "est\032!.milvus.proto.milvus.BoolResponse\"\000" + "\022Y\n\016LoadPartitions\022(.milvus.proto.milvus" + ".LoadPartitonRequest\032\033.milvus.proto.comm" + "on.Status\"\000\022`\n\021ReleasePartitions\022,.milvu" + "s.proto.milvus.ReleasePartitionRequest\032\033" + ".milvus.proto.common.Status\"\000\022s\n\026GetPart" + "itionStatistics\022*.milvus.proto.milvus.Pa" + "rtitionStatsRequest\032+.milvus.proto.milvu" + "s.PartitionStatsResponse\"\000\022i\n\016ShowPartit" + "ions\022).milvus.proto.milvus.ShowPartition" + "Request\032*.milvus.proto.milvus.ShowPartit" + "ionResponse\"\000\022U\n\013CreateIndex\022\'.milvus.pr" + "oto.milvus.CreateIndexRequest\032\033.milvus.p" + "roto.common.Status\"\000\022h\n\rDescribeIndex\022)." + "milvus.proto.milvus.DescribeIndexRequest" + "\032*.milvus.proto.milvus.DescribeIndexResp" + "onse\"\000\022b\n\rGetIndexState\022&.milvus.proto.m" + "ilvus.IndexStateRequest\032\'.milvus.proto.m" + "ilvus.IndexStateResponse\"\000\022S\n\006Insert\022\".m" + "ilvus.proto.milvus.InsertRequest\032#.milvu" + "s.proto.milvus.InsertResponse\"\000\022R\n\006Searc" + "h\022\".milvus.proto.milvus.SearchRequest\032\"." + "milvus.proto.milvus.SearchResults\"\000\022I\n\005F" + "lush\022!.milvus.proto.milvus.FlushRequest\032" + "\033.milvus.proto.common.Status\"\000\022Q\n\014GetDdC" + "hannel\022\032.milvus.proto.common.Empty\032#.mil" + "vus.proto.milvus.StringResponse\"\0002g\n\014Pro" + "xyService\022W\n\014RegisterLink\022\032.milvus.proto" + ".common.Empty\032).milvus.proto.milvus.Regi" + "sterLinkResponse\"\000BBZ@github.com/zillizt" + "ech/milvus-distributed/internal/proto/mi" + "lvuspbb\006proto3" ; static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_milvus_2eproto_deps[2] = { &::descriptor_table_common_2eproto, @@ -1473,7 +1475,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mil static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_milvus_2eproto_once; static bool descriptor_table_milvus_2eproto_initialized = false; const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_milvus_2eproto = { - &descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 7272, + &descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 7294, &descriptor_table_milvus_2eproto_once, descriptor_table_milvus_2eproto_sccs, descriptor_table_milvus_2eproto_deps, 41, 2, schemas, file_default_instances, TableStruct_milvus_2eproto::offsets, file_level_metadata_milvus_2eproto, 41, file_level_enum_descriptors_milvus_2eproto, file_level_service_descriptors_milvus_2eproto, @@ -3846,14 +3848,15 @@ DescribeCollectionResponse::DescribeCollectionResponse(const DescribeCollectionR } else { schema_ = nullptr; } + collectionid_ = from.collectionid_; // @@protoc_insertion_point(copy_constructor:milvus.proto.milvus.DescribeCollectionResponse) } void DescribeCollectionResponse::SharedCtor() { ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_DescribeCollectionResponse_milvus_2eproto.base); ::memset(&status_, 0, static_cast<size_t>( - reinterpret_cast<char*>(&schema_) - - reinterpret_cast<char*>(&status_)) + sizeof(schema_)); + reinterpret_cast<char*>(&collectionid_) - + reinterpret_cast<char*>(&status_)) + sizeof(collectionid_)); } DescribeCollectionResponse::~DescribeCollectionResponse() { @@ -3889,6 +3892,7 @@ void DescribeCollectionResponse::Clear() { delete schema_; } schema_ = nullptr; + collectionid_ = PROTOBUF_LONGLONG(0); _internal_metadata_.Clear(); } @@ -3914,6 +3918,13 @@ const char* DescribeCollectionResponse::_InternalParse(const char* ptr, ::PROTOB CHK_(ptr); } else goto handle_unusual; continue; + // int64 collectionID = 3; + case 3: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 24)) { + collectionid_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr); + CHK_(ptr); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -3966,6 +3977,19 @@ bool DescribeCollectionResponse::MergePartialFromCodedStream( break; } + // int64 collectionID = 3; + case 3: { + if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (24 & 0xFF)) { + + DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive< + ::PROTOBUF_NAMESPACE_ID::int64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_INT64>( + input, &collectionid_))); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -4005,6 +4029,11 @@ void DescribeCollectionResponse::SerializeWithCachedSizes( 2, _Internal::schema(this), output); } + // int64 collectionID = 3; + if (this->collectionid() != 0) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64(3, this->collectionid(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -4032,6 +4061,11 @@ void DescribeCollectionResponse::SerializeWithCachedSizes( 2, _Internal::schema(this), target); } + // int64 collectionID = 3; + if (this->collectionid() != 0) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64ToArray(3, this->collectionid(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -4067,6 +4101,13 @@ size_t DescribeCollectionResponse::ByteSizeLong() const { *schema_); } + // int64 collectionID = 3; + if (this->collectionid() != 0) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int64Size( + this->collectionid()); + } + int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -4100,6 +4141,9 @@ void DescribeCollectionResponse::MergeFrom(const DescribeCollectionResponse& fro if (from.has_schema()) { mutable_schema()->::milvus::proto::schema::CollectionSchema::MergeFrom(from.schema()); } + if (from.collectionid() != 0) { + set_collectionid(from.collectionid()); + } } void DescribeCollectionResponse::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { @@ -4125,6 +4169,7 @@ void DescribeCollectionResponse::InternalSwap(DescribeCollectionResponse* other) _internal_metadata_.Swap(&other->_internal_metadata_); swap(status_, other->status_); swap(schema_, other->schema_); + swap(collectionid_, other->collectionid_); } ::PROTOBUF_NAMESPACE_ID::Metadata DescribeCollectionResponse::GetMetadata() const { diff --git a/internal/core/src/pb/milvus.pb.h b/internal/core/src/pb/milvus.pb.h index fd837d0269a26f7167844df8d36b985afe2a2099..f335f8a062d7004cd294d9c93f85242df8803e14 100644 --- a/internal/core/src/pb/milvus.pb.h +++ b/internal/core/src/pb/milvus.pb.h @@ -1317,6 +1317,7 @@ class DescribeCollectionResponse : enum : int { kStatusFieldNumber = 1, kSchemaFieldNumber = 2, + kCollectionIDFieldNumber = 3, }; // .milvus.proto.common.Status status = 1; bool has_status() const; @@ -1334,6 +1335,11 @@ class DescribeCollectionResponse : ::milvus::proto::schema::CollectionSchema* mutable_schema(); void set_allocated_schema(::milvus::proto::schema::CollectionSchema* schema); + // int64 collectionID = 3; + void clear_collectionid(); + ::PROTOBUF_NAMESPACE_ID::int64 collectionid() const; + void set_collectionid(::PROTOBUF_NAMESPACE_ID::int64 value); + // @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeCollectionResponse) private: class _Internal; @@ -1341,6 +1347,7 @@ class DescribeCollectionResponse : ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; ::milvus::proto::common::Status* status_; ::milvus::proto::schema::CollectionSchema* schema_; + ::PROTOBUF_NAMESPACE_ID::int64 collectionid_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_milvus_2eproto; }; @@ -7783,6 +7790,20 @@ inline void DescribeCollectionResponse::set_allocated_schema(::milvus::proto::sc // @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.DescribeCollectionResponse.schema) } +// int64 collectionID = 3; +inline void DescribeCollectionResponse::clear_collectionid() { + collectionid_ = PROTOBUF_LONGLONG(0); +} +inline ::PROTOBUF_NAMESPACE_ID::int64 DescribeCollectionResponse::collectionid() const { + // @@protoc_insertion_point(field_get:milvus.proto.milvus.DescribeCollectionResponse.collectionID) + return collectionid_; +} +inline void DescribeCollectionResponse::set_collectionid(::PROTOBUF_NAMESPACE_ID::int64 value) { + + collectionid_ = value; + // @@protoc_insertion_point(field_set:milvus.proto.milvus.DescribeCollectionResponse.collectionID) +} + // ------------------------------------------------------------------- // LoadCollectionRequest diff --git a/internal/distributed/masterservice/masterservice_test.go b/internal/distributed/masterservice/masterservice_test.go index a1d0eade87754bd644b5abadc9cbcfddf4d0ce28..9f4a0df466fb9dfafdb5badc30e82bbc365163d4 100644 --- a/internal/distributed/masterservice/masterservice_test.go +++ b/internal/distributed/masterservice/masterservice_test.go @@ -51,6 +51,7 @@ func TestGrpcService(t *testing.T) { assert.Nil(t, err) core.ProxyTimeTickChan = make(chan typeutil.Timestamp, 8) + core.DataNodeSegmentFlushCompletedChan = make(chan typeutil.UniqueID, 8) timeTickArray := make([]typeutil.Timestamp, 0, 16) core.SendTimeTick = func(ts typeutil.Timestamp) error { @@ -199,6 +200,8 @@ func TestGrpcService(t *testing.T) { }) t.Run("describe collection", func(t *testing.T) { + collMeta, err := core.MetaTable.GetCollectionByName("testColl") + assert.Nil(t, err) req := &milvuspb.DescribeCollectionRequest{ Base: &commonpb.MsgBase{ MsgType: commonpb.MsgType_kDescribeCollection, @@ -213,6 +216,7 @@ func TestGrpcService(t *testing.T) { assert.Nil(t, err) assert.Equal(t, rsp.Status.ErrorCode, commonpb.ErrorCode_SUCCESS) assert.Equal(t, rsp.Schema.Name, "testColl") + assert.Equal(t, rsp.CollectionID, collMeta.ID) }) t.Run("show collection", func(t *testing.T) { @@ -275,6 +279,8 @@ func TestGrpcService(t *testing.T) { }) t.Run("show partition", func(t *testing.T) { + coll, err := core.MetaTable.GetCollectionByName("testColl") + assert.Nil(t, err) req := &milvuspb.ShowPartitionRequest{ Base: &commonpb.MsgBase{ MsgType: commonpb.MsgType_kShowPartitions, @@ -284,6 +290,7 @@ func TestGrpcService(t *testing.T) { }, DbName: "testDb", CollectionName: "testColl", + CollectionID: coll.ID, } rsp, err := cli.ShowPartitions(req) assert.Nil(t, err) @@ -312,7 +319,7 @@ func TestGrpcService(t *testing.T) { req := &milvuspb.ShowSegmentRequest{ Base: &commonpb.MsgBase{ - MsgType: 111, //TODO show segment request msg type + MsgType: commonpb.MsgType_kShowSegment, MsgID: 111, Timestamp: 111, SourceID: 111, @@ -358,7 +365,7 @@ func TestGrpcService(t *testing.T) { req := &milvuspb.DescribeSegmentRequest{ Base: &commonpb.MsgBase{ - MsgType: 113, //TODO, describe segment request msg type + MsgType: commonpb.MsgType_kDescribeSegment, MsgID: 113, Timestamp: 113, SourceID: 113, @@ -392,6 +399,47 @@ func TestGrpcService(t *testing.T) { assert.Equal(t, rsp.IndexDescriptions[0].IndexName, cms.Params.DefaultIndexName) }) + t.Run("flush segment", func(t *testing.T) { + coll, err := core.MetaTable.GetCollectionByName("testColl") + assert.Nil(t, err) + partID := coll.PartitionIDs[1] + part, err := core.MetaTable.GetPartitionByID(partID) + assert.Nil(t, err) + assert.Equal(t, len(part.SegmentIDs), 1) + seg := &datapb.SegmentInfo{ + SegmentID: 1001, + CollectionID: coll.ID, + PartitionID: part.PartitionID, + } + core.DataServiceSegmentChan <- seg + time.Sleep(time.Millisecond * 100) + part, err = core.MetaTable.GetPartitionByID(partID) + assert.Nil(t, err) + assert.Equal(t, len(part.SegmentIDs), 2) + core.DataNodeSegmentFlushCompletedChan <- 1001 + time.Sleep(time.Millisecond * 100) + + req := &milvuspb.DescribeIndexRequest{ + Base: &commonpb.MsgBase{ + MsgType: commonpb.MsgType_kDescribeIndex, + MsgID: 115, + Timestamp: 115, + SourceID: 115, + }, + DbName: "", + CollectionName: "testColl", + FieldName: "vector", + IndexName: "", + } + rsp, err := cli.DescribeIndex(req) + assert.Nil(t, err) + assert.Equal(t, rsp.Status.ErrorCode, commonpb.ErrorCode_SUCCESS) + assert.Equal(t, len(rsp.IndexDescriptions), 2) + assert.Equal(t, rsp.IndexDescriptions[0].IndexName, cms.Params.DefaultIndexName) + assert.Equal(t, rsp.IndexDescriptions[1].IndexName, "index_100") + + }) + t.Run("drop partition", func(t *testing.T) { req := &milvuspb.DropPartitionRequest{ Base: &commonpb.MsgBase{ diff --git a/internal/masterservice/master_service.go b/internal/masterservice/master_service.go index 72cccc1102259aaf641156dd5789fb78d73b176c..e3be0abe125cd0232f7d002cc85835e9421c733f 100644 --- a/internal/masterservice/master_service.go +++ b/internal/masterservice/master_service.go @@ -4,6 +4,7 @@ import ( "context" "log" "math/rand" + "strconv" "sync" "sync/atomic" "time" @@ -138,6 +139,9 @@ type Core struct { //setMsgStreams segment channel, receive segment info from data service, if master create segment DataServiceSegmentChan chan *datapb.SegmentInfo + //setMsgStreams ,if segment flush completed, data node would put segment id into msg stream + DataNodeSegmentFlushCompletedChan chan typeutil.UniqueID + //TODO,get binlog file path from data service, GetBinlogFilePathsFromDataServiceReq func(segID typeutil.UniqueID, fieldID typeutil.UniqueID) ([]string, error) @@ -227,6 +231,9 @@ func (c *Core) checkInit() error { if c.indexTaskQueue == nil { return errors.Errorf("indexTaskQueue is nil") } + if c.DataNodeSegmentFlushCompletedChan == nil { + return errors.Errorf("DataNodeSegmentFlushCompletedChan is nil") + } log.Printf("master node id = %d\n", Params.NodeID) return nil } @@ -311,7 +318,7 @@ func (c *Core) startCreateIndexLoop() { return case t, ok := <-c.indexTaskQueue: if !ok { - log.Printf("index task chan is close, exit loop") + log.Printf("index task chan has closed, exit loop") return } if err := t.BuildIndex(); err != nil { @@ -321,6 +328,34 @@ func (c *Core) startCreateIndexLoop() { } } +func (c *Core) startSegmentFlushCompletedLoop() { + for { + select { + case <-c.ctx.Done(): + log.Printf("close segment flush completed loop") + return + case seg, ok := <-c.DataNodeSegmentFlushCompletedChan: + if !ok { + log.Printf("data node segment flush completed chan has colsed, exit loop") + } + fields, err := c.MetaTable.GetSegmentVectorFields(seg) + if err != nil { + log.Printf("GetSegmentVectorFields, error = %s ", err.Error()) + } + for _, f := range fields { + t := &CreateIndexTask{ + core: c, + segmentID: seg, + indexName: "index_" + strconv.FormatInt(f.FieldID, 10), + fieldSchema: f, + indexParams: nil, + } + c.indexTaskQueue <- t + } + } + } +} + func (c *Core) setMsgStreams() error { //proxy time tick stream, proxyTimeTickStream := pulsarms.NewPulsarMsgStream(c.ctx, 1024) @@ -542,6 +577,7 @@ func (c *Core) Start() error { go c.startTimeTickLoop() go c.startDataServiceSegmentLoop() go c.startCreateIndexLoop() + go c.startSegmentFlushCompletedLoop() c.stateCode.Store(internalpb2.StateCode_HEALTHY) }) return nil diff --git a/internal/masterservice/meta_table.go b/internal/masterservice/meta_table.go index a264ac622a096ac7d226b29339f37fcf2373fb11..ecf3b67bb5d62a010cceb47b08d748446dce2034 100644 --- a/internal/masterservice/meta_table.go +++ b/internal/masterservice/meta_table.go @@ -182,6 +182,10 @@ func (mt *metaTable) AddCollection(coll *pb.CollectionInfo, part *pb.PartitionIn if len(coll.PartitionIDs) != 0 { return errors.Errorf("partitions should be empty when creating collection") } + if _, ok := mt.collName2ID[coll.Schema.Name]; ok { + return errors.Errorf("collection %s exist", coll.Schema.Name) + } + coll.PartitionIDs = append(coll.PartitionIDs, part.PartitionID) mt.collID2Meta[coll.ID] = *coll mt.collName2ID[coll.Schema.Name] = coll.ID @@ -405,7 +409,7 @@ func (mt *metaTable) DeletePartition(collID typeutil.UniqueID, partitionName str for _, segID := range partMeta.SegmentIDs { segIndexMeta, ok := mt.segID2IndexMeta[segID] if !ok { - log.Printf("segment id = %d not exist", segID) + log.Printf("segment id = %d has no index meta", segID) continue } delete(mt.segID2IndexMeta, segID) @@ -630,6 +634,27 @@ func (mt *metaTable) GetNotIndexedSegments(collName string, fieldName string, in return rstID, fieldSchema, nil } +func (mt *metaTable) GetSegmentVectorFields(segID typeutil.UniqueID) ([]*schemapb.FieldSchema, error) { + mt.ddLock.RLock() + defer mt.ddLock.RUnlock() + collID, ok := mt.segID2CollID[segID] + if !ok { + return nil, errors.Errorf("segment id %d not belong to any collection", segID) + } + collMeta, ok := mt.collID2Meta[collID] + if !ok { + return nil, errors.Errorf("segment id %d not belong to any collection which has dropped", segID) + } + rst := make([]*schemapb.FieldSchema, 0, 2) + for _, f := range collMeta.Schema.Fields { + if f.DataType == schemapb.DataType_VECTOR_BINARY || f.DataType == schemapb.DataType_VECTOR_FLOAT { + field := proto.Clone(f) + rst = append(rst, field.(*schemapb.FieldSchema)) + } + } + return rst, nil +} + func (mt *metaTable) GetIndexByName(collName string, fieldName string, indexName string) ([]pb.IndexInfo, error) { mt.ddLock.RLock() mt.ddLock.RUnlock() diff --git a/internal/masterservice/task.go b/internal/masterservice/task.go index 068f584cee94934d2e025ea498301f34a40c0144..185bd65d612c90b0acf4d07d05ed2e473934c554 100644 --- a/internal/masterservice/task.go +++ b/internal/masterservice/task.go @@ -212,6 +212,7 @@ func (t *DescribeCollectionReqTask) Execute() error { return err } t.Rsp.Schema = proto.Clone(coll.Schema).(*schemapb.CollectionSchema) + t.Rsp.CollectionID = coll.ID var newField []*schemapb.FieldSchema for _, field := range t.Rsp.Schema.Fields { if field.FieldID >= StartOfUserFieldID { @@ -368,10 +369,13 @@ func (t *ShowPartitionReqTask) Ts() (typeutil.Timestamp, error) { } func (t *ShowPartitionReqTask) Execute() error { - coll, err := t.core.MetaTable.GetCollectionByName(t.Req.CollectionName) + coll, err := t.core.MetaTable.GetCollectionByID(t.Req.CollectionID) if err != nil { return err } + if coll.Schema.Name != t.Req.CollectionName { + return errors.Errorf("collection %s not exist", t.Req.CollectionName) + } for _, partID := range coll.PartitionIDs { partMeta, err := t.core.MetaTable.GetPartitionByID(partID) if err != nil { @@ -477,6 +481,9 @@ func (t *CreateIndexReqTask) Execute() error { if err != nil { return err } + if field.DataType != schemapb.DataType_VECTOR_FLOAT && field.DataType != schemapb.DataType_VECTOR_BINARY { + return errors.Errorf("field name = %s, data type = %s", t.Req.FieldName, schemapb.DataType_name[int32(field.DataType)]) + } for _, seg := range segIDs { task := CreateIndexTask{ core: t.core, diff --git a/internal/proto/milvus.proto b/internal/proto/milvus.proto index 3373baf78deb24e83dfb04e4538f3aff1d1ab081..07f7b8eb852fcb7164745895bc60ba739e827635 100644 --- a/internal/proto/milvus.proto +++ b/internal/proto/milvus.proto @@ -46,6 +46,7 @@ message DescribeCollectionRequest { message DescribeCollectionResponse { common.Status status = 1; schema.CollectionSchema schema = 2; + int64 collectionID = 3; } message LoadCollectionRequest { diff --git a/internal/proto/milvuspb/milvus.pb.go b/internal/proto/milvuspb/milvus.pb.go index b790e9c1e417f9fb80311b9c4653f8b5fb5706c9..2aac22795334daf9052ba6e0fcfc864d222359c6 100644 --- a/internal/proto/milvuspb/milvus.pb.go +++ b/internal/proto/milvuspb/milvus.pb.go @@ -380,6 +380,7 @@ func (m *DescribeCollectionRequest) GetCollectionName() string { type DescribeCollectionResponse struct { Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` Schema *schemapb.CollectionSchema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + CollectionID int64 `protobuf:"varint,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -424,6 +425,13 @@ func (m *DescribeCollectionResponse) GetSchema() *schemapb.CollectionSchema { return nil } +func (m *DescribeCollectionResponse) GetCollectionID() int64 { + if m != nil { + return m.CollectionID + } + return 0 +} + type LoadCollectionRequest struct { Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` DbName string `protobuf:"bytes,2,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` @@ -2392,111 +2400,112 @@ func init() { func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) } var fileDescriptor_02345ba45cc0e303 = []byte{ - // 1661 bytes of a gzipped FileDescriptorProto + // 1665 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xdd, 0x6f, 0x1b, 0xc5, 0x16, 0xcf, 0xda, 0x8e, 0x93, 0x9c, 0xac, 0x1d, 0x67, 0xf2, 0xe5, 0xba, 0xed, 0x6d, 0x3a, 0xf7, 0xf6, 0x26, 0xfd, 0x4a, 0xae, 0xd2, 0xfb, 0xf9, 0x70, 0xa5, 0x36, 0x71, 0x9a, 0x5a, 0x6d, 0xd3, 0xdc, 0x75, 0x6e, 0x21, 0x54, 0x95, 0x59, 0x7b, 0x07, 0x7b, 0xe9, 0x7a, 0xd7, 0xec, 0x8c, 0xf3, - 0xd1, 0x27, 0x04, 0x12, 0x48, 0x80, 0x80, 0x57, 0x5e, 0x91, 0x78, 0x45, 0x50, 0x24, 0xfe, 0x03, - 0x24, 0xfe, 0x17, 0x84, 0xf8, 0x0b, 0x90, 0xd0, 0xce, 0xae, 0xd7, 0xbb, 0x9b, 0xd9, 0xd8, 0xd4, - 0x40, 0x9c, 0xb7, 0x9d, 0xe3, 0x33, 0x67, 0x7e, 0xe7, 0x37, 0xe7, 0xcc, 0x9c, 0x39, 0x06, 0xb9, - 0xa9, 0x1b, 0xfb, 0x6d, 0xba, 0xd2, 0xb2, 0x2d, 0x66, 0xa1, 0x99, 0xe0, 0x68, 0xc5, 0x1d, 0x14, - 0xe4, 0x9a, 0xd5, 0x6c, 0x5a, 0xa6, 0x2b, 0x2c, 0xc8, 0xb4, 0xd6, 0x20, 0x4d, 0xd5, 0x1d, 0xe1, - 0x2f, 0x24, 0x58, 0xd8, 0xb0, 0x89, 0xca, 0xc8, 0x86, 0x65, 0x18, 0xa4, 0xc6, 0x74, 0xcb, 0x54, - 0xc8, 0x5b, 0x6d, 0x42, 0x19, 0xfa, 0x1b, 0xa4, 0xaa, 0x2a, 0x25, 0x79, 0x69, 0x51, 0x5a, 0x9e, - 0x5c, 0xbb, 0xb0, 0x12, 0xb2, 0xed, 0xd9, 0x7c, 0x48, 0xeb, 0xeb, 0x2a, 0x25, 0x0a, 0xd7, 0x44, - 0x0b, 0x30, 0xa6, 0x55, 0x2b, 0xa6, 0xda, 0x24, 0xf9, 0xc4, 0xa2, 0xb4, 0x3c, 0xa1, 0xa4, 0xb5, - 0xea, 0xb6, 0xda, 0x24, 0x68, 0x09, 0xa6, 0x6a, 0xbe, 0x7d, 0x57, 0x21, 0xc9, 0x15, 0xb2, 0x5d, - 0x31, 0x57, 0x9c, 0x87, 0xb4, 0x8b, 0x2f, 0x9f, 0x5a, 0x94, 0x96, 0x65, 0xc5, 0x1b, 0xe1, 0x0f, - 0x25, 0x98, 0x2b, 0xda, 0x56, 0x6b, 0x28, 0x50, 0xe2, 0x0f, 0x24, 0x98, 0xbd, 0xa7, 0xd2, 0xe1, - 0x00, 0xb3, 0x07, 0xf2, 0xba, 0x65, 0x19, 0x0a, 0xa1, 0x2d, 0xcb, 0xa4, 0x04, 0xdd, 0x82, 0x34, - 0x65, 0x2a, 0x6b, 0x53, 0x0f, 0xc5, 0x79, 0x21, 0x8a, 0x32, 0x57, 0x51, 0x3c, 0x55, 0x34, 0x0b, - 0xa3, 0xfb, 0xaa, 0xd1, 0x76, 0x41, 0x8c, 0x2b, 0xee, 0x00, 0x3f, 0x81, 0x6c, 0x99, 0xd9, 0xba, - 0x59, 0xff, 0x0d, 0x8d, 0x4f, 0x74, 0x8c, 0x7f, 0x22, 0xc1, 0xb9, 0x22, 0xa1, 0x35, 0x5b, 0xaf, - 0x0e, 0x47, 0xf0, 0xe1, 0x4f, 0x25, 0x28, 0x88, 0x10, 0x0d, 0xe2, 0xfb, 0x7f, 0xfd, 0x80, 0x4e, - 0xf0, 0x49, 0x57, 0xc2, 0x93, 0xbc, 0x64, 0xec, 0xae, 0x56, 0xe6, 0x82, 0x50, 0xdc, 0x3f, 0xb0, - 0x54, 0x6d, 0x38, 0x08, 0xfa, 0x58, 0x82, 0xbc, 0x42, 0x0c, 0xa2, 0xd2, 0x21, 0xd9, 0xb1, 0x8f, - 0x24, 0x98, 0x0f, 0x70, 0xc7, 0x54, 0x46, 0x4f, 0x13, 0xce, 0xfb, 0xce, 0x69, 0x1a, 0x85, 0x33, - 0x48, 0xf4, 0xfc, 0x0b, 0x46, 0x9d, 0x2f, 0x9a, 0x4f, 0x2c, 0x26, 0x97, 0x27, 0xd7, 0x2e, 0x0b, - 0xe7, 0xdc, 0x27, 0x47, 0x8f, 0x9d, 0x8c, 0xda, 0x51, 0x75, 0x5b, 0x71, 0xf5, 0x71, 0x15, 0xe6, - 0xca, 0x0d, 0xeb, 0xe0, 0xf7, 0xdc, 0x25, 0x7c, 0x08, 0xf3, 0xd1, 0x35, 0x06, 0xf1, 0xf5, 0x2a, - 0xe4, 0x22, 0x2c, 0xbb, 0x6e, 0x4f, 0x28, 0x53, 0x61, 0x9a, 0x29, 0xfe, 0xc6, 0xd9, 0x76, 0x7e, - 0x6b, 0xed, 0xa8, 0x36, 0xd3, 0x4f, 0xfb, 0xd2, 0xba, 0x02, 0xd9, 0x56, 0x07, 0x87, 0xab, 0x97, - 0xe2, 0x7a, 0x19, 0x5f, 0xca, 0xf9, 0xfa, 0x5a, 0x82, 0x59, 0xe7, 0x0e, 0x3b, 0x4b, 0x98, 0xbf, - 0x92, 0x60, 0xe6, 0x9e, 0x4a, 0xcf, 0x12, 0xe4, 0x17, 0x12, 0xcc, 0x38, 0x47, 0xa6, 0x8b, 0xf9, - 0x74, 0x21, 0x2f, 0xc1, 0x54, 0x18, 0x32, 0xcd, 0xa7, 0x78, 0x48, 0x67, 0x43, 0x98, 0x29, 0xfe, - 0x56, 0x82, 0x05, 0xef, 0x64, 0x1d, 0x0a, 0xae, 0xfb, 0x06, 0xfe, 0x42, 0x82, 0x39, 0x1f, 0xf1, - 0x69, 0x1f, 0xc0, 0xfd, 0x86, 0xc8, 0x7b, 0x12, 0xcc, 0x47, 0x41, 0x9f, 0xca, 0x31, 0xfd, 0xa5, - 0x04, 0xb3, 0xce, 0x19, 0x3a, 0x14, 0x7b, 0x8e, 0x41, 0xee, 0x4a, 0x4a, 0x45, 0x4e, 0x5d, 0x52, - 0x09, 0xc9, 0xf0, 0x67, 0x92, 0x7b, 0xb1, 0x04, 0x00, 0x0f, 0x42, 0x9c, 0x20, 0xcc, 0x12, 0xa2, - 0x30, 0x73, 0xb0, 0xf9, 0x92, 0x52, 0x91, 0xe6, 0x93, 0x8b, 0x49, 0x07, 0x5b, 0x50, 0xc6, 0x8b, - 0x81, 0x4e, 0xf9, 0x56, 0x26, 0xf5, 0x26, 0x31, 0xd9, 0xcb, 0xd3, 0x19, 0x25, 0x23, 0x71, 0x9c, - 0x0c, 0x74, 0x01, 0x26, 0xa8, 0xbb, 0x4e, 0xa9, 0xc8, 0x39, 0x4d, 0x2a, 0x5d, 0x01, 0x6e, 0xc0, - 0xc2, 0x31, 0x34, 0x83, 0x70, 0x95, 0x87, 0x31, 0xdd, 0xd4, 0xc8, 0xa1, 0x0f, 0xa6, 0x33, 0x74, - 0x1c, 0x47, 0xce, 0xa6, 0xfc, 0x21, 0x4e, 0x2f, 0xc2, 0x64, 0x80, 0x75, 0xcf, 0xed, 0xa0, 0x08, - 0xbf, 0x09, 0x33, 0x21, 0x34, 0x83, 0x38, 0xfd, 0x27, 0x00, 0x9f, 0x51, 0x37, 0x36, 0x92, 0x4a, - 0x40, 0x82, 0x7f, 0x94, 0x00, 0xb9, 0x95, 0x40, 0xc9, 0x21, 0xe3, 0x34, 0xd3, 0xe7, 0x22, 0xc0, - 0x1b, 0x3a, 0x31, 0xb4, 0xe0, 0xb9, 0x33, 0xc1, 0x25, 0xfc, 0xe7, 0x22, 0xc8, 0xe4, 0x90, 0xd9, - 0x6a, 0xa5, 0xa5, 0xda, 0x6a, 0x93, 0xe6, 0x47, 0xfb, 0x3d, 0x2a, 0x26, 0xf9, 0xb4, 0x1d, 0x3e, - 0x0b, 0x7f, 0xef, 0xd4, 0x10, 0x5e, 0x54, 0x0d, 0xbb, 0xc7, 0x17, 0x01, 0x78, 0x84, 0xba, 0x3f, - 0x8f, 0xba, 0x3f, 0x73, 0x09, 0x3f, 0x84, 0x0d, 0xc8, 0x71, 0x0f, 0x5c, 0x77, 0x5a, 0x8e, 0xd5, - 0xc8, 0x14, 0x29, 0x32, 0x05, 0xfd, 0x07, 0xd2, 0x1e, 0x7b, 0x7d, 0x1f, 0xb4, 0xde, 0x04, 0xfc, - 0xb9, 0x04, 0x73, 0x11, 0xe2, 0x06, 0x89, 0xcb, 0x5d, 0x40, 0x2e, 0x50, 0xad, 0x8b, 0xbe, 0x83, - 0x2a, 0xf2, 0xc4, 0xf3, 0x06, 0x51, 0x5f, 0x95, 0x69, 0x3d, 0x22, 0xa1, 0xf8, 0x3b, 0x09, 0xa6, - 0xb9, 0x9e, 0xb3, 0x1a, 0x39, 0xbb, 0x5b, 0xfb, 0xb6, 0x04, 0x28, 0xe8, 0xc7, 0x20, 0x4c, 0xff, - 0xc3, 0xbd, 0x5b, 0x5d, 0x4f, 0xb2, 0x6b, 0x97, 0x84, 0x73, 0x02, 0x8b, 0xb9, 0xda, 0xf8, 0x67, - 0x09, 0x32, 0x25, 0x93, 0x12, 0x9b, 0x0d, 0x7f, 0x3d, 0x82, 0xfe, 0x0e, 0xe3, 0xb6, 0x75, 0x50, - 0xd1, 0x54, 0xa6, 0x7a, 0xe7, 0xc2, 0x39, 0x21, 0xbc, 0x75, 0xc3, 0xaa, 0x2a, 0x63, 0xb6, 0x75, - 0x50, 0x54, 0x99, 0x8a, 0xce, 0xc3, 0x44, 0x43, 0xa5, 0x8d, 0xca, 0x33, 0x72, 0x44, 0xf3, 0xe9, - 0xc5, 0xe4, 0x72, 0x46, 0x19, 0x77, 0x04, 0xf7, 0xc9, 0x11, 0xc5, 0xef, 0x4a, 0x90, 0xed, 0xf8, - 0x3f, 0x08, 0xfd, 0x97, 0x60, 0xd2, 0xb6, 0x0e, 0x4a, 0xc5, 0x4a, 0x95, 0xd4, 0x75, 0xd3, 0xbb, - 0x11, 0x80, 0x8b, 0xd6, 0x1d, 0x89, 0x83, 0xc2, 0x55, 0x20, 0xa6, 0xe6, 0xdd, 0x06, 0xe3, 0x5c, - 0xb0, 0x69, 0x6a, 0x78, 0x1f, 0x72, 0x3b, 0x86, 0x5a, 0x23, 0x0d, 0xcb, 0xd0, 0x88, 0xcd, 0xb3, - 0x12, 0xe5, 0x20, 0xc9, 0xd4, 0xba, 0x97, 0xdc, 0xce, 0x27, 0xfa, 0x37, 0xa4, 0xd8, 0x51, 0xab, - 0xb3, 0xc3, 0x7f, 0x11, 0xa6, 0x4f, 0xc0, 0xcc, 0xee, 0x51, 0x8b, 0x28, 0x7c, 0x06, 0x9a, 0x87, - 0x34, 0x6f, 0x26, 0xb9, 0x05, 0x81, 0xac, 0x78, 0x23, 0xfc, 0x34, 0xb4, 0xee, 0x96, 0x6d, 0xb5, - 0x5b, 0xa8, 0x04, 0x72, 0xab, 0x2b, 0x73, 0x48, 0x88, 0x4f, 0xd6, 0x28, 0x68, 0x25, 0x34, 0x15, - 0xff, 0x20, 0x41, 0xa6, 0x4c, 0x54, 0xbb, 0xd6, 0x38, 0x0b, 0x35, 0xba, 0xc3, 0xb8, 0x46, 0x0d, - 0x2f, 0x4d, 0x9d, 0x4f, 0x74, 0x1d, 0xa6, 0x03, 0x0e, 0x55, 0xea, 0x0e, 0x41, 0xf9, 0x34, 0xef, - 0xb8, 0xe6, 0x5a, 0x11, 0xe2, 0xf0, 0x7d, 0x48, 0xdd, 0xd3, 0x19, 0x37, 0xe3, 0x5c, 0xc2, 0x12, - 0xbf, 0x84, 0x9d, 0x4f, 0x74, 0x2e, 0x10, 0xb7, 0x09, 0xbe, 0x01, 0x7e, 0x70, 0xf2, 0x46, 0xae, - 0x65, 0x7b, 0x3b, 0x93, 0x50, 0xbc, 0x11, 0x7e, 0xb5, 0xcb, 0x1c, 0x6d, 0x1b, 0x8c, 0xbe, 0x5c, - 0x54, 0x22, 0x48, 0x35, 0x74, 0xaf, 0xde, 0x96, 0x15, 0xfe, 0x8d, 0xdf, 0x91, 0x40, 0xbe, 0x6b, - 0xb4, 0xe9, 0x69, 0xee, 0x89, 0x93, 0x76, 0xb3, 0x0a, 0xa9, 0xeb, 0x94, 0x11, 0xfb, 0x81, 0x6e, - 0x3e, 0xf3, 0x93, 0xef, 0x9f, 0x30, 0xa6, 0x6a, 0x9a, 0x4d, 0x28, 0x3d, 0x11, 0xcf, 0x1d, 0x57, - 0x47, 0xe9, 0x28, 0x07, 0xe8, 0x49, 0xf4, 0x4d, 0xcf, 0xb5, 0xdb, 0x30, 0x15, 0xc9, 0x17, 0x34, - 0x0e, 0xa9, 0xed, 0x47, 0xdb, 0x9b, 0xb9, 0x11, 0x34, 0x0d, 0x99, 0xc7, 0x9b, 0x1b, 0xbb, 0x8f, - 0x94, 0xca, 0x7a, 0x69, 0xfb, 0x8e, 0xb2, 0x97, 0xd3, 0x50, 0x0e, 0x64, 0x4f, 0x74, 0xf7, 0xc1, - 0xa3, 0x3b, 0xbb, 0x39, 0xb2, 0xf6, 0x53, 0x0e, 0x32, 0x0f, 0xf9, 0x42, 0x65, 0x62, 0xef, 0xeb, - 0x35, 0x82, 0x2a, 0x90, 0x8b, 0xfe, 0x51, 0x80, 0x6e, 0x08, 0x93, 0x27, 0xe6, 0xff, 0x84, 0xc2, - 0x49, 0xd0, 0xf1, 0x08, 0x7a, 0x02, 0xd9, 0x70, 0x87, 0x1f, 0x5d, 0x13, 0x9a, 0x17, 0xfe, 0x0d, - 0xd0, 0xcb, 0x78, 0x05, 0x32, 0xa1, 0x86, 0x3d, 0xba, 0x2a, 0xb4, 0x2d, 0x6a, 0xea, 0x17, 0x2e, - 0x0b, 0x55, 0x83, 0x3d, 0x77, 0x17, 0x7d, 0xb8, 0x4f, 0x1b, 0x83, 0x5e, 0xd8, 0xcc, 0xed, 0x85, - 0x5e, 0x85, 0xe9, 0x63, 0x6d, 0x57, 0x74, 0x53, 0x68, 0x3f, 0xae, 0x3d, 0xdb, 0x6b, 0x89, 0x03, - 0x40, 0xc7, 0x5b, 0xdf, 0x68, 0x45, 0xbc, 0x03, 0x71, 0x5d, 0xfb, 0xc2, 0x6a, 0xdf, 0xfa, 0x3e, - 0x71, 0xfb, 0xb0, 0xb0, 0x45, 0x58, 0xb8, 0x6b, 0xaa, 0x53, 0xa6, 0xd7, 0x28, 0xba, 0x2e, 0x0e, - 0x2f, 0x61, 0xbf, 0xb7, 0x70, 0xa3, 0x3f, 0x65, 0x7f, 0x5d, 0x03, 0xa6, 0xc2, 0xdd, 0x4b, 0x1a, - 0xb3, 0x63, 0xc2, 0x3e, 0x6a, 0xe1, 0x7a, 0x5f, 0xba, 0xfe, 0x6a, 0x4f, 0x61, 0x2a, 0xd2, 0xb0, - 0x8c, 0xf3, 0x4e, 0xd8, 0xd6, 0xec, 0xb5, 0x7b, 0x7b, 0x90, 0x09, 0x75, 0x16, 0x63, 0xc2, 0x5b, - 0xd4, 0x7d, 0xec, 0x65, 0xfa, 0x29, 0xc8, 0xc1, 0x06, 0x20, 0x5a, 0x8e, 0x4b, 0x9c, 0x63, 0x86, - 0xfb, 0xca, 0x9b, 0x3d, 0x37, 0x6f, 0xfc, 0xc9, 0x34, 0x66, 0x01, 0x41, 0x47, 0xaf, 0x17, 0xf2, - 0xd7, 0xfd, 0xac, 0x09, 0x58, 0xbf, 0x71, 0x52, 0xd6, 0xfc, 0x5a, 0x6e, 0x28, 0xcc, 0x6f, 0x11, - 0x16, 0xea, 0x24, 0x79, 0xa1, 0x2b, 0x0e, 0x25, 0x61, 0xa3, 0x2c, 0x26, 0x94, 0xc4, 0xfd, 0x29, - 0x3c, 0x82, 0x74, 0xc8, 0x86, 0x3a, 0x30, 0x34, 0x66, 0xb3, 0x45, 0x7d, 0xa5, 0xc2, 0xb5, 0x7e, - 0x54, 0xfd, 0xa5, 0xfe, 0x0f, 0x93, 0x81, 0xc7, 0x35, 0x5a, 0x3a, 0x21, 0x62, 0x83, 0x8f, 0xd1, - 0x5e, 0xb4, 0x35, 0x20, 0x13, 0x7a, 0x8a, 0xc5, 0x45, 0xab, 0xe0, 0x9d, 0x1b, 0xe3, 0x80, 0xf0, - 0x65, 0x87, 0x47, 0x50, 0x15, 0x32, 0x5b, 0x84, 0x75, 0x5f, 0x07, 0xe8, 0xaf, 0xf1, 0x6f, 0xb3, - 0xe0, 0x9b, 0xab, 0xb0, 0xd4, 0x53, 0xcf, 0x5f, 0xa3, 0x0c, 0x69, 0xb7, 0xd0, 0x46, 0x38, 0x66, - 0x52, 0xe0, 0x15, 0x52, 0xf8, 0xf3, 0x89, 0x3a, 0xbe, 0x51, 0x05, 0xd2, 0x6e, 0x99, 0x14, 0x63, - 0x34, 0x54, 0x7d, 0x16, 0x4e, 0xd6, 0xe1, 0x75, 0x16, 0x1e, 0x41, 0x25, 0x18, 0xe5, 0xf5, 0x11, - 0x12, 0x27, 0x66, 0xb0, 0x76, 0xea, 0xb5, 0x83, 0xff, 0x03, 0x79, 0x8b, 0xb0, 0xa2, 0xb6, 0xd1, - 0x50, 0x4d, 0x93, 0x18, 0xa8, 0x20, 0x54, 0xdf, 0x6c, 0xb6, 0xd8, 0x51, 0x8c, 0xc7, 0xe1, 0xff, - 0x95, 0xf1, 0xc8, 0x5a, 0x1d, 0xe4, 0x1d, 0xdb, 0x3a, 0x3c, 0xea, 0xd4, 0x1b, 0xaf, 0x80, 0x1c, - 0x2c, 0xa4, 0x4e, 0x5c, 0xe2, 0x6a, 0x4c, 0x52, 0x1f, 0xaf, 0xc3, 0xf0, 0xc8, 0xfa, 0xfa, 0x6b, - 0xb7, 0xeb, 0x3a, 0x6b, 0xb4, 0xab, 0x8e, 0x8d, 0xd5, 0xe7, 0xba, 0x61, 0xe8, 0xcf, 0x19, 0xa9, - 0x35, 0x56, 0xdd, 0x69, 0x37, 0x35, 0x9d, 0x32, 0x5b, 0xaf, 0xb6, 0x19, 0xd1, 0x56, 0x75, 0x93, - 0x11, 0xdb, 0x54, 0x8d, 0x55, 0x6e, 0xd8, 0xd3, 0x68, 0x55, 0xab, 0x69, 0x3e, 0xbe, 0xf5, 0x4b, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x4c, 0x32, 0xc3, 0x7e, 0x21, 0x00, 0x00, + 0xd1, 0x27, 0x04, 0x12, 0x48, 0x80, 0xe0, 0x99, 0x57, 0x24, 0x5e, 0x11, 0x14, 0xc4, 0x7f, 0x80, + 0xc4, 0xff, 0x82, 0x10, 0x7f, 0x01, 0x12, 0xda, 0xd9, 0xf5, 0x7a, 0x77, 0x33, 0x1b, 0x9b, 0x1a, + 0x88, 0xf3, 0xe6, 0x39, 0x3e, 0x73, 0xce, 0xef, 0x7c, 0xcd, 0x9c, 0x39, 0x0b, 0x72, 0x53, 0x37, + 0xf6, 0xdb, 0x74, 0xa5, 0x65, 0x5b, 0xcc, 0x42, 0x33, 0xc1, 0xd5, 0x8a, 0xbb, 0x28, 0xc8, 0x35, + 0xab, 0xd9, 0xb4, 0x4c, 0x97, 0x58, 0x90, 0x69, 0xad, 0x41, 0x9a, 0xaa, 0xbb, 0xc2, 0x9f, 0x4b, + 0xb0, 0xb0, 0x61, 0x13, 0x95, 0x91, 0x0d, 0xcb, 0x30, 0x48, 0x8d, 0xe9, 0x96, 0xa9, 0x90, 0xb7, + 0xda, 0x84, 0x32, 0xf4, 0x37, 0x48, 0x55, 0x55, 0x4a, 0xf2, 0xd2, 0xa2, 0xb4, 0x3c, 0xb9, 0x76, + 0x61, 0x25, 0x24, 0xdb, 0x93, 0xf9, 0x90, 0xd6, 0xd7, 0x55, 0x4a, 0x14, 0xce, 0x89, 0x16, 0x60, + 0x4c, 0xab, 0x56, 0x4c, 0xb5, 0x49, 0xf2, 0x89, 0x45, 0x69, 0x79, 0x42, 0x49, 0x6b, 0xd5, 0x6d, + 0xb5, 0x49, 0xd0, 0x12, 0x4c, 0xd5, 0x7c, 0xf9, 0x2e, 0x43, 0x92, 0x33, 0x64, 0xbb, 0x64, 0xce, + 0x38, 0x0f, 0x69, 0x17, 0x5f, 0x3e, 0xb5, 0x28, 0x2d, 0xcb, 0x8a, 0xb7, 0xc2, 0x1f, 0x4a, 0x30, + 0x57, 0xb4, 0xad, 0xd6, 0x50, 0xa0, 0xc4, 0x1f, 0x48, 0x30, 0x7b, 0x4f, 0xa5, 0xc3, 0x01, 0x66, + 0x0f, 0xe4, 0x75, 0xcb, 0x32, 0x14, 0x42, 0x5b, 0x96, 0x49, 0x09, 0xba, 0x05, 0x69, 0xca, 0x54, + 0xd6, 0xa6, 0x1e, 0x8a, 0xf3, 0x42, 0x14, 0x65, 0xce, 0xa2, 0x78, 0xac, 0x68, 0x16, 0x46, 0xf7, + 0x55, 0xa3, 0xed, 0x82, 0x18, 0x57, 0xdc, 0x05, 0x7e, 0x02, 0xd9, 0x32, 0xb3, 0x75, 0xb3, 0xfe, + 0x1b, 0x0a, 0x9f, 0xe8, 0x08, 0xff, 0x44, 0x82, 0x73, 0x45, 0x42, 0x6b, 0xb6, 0x5e, 0x1d, 0x8e, + 0xe4, 0xc3, 0xdf, 0x48, 0x50, 0x10, 0x21, 0x1a, 0xc4, 0xf6, 0xff, 0xfa, 0x09, 0x9d, 0xe0, 0x9b, + 0xae, 0x84, 0x37, 0x79, 0xc5, 0xd8, 0xd5, 0x56, 0xe6, 0x84, 0x4e, 0xde, 0x23, 0x0c, 0x72, 0x17, + 0x64, 0xa9, 0xc8, 0x81, 0x27, 0x95, 0x10, 0x8d, 0xd7, 0xc6, 0x03, 0x4b, 0xd5, 0x86, 0xc3, 0x89, + 0x1f, 0x4b, 0x90, 0x57, 0x88, 0x41, 0x54, 0x3a, 0x24, 0x51, 0xfd, 0x48, 0x82, 0xf9, 0x80, 0x7f, + 0x99, 0xca, 0xe8, 0x69, 0xc2, 0x79, 0xdf, 0x39, 0x71, 0xa3, 0x70, 0x06, 0xc9, 0xb0, 0x7f, 0xc1, + 0xa8, 0xf3, 0x8b, 0xe6, 0x13, 0x8b, 0xc9, 0xe5, 0xc9, 0xb5, 0xcb, 0xc2, 0x3d, 0xf7, 0xc9, 0xd1, + 0x63, 0xa7, 0xea, 0x76, 0x54, 0xdd, 0x56, 0x5c, 0x7e, 0x5c, 0x85, 0xb9, 0x72, 0xc3, 0x3a, 0xf8, + 0x3d, 0xa3, 0x84, 0x0f, 0x61, 0x3e, 0xaa, 0x63, 0x10, 0x5b, 0xaf, 0x42, 0x2e, 0xe2, 0x65, 0xd7, + 0xec, 0x09, 0x65, 0x2a, 0xec, 0x66, 0x8a, 0xbf, 0x76, 0xc2, 0xce, 0x6f, 0xb6, 0x1d, 0xd5, 0x66, + 0xfa, 0x69, 0x5f, 0x6c, 0x57, 0x20, 0xdb, 0xea, 0xe0, 0x70, 0xf9, 0x52, 0x9c, 0x2f, 0xe3, 0x53, + 0xb9, 0xbf, 0xbe, 0x92, 0x60, 0xd6, 0xb9, 0xe7, 0xce, 0x12, 0xe6, 0x2f, 0x25, 0x98, 0xb9, 0xa7, + 0xd2, 0xb3, 0x04, 0xf9, 0x85, 0x04, 0x33, 0xce, 0x91, 0xe9, 0x62, 0x3e, 0x5d, 0xc8, 0x4b, 0x30, + 0x15, 0x86, 0x4c, 0xf3, 0x29, 0x9e, 0xd2, 0xd9, 0x10, 0x66, 0x8a, 0xbf, 0x95, 0x60, 0xc1, 0x3b, + 0x59, 0x87, 0xc2, 0xd7, 0x7d, 0x03, 0x7f, 0x21, 0xc1, 0x9c, 0x8f, 0xf8, 0xb4, 0x0f, 0xe0, 0x7e, + 0x53, 0xe4, 0x3d, 0x09, 0xe6, 0xa3, 0xa0, 0x4f, 0xe5, 0x98, 0xfe, 0x42, 0x82, 0x59, 0xe7, 0x0c, + 0x1d, 0x8a, 0x98, 0x47, 0xfb, 0x91, 0x94, 0xa0, 0x1f, 0xf9, 0x54, 0x72, 0x2f, 0x96, 0x00, 0xe0, + 0x41, 0x1c, 0x27, 0x48, 0xb3, 0x84, 0x28, 0xcd, 0x1c, 0x6c, 0x3e, 0xa5, 0x54, 0xa4, 0xf9, 0xe4, + 0x62, 0xd2, 0xc1, 0x16, 0xa4, 0xf1, 0x66, 0xa0, 0xd3, 0xe2, 0x95, 0x49, 0xbd, 0x49, 0x4c, 0xf6, + 0xf2, 0xee, 0x8c, 0x3a, 0x23, 0x71, 0xdc, 0x19, 0xe8, 0x02, 0x4c, 0x50, 0x57, 0x8f, 0xdf, 0xbd, + 0x75, 0x09, 0xb8, 0x01, 0x0b, 0xc7, 0xd0, 0x0c, 0xe2, 0xab, 0x3c, 0x8c, 0xe9, 0xa6, 0x46, 0x0e, + 0x7d, 0x30, 0x9d, 0xa5, 0x63, 0x38, 0x72, 0x82, 0xf2, 0x87, 0x18, 0xbd, 0x08, 0x93, 0x01, 0xaf, + 0x7b, 0x66, 0x07, 0x49, 0xf8, 0x4d, 0x98, 0x09, 0xa1, 0x19, 0xc4, 0xe8, 0x3f, 0x01, 0xf8, 0x1e, + 0x75, 0x73, 0x23, 0xa9, 0x04, 0x28, 0xf8, 0x47, 0x09, 0x90, 0xdb, 0x09, 0x94, 0x1c, 0x67, 0x9c, + 0x66, 0xf9, 0x5c, 0x04, 0x78, 0x43, 0x27, 0x86, 0x16, 0x3c, 0x77, 0x26, 0x38, 0x85, 0xff, 0x5d, + 0x04, 0x99, 0x1c, 0x32, 0x5b, 0xad, 0xb4, 0x54, 0x5b, 0x6d, 0xd2, 0xfc, 0x68, 0xbf, 0x47, 0xc5, + 0x24, 0xdf, 0xb6, 0xc3, 0x77, 0xe1, 0xef, 0x9d, 0x1e, 0xc2, 0xcb, 0xaa, 0x61, 0xb7, 0xf8, 0x22, + 0x00, 0xcf, 0x50, 0xf7, 0xef, 0x51, 0xf7, 0x6f, 0x4e, 0xe1, 0x87, 0xb0, 0x01, 0x39, 0x6e, 0x81, + 0x6b, 0x4e, 0xcb, 0x91, 0x1a, 0xd9, 0x22, 0x45, 0xb6, 0xa0, 0xff, 0x40, 0xda, 0xf3, 0x5e, 0xdf, + 0x07, 0xad, 0xb7, 0x01, 0x7f, 0x26, 0xc1, 0x5c, 0xc4, 0x71, 0x83, 0xe4, 0xe5, 0x2e, 0x20, 0x17, + 0xa8, 0xd6, 0x45, 0xdf, 0x41, 0x15, 0x79, 0x06, 0x7a, 0x8b, 0xa8, 0xad, 0xca, 0xb4, 0x1e, 0xa1, + 0x50, 0xfc, 0x9d, 0x04, 0xd3, 0x9c, 0xcf, 0xd1, 0x46, 0xce, 0x6e, 0x68, 0xdf, 0x96, 0x00, 0x05, + 0xed, 0x18, 0xc4, 0xd3, 0xff, 0x70, 0xef, 0x56, 0xd7, 0x92, 0xec, 0xda, 0x25, 0xe1, 0x9e, 0x80, + 0x32, 0x97, 0x1b, 0xff, 0x2c, 0x41, 0xa6, 0x64, 0x52, 0x62, 0xb3, 0xe1, 0xef, 0x47, 0xd0, 0xdf, + 0x61, 0xdc, 0xb6, 0x0e, 0x2a, 0x9a, 0xca, 0x54, 0xef, 0x5c, 0x38, 0x27, 0x84, 0xb7, 0x6e, 0x58, + 0x55, 0x65, 0xcc, 0xb6, 0x0e, 0x8a, 0x2a, 0x53, 0xd1, 0x79, 0x98, 0x68, 0xa8, 0xb4, 0x51, 0x79, + 0x46, 0x8e, 0x68, 0x3e, 0xbd, 0x98, 0x5c, 0xce, 0x28, 0xe3, 0x0e, 0xe1, 0x3e, 0x39, 0xa2, 0xf8, + 0x5d, 0x09, 0xb2, 0x1d, 0xfb, 0x07, 0x71, 0xff, 0x25, 0x98, 0xb4, 0xad, 0x83, 0x52, 0xb1, 0x52, + 0x25, 0x75, 0xdd, 0xf4, 0x6e, 0x04, 0xe0, 0xa4, 0x75, 0x87, 0xe2, 0xa0, 0x70, 0x19, 0x88, 0xa9, + 0x79, 0xb7, 0xc1, 0x38, 0x27, 0x6c, 0x9a, 0x1a, 0xde, 0x87, 0xdc, 0x8e, 0xa1, 0xd6, 0x48, 0xc3, + 0x32, 0x34, 0x62, 0xf3, 0xaa, 0x44, 0x39, 0x48, 0x32, 0xb5, 0xee, 0x15, 0xb7, 0xf3, 0x13, 0xfd, + 0x1b, 0x52, 0xec, 0xa8, 0xd5, 0x89, 0xf0, 0x5f, 0x84, 0xe5, 0x13, 0x10, 0xb3, 0x7b, 0xd4, 0x22, + 0x0a, 0xdf, 0x81, 0xe6, 0x21, 0xcd, 0x07, 0x4e, 0x6e, 0x43, 0x20, 0x2b, 0xde, 0x0a, 0x3f, 0x0d, + 0xe9, 0xdd, 0xb2, 0xad, 0x76, 0x0b, 0x95, 0x40, 0x6e, 0x75, 0x69, 0x8e, 0x13, 0xe2, 0x8b, 0x35, + 0x0a, 0x5a, 0x09, 0x6d, 0xc5, 0x3f, 0x48, 0x90, 0x29, 0x13, 0xd5, 0xae, 0x35, 0xce, 0x42, 0x8f, + 0xee, 0x78, 0x5c, 0xa3, 0x86, 0x57, 0xa6, 0xce, 0x4f, 0x74, 0x1d, 0xa6, 0x03, 0x06, 0x55, 0xea, + 0x8e, 0x83, 0xf2, 0x69, 0x3e, 0x95, 0xcd, 0xb5, 0x22, 0x8e, 0xc3, 0xf7, 0x21, 0x75, 0x4f, 0x67, + 0x5c, 0x8c, 0x73, 0x09, 0x4b, 0xfc, 0x12, 0x76, 0x7e, 0xa2, 0x73, 0x81, 0xbc, 0x4d, 0xf0, 0x00, + 0xf8, 0xc9, 0xc9, 0x87, 0xbd, 0x96, 0xed, 0x45, 0x26, 0xa1, 0x78, 0x2b, 0xfc, 0x6a, 0xd7, 0x73, + 0xb4, 0x6d, 0x30, 0xfa, 0x72, 0x59, 0x89, 0x20, 0xd5, 0xd0, 0xbd, 0x7e, 0x5b, 0x56, 0xf8, 0x6f, + 0xfc, 0x8e, 0x04, 0xf2, 0x5d, 0xa3, 0x4d, 0x4f, 0x33, 0x26, 0x4e, 0xd9, 0xcd, 0x2a, 0xa4, 0xae, + 0x53, 0x46, 0xec, 0x07, 0xba, 0xf9, 0xcc, 0x2f, 0xbe, 0x7f, 0xc2, 0x98, 0xaa, 0x69, 0x36, 0xa1, + 0xf4, 0x44, 0x3c, 0x77, 0x5c, 0x1e, 0xa5, 0xc3, 0x1c, 0x70, 0x4f, 0xa2, 0x6f, 0xf7, 0x5c, 0xbb, + 0x0d, 0x53, 0x91, 0x7a, 0x41, 0xe3, 0x90, 0xda, 0x7e, 0xb4, 0xbd, 0x99, 0x1b, 0x41, 0xd3, 0x90, + 0x79, 0xbc, 0xb9, 0xb1, 0xfb, 0x48, 0xa9, 0xac, 0x97, 0xb6, 0xef, 0x28, 0x7b, 0x39, 0x0d, 0xe5, + 0x40, 0xf6, 0x48, 0x77, 0x1f, 0x3c, 0xba, 0xb3, 0x9b, 0x23, 0x6b, 0x3f, 0xe5, 0x20, 0xf3, 0x90, + 0x2b, 0x2a, 0x13, 0x7b, 0x5f, 0xaf, 0x11, 0x54, 0x81, 0x5c, 0xf4, 0x63, 0x02, 0xba, 0x21, 0x2c, + 0x9e, 0x98, 0x6f, 0x0e, 0x85, 0x93, 0xa0, 0xe3, 0x11, 0xf4, 0x04, 0xb2, 0xe1, 0xaf, 0x00, 0xe8, + 0x9a, 0x50, 0xbc, 0xf0, 0x53, 0x41, 0x2f, 0xe1, 0x15, 0xc8, 0x84, 0x86, 0xfa, 0xe8, 0xaa, 0x50, + 0xb6, 0x68, 0xf0, 0x5f, 0xb8, 0x2c, 0x64, 0x0d, 0xce, 0xe5, 0x5d, 0xf4, 0xe1, 0x39, 0x6d, 0x0c, + 0x7a, 0xe1, 0x30, 0xb7, 0x17, 0x7a, 0x15, 0xa6, 0x8f, 0x8d, 0x5d, 0xd1, 0x4d, 0xa1, 0xfc, 0xb8, + 0xf1, 0x6c, 0x2f, 0x15, 0x07, 0x80, 0x8e, 0x8f, 0xc7, 0xd1, 0x8a, 0x38, 0x02, 0x71, 0x93, 0xfd, + 0xc2, 0x6a, 0xdf, 0xfc, 0xbe, 0xe3, 0xf6, 0x61, 0x61, 0x8b, 0xb0, 0xf0, 0xd4, 0x54, 0xa7, 0x4c, + 0xaf, 0x51, 0x74, 0x5d, 0x9c, 0x5e, 0xc2, 0x79, 0x6f, 0xe1, 0x46, 0x7f, 0xcc, 0xbe, 0x5e, 0x03, + 0xa6, 0xc2, 0xd3, 0x4b, 0x1a, 0x13, 0x31, 0xe1, 0x1c, 0xb5, 0x70, 0xbd, 0x2f, 0x5e, 0x5f, 0xdb, + 0x53, 0x98, 0x8a, 0x0c, 0x2c, 0xe3, 0xac, 0x13, 0x8e, 0x35, 0x7b, 0x45, 0x6f, 0x0f, 0x32, 0xa1, + 0xc9, 0x62, 0x4c, 0x7a, 0x8b, 0xa6, 0x8f, 0xbd, 0x44, 0x3f, 0x05, 0x39, 0x38, 0x00, 0x44, 0xcb, + 0x71, 0x85, 0x73, 0x4c, 0x70, 0x5f, 0x75, 0xb3, 0xe7, 0xd6, 0x8d, 0xbf, 0x99, 0xc6, 0x28, 0x10, + 0x4c, 0xf4, 0x7a, 0x21, 0x7f, 0xdd, 0xaf, 0x9a, 0x80, 0xf4, 0x1b, 0x27, 0x55, 0xcd, 0xaf, 0xf5, + 0x0d, 0x85, 0xf9, 0x2d, 0xc2, 0x42, 0x93, 0x24, 0x2f, 0x75, 0xc5, 0xa9, 0x24, 0x1c, 0x94, 0xc5, + 0xa4, 0x92, 0x78, 0x3e, 0x85, 0x47, 0x90, 0x0e, 0xd9, 0xd0, 0x04, 0x86, 0xc6, 0x04, 0x5b, 0x34, + 0x57, 0x2a, 0x5c, 0xeb, 0x87, 0xd5, 0x57, 0xf5, 0x7f, 0x98, 0x0c, 0x3c, 0xae, 0xd1, 0xd2, 0x09, + 0x19, 0x1b, 0x7c, 0x8c, 0xf6, 0x72, 0x5b, 0x03, 0x32, 0xa1, 0xa7, 0x58, 0x5c, 0xb6, 0x0a, 0xde, + 0xb9, 0x31, 0x06, 0x08, 0x5f, 0x76, 0x78, 0x04, 0x55, 0x21, 0xb3, 0x45, 0x58, 0xf7, 0x75, 0x80, + 0xfe, 0x1a, 0xff, 0x36, 0x0b, 0xbe, 0xb9, 0x0a, 0x4b, 0x3d, 0xf9, 0x7c, 0x1d, 0x65, 0x48, 0xbb, + 0x8d, 0x36, 0xc2, 0x31, 0x9b, 0x02, 0xaf, 0x90, 0xc2, 0x9f, 0x4f, 0xe4, 0xf1, 0x85, 0x2a, 0x90, + 0x76, 0xdb, 0xa4, 0x18, 0xa1, 0xa1, 0xee, 0xb3, 0x70, 0x32, 0x0f, 0xef, 0xb3, 0xf0, 0x08, 0x2a, + 0xc1, 0x28, 0xef, 0x8f, 0x90, 0xb8, 0x30, 0x83, 0xbd, 0x53, 0xaf, 0x08, 0xfe, 0x0f, 0xe4, 0x2d, + 0xc2, 0x8a, 0xda, 0x46, 0x43, 0x35, 0x4d, 0x62, 0xa0, 0x82, 0x90, 0x7d, 0xb3, 0xd9, 0x62, 0x47, + 0x31, 0x16, 0x87, 0xbf, 0x3d, 0xe3, 0x91, 0xb5, 0x3a, 0xc8, 0x3b, 0xb6, 0x75, 0x78, 0xd4, 0xe9, + 0x37, 0x5e, 0x01, 0x39, 0xd8, 0x48, 0x9d, 0xa8, 0xe2, 0x6a, 0x4c, 0x51, 0x1f, 0xef, 0xc3, 0xf0, + 0xc8, 0xfa, 0xfa, 0x6b, 0xb7, 0xeb, 0x3a, 0x6b, 0xb4, 0xab, 0x8e, 0x8c, 0xd5, 0xe7, 0xba, 0x61, + 0xe8, 0xcf, 0x19, 0xa9, 0x35, 0x56, 0xdd, 0x6d, 0x37, 0x35, 0x9d, 0x32, 0x5b, 0xaf, 0xb6, 0x19, + 0xd1, 0x56, 0x75, 0x93, 0x11, 0xdb, 0x54, 0x8d, 0x55, 0x2e, 0xd8, 0xe3, 0x68, 0x55, 0xab, 0x69, + 0xbe, 0xbe, 0xf5, 0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x3e, 0x9a, 0x14, 0xa2, 0x21, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used.