Fix travel timestamp and guarantee timestamp (#6234)

Signed-off-by: zhenshan.cao <zhenshan.cao@zilliz.com>
pull/6230/head^2
zhenshan.cao 2021-06-30 21:02:13 +08:00 committed by GitHub
parent a7a9eeeffe
commit ff4c6c7ff4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 680 additions and 1213 deletions

View File

@ -1525,6 +1525,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_milvus_2eproto::offsets[] PROT
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, output_fields_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, search_params_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, travel_timestamp_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, guarantee_timestamp_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::RetrieveRequest, _internal_metadata_),
~0u, // no _extensions_
@ -1537,6 +1538,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_milvus_2eproto::offsets[] PROT
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::RetrieveRequest, ids_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::RetrieveRequest, output_fields_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::RetrieveRequest, travel_timestamp_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::RetrieveRequest, guarantee_timestamp_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::RetrieveResults, _internal_metadata_),
~0u, // no _extensions_
@ -1721,25 +1723,25 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
{ 326, -1, sizeof(::milvus::proto::milvus::PlaceholderValue)},
{ 334, -1, sizeof(::milvus::proto::milvus::PlaceholderGroup)},
{ 340, -1, sizeof(::milvus::proto::milvus::SearchRequest)},
{ 355, -1, sizeof(::milvus::proto::milvus::RetrieveRequest)},
{ 367, -1, sizeof(::milvus::proto::milvus::RetrieveResults)},
{ 375, -1, sizeof(::milvus::proto::milvus::Hits)},
{ 383, -1, sizeof(::milvus::proto::milvus::SearchResults)},
{ 390, -1, sizeof(::milvus::proto::milvus::FlushRequest)},
{ 398, 405, sizeof(::milvus::proto::milvus::FlushResponse_CollSegIDsEntry_DoNotUse)},
{ 407, -1, sizeof(::milvus::proto::milvus::FlushResponse)},
{ 415, -1, sizeof(::milvus::proto::milvus::QueryRequest)},
{ 426, -1, sizeof(::milvus::proto::milvus::QueryResults)},
{ 433, -1, sizeof(::milvus::proto::milvus::PersistentSegmentInfo)},
{ 443, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoRequest)},
{ 451, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoResponse)},
{ 458, -1, sizeof(::milvus::proto::milvus::QuerySegmentInfo)},
{ 470, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoRequest)},
{ 478, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoResponse)},
{ 485, -1, sizeof(::milvus::proto::milvus::DummyRequest)},
{ 491, -1, sizeof(::milvus::proto::milvus::DummyResponse)},
{ 497, -1, sizeof(::milvus::proto::milvus::RegisterLinkRequest)},
{ 502, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)},
{ 356, -1, sizeof(::milvus::proto::milvus::RetrieveRequest)},
{ 369, -1, sizeof(::milvus::proto::milvus::RetrieveResults)},
{ 377, -1, sizeof(::milvus::proto::milvus::Hits)},
{ 385, -1, sizeof(::milvus::proto::milvus::SearchResults)},
{ 392, -1, sizeof(::milvus::proto::milvus::FlushRequest)},
{ 400, 407, sizeof(::milvus::proto::milvus::FlushResponse_CollSegIDsEntry_DoNotUse)},
{ 409, -1, sizeof(::milvus::proto::milvus::FlushResponse)},
{ 417, -1, sizeof(::milvus::proto::milvus::QueryRequest)},
{ 428, -1, sizeof(::milvus::proto::milvus::QueryResults)},
{ 435, -1, sizeof(::milvus::proto::milvus::PersistentSegmentInfo)},
{ 445, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoRequest)},
{ 453, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoResponse)},
{ 460, -1, sizeof(::milvus::proto::milvus::QuerySegmentInfo)},
{ 472, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoRequest)},
{ 480, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoResponse)},
{ 487, -1, sizeof(::milvus::proto::milvus::DummyRequest)},
{ 493, -1, sizeof(::milvus::proto::milvus::DummyResponse)},
{ 499, -1, sizeof(::milvus::proto::milvus::RegisterLinkRequest)},
{ 504, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)},
};
static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@ -1938,7 +1940,7 @@ const char descriptor_table_protodef_milvus_2eproto[] PROTOBUF_SECTION_VARIABLE(
"milvus.proto.milvus.PlaceholderType\022\016\n\006v"
"alues\030\003 \003(\014\"O\n\020PlaceholderGroup\022;\n\014place"
"holders\030\001 \003(\0132%.milvus.proto.milvus.Plac"
"eholderValue\"\301\002\n\rSearchRequest\022*\n\004base\030\001"
"eholderValue\"\336\002\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\017"
"partition_names\030\004 \003(\t\022\013\n\003dsl\030\005 \001(\t\022\031\n\021pl"
@ -1946,143 +1948,145 @@ const char descriptor_table_protodef_milvus_2eproto[] PROTOBUF_SECTION_VARIABLE(
"\034.milvus.proto.common.DslType\022\025\n\routput_"
"fields\030\010 \003(\t\0228\n\rsearch_params\030\t \003(\0132!.mi"
"lvus.proto.common.KeyValuePair\022\030\n\020travel"
"_timestamp\030\n \001(\004\"\330\001\n\017RetrieveRequest\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\022\027\n\017partition_names\030\004 \003(\t\022%\n\003ids\030\005 \001(\013"
"2\030.milvus.proto.schema.IDs\022\025\n\routput_fie"
"lds\030\006 \003(\t\022\030\n\020travel_timestamp\030\007 \001(\004\"\232\001\n\017"
"RetrieveResults\022+\n\006status\030\001 \001(\0132\033.milvus"
".proto.common.Status\022%\n\003ids\030\002 \001(\0132\030.milv"
"us.proto.schema.IDs\0223\n\013fields_data\030\003 \003(\013"
"2\036.milvus.proto.schema.FieldData\"5\n\004Hits"
"\022\013\n\003IDs\030\001 \003(\003\022\020\n\010row_data\030\002 \003(\014\022\016\n\006score"
"s\030\003 \003(\002\"t\n\rSearchResults\022+\n\006status\030\001 \001(\013"
"2\033.milvus.proto.common.Status\0226\n\007results"
"\030\002 \001(\0132%.milvus.proto.schema.SearchResul"
"tData\"e\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\030\n\020collection_names\030\003 \003(\t\"\351\001\n\rFlushRe"
"sponse\022+\n\006status\030\001 \001(\0132\033.milvus.proto.co"
"mmon.Status\022\017\n\007db_name\030\002 \001(\t\022G\n\013coll_seg"
"IDs\030\003 \003(\01322.milvus.proto.milvus.FlushRes"
"ponse.CollSegIDsEntry\032Q\n\017CollSegIDsEntry"
"\022\013\n\003key\030\001 \001(\t\022-\n\005value\030\002 \001(\0132\036.milvus.pr"
"oto.schema.LongArray:\0028\001\"\242\001\n\014QueryReques"
"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\014\n\004expr\030\004 \001(\t\022\025\n\routput_fields\030\005"
" \003(\t\022\027\n\017partition_names\030\006 \003(\t\"p\n\014QueryRe"
"sults\022+\n\006status\030\001 \001(\0132\033.milvus.proto.com"
"mon.Status\0223\n\013fields_data\030\002 \003(\0132\036.milvus"
".proto.schema.FieldData\"\231\001\n\025PersistentSe"
"gmentInfo\022\021\n\tsegmentID\030\001 \001(\003\022\024\n\014collecti"
"onID\030\002 \001(\003\022\023\n\013partitionID\030\003 \001(\003\022\020\n\010num_r"
"ows\030\004 \001(\003\0220\n\005state\030\005 \001(\0162!.milvus.proto."
"common.SegmentState\"u\n\037GetPersistentSegm"
"entInfoRequest\022*\n\004base\030\001 \001(\0132\034.milvus.pr"
"oto.common.MsgBase\022\016\n\006dbName\030\002 \001(\t\022\026\n\016co"
"llectionName\030\003 \001(\t\"\212\001\n GetPersistentSegm"
"entInfoResponse\022+\n\006status\030\001 \001(\0132\033.milvus"
".proto.common.Status\0229\n\005infos\030\002 \003(\0132*.mi"
"lvus.proto.milvus.PersistentSegmentInfo\""
"\231\001\n\020QuerySegmentInfo\022\021\n\tsegmentID\030\001 \001(\003\022"
"\024\n\014collectionID\030\002 \001(\003\022\023\n\013partitionID\030\003 \001"
"(\003\022\020\n\010mem_size\030\004 \001(\003\022\020\n\010num_rows\030\005 \001(\003\022\022"
"\n\nindex_name\030\006 \001(\t\022\017\n\007indexID\030\007 \001(\003\"p\n\032G"
"etQuerySegmentInfoRequest\022*\n\004base\030\001 \001(\0132"
"\034.milvus.proto.common.MsgBase\022\016\n\006dbName\030"
"\002 \001(\t\022\026\n\016collectionName\030\003 \001(\t\"\200\001\n\033GetQue"
"rySegmentInfoResponse\022+\n\006status\030\001 \001(\0132\033."
"milvus.proto.common.Status\0224\n\005infos\030\002 \003("
"\0132%.milvus.proto.milvus.QuerySegmentInfo"
"\"$\n\014DummyRequest\022\024\n\014request_type\030\001 \001(\t\"!"
"\n\rDummyResponse\022\020\n\010response\030\001 \001(\t\"\025\n\023Reg"
"isterLinkRequest\"r\n\024RegisterLinkResponse"
"\022-\n\007address\030\001 \001(\0132\034.milvus.proto.common."
"Address\022+\n\006status\030\002 \001(\0132\033.milvus.proto.c"
"ommon.Status*,\n\023ShowCollectionsType\022\007\n\003A"
"ll\020\000\022\014\n\010InMemory\020\001*>\n\017PlaceholderType\022\010\n"
"\004None\020\000\022\020\n\014BinaryVector\020d\022\017\n\013FloatVector"
"\020e2\224\027\n\rMilvusService\022_\n\020CreateCollection"
"\022,.milvus.proto.milvus.CreateCollectionR"
"equest\032\033.milvus.proto.common.Status\"\000\022[\n"
"\016DropCollection\022*.milvus.proto.milvus.Dr"
"opCollectionRequest\032\033.milvus.proto.commo"
"n.Status\"\000\022_\n\rHasCollection\022).milvus.pro"
"to.milvus.HasCollectionRequest\032!.milvus."
"proto.milvus.BoolResponse\"\000\022[\n\016LoadColle"
"ction\022*.milvus.proto.milvus.LoadCollecti"
"onRequest\032\033.milvus.proto.common.Status\"\000"
"\022a\n\021ReleaseCollection\022-.milvus.proto.mil"
"vus.ReleaseCollectionRequest\032\033.milvus.pr"
"oto.common.Status\"\000\022w\n\022DescribeCollectio"
"n\022..milvus.proto.milvus.DescribeCollecti"
"onRequest\032/.milvus.proto.milvus.Describe"
"CollectionResponse\"\000\022\206\001\n\027GetCollectionSt"
"atistics\0223.milvus.proto.milvus.GetCollec"
"tionStatisticsRequest\0324.milvus.proto.mil"
"vus.GetCollectionStatisticsResponse\"\000\022n\n"
"\017ShowCollections\022+.milvus.proto.milvus.S"
"howCollectionsRequest\032,.milvus.proto.mil"
"vus.ShowCollectionsResponse\"\000\022]\n\017CreateP"
"artition\022+.milvus.proto.milvus.CreatePar"
"titionRequest\032\033.milvus.proto.common.Stat"
"us\"\000\022Y\n\rDropPartition\022).milvus.proto.mil"
"vus.DropPartitionRequest\032\033.milvus.proto."
"common.Status\"\000\022]\n\014HasPartition\022(.milvus"
".proto.milvus.HasPartitionRequest\032!.milv"
"us.proto.milvus.BoolResponse\"\000\022[\n\016LoadPa"
"rtitions\022*.milvus.proto.milvus.LoadParti"
"tionsRequest\032\033.milvus.proto.common.Statu"
"s\"\000\022a\n\021ReleasePartitions\022-.milvus.proto."
"milvus.ReleasePartitionsRequest\032\033.milvus"
".proto.common.Status\"\000\022\203\001\n\026GetPartitionS"
"tatistics\0222.milvus.proto.milvus.GetParti"
"tionStatisticsRequest\0323.milvus.proto.mil"
"vus.GetPartitionStatisticsResponse\"\000\022k\n\016"
"ShowPartitions\022*.milvus.proto.milvus.Sho"
"wPartitionsRequest\032+.milvus.proto.milvus"
".ShowPartitionsResponse\"\000\022U\n\013CreateIndex"
"\022\'.milvus.proto.milvus.CreateIndexReques"
"t\032\033.milvus.proto.common.Status\"\000\022h\n\rDesc"
"ribeIndex\022).milvus.proto.milvus.Describe"
"IndexRequest\032*.milvus.proto.milvus.Descr"
"ibeIndexResponse\"\000\022h\n\rGetIndexState\022).mi"
"lvus.proto.milvus.GetIndexStateRequest\032*"
".milvus.proto.milvus.GetIndexStateRespon"
"se\"\000\022\200\001\n\025GetIndexBuildProgress\0221.milvus."
"proto.milvus.GetIndexBuildProgressReques"
"t\0322.milvus.proto.milvus.GetIndexBuildPro"
"gressResponse\"\000\022Q\n\tDropIndex\022%.milvus.pr"
"oto.milvus.DropIndexRequest\032\033.milvus.pro"
"to.common.Status\"\000\022S\n\006Insert\022\".milvus.pr"
"oto.milvus.InsertRequest\032#.milvus.proto."
"milvus.MutationResult\"\000\022R\n\006Search\022\".milv"
"us.proto.milvus.SearchRequest\032\".milvus.p"
"roto.milvus.SearchResults\"\000\022X\n\010Retrieve\022"
"$.milvus.proto.milvus.RetrieveRequest\032$."
"milvus.proto.milvus.RetrieveResults\"\000\022P\n"
"\005Flush\022!.milvus.proto.milvus.FlushReques"
"t\032\".milvus.proto.milvus.FlushResponse\"\000\022"
"O\n\005Query\022!.milvus.proto.milvus.QueryRequ"
"est\032!.milvus.proto.milvus.QueryResults\"\000"
"\022\211\001\n\030GetPersistentSegmentInfo\0224.milvus.p"
"roto.milvus.GetPersistentSegmentInfoRequ"
"est\0325.milvus.proto.milvus.GetPersistentS"
"egmentInfoResponse\"\000\022z\n\023GetQuerySegmentI"
"nfo\022/.milvus.proto.milvus.GetQuerySegmen"
"tInfoRequest\0320.milvus.proto.milvus.GetQu"
"erySegmentInfoResponse\"\000\022P\n\005Dummy\022!.milv"
"us.proto.milvus.DummyRequest\032\".milvus.pr"
"oto.milvus.DummyResponse\"\000\022e\n\014RegisterLi"
"nk\022(.milvus.proto.milvus.RegisterLinkReq"
"uest\032).milvus.proto.milvus.RegisterLinkR"
"esponse\"\0002u\n\014ProxyService\022e\n\014RegisterLin"
"k\022(.milvus.proto.milvus.RegisterLinkRequ"
"est\032).milvus.proto.milvus.RegisterLinkRe"
"sponse\"\000B5Z3github.com/milvus-io/milvus/"
"internal/proto/milvuspbb\006proto3"
"_timestamp\030\n \001(\004\022\033\n\023guarantee_timestamp\030"
"\013 \001(\004\"\365\001\n\017RetrieveRequest\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%\n\003ids\030\005 \001(\0132\030.milvus.p"
"roto.schema.IDs\022\025\n\routput_fields\030\006 \003(\t\022\030"
"\n\020travel_timestamp\030\007 \001(\004\022\033\n\023guarantee_ti"
"mestamp\030\010 \001(\004\"\232\001\n\017RetrieveResults\022+\n\006sta"
"tus\030\001 \001(\0132\033.milvus.proto.common.Status\022%"
"\n\003ids\030\002 \001(\0132\030.milvus.proto.schema.IDs\0223\n"
"\013fields_data\030\003 \003(\0132\036.milvus.proto.schema"
".FieldData\"5\n\004Hits\022\013\n\003IDs\030\001 \003(\003\022\020\n\010row_d"
"ata\030\002 \003(\014\022\016\n\006scores\030\003 \003(\002\"t\n\rSearchResul"
"ts\022+\n\006status\030\001 \001(\0132\033.milvus.proto.common"
".Status\0226\n\007results\030\002 \001(\0132%.milvus.proto."
"schema.SearchResultData\"e\n\014FlushRequest\022"
"*\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgB"
"ase\022\017\n\007db_name\030\002 \001(\t\022\030\n\020collection_names"
"\030\003 \003(\t\"\351\001\n\rFlushResponse\022+\n\006status\030\001 \001(\013"
"2\033.milvus.proto.common.Status\022\017\n\007db_name"
"\030\002 \001(\t\022G\n\013coll_segIDs\030\003 \003(\01322.milvus.pro"
"to.milvus.FlushResponse.CollSegIDsEntry\032"
"Q\n\017CollSegIDsEntry\022\013\n\003key\030\001 \001(\t\022-\n\005value"
"\030\002 \001(\0132\036.milvus.proto.schema.LongArray:\002"
"8\001\"\242\001\n\014QueryRequest\022*\n\004base\030\001 \001(\0132\034.milv"
"us.proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t"
"\022\027\n\017collection_name\030\003 \001(\t\022\014\n\004expr\030\004 \001(\t\022"
"\025\n\routput_fields\030\005 \003(\t\022\027\n\017partition_name"
"s\030\006 \003(\t\"p\n\014QueryResults\022+\n\006status\030\001 \001(\0132"
"\033.milvus.proto.common.Status\0223\n\013fields_d"
"ata\030\002 \003(\0132\036.milvus.proto.schema.FieldDat"
"a\"\231\001\n\025PersistentSegmentInfo\022\021\n\tsegmentID"
"\030\001 \001(\003\022\024\n\014collectionID\030\002 \001(\003\022\023\n\013partitio"
"nID\030\003 \001(\003\022\020\n\010num_rows\030\004 \001(\003\0220\n\005state\030\005 \001"
"(\0162!.milvus.proto.common.SegmentState\"u\n"
"\037GetPersistentSegmentInfoRequest\022*\n\004base"
"\030\001 \001(\0132\034.milvus.proto.common.MsgBase\022\016\n\006"
"dbName\030\002 \001(\t\022\026\n\016collectionName\030\003 \001(\t\"\212\001\n"
" GetPersistentSegmentInfoResponse\022+\n\006sta"
"tus\030\001 \001(\0132\033.milvus.proto.common.Status\0229"
"\n\005infos\030\002 \003(\0132*.milvus.proto.milvus.Pers"
"istentSegmentInfo\"\231\001\n\020QuerySegmentInfo\022\021"
"\n\tsegmentID\030\001 \001(\003\022\024\n\014collectionID\030\002 \001(\003\022"
"\023\n\013partitionID\030\003 \001(\003\022\020\n\010mem_size\030\004 \001(\003\022\020"
"\n\010num_rows\030\005 \001(\003\022\022\n\nindex_name\030\006 \001(\t\022\017\n\007"
"indexID\030\007 \001(\003\"p\n\032GetQuerySegmentInfoRequ"
"est\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common."
"MsgBase\022\016\n\006dbName\030\002 \001(\t\022\026\n\016collectionNam"
"e\030\003 \001(\t\"\200\001\n\033GetQuerySegmentInfoResponse\022"
"+\n\006status\030\001 \001(\0132\033.milvus.proto.common.St"
"atus\0224\n\005infos\030\002 \003(\0132%.milvus.proto.milvu"
"s.QuerySegmentInfo\"$\n\014DummyRequest\022\024\n\014re"
"quest_type\030\001 \001(\t\"!\n\rDummyResponse\022\020\n\010res"
"ponse\030\001 \001(\t\"\025\n\023RegisterLinkRequest\"r\n\024Re"
"gisterLinkResponse\022-\n\007address\030\001 \001(\0132\034.mi"
"lvus.proto.common.Address\022+\n\006status\030\002 \001("
"\0132\033.milvus.proto.common.Status*,\n\023ShowCo"
"llectionsType\022\007\n\003All\020\000\022\014\n\010InMemory\020\001*>\n\017"
"PlaceholderType\022\010\n\004None\020\000\022\020\n\014BinaryVecto"
"r\020d\022\017\n\013FloatVector\020e2\224\027\n\rMilvusService\022_"
"\n\020CreateCollection\022,.milvus.proto.milvus"
".CreateCollectionRequest\032\033.milvus.proto."
"common.Status\"\000\022[\n\016DropCollection\022*.milv"
"us.proto.milvus.DropCollectionRequest\032\033."
"milvus.proto.common.Status\"\000\022_\n\rHasColle"
"ction\022).milvus.proto.milvus.HasCollectio"
"nRequest\032!.milvus.proto.milvus.BoolRespo"
"nse\"\000\022[\n\016LoadCollection\022*.milvus.proto.m"
"ilvus.LoadCollectionRequest\032\033.milvus.pro"
"to.common.Status\"\000\022a\n\021ReleaseCollection\022"
"-.milvus.proto.milvus.ReleaseCollectionR"
"equest\032\033.milvus.proto.common.Status\"\000\022w\n"
"\022DescribeCollection\022..milvus.proto.milvu"
"s.DescribeCollectionRequest\032/.milvus.pro"
"to.milvus.DescribeCollectionResponse\"\000\022\206"
"\001\n\027GetCollectionStatistics\0223.milvus.prot"
"o.milvus.GetCollectionStatisticsRequest\032"
"4.milvus.proto.milvus.GetCollectionStati"
"sticsResponse\"\000\022n\n\017ShowCollections\022+.mil"
"vus.proto.milvus.ShowCollectionsRequest\032"
",.milvus.proto.milvus.ShowCollectionsRes"
"ponse\"\000\022]\n\017CreatePartition\022+.milvus.prot"
"o.milvus.CreatePartitionRequest\032\033.milvus"
".proto.common.Status\"\000\022Y\n\rDropPartition\022"
").milvus.proto.milvus.DropPartitionReque"
"st\032\033.milvus.proto.common.Status\"\000\022]\n\014Has"
"Partition\022(.milvus.proto.milvus.HasParti"
"tionRequest\032!.milvus.proto.milvus.BoolRe"
"sponse\"\000\022[\n\016LoadPartitions\022*.milvus.prot"
"o.milvus.LoadPartitionsRequest\032\033.milvus."
"proto.common.Status\"\000\022a\n\021ReleasePartitio"
"ns\022-.milvus.proto.milvus.ReleasePartitio"
"nsRequest\032\033.milvus.proto.common.Status\"\000"
"\022\203\001\n\026GetPartitionStatistics\0222.milvus.pro"
"to.milvus.GetPartitionStatisticsRequest\032"
"3.milvus.proto.milvus.GetPartitionStatis"
"ticsResponse\"\000\022k\n\016ShowPartitions\022*.milvu"
"s.proto.milvus.ShowPartitionsRequest\032+.m"
"ilvus.proto.milvus.ShowPartitionsRespons"
"e\"\000\022U\n\013CreateIndex\022\'.milvus.proto.milvus"
".CreateIndexRequest\032\033.milvus.proto.commo"
"n.Status\"\000\022h\n\rDescribeIndex\022).milvus.pro"
"to.milvus.DescribeIndexRequest\032*.milvus."
"proto.milvus.DescribeIndexResponse\"\000\022h\n\r"
"GetIndexState\022).milvus.proto.milvus.GetI"
"ndexStateRequest\032*.milvus.proto.milvus.G"
"etIndexStateResponse\"\000\022\200\001\n\025GetIndexBuild"
"Progress\0221.milvus.proto.milvus.GetIndexB"
"uildProgressRequest\0322.milvus.proto.milvu"
"s.GetIndexBuildProgressResponse\"\000\022Q\n\tDro"
"pIndex\022%.milvus.proto.milvus.DropIndexRe"
"quest\032\033.milvus.proto.common.Status\"\000\022S\n\006"
"Insert\022\".milvus.proto.milvus.InsertReque"
"st\032#.milvus.proto.milvus.MutationResult\""
"\000\022R\n\006Search\022\".milvus.proto.milvus.Search"
"Request\032\".milvus.proto.milvus.SearchResu"
"lts\"\000\022X\n\010Retrieve\022$.milvus.proto.milvus."
"RetrieveRequest\032$.milvus.proto.milvus.Re"
"trieveResults\"\000\022P\n\005Flush\022!.milvus.proto."
"milvus.FlushRequest\032\".milvus.proto.milvu"
"s.FlushResponse\"\000\022O\n\005Query\022!.milvus.prot"
"o.milvus.QueryRequest\032!.milvus.proto.mil"
"vus.QueryResults\"\000\022\211\001\n\030GetPersistentSegm"
"entInfo\0224.milvus.proto.milvus.GetPersist"
"entSegmentInfoRequest\0325.milvus.proto.mil"
"vus.GetPersistentSegmentInfoResponse\"\000\022z"
"\n\023GetQuerySegmentInfo\022/.milvus.proto.mil"
"vus.GetQuerySegmentInfoRequest\0320.milvus."
"proto.milvus.GetQuerySegmentInfoResponse"
"\"\000\022P\n\005Dummy\022!.milvus.proto.milvus.DummyR"
"equest\032\".milvus.proto.milvus.DummyRespon"
"se\"\000\022e\n\014RegisterLink\022(.milvus.proto.milv"
"us.RegisterLinkRequest\032).milvus.proto.mi"
"lvus.RegisterLinkResponse\"\0002u\n\014ProxyServ"
"ice\022e\n\014RegisterLink\022(.milvus.proto.milvu"
"s.RegisterLinkRequest\032).milvus.proto.mil"
"vus.RegisterLinkResponse\"\000B5Z3github.com"
"/milvus-io/milvus/internal/proto/milvusp"
"bb\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_milvus_2eproto_deps[2] = {
&::descriptor_table_common_2eproto,
@ -2152,7 +2156,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", 11111,
&descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 11169,
&descriptor_table_milvus_2eproto_once, descriptor_table_milvus_2eproto_sccs, descriptor_table_milvus_2eproto_deps, 59, 2,
schemas, file_default_instances, TableStruct_milvus_2eproto::offsets,
file_level_metadata_milvus_2eproto, 59, file_level_enum_descriptors_milvus_2eproto, file_level_service_descriptors_milvus_2eproto,
@ -19135,6 +19139,13 @@ const char* SearchRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_
CHK_(ptr);
} else goto handle_unusual;
continue;
// uint64 guarantee_timestamp = 11;
case 11:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 88)) {
guarantee_timestamp_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
CHK_(ptr);
} else goto handle_unusual;
continue;
default: {
handle_unusual:
if ((tag & 7) == 4 || tag == 0) {
@ -19302,6 +19313,19 @@ bool SearchRequest::MergePartialFromCodedStream(
break;
}
// uint64 guarantee_timestamp = 11;
case 11: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (88 & 0xFF)) {
DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>(
input, &guarantee_timestamp_)));
} else {
goto handle_unusual;
}
break;
}
default: {
handle_unusual:
if (tag == 0) {
@ -19411,6 +19435,11 @@ void SearchRequest::SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(10, this->travel_timestamp(), output);
}
// uint64 guarantee_timestamp = 11;
if (this->guarantee_timestamp() != 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(11, this->guarantee_timestamp(), output);
}
if (_internal_metadata_.have_unknown_fields()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
_internal_metadata_.unknown_fields(), output);
@ -19510,6 +19539,11 @@ void SearchRequest::SerializeWithCachedSizes(
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(10, this->travel_timestamp(), target);
}
// uint64 guarantee_timestamp = 11;
if (this->guarantee_timestamp() != 0) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(11, this->guarantee_timestamp(), target);
}
if (_internal_metadata_.have_unknown_fields()) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields(), target);
@ -19600,6 +19634,13 @@ size_t SearchRequest::ByteSizeLong() const {
this->travel_timestamp());
}
// uint64 guarantee_timestamp = 11;
if (this->guarantee_timestamp() != 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size(
this->guarantee_timestamp());
}
// .milvus.proto.common.DslType dsl_type = 7;
if (this->dsl_type() != 0) {
total_size += 1 +
@ -19658,6 +19699,9 @@ void SearchRequest::MergeFrom(const SearchRequest& from) {
if (from.travel_timestamp() != 0) {
set_travel_timestamp(from.travel_timestamp());
}
if (from.guarantee_timestamp() != 0) {
set_guarantee_timestamp(from.guarantee_timestamp());
}
if (from.dsl_type() != 0) {
set_dsl_type(from.dsl_type());
}
@ -19697,6 +19741,7 @@ void SearchRequest::InternalSwap(SearchRequest* other) {
GetArenaNoVirtual());
swap(base_, other->base_);
swap(travel_timestamp_, other->travel_timestamp_);
swap(guarantee_timestamp_, other->guarantee_timestamp_);
swap(dsl_type_, other->dsl_type_);
}
@ -19768,7 +19813,9 @@ RetrieveRequest::RetrieveRequest(const RetrieveRequest& from)
} else {
ids_ = nullptr;
}
travel_timestamp_ = from.travel_timestamp_;
::memcpy(&travel_timestamp_, &from.travel_timestamp_,
static_cast<size_t>(reinterpret_cast<char*>(&guarantee_timestamp_) -
reinterpret_cast<char*>(&travel_timestamp_)) + sizeof(guarantee_timestamp_));
// @@protoc_insertion_point(copy_constructor:milvus.proto.milvus.RetrieveRequest)
}
@ -19777,8 +19824,8 @@ void RetrieveRequest::SharedCtor() {
db_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
::memset(&base_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&travel_timestamp_) -
reinterpret_cast<char*>(&base_)) + sizeof(travel_timestamp_));
reinterpret_cast<char*>(&guarantee_timestamp_) -
reinterpret_cast<char*>(&base_)) + sizeof(guarantee_timestamp_));
}
RetrieveRequest::~RetrieveRequest() {
@ -19820,7 +19867,9 @@ void RetrieveRequest::Clear() {
delete ids_;
}
ids_ = nullptr;
travel_timestamp_ = PROTOBUF_ULONGLONG(0);
::memset(&travel_timestamp_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&guarantee_timestamp_) -
reinterpret_cast<char*>(&travel_timestamp_)) + sizeof(guarantee_timestamp_));
_internal_metadata_.Clear();
}
@ -19891,6 +19940,13 @@ const char* RetrieveRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPAC
CHK_(ptr);
} else goto handle_unusual;
continue;
// uint64 guarantee_timestamp = 8;
case 8:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 64)) {
guarantee_timestamp_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
CHK_(ptr);
} else goto handle_unusual;
continue;
default: {
handle_unusual:
if ((tag & 7) == 4 || tag == 0) {
@ -20018,6 +20074,19 @@ bool RetrieveRequest::MergePartialFromCodedStream(
break;
}
// uint64 guarantee_timestamp = 8;
case 8: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (64 & 0xFF)) {
DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
::PROTOBUF_NAMESPACE_ID::uint64, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_UINT64>(
input, &guarantee_timestamp_)));
} else {
goto handle_unusual;
}
break;
}
default: {
handle_unusual:
if (tag == 0) {
@ -20102,6 +20171,11 @@ void RetrieveRequest::SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(7, this->travel_timestamp(), output);
}
// uint64 guarantee_timestamp = 8;
if (this->guarantee_timestamp() != 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64(8, this->guarantee_timestamp(), output);
}
if (_internal_metadata_.have_unknown_fields()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
_internal_metadata_.unknown_fields(), output);
@ -20176,6 +20250,11 @@ void RetrieveRequest::SerializeWithCachedSizes(
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(7, this->travel_timestamp(), target);
}
// uint64 guarantee_timestamp = 8;
if (this->guarantee_timestamp() != 0) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(8, this->guarantee_timestamp(), target);
}
if (_internal_metadata_.have_unknown_fields()) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields(), target);
@ -20248,6 +20327,13 @@ size_t RetrieveRequest::ByteSizeLong() const {
this->travel_timestamp());
}
// uint64 guarantee_timestamp = 8;
if (this->guarantee_timestamp() != 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size(
this->guarantee_timestamp());
}
int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
SetCachedSize(cached_size);
return total_size;
@ -20294,6 +20380,9 @@ void RetrieveRequest::MergeFrom(const RetrieveRequest& from) {
if (from.travel_timestamp() != 0) {
set_travel_timestamp(from.travel_timestamp());
}
if (from.guarantee_timestamp() != 0) {
set_guarantee_timestamp(from.guarantee_timestamp());
}
}
void RetrieveRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
@ -20326,6 +20415,7 @@ void RetrieveRequest::InternalSwap(RetrieveRequest* other) {
swap(base_, other->base_);
swap(ids_, other->ids_);
swap(travel_timestamp_, other->travel_timestamp_);
swap(guarantee_timestamp_, other->guarantee_timestamp_);
}
::PROTOBUF_NAMESPACE_ID::Metadata RetrieveRequest::GetMetadata() const {

View File

@ -6976,6 +6976,7 @@ class SearchRequest :
kPlaceholderGroupFieldNumber = 6,
kBaseFieldNumber = 1,
kTravelTimestampFieldNumber = 10,
kGuaranteeTimestampFieldNumber = 11,
kDslTypeFieldNumber = 7,
};
// repeated string partition_names = 4;
@ -7080,6 +7081,11 @@ class SearchRequest :
::PROTOBUF_NAMESPACE_ID::uint64 travel_timestamp() const;
void set_travel_timestamp(::PROTOBUF_NAMESPACE_ID::uint64 value);
// uint64 guarantee_timestamp = 11;
void clear_guarantee_timestamp();
::PROTOBUF_NAMESPACE_ID::uint64 guarantee_timestamp() const;
void set_guarantee_timestamp(::PROTOBUF_NAMESPACE_ID::uint64 value);
// .milvus.proto.common.DslType dsl_type = 7;
void clear_dsl_type();
::milvus::proto::common::DslType dsl_type() const;
@ -7099,6 +7105,7 @@ class SearchRequest :
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr placeholder_group_;
::milvus::proto::common::MsgBase* base_;
::PROTOBUF_NAMESPACE_ID::uint64 travel_timestamp_;
::PROTOBUF_NAMESPACE_ID::uint64 guarantee_timestamp_;
int dsl_type_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
@ -7225,6 +7232,7 @@ class RetrieveRequest :
kBaseFieldNumber = 1,
kIdsFieldNumber = 5,
kTravelTimestampFieldNumber = 7,
kGuaranteeTimestampFieldNumber = 8,
};
// repeated string partition_names = 4;
int partition_names_size() const;
@ -7303,6 +7311,11 @@ class RetrieveRequest :
::PROTOBUF_NAMESPACE_ID::uint64 travel_timestamp() const;
void set_travel_timestamp(::PROTOBUF_NAMESPACE_ID::uint64 value);
// uint64 guarantee_timestamp = 8;
void clear_guarantee_timestamp();
::PROTOBUF_NAMESPACE_ID::uint64 guarantee_timestamp() const;
void set_guarantee_timestamp(::PROTOBUF_NAMESPACE_ID::uint64 value);
// @@protoc_insertion_point(class_scope:milvus.proto.milvus.RetrieveRequest)
private:
class _Internal;
@ -7315,6 +7328,7 @@ class RetrieveRequest :
::milvus::proto::common::MsgBase* base_;
::milvus::proto::schema::IDs* ids_;
::PROTOBUF_NAMESPACE_ID::uint64 travel_timestamp_;
::PROTOBUF_NAMESPACE_ID::uint64 guarantee_timestamp_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
};
@ -16580,6 +16594,20 @@ inline void SearchRequest::set_travel_timestamp(::PROTOBUF_NAMESPACE_ID::uint64
// @@protoc_insertion_point(field_set:milvus.proto.milvus.SearchRequest.travel_timestamp)
}
// uint64 guarantee_timestamp = 11;
inline void SearchRequest::clear_guarantee_timestamp() {
guarantee_timestamp_ = PROTOBUF_ULONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 SearchRequest::guarantee_timestamp() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.SearchRequest.guarantee_timestamp)
return guarantee_timestamp_;
}
inline void SearchRequest::set_guarantee_timestamp(::PROTOBUF_NAMESPACE_ID::uint64 value) {
guarantee_timestamp_ = value;
// @@protoc_insertion_point(field_set:milvus.proto.milvus.SearchRequest.guarantee_timestamp)
}
// -------------------------------------------------------------------
// RetrieveRequest
@ -16920,6 +16948,20 @@ inline void RetrieveRequest::set_travel_timestamp(::PROTOBUF_NAMESPACE_ID::uint6
// @@protoc_insertion_point(field_set:milvus.proto.milvus.RetrieveRequest.travel_timestamp)
}
// uint64 guarantee_timestamp = 8;
inline void RetrieveRequest::clear_guarantee_timestamp() {
guarantee_timestamp_ = PROTOBUF_ULONGLONG(0);
}
inline ::PROTOBUF_NAMESPACE_ID::uint64 RetrieveRequest::guarantee_timestamp() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.RetrieveRequest.guarantee_timestamp)
return guarantee_timestamp_;
}
inline void RetrieveRequest::set_guarantee_timestamp(::PROTOBUF_NAMESPACE_ID::uint64 value) {
guarantee_timestamp_ = value;
// @@protoc_insertion_point(field_set:milvus.proto.milvus.RetrieveRequest.guarantee_timestamp)
}
// -------------------------------------------------------------------
// RetrieveResults

View File

@ -284,6 +284,14 @@ func (st *SearchMsg) SourceID() int64 {
return st.Base.SourceID
}
func (st *SearchMsg) GuaranteeTs() Timestamp {
return st.GetGuaranteeTimestamp()
}
func (st *SearchMsg) TravelTs() Timestamp {
return st.GetTravelTimestamp()
}
func (st *SearchMsg) Marshal(input TsMsg) (MarshalType, error) {
searchTask := input.(*SearchMsg)
searchRequest := &searchTask.SearchRequest
@ -390,6 +398,14 @@ func (rm *RetrieveMsg) SourceID() int64 {
return rm.Base.SourceID
}
func (rm *RetrieveMsg) GuaranteeTs() Timestamp {
return rm.GetGuaranteeTimestamp()
}
func (rm *RetrieveMsg) TravelTs() Timestamp {
return rm.GetTravelTimestamp()
}
func (rm *RetrieveMsg) Marshal(input TsMsg) (MarshalType, error) {
retrieveTask := input.(*RetrieveMsg)
retrieveRequest := &retrieveTask.RetrieveRequest

View File

@ -134,6 +134,7 @@ message SearchRequest {
bytes serialized_expr_plan = 9;
repeated int64 output_fields_id = 10;
uint64 travel_timestamp = 11;
uint64 guarantee_timestamp = 12;
}
message SearchResults {
@ -163,6 +164,7 @@ message RetrieveRequest {
schema.IDs ids = 6;
repeated string output_fields = 7;
uint64 travel_timestamp = 8;
uint64 guarantee_timestamp = 9;
}
message RetrieveResults {

View File

@ -1048,6 +1048,7 @@ type SearchRequest struct {
SerializedExprPlan []byte `protobuf:"bytes,9,opt,name=serialized_expr_plan,json=serializedExprPlan,proto3" json:"serialized_expr_plan,omitempty"`
OutputFieldsId []int64 `protobuf:"varint,10,rep,packed,name=output_fields_id,json=outputFieldsId,proto3" json:"output_fields_id,omitempty"`
TravelTimestamp uint64 `protobuf:"varint,11,opt,name=travel_timestamp,json=travelTimestamp,proto3" json:"travel_timestamp,omitempty"`
GuaranteeTimestamp uint64 `protobuf:"varint,12,opt,name=guarantee_timestamp,json=guaranteeTimestamp,proto3" json:"guarantee_timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1155,6 +1156,13 @@ func (m *SearchRequest) GetTravelTimestamp() uint64 {
return 0
}
func (m *SearchRequest) GetGuaranteeTimestamp() uint64 {
if m != nil {
return m.GuaranteeTimestamp
}
return 0
}
type SearchResults struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
Status *commonpb.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
@ -1284,6 +1292,7 @@ type RetrieveRequest struct {
Ids *schemapb.IDs `protobuf:"bytes,6,opt,name=ids,proto3" json:"ids,omitempty"`
OutputFields []string `protobuf:"bytes,7,rep,name=output_fields,json=outputFields,proto3" json:"output_fields,omitempty"`
TravelTimestamp uint64 `protobuf:"varint,8,opt,name=travel_timestamp,json=travelTimestamp,proto3" json:"travel_timestamp,omitempty"`
GuaranteeTimestamp uint64 `protobuf:"varint,9,opt,name=guarantee_timestamp,json=guaranteeTimestamp,proto3" json:"guarantee_timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1370,6 +1379,13 @@ func (m *RetrieveRequest) GetTravelTimestamp() uint64 {
return 0
}
func (m *RetrieveRequest) GetGuaranteeTimestamp() uint64 {
if m != nil {
return m.GuaranteeTimestamp
}
return 0
}
type RetrieveResults struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
Status *commonpb.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
@ -2228,126 +2244,127 @@ func init() {
func init() { proto.RegisterFile("internal.proto", fileDescriptor_41f4a519b878ee3b) }
var fileDescriptor_41f4a519b878ee3b = []byte{
// 1927 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x73, 0x23, 0x47,
0x15, 0x67, 0x34, 0xb2, 0x25, 0x3d, 0xc9, 0xb6, 0xb6, 0xd7, 0xbb, 0x19, 0x7b, 0x37, 0x1b, 0x65,
0xc2, 0x87, 0xc9, 0x16, 0xeb, 0xc5, 0x01, 0x92, 0xa2, 0x28, 0x36, 0xb1, 0x95, 0x2c, 0xaa, 0x8d,
0x8d, 0x19, 0x6f, 0x52, 0x05, 0x97, 0xa9, 0xd6, 0x4c, 0x5b, 0x9a, 0x64, 0xbe, 0x98, 0x6e, 0x79,
0x57, 0x39, 0x71, 0xe0, 0x46, 0xc1, 0x81, 0x2a, 0xfe, 0x0d, 0xae, 0x9c, 0xf8, 0xa8, 0x1c, 0x80,
0x2a, 0xfe, 0x02, 0xfe, 0x0a, 0xee, 0x9c, 0xa8, 0x7e, 0xdd, 0xf3, 0x21, 0x79, 0x6c, 0x1c, 0x6f,
0x51, 0x90, 0x22, 0xb7, 0xe9, 0xdf, 0x7b, 0xfd, 0xf1, 0x7e, 0xef, 0xbd, 0x7e, 0x4f, 0x2d, 0x58,
0x0f, 0x62, 0xc1, 0xb2, 0x98, 0x86, 0x0f, 0xd2, 0x2c, 0x11, 0x09, 0xb9, 0x15, 0x05, 0xe1, 0xd9,
0x8c, 0xab, 0xd1, 0x83, 0x5c, 0xb8, 0xdd, 0xf3, 0x92, 0x28, 0x4a, 0x62, 0x05, 0x6f, 0xf7, 0xb8,
0x37, 0x65, 0x11, 0x55, 0x23, 0xfb, 0x0f, 0x06, 0xac, 0x1d, 0x24, 0x51, 0x9a, 0xc4, 0x2c, 0x16,
0xa3, 0xf8, 0x34, 0x21, 0xb7, 0x61, 0x35, 0x4e, 0x7c, 0x36, 0x1a, 0x5a, 0xc6, 0xc0, 0xd8, 0x31,
0x1d, 0x3d, 0x22, 0x04, 0x9a, 0x59, 0x12, 0x32, 0xab, 0x31, 0x30, 0x76, 0x3a, 0x0e, 0x7e, 0x93,
0x47, 0x00, 0x5c, 0x50, 0xc1, 0x5c, 0x2f, 0xf1, 0x99, 0x65, 0x0e, 0x8c, 0x9d, 0xf5, 0xbd, 0xc1,
0x83, 0xda, 0x53, 0x3c, 0x38, 0x91, 0x8a, 0x07, 0x89, 0xcf, 0x9c, 0x0e, 0xcf, 0x3f, 0xc9, 0xdb,
0x00, 0xec, 0xb9, 0xc8, 0xa8, 0x1b, 0xc4, 0xa7, 0x89, 0xd5, 0x1c, 0x98, 0x3b, 0xdd, 0xbd, 0x57,
0x17, 0x17, 0xd0, 0x87, 0x7f, 0xc2, 0xe6, 0x1f, 0xd2, 0x70, 0xc6, 0x8e, 0x69, 0x90, 0x39, 0x1d,
0x9c, 0x24, 0x8f, 0x6b, 0xff, 0xdd, 0x80, 0x8d, 0xc2, 0x00, 0xdc, 0x83, 0x93, 0xef, 0xc2, 0x0a,
0x6e, 0x81, 0x16, 0x74, 0xf7, 0xbe, 0x7c, 0xc1, 0x89, 0x16, 0xec, 0x76, 0xd4, 0x14, 0xf2, 0x01,
0xdc, 0xe4, 0xb3, 0xb1, 0x97, 0x8b, 0x5c, 0x44, 0xb9, 0xd5, 0xc0, 0xa3, 0x5d, 0x6d, 0x25, 0x52,
0x5d, 0x40, 0x1f, 0xe9, 0x0d, 0x58, 0x95, 0x2b, 0xcd, 0x38, 0xb2, 0xd4, 0xdd, 0xbb, 0x53, 0x6b,
0xe4, 0x09, 0xaa, 0x38, 0x5a, 0xd5, 0xbe, 0x03, 0x5b, 0x8f, 0x99, 0x58, 0xb2, 0xce, 0x61, 0x3f,
0x9d, 0x31, 0x2e, 0xb4, 0xf0, 0x69, 0x10, 0xb1, 0xa7, 0x81, 0xf7, 0xf1, 0xc1, 0x94, 0xc6, 0x31,
0x0b, 0x73, 0xe1, 0xcb, 0x70, 0xe7, 0x31, 0xc3, 0x09, 0x01, 0x17, 0x81, 0xc7, 0x97, 0xc4, 0xb7,
0xe0, 0xe6, 0x63, 0x26, 0x86, 0xfe, 0x12, 0xfc, 0x21, 0xb4, 0x8f, 0xa4, 0xb3, 0x65, 0x18, 0x7c,
0x07, 0x5a, 0xd4, 0xf7, 0x33, 0xc6, 0xb9, 0x66, 0xf1, 0x6e, 0xed, 0x89, 0xdf, 0x51, 0x3a, 0x4e,
0xae, 0x5c, 0x17, 0x26, 0xf6, 0x47, 0x00, 0xa3, 0x38, 0x10, 0xc7, 0x34, 0xa3, 0x11, 0xbf, 0x30,
0xc0, 0x86, 0xd0, 0xe3, 0x82, 0x66, 0xc2, 0x4d, 0x51, 0x4f, 0x53, 0x7e, 0x85, 0x68, 0xe8, 0xe2,
0x34, 0xb5, 0xba, 0xfd, 0x63, 0x80, 0x13, 0x91, 0x05, 0xf1, 0xe4, 0xfd, 0x80, 0x0b, 0xb9, 0xd7,
0x99, 0xd4, 0x93, 0x46, 0x98, 0x3b, 0x1d, 0x47, 0x8f, 0x2a, 0xee, 0x68, 0x5c, 0xdd, 0x1d, 0x8f,
0xa0, 0x9b, 0xd3, 0x7d, 0xc8, 0x27, 0xe4, 0x21, 0x34, 0xc7, 0x94, 0xb3, 0x4b, 0xe9, 0x39, 0xe4,
0x93, 0x7d, 0xca, 0x99, 0x83, 0x9a, 0xf6, 0xa7, 0x0d, 0x78, 0xe9, 0x20, 0x63, 0x18, 0xfc, 0x61,
0xc8, 0x3c, 0x11, 0x24, 0xb1, 0xe6, 0xfe, 0xb3, 0xaf, 0x46, 0x5e, 0x82, 0x96, 0x3f, 0x76, 0x63,
0x1a, 0xe5, 0x64, 0xaf, 0xfa, 0xe3, 0x23, 0x1a, 0x31, 0xf2, 0x55, 0x58, 0xf7, 0x8a, 0xf5, 0x25,
0x82, 0x31, 0xd7, 0x71, 0x96, 0x50, 0xe9, 0x2a, 0x7f, 0x3c, 0x1a, 0x5a, 0x4d, 0x74, 0x03, 0x7e,
0x13, 0x1b, 0x7a, 0xa5, 0xd6, 0x68, 0x68, 0xad, 0xa0, 0x6c, 0x01, 0x93, 0xa4, 0xaa, 0x3b, 0xc4,
0x5a, 0x1d, 0x18, 0x3b, 0x3d, 0x47, 0x8f, 0xc8, 0x43, 0xb8, 0x79, 0x16, 0x64, 0x62, 0x46, 0x43,
0x1d, 0x57, 0x72, 0x17, 0x6e, 0xb5, 0x90, 0xf9, 0x3a, 0x11, 0xd9, 0x83, 0xcd, 0x74, 0x3a, 0xe7,
0x81, 0xb7, 0x34, 0xa5, 0x8d, 0x53, 0x6a, 0x65, 0xf6, 0xa7, 0x06, 0xdc, 0x1a, 0x66, 0x49, 0xfa,
0x79, 0xa6, 0xd0, 0xfe, 0x65, 0x03, 0x6e, 0xab, 0x48, 0x38, 0xa6, 0x99, 0x08, 0xfe, 0x43, 0x56,
0x7c, 0x0d, 0x36, 0xca, 0x5d, 0x95, 0x42, 0xbd, 0x19, 0x5f, 0x81, 0xf5, 0x34, 0x3f, 0x87, 0xd2,
0x6b, 0xa2, 0xde, 0x5a, 0x81, 0x2e, 0x58, 0xbb, 0x72, 0x89, 0xb5, 0xab, 0x35, 0x01, 0x33, 0x80,
0x6e, 0xb1, 0xd0, 0x68, 0x68, 0xb5, 0x50, 0xa5, 0x0a, 0xd9, 0xbf, 0x68, 0xc0, 0xa6, 0x74, 0xea,
0x17, 0x6c, 0x48, 0x36, 0xfe, 0xd8, 0x00, 0xa2, 0xa2, 0x63, 0x14, 0xfb, 0xec, 0xf9, 0x7f, 0x93,
0x8b, 0x97, 0x01, 0x4e, 0x03, 0x16, 0xfa, 0x55, 0x1e, 0x3a, 0x88, 0xbc, 0x10, 0x07, 0x16, 0xb4,
0x70, 0x91, 0xc2, 0xfe, 0x7c, 0x28, 0xab, 0x80, 0xea, 0x08, 0x74, 0x15, 0x68, 0x5f, 0xb9, 0x0a,
0xe0, 0x34, 0x5d, 0x05, 0x7e, 0x6b, 0xc2, 0xda, 0x28, 0xe6, 0x2c, 0x13, 0xff, 0xcf, 0x81, 0x44,
0xee, 0x42, 0x87, 0xb3, 0x49, 0x24, 0x1b, 0x93, 0xa1, 0xd5, 0x46, 0x79, 0x09, 0x48, 0xa9, 0xa7,
0x6e, 0xd6, 0xd1, 0xd0, 0xea, 0x28, 0xd7, 0x16, 0x00, 0xb9, 0x07, 0x20, 0x82, 0x88, 0x71, 0x41,
0xa3, 0x94, 0x5b, 0x30, 0x30, 0x77, 0x9a, 0x4e, 0x05, 0x91, 0x55, 0x20, 0x4b, 0x9e, 0x8d, 0x86,
0xdc, 0xea, 0x0e, 0x4c, 0x59, 0xc6, 0xd5, 0x88, 0x7c, 0x0b, 0xda, 0x59, 0xf2, 0xcc, 0xf5, 0xa9,
0xa0, 0x56, 0x0f, 0x9d, 0xb7, 0x55, 0x4b, 0xf6, 0x7e, 0x98, 0x8c, 0x9d, 0x56, 0x96, 0x3c, 0x1b,
0x52, 0x41, 0xed, 0xbf, 0x98, 0xb0, 0x76, 0xc2, 0x68, 0xe6, 0x4d, 0xaf, 0xef, 0xb0, 0xaf, 0x43,
0x3f, 0x63, 0x7c, 0x16, 0x0a, 0xb7, 0x34, 0x4b, 0x79, 0x6e, 0x43, 0xe1, 0x07, 0x85, 0x71, 0x39,
0xe5, 0xe6, 0x25, 0x94, 0x37, 0x6b, 0x28, 0xb7, 0xa1, 0x57, 0xe1, 0x97, 0x5b, 0x2b, 0x68, 0xfa,
0x02, 0x46, 0xfa, 0x60, 0xfa, 0x3c, 0x44, 0x8f, 0x75, 0x1c, 0xf9, 0x49, 0xee, 0xc3, 0x8d, 0x34,
0xa4, 0x1e, 0x9b, 0x26, 0xa1, 0xcf, 0x32, 0x77, 0x92, 0x25, 0xb3, 0x14, 0xdd, 0xd5, 0x73, 0xfa,
0x15, 0xc1, 0x63, 0x89, 0x93, 0x37, 0xa1, 0xed, 0xf3, 0xd0, 0x15, 0xf3, 0x94, 0xa1, 0xcb, 0xd6,
0x2f, 0xb0, 0x7d, 0xc8, 0xc3, 0xa7, 0xf3, 0x94, 0x39, 0x2d, 0x5f, 0x7d, 0x90, 0x87, 0xb0, 0xc9,
0x59, 0x16, 0xd0, 0x30, 0xf8, 0x84, 0xf9, 0x2e, 0x7b, 0x9e, 0x66, 0x6e, 0x1a, 0xd2, 0x18, 0x3d,
0xdb, 0x73, 0x48, 0x29, 0x7b, 0xf7, 0x79, 0x9a, 0x1d, 0x87, 0x34, 0x26, 0x3b, 0xd0, 0x4f, 0x66,
0x22, 0x9d, 0x09, 0x17, 0xb3, 0x8f, 0xbb, 0x81, 0x8f, 0x8e, 0x36, 0x9d, 0x75, 0x85, 0xbf, 0x87,
0xf0, 0xc8, 0x97, 0xd4, 0x8a, 0x8c, 0x9e, 0xb1, 0xd0, 0x2d, 0x22, 0xc0, 0xea, 0x0e, 0x8c, 0x9d,
0xa6, 0xb3, 0xa1, 0xf0, 0xa7, 0x39, 0x6c, 0xff, 0xa3, 0xe2, 0x49, 0x49, 0x3a, 0xbf, 0x86, 0x27,
0xaf, 0xd3, 0x9e, 0xd5, 0xba, 0xdf, 0xac, 0x77, 0xff, 0x2b, 0xd0, 0x8d, 0x98, 0xc8, 0x02, 0x4f,
0xd1, 0xac, 0xb2, 0x12, 0x14, 0x84, 0x5c, 0x12, 0x68, 0x4e, 0x03, 0xa1, 0xfc, 0xdb, 0x73, 0xf0,
0x5b, 0x4e, 0xe2, 0x61, 0xe0, 0x31, 0xdf, 0x1d, 0x87, 0xc9, 0x58, 0xd3, 0x0a, 0x0a, 0x92, 0xc1,
0x2c, 0xe9, 0xd4, 0x0a, 0xf1, 0x2c, 0x72, 0xbd, 0x64, 0x16, 0x0b, 0x0b, 0x30, 0x88, 0xd6, 0x15,
0x7e, 0x34, 0x8b, 0x0e, 0x24, 0x4a, 0x5e, 0x83, 0x35, 0xad, 0x99, 0x9c, 0x9e, 0x72, 0x26, 0x90,
0x4b, 0xd3, 0xe9, 0x29, 0xf0, 0x87, 0x88, 0x91, 0xef, 0xc1, 0x36, 0x67, 0x34, 0x64, 0xbe, 0x5b,
0xa4, 0x2c, 0x77, 0x39, 0x32, 0xcb, 0x7c, 0x6b, 0x15, 0xfd, 0x64, 0x29, 0x8d, 0x93, 0x42, 0xe1,
0x44, 0xcb, 0xc9, 0x2e, 0xdc, 0x2c, 0x68, 0xa8, 0x4c, 0x53, 0xcd, 0x18, 0x29, 0x45, 0xc5, 0x84,
0xb7, 0xc0, 0x9a, 0x84, 0xc9, 0x98, 0x86, 0xee, 0xb9, 0x5d, 0xf1, 0x12, 0x36, 0x9d, 0xdb, 0x4a,
0x7e, 0xb2, 0xb4, 0xa5, 0xfd, 0xe7, 0x06, 0x6c, 0x38, 0x92, 0x3b, 0x76, 0xc6, 0x3e, 0xf7, 0xd9,
0xfb, 0x3a, 0x98, 0x81, 0xcf, 0x31, 0x7b, 0xbb, 0x7b, 0xd6, 0xe2, 0xb9, 0xf5, 0x2f, 0xe7, 0xd1,
0x90, 0x3b, 0x52, 0x49, 0xba, 0x71, 0x21, 0x7f, 0x34, 0xbb, 0xbd, 0x6a, 0xf2, 0xd4, 0xa6, 0x4e,
0xbb, 0x3e, 0x75, 0x7e, 0x6f, 0x56, 0x89, 0xfc, 0x5f, 0x4d, 0x1e, 0xcd, 0x50, 0xf3, 0x2a, 0x0c,
0x3d, 0x82, 0xae, 0xbe, 0x5a, 0xb0, 0x1e, 0xac, 0x60, 0x3d, 0xb8, 0x57, 0x3b, 0x07, 0xe9, 0x92,
0xb5, 0xc0, 0x51, 0x1d, 0x07, 0x97, 0xdf, 0xe4, 0xfb, 0x70, 0xe7, 0x7c, 0x12, 0x64, 0x9a, 0xa3,
0x3c, 0x0b, 0xb6, 0x96, 0xb3, 0x20, 0x27, 0xd1, 0x27, 0xdf, 0x84, 0xcd, 0x4a, 0x1a, 0x94, 0x13,
0xf5, 0x8f, 0x92, 0x52, 0x56, 0x4e, 0xb9, 0x7e, 0x22, 0xfc, 0xcd, 0x80, 0xb5, 0x21, 0x0b, 0x99,
0x78, 0x81, 0x34, 0xa8, 0x69, 0x2e, 0x1a, 0xb5, 0xcd, 0xc5, 0x42, 0xf5, 0x36, 0x2f, 0xaf, 0xde,
0xcd, 0x73, 0xd5, 0xfb, 0x55, 0xe8, 0xa5, 0x59, 0x10, 0xd1, 0x6c, 0xee, 0x7e, 0xcc, 0xe6, 0x79,
0x2a, 0x74, 0x35, 0xf6, 0x84, 0xcd, 0xb9, 0x1d, 0xc3, 0xf6, 0xfb, 0x09, 0xf5, 0xf7, 0x69, 0x48,
0x63, 0x8f, 0x69, 0x33, 0xf9, 0xf5, 0x2d, 0xbb, 0x07, 0x50, 0x61, 0xb2, 0x81, 0x1b, 0x56, 0x10,
0xfb, 0x9f, 0x06, 0x74, 0xe4, 0x86, 0xd8, 0xf3, 0x5e, 0x63, 0xfd, 0x85, 0x66, 0xa7, 0x51, 0xd3,
0xec, 0x14, 0x6d, 0x6b, 0x4e, 0x57, 0xd9, 0xc7, 0x56, 0xfa, 0xd1, 0xe6, 0x62, 0x3f, 0xfa, 0x0a,
0x74, 0x03, 0x79, 0x20, 0x37, 0xa5, 0x62, 0xaa, 0x78, 0xea, 0x38, 0x80, 0xd0, 0xb1, 0x44, 0x64,
0xc3, 0x9a, 0x2b, 0x60, 0xc3, 0xba, 0x7a, 0xe5, 0x86, 0x55, 0x2f, 0x82, 0x0d, 0xeb, 0x9f, 0x1a,
0x60, 0x69, 0x8a, 0xcb, 0x57, 0x9b, 0x0f, 0x52, 0x1f, 0x1f, 0x8f, 0xee, 0x42, 0xa7, 0x88, 0x32,
0xfd, 0x68, 0x52, 0x02, 0x92, 0xd7, 0x43, 0x16, 0x25, 0xd9, 0xfc, 0x24, 0xf8, 0x84, 0x69, 0xc3,
0x2b, 0x88, 0xb4, 0xed, 0x68, 0x16, 0x39, 0xc9, 0x33, 0xae, 0x2f, 0xcc, 0x7c, 0x28, 0x6d, 0xf3,
0xf0, 0x67, 0x06, 0x5e, 0x4d, 0x68, 0x79, 0xd3, 0x01, 0x05, 0xc9, 0x5b, 0x89, 0x6c, 0x41, 0x9b,
0xc5, 0xbe, 0x92, 0xae, 0xa0, 0xb4, 0xc5, 0x62, 0x1f, 0x45, 0x23, 0x58, 0xd7, 0xaf, 0x35, 0x09,
0xc7, 0xcb, 0x53, 0x5f, 0x99, 0xf6, 0x05, 0x4f, 0x64, 0x87, 0x7c, 0x72, 0xac, 0x35, 0x9d, 0x35,
0xf5, 0x60, 0xa3, 0x87, 0xe4, 0x5d, 0xe8, 0xc9, 0x5d, 0x8a, 0x85, 0x5a, 0x57, 0x5e, 0xa8, 0xcb,
0x62, 0x3f, 0x1f, 0xd8, 0xbf, 0x36, 0xe0, 0xc6, 0x39, 0x0a, 0xaf, 0x11, 0x47, 0x4f, 0xa0, 0x7d,
0xc2, 0x26, 0x72, 0x89, 0xfc, 0x0d, 0x6a, 0xf7, 0xa2, 0x27, 0xcd, 0x0b, 0x1c, 0xe6, 0x14, 0x0b,
0xd8, 0x1f, 0x15, 0x6e, 0x7d, 0x2f, 0x9c, 0xf1, 0xe9, 0x41, 0x12, 0xa5, 0xf2, 0x7e, 0xf0, 0xaf,
0xf5, 0x80, 0x74, 0x79, 0x88, 0xdb, 0x3f, 0x37, 0x00, 0x30, 0x79, 0x70, 0xeb, 0x73, 0x81, 0x69,
0x5c, 0x27, 0x30, 0x65, 0x57, 0x29, 0xbb, 0x99, 0x8c, 0x85, 0x54, 0x94, 0x77, 0x21, 0xd7, 0xbb,
0x93, 0x78, 0x16, 0x39, 0x4a, 0x94, 0x5f, 0x10, 0xf6, 0xaf, 0x0c, 0x00, 0xbc, 0xcc, 0xd5, 0x31,
0x96, 0x0b, 0xb3, 0x71, 0xf9, 0xcf, 0xc1, 0xc6, 0x62, 0xfa, 0xed, 0xe7, 0xe9, 0xc7, 0xd1, 0x1f,
0x66, 0x9d, 0x0d, 0x85, 0x3f, 0x4a, 0xe3, 0x75, 0x86, 0x2a, 0x1f, 0xfc, 0xc6, 0x80, 0x5e, 0xc5,
0x55, 0x7c, 0x91, 0x46, 0x63, 0xf9, 0xa6, 0xc0, 0xe6, 0x50, 0x66, 0x8f, 0xcb, 0x2b, 0x09, 0x15,
0x95, 0x09, 0xb5, 0x05, 0x6d, 0xa4, 0xa4, 0x92, 0x51, 0xb1, 0xce, 0xa8, 0xfb, 0x70, 0x23, 0x63,
0x1e, 0x8b, 0x45, 0x38, 0x77, 0xa3, 0xc4, 0x0f, 0x4e, 0x03, 0xe6, 0x63, 0x5e, 0xb5, 0x9d, 0x7e,
0x2e, 0x38, 0xd4, 0xb8, 0xfd, 0x57, 0x03, 0xd6, 0x7f, 0x34, 0x63, 0xd9, 0xfc, 0x28, 0xf1, 0x99,
0x3a, 0xd9, 0x67, 0x0f, 0x89, 0xb7, 0xd1, 0x16, 0x4d, 0x8f, 0x0a, 0xd7, 0xd7, 0xfe, 0x7d, 0xb8,
0x72, 0xa7, 0xcd, 0x75, 0x88, 0x4a, 0x8a, 0xd5, 0x4f, 0xfc, 0xab, 0x50, 0x5c, 0x3a, 0x56, 0x97,
0x69, 0x45, 0xf1, 0xcf, 0x0c, 0xe8, 0x56, 0x12, 0x53, 0x96, 0x17, 0x5d, 0x8b, 0x54, 0x09, 0x33,
0xf0, 0xc2, 0xed, 0x7a, 0xe5, 0x43, 0x1e, 0xd9, 0x84, 0x95, 0x88, 0x4f, 0xb4, 0xc7, 0x7b, 0x8e,
0x1a, 0x90, 0x6d, 0x68, 0x47, 0x7c, 0x82, 0xbf, 0x84, 0xf4, 0x2d, 0x5d, 0x8c, 0xa5, 0xdb, 0xca,
0x16, 0x4a, 0x5d, 0x56, 0x25, 0x60, 0xff, 0xce, 0x00, 0xa2, 0x9b, 0x94, 0x17, 0x7a, 0xa5, 0xc5,
0x80, 0xad, 0x3e, 0x46, 0x36, 0x54, 0x53, 0x57, 0xc5, 0x96, 0xca, 0xab, 0x79, 0xae, 0xbc, 0xde,
0x87, 0x1b, 0x3e, 0x3b, 0xa5, 0xb2, 0x9f, 0x5a, 0x3e, 0x72, 0x5f, 0x0b, 0x8a, 0xb6, 0xef, 0xf5,
0xb7, 0xa0, 0x53, 0xfc, 0x39, 0x42, 0xfa, 0xd0, 0x1b, 0xc5, 0x81, 0xc0, 0x9f, 0x6a, 0x41, 0x3c,
0xe9, 0x7f, 0x89, 0x74, 0xa1, 0xf5, 0x03, 0x46, 0x43, 0x31, 0x9d, 0xf7, 0x0d, 0xd2, 0x83, 0xf6,
0x3b, 0xe3, 0x38, 0xc9, 0x22, 0x1a, 0xf6, 0x1b, 0xfb, 0x6f, 0xfe, 0xe4, 0xdb, 0x93, 0x40, 0x4c,
0x67, 0x63, 0x69, 0xc9, 0xae, 0x32, 0xed, 0x1b, 0x41, 0xa2, 0xbf, 0x76, 0x73, 0xaf, 0xed, 0xa2,
0xb5, 0xc5, 0x30, 0x1d, 0x8f, 0x57, 0x11, 0x79, 0xe3, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x41,
0xd9, 0x70, 0x5f, 0x42, 0x1a, 0x00, 0x00,
// 1950 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x5b, 0x73, 0x23, 0x47,
0xf5, 0xff, 0x8f, 0x24, 0x5b, 0xd2, 0xd1, 0xd8, 0xd6, 0xf6, 0x7a, 0x37, 0x63, 0xef, 0x66, 0xa3,
0x4c, 0xfe, 0x80, 0xc9, 0x16, 0xeb, 0xc5, 0x01, 0x92, 0xa2, 0x28, 0x36, 0xb1, 0x95, 0x2c, 0xaa,
0x8d, 0x8d, 0x19, 0x6f, 0x52, 0x05, 0x2f, 0x53, 0xad, 0x99, 0xb6, 0x34, 0xc9, 0xdc, 0x98, 0xee,
0xf1, 0xae, 0xf2, 0xc4, 0x03, 0x6f, 0x14, 0x3c, 0x50, 0xc5, 0xd7, 0xe0, 0x95, 0x27, 0x2e, 0x95,
0x27, 0xaa, 0xf8, 0x04, 0x7c, 0x0a, 0x1e, 0xa1, 0x78, 0xa2, 0xfa, 0x74, 0xcf, 0x45, 0xb2, 0x6c,
0xbc, 0xde, 0xa2, 0x20, 0x05, 0x6f, 0xd3, 0xbf, 0x73, 0xfa, 0x72, 0x7e, 0xe7, 0xd2, 0x47, 0x2d,
0x58, 0x0f, 0x62, 0xc1, 0xb2, 0x98, 0x86, 0x0f, 0xd2, 0x2c, 0x11, 0x09, 0xb9, 0x15, 0x05, 0xe1,
0x59, 0xce, 0xd5, 0xe8, 0x41, 0x21, 0xdc, 0x36, 0xbd, 0x24, 0x8a, 0x92, 0x58, 0xc1, 0xdb, 0x26,
0xf7, 0xa6, 0x2c, 0xa2, 0x6a, 0x64, 0xff, 0xce, 0x80, 0xb5, 0x83, 0x24, 0x4a, 0x93, 0x98, 0xc5,
0x62, 0x14, 0x9f, 0x26, 0xe4, 0x36, 0xac, 0xc6, 0x89, 0xcf, 0x46, 0x43, 0xcb, 0x18, 0x18, 0x3b,
0x4d, 0x47, 0x8f, 0x08, 0x81, 0x56, 0x96, 0x84, 0xcc, 0x6a, 0x0c, 0x8c, 0x9d, 0xae, 0x83, 0xdf,
0xe4, 0x11, 0x00, 0x17, 0x54, 0x30, 0xd7, 0x4b, 0x7c, 0x66, 0x35, 0x07, 0xc6, 0xce, 0xfa, 0xde,
0xe0, 0xc1, 0xd2, 0x53, 0x3c, 0x38, 0x91, 0x8a, 0x07, 0x89, 0xcf, 0x9c, 0x2e, 0x2f, 0x3e, 0xc9,
0xbb, 0x00, 0xec, 0xb9, 0xc8, 0xa8, 0x1b, 0xc4, 0xa7, 0x89, 0xd5, 0x1a, 0x34, 0x77, 0x7a, 0x7b,
0xaf, 0xcf, 0x2f, 0xa0, 0x0f, 0xff, 0x84, 0xcd, 0x3e, 0xa6, 0x61, 0xce, 0x8e, 0x69, 0x90, 0x39,
0x5d, 0x9c, 0x24, 0x8f, 0x6b, 0xff, 0xd9, 0x80, 0x8d, 0xd2, 0x00, 0xdc, 0x83, 0x93, 0x6f, 0xc3,
0x0a, 0x6e, 0x81, 0x16, 0xf4, 0xf6, 0xfe, 0xff, 0x82, 0x13, 0xcd, 0xd9, 0xed, 0xa8, 0x29, 0xe4,
0x23, 0xb8, 0xc9, 0xf3, 0xb1, 0x57, 0x88, 0x5c, 0x44, 0xb9, 0xd5, 0xc0, 0xa3, 0x5d, 0x6d, 0x25,
0x52, 0x5f, 0x40, 0x1f, 0xe9, 0x2d, 0x58, 0x95, 0x2b, 0xe5, 0x1c, 0x59, 0xea, 0xed, 0xdd, 0x59,
0x6a, 0xe4, 0x09, 0xaa, 0x38, 0x5a, 0xd5, 0xbe, 0x03, 0x5b, 0x8f, 0x99, 0x58, 0xb0, 0xce, 0x61,
0x3f, 0xce, 0x19, 0x17, 0x5a, 0xf8, 0x34, 0x88, 0xd8, 0xd3, 0xc0, 0xfb, 0xf4, 0x60, 0x4a, 0xe3,
0x98, 0x85, 0x85, 0xf0, 0x55, 0xb8, 0xf3, 0x98, 0xe1, 0x84, 0x80, 0x8b, 0xc0, 0xe3, 0x0b, 0xe2,
0x5b, 0x70, 0xf3, 0x31, 0x13, 0x43, 0x7f, 0x01, 0xfe, 0x18, 0x3a, 0x47, 0xd2, 0xd9, 0x32, 0x0c,
0xbe, 0x05, 0x6d, 0xea, 0xfb, 0x19, 0xe3, 0x5c, 0xb3, 0x78, 0x77, 0xe9, 0x89, 0xdf, 0x53, 0x3a,
0x4e, 0xa1, 0xbc, 0x2c, 0x4c, 0xec, 0x4f, 0x00, 0x46, 0x71, 0x20, 0x8e, 0x69, 0x46, 0x23, 0x7e,
0x61, 0x80, 0x0d, 0xc1, 0xe4, 0x82, 0x66, 0xc2, 0x4d, 0x51, 0x4f, 0x53, 0x7e, 0x85, 0x68, 0xe8,
0xe1, 0x34, 0xb5, 0xba, 0xfd, 0x43, 0x80, 0x13, 0x91, 0x05, 0xf1, 0xe4, 0xc3, 0x80, 0x0b, 0xb9,
0xd7, 0x99, 0xd4, 0x93, 0x46, 0x34, 0x77, 0xba, 0x8e, 0x1e, 0xd5, 0xdc, 0xd1, 0xb8, 0xba, 0x3b,
0x1e, 0x41, 0xaf, 0xa0, 0xfb, 0x90, 0x4f, 0xc8, 0x43, 0x68, 0x8d, 0x29, 0x67, 0x97, 0xd2, 0x73,
0xc8, 0x27, 0xfb, 0x94, 0x33, 0x07, 0x35, 0xed, 0xcf, 0x1b, 0xf0, 0xca, 0x41, 0xc6, 0x30, 0xf8,
0xc3, 0x90, 0x79, 0x22, 0x48, 0x62, 0xcd, 0xfd, 0x8b, 0xaf, 0x46, 0x5e, 0x81, 0xb6, 0x3f, 0x76,
0x63, 0x1a, 0x15, 0x64, 0xaf, 0xfa, 0xe3, 0x23, 0x1a, 0x31, 0xf2, 0x65, 0x58, 0xf7, 0xca, 0xf5,
0x25, 0x82, 0x31, 0xd7, 0x75, 0x16, 0x50, 0xe9, 0x2a, 0x7f, 0x3c, 0x1a, 0x5a, 0x2d, 0x74, 0x03,
0x7e, 0x13, 0x1b, 0xcc, 0x4a, 0x6b, 0x34, 0xb4, 0x56, 0x50, 0x36, 0x87, 0x49, 0x52, 0x55, 0x0d,
0xb1, 0x56, 0x07, 0xc6, 0x8e, 0xe9, 0xe8, 0x11, 0x79, 0x08, 0x37, 0xcf, 0x82, 0x4c, 0xe4, 0x34,
0xd4, 0x71, 0x25, 0x77, 0xe1, 0x56, 0x1b, 0x99, 0x5f, 0x26, 0x22, 0x7b, 0xb0, 0x99, 0x4e, 0x67,
0x3c, 0xf0, 0x16, 0xa6, 0x74, 0x70, 0xca, 0x52, 0x99, 0xfd, 0xb9, 0x01, 0xb7, 0x86, 0x59, 0x92,
0x7e, 0x91, 0x29, 0xb4, 0x7f, 0xde, 0x80, 0xdb, 0x2a, 0x12, 0x8e, 0x69, 0x26, 0x82, 0x7f, 0x91,
0x15, 0x5f, 0x81, 0x8d, 0x6a, 0x57, 0xa5, 0xb0, 0xdc, 0x8c, 0x2f, 0xc1, 0x7a, 0x5a, 0x9c, 0x43,
0xe9, 0xb5, 0x50, 0x6f, 0xad, 0x44, 0xe7, 0xac, 0x5d, 0xb9, 0xc4, 0xda, 0xd5, 0x25, 0x01, 0x33,
0x80, 0x5e, 0xb9, 0xd0, 0x68, 0x68, 0xb5, 0x51, 0xa5, 0x0e, 0xd9, 0x3f, 0x6b, 0xc0, 0xa6, 0x74,
0xea, 0xff, 0xd8, 0x90, 0x6c, 0xfc, 0xbe, 0x01, 0x44, 0x45, 0xc7, 0x28, 0xf6, 0xd9, 0xf3, 0x7f,
0x27, 0x17, 0xaf, 0x02, 0x9c, 0x06, 0x2c, 0xf4, 0xeb, 0x3c, 0x74, 0x11, 0x79, 0x29, 0x0e, 0x2c,
0x68, 0xe3, 0x22, 0xa5, 0xfd, 0xc5, 0x50, 0xde, 0x02, 0xaa, 0x23, 0xd0, 0xb7, 0x40, 0xe7, 0xca,
0xb7, 0x00, 0x4e, 0xd3, 0xb7, 0xc0, 0xaf, 0x9b, 0xb0, 0x36, 0x8a, 0x39, 0xcb, 0xc4, 0x7f, 0x73,
0x20, 0x91, 0xbb, 0xd0, 0xe5, 0x6c, 0x12, 0xc9, 0xc6, 0x64, 0x68, 0x75, 0x50, 0x5e, 0x01, 0x52,
0xea, 0xa9, 0xca, 0x3a, 0x1a, 0x5a, 0x5d, 0xe5, 0xda, 0x12, 0x20, 0xf7, 0x00, 0x44, 0x10, 0x31,
0x2e, 0x68, 0x94, 0x72, 0x0b, 0x06, 0xcd, 0x9d, 0x96, 0x53, 0x43, 0xe4, 0x2d, 0x90, 0x25, 0xcf,
0x46, 0x43, 0x6e, 0xf5, 0x06, 0x4d, 0x79, 0x8d, 0xab, 0x11, 0xf9, 0x06, 0x74, 0xb2, 0xe4, 0x99,
0xeb, 0x53, 0x41, 0x2d, 0x13, 0x9d, 0xb7, 0xb5, 0x94, 0xec, 0xfd, 0x30, 0x19, 0x3b, 0xed, 0x2c,
0x79, 0x36, 0xa4, 0x82, 0xda, 0x7f, 0x6b, 0xc2, 0xda, 0x09, 0xa3, 0x99, 0x37, 0xbd, 0xbe, 0xc3,
0xbe, 0x0a, 0xfd, 0x8c, 0xf1, 0x3c, 0x14, 0x6e, 0x65, 0x96, 0xf2, 0xdc, 0x86, 0xc2, 0x0f, 0x4a,
0xe3, 0x0a, 0xca, 0x9b, 0x97, 0x50, 0xde, 0x5a, 0x42, 0xb9, 0x0d, 0x66, 0x8d, 0x5f, 0x6e, 0xad,
0xa0, 0xe9, 0x73, 0x18, 0xe9, 0x43, 0xd3, 0xe7, 0x21, 0x7a, 0xac, 0xeb, 0xc8, 0x4f, 0x72, 0x1f,
0x6e, 0xa4, 0x21, 0xf5, 0xd8, 0x34, 0x09, 0x7d, 0x96, 0xb9, 0x93, 0x2c, 0xc9, 0x53, 0x74, 0x97,
0xe9, 0xf4, 0x6b, 0x82, 0xc7, 0x12, 0x27, 0x6f, 0x43, 0xc7, 0xe7, 0xa1, 0x2b, 0x66, 0x29, 0x43,
0x97, 0xad, 0x5f, 0x60, 0xfb, 0x90, 0x87, 0x4f, 0x67, 0x29, 0x73, 0xda, 0xbe, 0xfa, 0x20, 0x0f,
0x61, 0x93, 0xb3, 0x2c, 0xa0, 0x61, 0xf0, 0x19, 0xf3, 0x5d, 0xf6, 0x3c, 0xcd, 0xdc, 0x34, 0xa4,
0x31, 0x7a, 0xd6, 0x74, 0x48, 0x25, 0x7b, 0xff, 0x79, 0x9a, 0x1d, 0x87, 0x34, 0x26, 0x3b, 0xd0,
0x4f, 0x72, 0x91, 0xe6, 0xc2, 0xc5, 0xec, 0xe3, 0x6e, 0xe0, 0xa3, 0xa3, 0x9b, 0xce, 0xba, 0xc2,
0x3f, 0x40, 0x78, 0xe4, 0x4b, 0x6a, 0x45, 0x46, 0xcf, 0x58, 0xe8, 0x96, 0x11, 0x60, 0xf5, 0x06,
0xc6, 0x4e, 0xcb, 0xd9, 0x50, 0xf8, 0xd3, 0x02, 0x26, 0xbb, 0x70, 0x73, 0x92, 0xd3, 0x8c, 0xc6,
0x82, 0xb1, 0x9a, 0xb6, 0x89, 0xda, 0xa4, 0x14, 0x95, 0x13, 0xec, 0xbf, 0xd4, 0x5c, 0x2f, 0xbd,
0xc4, 0xaf, 0xe1, 0xfa, 0xeb, 0xf4, 0x73, 0x4b, 0xe3, 0xa5, 0xb9, 0x3c, 0x5e, 0x5e, 0x83, 0x5e,
0xc4, 0x44, 0x16, 0x78, 0xca, 0x2f, 0x2a, 0x8d, 0x41, 0x41, 0x48, 0x3e, 0x81, 0xd6, 0x34, 0x10,
0x2a, 0x20, 0x4c, 0x07, 0xbf, 0xe5, 0x24, 0x1e, 0x06, 0x1e, 0xf3, 0xdd, 0x71, 0x98, 0x8c, 0xb5,
0x1f, 0x40, 0x41, 0x32, 0xfa, 0x25, 0xff, 0x5a, 0x21, 0xce, 0x23, 0xd7, 0x4b, 0xf2, 0x58, 0x58,
0x80, 0x51, 0xb7, 0xae, 0xf0, 0xa3, 0x3c, 0x3a, 0x90, 0x28, 0x79, 0x03, 0xd6, 0xb4, 0x66, 0x72,
0x7a, 0xca, 0x99, 0x40, 0xf2, 0x9b, 0x8e, 0xa9, 0xc0, 0xef, 0x23, 0x46, 0xbe, 0x03, 0xdb, 0x9c,
0xd1, 0x90, 0xf9, 0x6e, 0x99, 0xe3, 0xdc, 0xe5, 0xc8, 0x2c, 0xf3, 0xad, 0x55, 0x74, 0xac, 0xa5,
0x34, 0x4e, 0x4a, 0x85, 0x13, 0x2d, 0x97, 0x7e, 0x2b, 0x69, 0xa8, 0x4d, 0x53, 0xdd, 0x1b, 0xa9,
0x44, 0xe5, 0x84, 0x77, 0xc0, 0x9a, 0x84, 0xc9, 0x98, 0x86, 0xee, 0xb9, 0x5d, 0xb1, 0x6a, 0x37,
0x9d, 0xdb, 0x4a, 0x7e, 0xb2, 0xb0, 0xa5, 0xfd, 0xd7, 0x06, 0x6c, 0x38, 0x92, 0x3b, 0x76, 0xc6,
0xbe, 0xf0, 0xe9, 0xfe, 0x26, 0x34, 0x03, 0x9f, 0x63, 0xba, 0xf7, 0xf6, 0xac, 0xf9, 0x73, 0xeb,
0x9f, 0xda, 0xa3, 0x21, 0x77, 0xa4, 0x92, 0x74, 0xe3, 0x5c, 0xc2, 0x69, 0x76, 0xcd, 0x7a, 0xb6,
0x2d, 0xcd, 0xb5, 0xce, 0x0b, 0xe5, 0x5a, 0xf7, 0xc2, 0x5c, 0xfb, 0x6d, 0xb3, 0xce, 0xfc, 0x7f,
0x6a, 0xb6, 0x69, 0x4a, 0x5b, 0x57, 0xa1, 0xf4, 0x11, 0xf4, 0x74, 0xf1, 0xc2, 0x1b, 0x67, 0x05,
0x6f, 0x9c, 0x7b, 0x4b, 0xe7, 0x20, 0xbf, 0xf2, 0xb6, 0x71, 0x54, 0x4f, 0xc3, 0xe5, 0x37, 0xf9,
0x2e, 0xdc, 0x39, 0x9f, 0x35, 0x99, 0xe6, 0xa8, 0x48, 0x9b, 0xad, 0xc5, 0xb4, 0x29, 0x48, 0xf4,
0xc9, 0xd7, 0x61, 0xb3, 0x96, 0x37, 0xd5, 0x44, 0xfd, 0xb3, 0xa7, 0x92, 0x55, 0x53, 0xae, 0x9f,
0x39, 0x7f, 0x32, 0x60, 0x6d, 0xc8, 0x42, 0x26, 0x5e, 0x22, 0x6f, 0x96, 0xb4, 0x2f, 0x8d, 0xa5,
0xed, 0xcb, 0x5c, 0x7f, 0xd0, 0xbc, 0xbc, 0x3f, 0x68, 0x9d, 0xeb, 0x0f, 0x5e, 0x07, 0x33, 0xcd,
0x82, 0x88, 0x66, 0x33, 0xf7, 0x53, 0x36, 0x2b, 0x72, 0xa7, 0xa7, 0xb1, 0x27, 0x6c, 0xc6, 0xed,
0x18, 0xb6, 0x3f, 0x4c, 0xa8, 0xbf, 0x4f, 0x43, 0x1a, 0x7b, 0x4c, 0x9b, 0xc9, 0xaf, 0x6f, 0xd9,
0x3d, 0x80, 0x1a, 0x93, 0x0d, 0xdc, 0xb0, 0x86, 0xd8, 0x7f, 0x37, 0xa0, 0x2b, 0x37, 0xc4, 0xae,
0xfa, 0x1a, 0xeb, 0xcf, 0xb5, 0x53, 0x8d, 0x25, 0xed, 0x54, 0xd9, 0x18, 0x17, 0x74, 0x55, 0x9d,
0x72, 0xad, 0xe3, 0x6d, 0xcd, 0x77, 0xbc, 0xaf, 0x41, 0x2f, 0x90, 0x07, 0x72, 0x53, 0x2a, 0xa6,
0x8a, 0xa7, 0xae, 0x03, 0x08, 0x1d, 0x4b, 0x44, 0xb6, 0xc4, 0x85, 0x02, 0xb6, 0xc4, 0xab, 0x57,
0x6e, 0x89, 0xf5, 0x22, 0xd8, 0x12, 0xff, 0xa1, 0x01, 0x96, 0xa6, 0xb8, 0x7a, 0x17, 0xfa, 0x28,
0xf5, 0xf1, 0x79, 0xea, 0x2e, 0x74, 0xcb, 0x28, 0xd3, 0xcf, 0x32, 0x15, 0x20, 0x79, 0x3d, 0x64,
0x51, 0x92, 0xcd, 0x4e, 0x82, 0xcf, 0x98, 0x36, 0xbc, 0x86, 0x48, 0xdb, 0x8e, 0xf2, 0xc8, 0x49,
0x9e, 0x71, 0x5d, 0x61, 0x8b, 0xa1, 0xb4, 0xcd, 0xc3, 0x1f, 0x32, 0x58, 0x9d, 0xd0, 0xf2, 0x96,
0x03, 0x0a, 0x92, 0x55, 0x89, 0x6c, 0x41, 0x87, 0xc5, 0xbe, 0x92, 0xae, 0xa0, 0xb4, 0xcd, 0x62,
0x1f, 0x45, 0x23, 0x58, 0xd7, 0xef, 0x41, 0x09, 0xc7, 0x6a, 0xab, 0x6b, 0xac, 0x7d, 0xc1, 0x23,
0xdc, 0x21, 0x9f, 0x1c, 0x6b, 0x4d, 0x67, 0x4d, 0x3d, 0x09, 0xe9, 0x21, 0x79, 0x1f, 0x4c, 0xb9,
0x4b, 0xb9, 0x50, 0xfb, 0xca, 0x0b, 0xf5, 0x58, 0xec, 0x17, 0x03, 0xfb, 0x97, 0x06, 0xdc, 0x38,
0x47, 0xe1, 0x35, 0xe2, 0xe8, 0x09, 0x74, 0x4e, 0xd8, 0x44, 0x2e, 0x51, 0xbc, 0x72, 0xed, 0x5e,
0xf4, 0x68, 0x7a, 0x81, 0xc3, 0x9c, 0x72, 0x01, 0xfb, 0x93, 0xd2, 0xad, 0x1f, 0x84, 0x39, 0x9f,
0x1e, 0x24, 0x51, 0x2a, 0xeb, 0x83, 0x7f, 0xad, 0x27, 0xaa, 0xcb, 0x43, 0xdc, 0xfe, 0xa9, 0x01,
0x80, 0xc9, 0x83, 0x5b, 0x9f, 0x0b, 0x4c, 0xe3, 0x3a, 0x81, 0x29, 0xfb, 0x56, 0xd9, 0xfe, 0x64,
0x2c, 0xa4, 0xa2, 0xaa, 0x85, 0x5c, 0xef, 0x4e, 0xe2, 0x3c, 0x72, 0x94, 0xa8, 0x28, 0x10, 0xf6,
0x2f, 0x0c, 0x00, 0x2c, 0xe6, 0xea, 0x18, 0x8b, 0x37, 0xb9, 0x71, 0xf9, 0x0f, 0xce, 0xc6, 0x7c,
0xfa, 0xed, 0x17, 0xe9, 0xc7, 0xd1, 0x1f, 0xcd, 0x65, 0x36, 0x94, 0xfe, 0xa8, 0x8c, 0xd7, 0x19,
0xaa, 0x7c, 0xf0, 0x2b, 0x03, 0xcc, 0x9a, 0xab, 0xf8, 0x3c, 0x8d, 0xc6, 0x62, 0xa5, 0xc0, 0x6e,
0x52, 0x66, 0x8f, 0xcb, 0x6b, 0x09, 0x15, 0x55, 0x09, 0xb5, 0x05, 0x1d, 0xa4, 0xa4, 0x96, 0x51,
0xb1, 0xce, 0xa8, 0xfb, 0x70, 0x23, 0x63, 0x1e, 0x8b, 0x45, 0x38, 0x73, 0xa3, 0xc4, 0x0f, 0x4e,
0x03, 0xe6, 0x63, 0x5e, 0x75, 0x9c, 0x7e, 0x21, 0x38, 0xd4, 0xb8, 0xfd, 0x47, 0x03, 0xd6, 0x7f,
0x90, 0xb3, 0x6c, 0x76, 0x94, 0xf8, 0x4c, 0x9d, 0xec, 0xc5, 0x43, 0xe2, 0x5d, 0xb4, 0x45, 0xd3,
0xa3, 0xc2, 0xf5, 0x8d, 0x7f, 0x1e, 0xae, 0xdc, 0xe9, 0x70, 0x1d, 0xa2, 0x92, 0x62, 0xf5, 0x88,
0x70, 0x15, 0x8a, 0x2b, 0xc7, 0xea, 0x6b, 0x5a, 0x51, 0xfc, 0x13, 0x03, 0x7a, 0xb5, 0xc4, 0x94,
0xd7, 0x8b, 0xbe, 0x8b, 0xd4, 0x15, 0x66, 0x60, 0xc1, 0xed, 0x79, 0xd5, 0x53, 0x21, 0xd9, 0x84,
0x95, 0x88, 0x4f, 0xb4, 0xc7, 0x4d, 0x47, 0x0d, 0xc8, 0x36, 0x74, 0x22, 0x3e, 0xc1, 0xdf, 0x5a,
0xba, 0x4a, 0x97, 0x63, 0xe9, 0xb6, 0xaa, 0x8b, 0x52, 0xc5, 0xaa, 0x02, 0xec, 0xdf, 0x18, 0x40,
0x74, 0x93, 0xf2, 0x52, 0xef, 0xc0, 0x18, 0xb0, 0xf5, 0xe7, 0xce, 0x86, 0xea, 0x02, 0xeb, 0xd8,
0xc2, 0xf5, 0xda, 0x3c, 0x77, 0xbd, 0xde, 0x87, 0x1b, 0x3e, 0x3b, 0xa5, 0xb2, 0x9f, 0x5a, 0x3c,
0x72, 0x5f, 0x0b, 0xca, 0xb6, 0xef, 0xcd, 0x77, 0xa0, 0x5b, 0xfe, 0xfd, 0x42, 0xfa, 0x60, 0x8e,
0xe2, 0x40, 0xe0, 0x8f, 0xc1, 0x20, 0x9e, 0xf4, 0xff, 0x8f, 0xf4, 0xa0, 0xfd, 0x3d, 0x46, 0x43,
0x31, 0x9d, 0xf5, 0x0d, 0x62, 0x42, 0xe7, 0xbd, 0x71, 0x9c, 0x64, 0x11, 0x0d, 0xfb, 0x8d, 0xfd,
0xb7, 0x7f, 0xf4, 0xcd, 0x49, 0x20, 0xa6, 0xf9, 0x58, 0x5a, 0xb2, 0xab, 0x4c, 0xfb, 0x5a, 0x90,
0xe8, 0xaf, 0xdd, 0xc2, 0x6b, 0xbb, 0x68, 0x6d, 0x39, 0x4c, 0xc7, 0xe3, 0x55, 0x44, 0xde, 0xfa,
0x47, 0x00, 0x00, 0x00, 0xff, 0xff, 0xab, 0xa3, 0xdc, 0x3d, 0xa4, 0x1a, 0x00, 0x00,
}

View File

@ -332,6 +332,7 @@ message SearchRequest {
repeated string output_fields = 8;
repeated common.KeyValuePair search_params = 9; // must
uint64 travel_timestamp = 10;
uint64 guarantee_timestamp = 11; // guarantee_timestamp
}
message RetrieveRequest {
@ -342,6 +343,7 @@ message RetrieveRequest {
schema.IDs ids = 5; // must
repeated string output_fields = 6; // must
uint64 travel_timestamp = 7;
uint64 guarantee_timestamp = 8; // guarantee_timestamp
}
message RetrieveResults {

View File

@ -2462,6 +2462,7 @@ type SearchRequest struct {
OutputFields []string `protobuf:"bytes,8,rep,name=output_fields,json=outputFields,proto3" json:"output_fields,omitempty"`
SearchParams []*commonpb.KeyValuePair `protobuf:"bytes,9,rep,name=search_params,json=searchParams,proto3" json:"search_params,omitempty"`
TravelTimestamp uint64 `protobuf:"varint,10,opt,name=travel_timestamp,json=travelTimestamp,proto3" json:"travel_timestamp,omitempty"`
GuaranteeTimestamp uint64 `protobuf:"varint,11,opt,name=guarantee_timestamp,json=guaranteeTimestamp,proto3" json:"guarantee_timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -2562,6 +2563,13 @@ func (m *SearchRequest) GetTravelTimestamp() uint64 {
return 0
}
func (m *SearchRequest) GetGuaranteeTimestamp() uint64 {
if m != nil {
return m.GuaranteeTimestamp
}
return 0
}
type RetrieveRequest 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"`
@ -2570,6 +2578,7 @@ type RetrieveRequest struct {
Ids *schemapb.IDs `protobuf:"bytes,5,opt,name=ids,proto3" json:"ids,omitempty"`
OutputFields []string `protobuf:"bytes,6,rep,name=output_fields,json=outputFields,proto3" json:"output_fields,omitempty"`
TravelTimestamp uint64 `protobuf:"varint,7,opt,name=travel_timestamp,json=travelTimestamp,proto3" json:"travel_timestamp,omitempty"`
GuaranteeTimestamp uint64 `protobuf:"varint,8,opt,name=guarantee_timestamp,json=guaranteeTimestamp,proto3" json:"guarantee_timestamp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -2649,6 +2658,13 @@ func (m *RetrieveRequest) GetTravelTimestamp() uint64 {
return 0
}
func (m *RetrieveRequest) GetGuaranteeTimestamp() uint64 {
if m != nil {
return m.GuaranteeTimestamp
}
return 0
}
type RetrieveResults struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Ids *schemapb.IDs `protobuf:"bytes,2,opt,name=ids,proto3" json:"ids,omitempty"`
@ -3627,171 +3643,173 @@ func init() {
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{
// 2621 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0xcd, 0x6f, 0x1c, 0x49,
0xf5, 0xae, 0x19, 0xcf, 0xd7, 0x9b, 0x1e, 0x7b, 0x52, 0xfe, 0x9a, 0x4c, 0x3e, 0xd6, 0xee, 0xdd,
0xfc, 0xd6, 0x71, 0xb2, 0xce, 0xae, 0x93, 0xfc, 0x76, 0xf9, 0x5c, 0x92, 0x98, 0x24, 0x56, 0x3e,
0xf0, 0xf6, 0x84, 0x15, 0xcb, 0x2a, 0x1a, 0xb5, 0xa7, 0x2b, 0x33, 0x2d, 0xf7, 0x74, 0x0f, 0x5d,
0xdd, 0x76, 0x26, 0x27, 0xa4, 0x2c, 0x48, 0x08, 0xc8, 0x0a, 0xb1, 0x42, 0x82, 0x03, 0x42, 0xa0,
0x3d, 0xc0, 0x05, 0xd0, 0x22, 0x21, 0x21, 0x0e, 0x1c, 0xf6, 0xc0, 0x01, 0x09, 0xc4, 0xdf, 0x00,
0x47, 0xfe, 0x07, 0xd4, 0x55, 0xdd, 0x3d, 0xdd, 0xed, 0xea, 0xf1, 0x38, 0xb3, 0xc1, 0xf6, 0xad,
0xfb, 0xd5, 0x7b, 0x55, 0xef, 0xbb, 0x5e, 0xbd, 0x2a, 0x90, 0xba, 0xba, 0xb1, 0xe3, 0xd2, 0xd5,
0x9e, 0x6d, 0x39, 0x16, 0x9e, 0x89, 0xfe, 0xad, 0xf2, 0x9f, 0xba, 0xd4, 0xb2, 0xba, 0x5d, 0xcb,
0xe4, 0xc0, 0xba, 0x44, 0x5b, 0x1d, 0xd2, 0x55, 0xf9, 0x9f, 0xfc, 0x29, 0x82, 0x85, 0x1b, 0x36,
0x51, 0x1d, 0x72, 0xc3, 0x32, 0x0c, 0xd2, 0x72, 0x74, 0xcb, 0x54, 0xc8, 0xb7, 0x5c, 0x42, 0x1d,
0xfc, 0x3a, 0x4c, 0x6e, 0xa9, 0x94, 0xd4, 0xd0, 0x22, 0x5a, 0x2e, 0xaf, 0x9d, 0x5e, 0x8d, 0xcd,
0xed, 0xcf, 0x79, 0x8f, 0xb6, 0xaf, 0xab, 0x94, 0x28, 0x0c, 0x13, 0x2f, 0x40, 0x41, 0xdb, 0x6a,
0x9a, 0x6a, 0x97, 0xd4, 0x32, 0x8b, 0x68, 0xb9, 0xa4, 0xe4, 0xb5, 0xad, 0xfb, 0x6a, 0x97, 0xe0,
0x57, 0x61, 0xba, 0x15, 0xce, 0xcf, 0x11, 0xb2, 0x0c, 0x61, 0x6a, 0x00, 0x66, 0x88, 0xf3, 0x90,
0xe7, 0xfc, 0xd5, 0x26, 0x17, 0xd1, 0xb2, 0xa4, 0xf8, 0x7f, 0xf8, 0x0c, 0x00, 0xed, 0xa8, 0xb6,
0x46, 0x9b, 0xa6, 0xdb, 0xad, 0xe5, 0x16, 0xd1, 0x72, 0x4e, 0x29, 0x71, 0xc8, 0x7d, 0xb7, 0x2b,
0x7f, 0x1f, 0xc1, 0xdc, 0xba, 0x6d, 0xf5, 0x8e, 0x84, 0x10, 0xf2, 0xaf, 0x11, 0xcc, 0xde, 0x56,
0xe9, 0xd1, 0xd0, 0xe8, 0x19, 0x00, 0x47, 0xef, 0x92, 0x26, 0x75, 0xd4, 0x6e, 0x8f, 0x69, 0x75,
0x52, 0x29, 0x79, 0x90, 0x86, 0x07, 0x90, 0xdf, 0x03, 0xe9, 0xba, 0x65, 0x19, 0x0a, 0xa1, 0x3d,
0xcb, 0xa4, 0x04, 0x5f, 0x86, 0x3c, 0x75, 0x54, 0xc7, 0xa5, 0x3e, 0x93, 0xa7, 0x84, 0x4c, 0x36,
0x18, 0x8a, 0xe2, 0xa3, 0xe2, 0x59, 0xc8, 0xed, 0xa8, 0x86, 0xcb, 0x79, 0x2c, 0x2a, 0xfc, 0x47,
0x7e, 0x1f, 0xa6, 0x1a, 0x8e, 0xad, 0x9b, 0xed, 0xcf, 0x70, 0xf2, 0x52, 0x30, 0xf9, 0x3f, 0x11,
0x9c, 0x5c, 0x27, 0xb4, 0x65, 0xeb, 0x5b, 0x47, 0xc4, 0x75, 0x65, 0x90, 0x06, 0x90, 0x8d, 0x75,
0xa6, 0xea, 0xac, 0x12, 0x83, 0x25, 0x8c, 0x91, 0x4b, 0x1a, 0xe3, 0xe7, 0x19, 0xa8, 0x8b, 0x84,
0x1a, 0x47, 0x7d, 0x5f, 0x0a, 0x23, 0x2a, 0xc3, 0x88, 0xce, 0xc5, 0x89, 0xfc, 0x6c, 0x30, 0x58,
0xad, 0xc1, 0x00, 0x61, 0xe0, 0x25, 0xa5, 0xca, 0x0a, 0xa4, 0x5a, 0x83, 0xb9, 0x1d, 0xdd, 0x76,
0x5c, 0xd5, 0x68, 0xb6, 0x3a, 0xaa, 0x69, 0x12, 0x83, 0xe9, 0x89, 0xd6, 0x26, 0x17, 0xb3, 0xcb,
0x25, 0x65, 0xc6, 0x1f, 0xbc, 0xc1, 0xc7, 0x3c, 0x65, 0x51, 0x7c, 0x05, 0xe6, 0x7b, 0x9d, 0x3e,
0xd5, 0x5b, 0x7b, 0x88, 0x72, 0x8c, 0x68, 0x36, 0x18, 0x8d, 0x52, 0xb1, 0x38, 0xbf, 0x6b, 0xa9,
0xda, 0xd1, 0x88, 0xf3, 0x67, 0x08, 0x6a, 0x0a, 0x31, 0x88, 0x4a, 0x8f, 0x86, 0x0b, 0xca, 0x1f,
0x21, 0x38, 0x7b, 0x8b, 0x38, 0x11, 0x63, 0x3a, 0xaa, 0xa3, 0x53, 0x47, 0x6f, 0xd1, 0xc3, 0x64,
0xeb, 0x43, 0x04, 0x2f, 0xa5, 0xb2, 0x35, 0x8e, 0x6f, 0xbf, 0x09, 0x39, 0xef, 0x8b, 0xd6, 0x32,
0x8b, 0xd9, 0xe5, 0xf2, 0xda, 0x92, 0x90, 0xe6, 0x0e, 0xe9, 0xbf, 0xeb, 0xa5, 0x8c, 0x4d, 0x55,
0xb7, 0x15, 0x8e, 0x2f, 0xff, 0x05, 0xc1, 0x7c, 0xa3, 0x63, 0xed, 0x0e, 0x58, 0x7a, 0x11, 0x0a,
0x8a, 0x47, 0x7b, 0x36, 0x11, 0xed, 0xf8, 0x8b, 0x30, 0xe9, 0xf4, 0x7b, 0x84, 0x25, 0x8a, 0xa9,
0xb5, 0xe5, 0x55, 0xc1, 0xde, 0xbd, 0x9a, 0x60, 0xf2, 0x41, 0xbf, 0x47, 0x14, 0x46, 0x25, 0xff,
0x02, 0xc1, 0xc2, 0x1e, 0x11, 0xc6, 0x51, 0xe6, 0x79, 0xa8, 0x26, 0xcc, 0xc9, 0xf5, 0x5a, 0x52,
0xa6, 0xe3, 0xf6, 0xa4, 0xf8, 0x1c, 0x44, 0x4c, 0xdc, 0xd4, 0x35, 0x5a, 0xcb, 0x2e, 0x66, 0x97,
0xb3, 0x4a, 0x25, 0x92, 0x16, 0x34, 0x2a, 0x7f, 0x82, 0x60, 0x9e, 0x17, 0x17, 0x9b, 0xaa, 0xed,
0xe8, 0x87, 0x9d, 0xa0, 0xcf, 0xc1, 0x54, 0x2f, 0xe0, 0x83, 0xe3, 0x4d, 0x32, 0xbc, 0x4a, 0x08,
0x65, 0xde, 0xfa, 0x7b, 0x04, 0xb3, 0x5e, 0x2d, 0x71, 0x9c, 0x78, 0xfe, 0x1d, 0x82, 0x99, 0xdb,
0x2a, 0x3d, 0x4e, 0x2c, 0xff, 0xc1, 0x4f, 0xe5, 0x21, 0xcf, 0x87, 0x99, 0xa2, 0x3c, 0xc4, 0x38,
0xd3, 0xc1, 0xe6, 0x35, 0x15, 0xe3, 0x9a, 0xca, 0x7f, 0x1c, 0xe4, 0xfc, 0x63, 0xc6, 0xf9, 0x9f,
0x10, 0x9c, 0xb9, 0x45, 0x9c, 0x90, 0xeb, 0x23, 0xb1, 0x37, 0x8c, 0xea, 0x2d, 0xcf, 0xf8, 0xce,
0x26, 0x64, 0xfe, 0x50, 0x76, 0x90, 0xdf, 0x22, 0x98, 0xf3, 0xd2, 0xef, 0xd1, 0x70, 0x82, 0x11,
0x6a, 0x4f, 0xf9, 0x67, 0xfe, 0x9e, 0x17, 0xe5, 0x78, 0x1c, 0xd5, 0x09, 0x1c, 0x2f, 0x23, 0x72,
0x3c, 0x8f, 0xb9, 0x10, 0xb2, 0xb1, 0x1e, 0xec, 0x15, 0x31, 0x98, 0xfc, 0x03, 0x04, 0xf3, 0x41,
0xe5, 0xdb, 0x20, 0xed, 0x2e, 0x31, 0x9d, 0xe7, 0xd7, 0x67, 0x52, 0x1b, 0x19, 0x41, 0xcd, 0x7a,
0x1a, 0x4a, 0x94, 0xaf, 0x13, 0x16, 0xb5, 0x03, 0x80, 0xfc, 0x31, 0x82, 0x85, 0x3d, 0xec, 0x8c,
0xa3, 0xac, 0x1a, 0x14, 0x74, 0x53, 0x23, 0x8f, 0x43, 0x6e, 0x82, 0x5f, 0x6f, 0x64, 0xcb, 0xd5,
0x0d, 0x2d, 0x64, 0x23, 0xf8, 0xc5, 0x4b, 0x20, 0x11, 0x53, 0xdd, 0x32, 0x48, 0x93, 0xe1, 0x32,
0xa3, 0x16, 0x95, 0x32, 0x87, 0x6d, 0x78, 0x20, 0xf9, 0x87, 0x08, 0x66, 0x3c, 0x9b, 0xfa, 0x3c,
0xd2, 0x17, 0xab, 0xb3, 0x45, 0x28, 0x47, 0x8c, 0xe6, 0xb3, 0x1b, 0x05, 0xc9, 0xdb, 0x30, 0x1b,
0x67, 0x67, 0x1c, 0x9d, 0x9d, 0x05, 0x08, 0x2d, 0xc2, 0x7d, 0x2b, 0xab, 0x44, 0x20, 0xf2, 0x7f,
0x10, 0x60, 0x5e, 0x5e, 0x30, 0x65, 0x1c, 0xf2, 0x21, 0xfb, 0x91, 0x4e, 0x0c, 0x2d, 0x9a, 0xc1,
0x4a, 0x0c, 0xc2, 0x86, 0xd7, 0x41, 0x22, 0x8f, 0x1d, 0x5b, 0x6d, 0xf6, 0x54, 0x5b, 0xed, 0xf2,
0x23, 0xce, 0x48, 0xc9, 0xa6, 0xcc, 0xc8, 0x36, 0x19, 0x95, 0xfc, 0x57, 0xaf, 0x30, 0xf1, 0x9d,
0xf2, 0xa8, 0x4b, 0x7c, 0x06, 0x80, 0x39, 0x2d, 0x1f, 0xce, 0xf1, 0x61, 0x06, 0x61, 0xe9, 0xfc,
0x63, 0x04, 0x55, 0x26, 0x02, 0x97, 0xa7, 0xe7, 0x4d, 0x9b, 0xa0, 0x41, 0x09, 0x9a, 0x21, 0x21,
0xf4, 0x39, 0xc8, 0xfb, 0x8a, 0xcd, 0x8e, 0xaa, 0x58, 0x9f, 0x60, 0x1f, 0x31, 0xe4, 0x5f, 0x22,
0x98, 0x4b, 0xa8, 0x7c, 0x1c, 0x8f, 0x7e, 0x00, 0x98, 0x4b, 0xa8, 0x0d, 0xc4, 0x0e, 0xb6, 0x9e,
0x73, 0xc2, 0xfa, 0x3f, 0xa9, 0x24, 0xe5, 0x84, 0x9e, 0x80, 0x50, 0xf9, 0x1f, 0x08, 0x4e, 0xdf,
0x22, 0x0e, 0x43, 0xbd, 0xee, 0xe5, 0x8e, 0x4d, 0xdb, 0x6a, 0xdb, 0x84, 0xd2, 0xe3, 0xeb, 0x1f,
0x3f, 0xe1, 0xb5, 0x8a, 0x48, 0xa4, 0x71, 0xf4, 0xbf, 0x04, 0x12, 0x5b, 0x83, 0x68, 0x4d, 0xdb,
0xda, 0xa5, 0xbe, 0x1f, 0x95, 0x7d, 0x98, 0x62, 0xed, 0x32, 0x87, 0x70, 0x2c, 0x47, 0x35, 0x38,
0x82, 0xbf, 0x31, 0x30, 0x88, 0x37, 0xcc, 0x62, 0x30, 0x60, 0xcc, 0x9b, 0x9c, 0x1c, 0x5f, 0x1d,
0x3f, 0x45, 0x30, 0x97, 0x10, 0x65, 0x1c, 0xdd, 0x5e, 0xe5, 0x95, 0x14, 0x17, 0x66, 0x6a, 0xed,
0x25, 0x21, 0x4d, 0x64, 0x31, 0x8e, 0x2d, 0x7f, 0x8a, 0xa0, 0xea, 0x9d, 0xb6, 0x8e, 0x79, 0x42,
0xfb, 0x55, 0x06, 0x2a, 0x1b, 0x26, 0x25, 0xb6, 0x73, 0xf4, 0x8b, 0x69, 0xfc, 0x36, 0x94, 0x99,
0x60, 0xb4, 0xa9, 0xa9, 0x8e, 0xea, 0xef, 0x46, 0x67, 0x85, 0x7d, 0xc1, 0x9b, 0x1e, 0xde, 0xba,
0xea, 0xa8, 0x0a, 0xd7, 0x0e, 0xf5, 0xbe, 0xf1, 0x29, 0x28, 0x75, 0x54, 0xda, 0x69, 0x6e, 0x93,
0x3e, 0xad, 0xe5, 0x17, 0xb3, 0xcb, 0x15, 0xa5, 0xe8, 0x01, 0xee, 0x90, 0x3e, 0xc5, 0x27, 0xa1,
0x68, 0xba, 0x5d, 0x1e, 0x3f, 0x85, 0x45, 0xb4, 0x5c, 0x51, 0x0a, 0xa6, 0xdb, 0x65, 0xd1, 0xf3,
0xb7, 0x0c, 0x4c, 0xdd, 0x73, 0xbd, 0xd2, 0x9d, 0x75, 0x35, 0x5d, 0xc3, 0x79, 0x3e, 0x5f, 0x5b,
0x81, 0x2c, 0x2f, 0x09, 0x3c, 0x8a, 0x9a, 0x90, 0xf1, 0x8d, 0x75, 0xaa, 0x78, 0x48, 0xec, 0xe6,
0xc0, 0x6d, 0xb5, 0xfc, 0x1a, 0x2a, 0xcb, 0x98, 0x2d, 0x79, 0x10, 0xe6, 0x71, 0x9e, 0x28, 0xc4,
0xb6, 0xc3, 0x0a, 0x8b, 0x89, 0x42, 0x6c, 0x9b, 0x0f, 0xca, 0x20, 0xa9, 0xad, 0x6d, 0xd3, 0xda,
0x35, 0x88, 0xd6, 0x26, 0x1a, 0x33, 0x7b, 0x51, 0x89, 0xc1, 0xb8, 0x63, 0x78, 0x86, 0x6f, 0xb6,
0x4c, 0xa7, 0x96, 0xe7, 0x09, 0x83, 0x43, 0x6e, 0x98, 0x8e, 0x37, 0xac, 0x11, 0x83, 0x38, 0x84,
0x0d, 0x17, 0xf8, 0x30, 0x87, 0xf8, 0xc3, 0x6e, 0x2f, 0xa4, 0x2e, 0xf2, 0x61, 0x0e, 0xf1, 0x86,
0x4f, 0x03, 0xeb, 0x17, 0xf1, 0x06, 0x52, 0x69, 0xd0, 0x40, 0x62, 0x00, 0x79, 0x07, 0xaa, 0x9b,
0x86, 0xda, 0x22, 0x1d, 0xcb, 0xd0, 0x88, 0xcd, 0x36, 0x37, 0x5c, 0x85, 0xac, 0xa3, 0xb6, 0xfd,
0xdd, 0xd3, 0xfb, 0xc4, 0x6f, 0xf9, 0x6d, 0x26, 0x1e, 0x97, 0xaf, 0x08, 0xb7, 0x99, 0xc8, 0x34,
0x83, 0x16, 0x13, 0x9e, 0x87, 0x3c, 0x6b, 0xb6, 0xf3, 0x7d, 0x55, 0x52, 0xfc, 0x3f, 0xf9, 0x61,
0x6c, 0xdd, 0x5b, 0xb6, 0xe5, 0xf6, 0xf0, 0x06, 0x48, 0xbd, 0x01, 0xcc, 0xb3, 0x66, 0xfa, 0xa6,
0x96, 0x64, 0x5a, 0x89, 0x91, 0xca, 0x7f, 0xce, 0x42, 0xa5, 0x41, 0x54, 0xbb, 0xd5, 0x39, 0x0e,
0xe7, 0x6a, 0x4f, 0xe3, 0x1a, 0x35, 0xfc, 0x94, 0xe0, 0x7d, 0xe2, 0x0b, 0x70, 0x22, 0x22, 0x50,
0xb3, 0xed, 0x29, 0x88, 0x79, 0x86, 0xa4, 0x54, 0x7b, 0x49, 0xc5, 0xbd, 0x09, 0x45, 0x8d, 0x1a,
0x4d, 0x66, 0xa2, 0x02, 0x33, 0x91, 0x58, 0xbe, 0x75, 0x6a, 0x30, 0xd3, 0x14, 0x34, 0xfe, 0x81,
0x5f, 0x86, 0x8a, 0xe5, 0x3a, 0x3d, 0xd7, 0x69, 0xf2, 0xc8, 0xac, 0x15, 0x19, 0x7b, 0x12, 0x07,
0xb2, 0xc0, 0xa5, 0xf8, 0x26, 0x54, 0x28, 0x53, 0x65, 0x50, 0x7a, 0x96, 0x46, 0xad, 0x90, 0x24,
0x4e, 0xc7, 0x6b, 0x4f, 0x7c, 0x1e, 0xaa, 0x8e, 0xad, 0xee, 0x10, 0xa3, 0x39, 0xf0, 0x47, 0x60,
0xfe, 0x38, 0xcd, 0xe1, 0x0f, 0x42, 0xaf, 0xfc, 0x4d, 0x06, 0xa6, 0x15, 0xe2, 0xd8, 0x3a, 0xd9,
0x21, 0xc7, 0xc2, 0x80, 0x2b, 0x90, 0xd5, 0x35, 0xca, 0x0c, 0x38, 0x34, 0x9b, 0xe8, 0x1a, 0xdd,
0xab, 0xf4, 0xbc, 0x40, 0xe9, 0x22, 0x65, 0x15, 0xc4, 0xca, 0xfa, 0x04, 0x45, 0x95, 0xe5, 0x65,
0x44, 0xfa, 0xdc, 0x29, 0xd1, 0x13, 0x22, 0x33, 0x8a, 0x10, 0x89, 0xfc, 0x9f, 0x3d, 0x68, 0xfe,
0x97, 0xef, 0xc0, 0xe4, 0x6d, 0xdd, 0x61, 0xae, 0xef, 0xe5, 0x61, 0xc4, 0x8e, 0x66, 0x2c, 0xdb,
0x9e, 0x84, 0xa2, 0x6d, 0xed, 0xf2, 0x79, 0x33, 0x2c, 0x69, 0x14, 0x6c, 0x6b, 0x97, 0x6d, 0x1a,
0xec, 0x6a, 0xd7, 0xb2, 0xfd, 0x6c, 0x92, 0x51, 0xfc, 0x3f, 0xf9, 0x3b, 0x68, 0x10, 0xee, 0x63,
0x28, 0xe0, 0x6d, 0x28, 0xd8, 0x9c, 0x7e, 0xe8, 0x45, 0x57, 0x74, 0x25, 0x26, 0x57, 0x40, 0x25,
0x7f, 0x80, 0x40, 0xba, 0x69, 0xb8, 0xf4, 0x45, 0x64, 0x1d, 0x51, 0x6f, 0x3d, 0x2b, 0xec, 0xad,
0xcb, 0x3f, 0xca, 0x40, 0xc5, 0x67, 0x63, 0x9c, 0x72, 0x2c, 0x95, 0x95, 0x06, 0x94, 0xbd, 0x25,
0x9b, 0x94, 0xb4, 0x83, 0x66, 0x4c, 0x79, 0x6d, 0x4d, 0x98, 0xa7, 0x63, 0x6c, 0xb0, 0x2b, 0xc2,
0x06, 0x23, 0xfa, 0xaa, 0xe9, 0xd8, 0x7d, 0x05, 0x5a, 0x21, 0xa0, 0xfe, 0x10, 0xa6, 0x13, 0xc3,
0x9e, 0x6f, 0x6c, 0x93, 0x7e, 0xb0, 0x11, 0x6d, 0x93, 0x3e, 0xbe, 0x12, 0xbd, 0xc8, 0x4d, 0x73,
0xb8, 0xbb, 0x96, 0xd9, 0xbe, 0x66, 0xdb, 0x6a, 0xdf, 0xbf, 0xe8, 0xfd, 0x7c, 0xe6, 0x2d, 0x24,
0xff, 0x0b, 0x81, 0xf4, 0x8e, 0x4b, 0xec, 0xfe, 0x61, 0xe6, 0x13, 0x0c, 0x93, 0xe4, 0x71, 0xcf,
0xf6, 0x4b, 0x2a, 0xf6, 0xbd, 0x37, 0x1d, 0xe4, 0x04, 0xe9, 0x40, 0x90, 0x88, 0xf2, 0xc2, 0x0e,
0xed, 0x07, 0x03, 0x31, 0xc7, 0x0a, 0x84, 0x58, 0x74, 0x67, 0x0e, 0x1c, 0xdd, 0x7f, 0x47, 0x30,
0xb7, 0x49, 0x6c, 0xaa, 0x53, 0x87, 0x98, 0x8e, 0xdf, 0xcb, 0xd9, 0x30, 0x1f, 0x59, 0xf1, 0xa6,
0x19, 0x4a, 0x34, 0xcd, 0x3e, 0x9b, 0x16, 0x52, 0xac, 0x7c, 0xe4, 0x6d, 0xcc, 0xa0, 0x7c, 0x0c,
0x9a, 0xb5, 0xbc, 0xfc, 0x9e, 0x4a, 0xd9, 0xc4, 0x7c, 0x7e, 0x63, 0x87, 0x8c, 0x1f, 0xf3, 0x0b,
0x48, 0xa1, 0x50, 0xcf, 0xef, 0x52, 0xf3, 0xe0, 0xfb, 0x50, 0xc2, 0xa3, 0xfe, 0x0f, 0x12, 0xae,
0x93, 0x72, 0x2d, 0xfa, 0x53, 0x04, 0x8b, 0xe9, 0x5c, 0x8d, 0x13, 0xfc, 0x5f, 0x81, 0x9c, 0x6e,
0x3e, 0xb2, 0x82, 0xd6, 0xc2, 0x8a, 0xb8, 0x0a, 0x13, 0xae, 0xcb, 0x09, 0xe5, 0x7f, 0x23, 0xa8,
0x32, 0x57, 0x3c, 0x04, 0xf3, 0x77, 0x49, 0xb7, 0x49, 0xf5, 0x27, 0x24, 0x30, 0x7f, 0x97, 0x74,
0x1b, 0xfa, 0x13, 0x12, 0xf3, 0x8c, 0x5c, 0xdc, 0x33, 0xe2, 0xa7, 0xb3, 0xfc, 0x90, 0xd6, 0x51,
0x21, 0xd6, 0x3a, 0x92, 0x9f, 0x21, 0xa8, 0xdf, 0x22, 0x4e, 0x52, 0xd4, 0xc3, 0x73, 0x8a, 0x0f,
0x11, 0x9c, 0x12, 0x32, 0x34, 0x8e, 0x3f, 0x7c, 0x21, 0xee, 0x0f, 0xe2, 0xaa, 0x7c, 0xcf, 0x92,
0xbe, 0x2b, 0xbc, 0x01, 0xd2, 0xba, 0xdb, 0xed, 0x86, 0xb9, 0x77, 0x09, 0x24, 0x9b, 0x7f, 0xf2,
0xa2, 0x95, 0x67, 0xf8, 0xb2, 0x0f, 0xf3, 0x4a, 0x53, 0xf9, 0x02, 0x54, 0x7c, 0x12, 0x9f, 0xeb,
0x3a, 0x14, 0x6d, 0xff, 0xdb, 0xc7, 0x0f, 0xff, 0xe5, 0x39, 0x98, 0x51, 0x48, 0xdb, 0xf3, 0x44,
0xfb, 0xae, 0x6e, 0x6e, 0xfb, 0xcb, 0xc8, 0x4f, 0x11, 0xcc, 0xc6, 0xe1, 0xfe, 0x5c, 0xff, 0x0f,
0x05, 0x55, 0xd3, 0x6c, 0x42, 0xe9, 0x50, 0xb3, 0x5c, 0xe3, 0x38, 0x4a, 0x80, 0x1c, 0xd1, 0x5c,
0x66, 0x64, 0xcd, 0xad, 0x5c, 0xe4, 0xfd, 0xf5, 0xc4, 0x15, 0x3c, 0x2e, 0x40, 0xf6, 0x9a, 0x61,
0x54, 0x27, 0xb0, 0x04, 0xc5, 0x0d, 0xf3, 0x1e, 0xe9, 0x5a, 0x76, 0xbf, 0x8a, 0x56, 0xbe, 0x0c,
0xd3, 0x89, 0x93, 0x14, 0x2e, 0xc2, 0xe4, 0x7d, 0xcb, 0x24, 0xd5, 0x09, 0x5c, 0x05, 0xe9, 0xba,
0x6e, 0xaa, 0x76, 0xff, 0x5d, 0xd2, 0x72, 0x2c, 0xbb, 0xaa, 0xe1, 0x69, 0x28, 0xdf, 0x34, 0x2c,
0xd5, 0xf1, 0x01, 0x64, 0xed, 0xa3, 0x05, 0xa8, 0xdc, 0x63, 0x4c, 0x35, 0x88, 0xbd, 0xa3, 0xb7,
0x08, 0x6e, 0x42, 0x35, 0xf9, 0x3c, 0x0f, 0x5f, 0x14, 0x9a, 0x2f, 0xe5, 0x15, 0x5f, 0x7d, 0x98,
0x98, 0xf2, 0x04, 0x7e, 0x1f, 0xa6, 0xe2, 0x0f, 0xe7, 0xb0, 0x38, 0x5b, 0x08, 0x5f, 0xd7, 0xed,
0x37, 0x79, 0x13, 0x2a, 0xb1, 0x77, 0x70, 0xf8, 0xbc, 0x70, 0x6e, 0xd1, 0x5b, 0xb9, 0xfa, 0x92,
0x10, 0x35, 0xfa, 0x56, 0x8d, 0x73, 0x1f, 0x7f, 0x0e, 0x94, 0xc2, 0xbd, 0xf0, 0xcd, 0xd0, 0x7e,
0xdc, 0xab, 0x70, 0x62, 0xcf, 0xeb, 0x1e, 0xfc, 0x9a, 0x70, 0xfe, 0xb4, 0x57, 0x40, 0xfb, 0x2d,
0xb1, 0x0b, 0x78, 0xef, 0x7b, 0x2f, 0xbc, 0x2a, 0xb6, 0x40, 0xda, 0x6b, 0xb7, 0xfa, 0xa5, 0x91,
0xf1, 0x43, 0xc5, 0x7d, 0x17, 0xc1, 0x42, 0xca, 0x93, 0x1c, 0x7c, 0x59, 0x38, 0xdd, 0xf0, 0x77,
0x45, 0xf5, 0x2b, 0x07, 0x23, 0x0a, 0x19, 0x31, 0x61, 0x3a, 0x11, 0x60, 0xf8, 0xc2, 0x28, 0x2f,
0x61, 0x82, 0x75, 0x2f, 0x8e, 0x86, 0x1c, 0xae, 0xe7, 0x55, 0xaa, 0xf1, 0x27, 0x29, 0x29, 0xeb,
0x89, 0x1f, 0xae, 0xec, 0x67, 0xd0, 0xf7, 0xa0, 0x12, 0x7b, 0x3b, 0x92, 0xe2, 0xf1, 0xa2, 0xf7,
0x25, 0xfb, 0x4d, 0xfd, 0x10, 0xa4, 0xe8, 0x13, 0x0f, 0xbc, 0x9c, 0x16, 0x4b, 0x7b, 0x26, 0x3e,
0x48, 0x28, 0x0d, 0x6e, 0x87, 0x87, 0x84, 0xd2, 0x9e, 0x4b, 0xef, 0xd1, 0x43, 0x29, 0x32, 0xff,
0xd0, 0x50, 0x3a, 0xf0, 0x12, 0x4f, 0x11, 0xcc, 0x8b, 0x5f, 0x08, 0xe0, 0xb5, 0x34, 0xdf, 0x4c,
0x7f, 0x0b, 0x51, 0xbf, 0x7c, 0x20, 0x9a, 0x50, 0x8b, 0xdb, 0x30, 0x15, 0xbf, 0x63, 0x4f, 0xd1,
0xa2, 0xf0, 0xe9, 0x40, 0xfd, 0xc2, 0x48, 0xb8, 0xe1, 0x62, 0x5f, 0x87, 0x72, 0xe4, 0xfe, 0x13,
0xbf, 0x3a, 0xc4, 0x8f, 0xa3, 0xed, 0xf5, 0xfd, 0x34, 0xd9, 0x81, 0x4a, 0xec, 0xce, 0x2b, 0xcd,
0x87, 0x05, 0x57, 0x91, 0xf5, 0x95, 0x51, 0x50, 0x43, 0x01, 0x3a, 0x50, 0x89, 0xdd, 0x40, 0xa4,
0xac, 0x24, 0xba, 0x70, 0x49, 0x59, 0x49, 0x78, 0xa1, 0x21, 0x4f, 0xe0, 0x6f, 0x47, 0x2e, 0x3b,
0x62, 0x17, 0x4a, 0xf8, 0x8d, 0xa1, 0xf3, 0x88, 0xee, 0xd3, 0xea, 0x6b, 0x07, 0x21, 0x09, 0x59,
0x78, 0x07, 0x4a, 0xe1, 0x45, 0x07, 0x3e, 0x97, 0x9a, 0x16, 0x0e, 0x62, 0xa9, 0x06, 0xe4, 0xf9,
0xa5, 0x03, 0x96, 0x53, 0x6e, 0x0f, 0x23, 0x37, 0x12, 0xf5, 0x97, 0x85, 0x38, 0xf1, 0x7e, 0xbc,
0x3c, 0x81, 0x15, 0xc8, 0xf3, 0x26, 0x49, 0xca, 0xa4, 0xb1, 0xd6, 0x6c, 0x7d, 0x38, 0x0e, 0xef,
0xac, 0x4c, 0xe0, 0x6f, 0x40, 0x31, 0xe8, 0x72, 0xe1, 0x57, 0x52, 0xc2, 0x3e, 0xd6, 0x31, 0xac,
0xef, 0x87, 0x15, 0xcc, 0xbc, 0x09, 0x39, 0xd6, 0xa6, 0xc0, 0x4b, 0xc3, 0x5a, 0x18, 0xc3, 0x78,
0x8d, 0x75, 0x39, 0xe4, 0x09, 0xfc, 0x35, 0xc8, 0xb1, 0x52, 0x38, 0x65, 0xc6, 0x68, 0x1f, 0xa2,
0x3e, 0x14, 0x25, 0x60, 0xf1, 0x7b, 0x08, 0x6a, 0x69, 0xe7, 0x3c, 0x9c, 0xba, 0x6f, 0x0e, 0x3b,
0xac, 0xd6, 0xaf, 0x1e, 0x90, 0x2a, 0x14, 0xee, 0x09, 0xcc, 0x08, 0x4e, 0x17, 0xf8, 0x52, 0xda,
0x7c, 0x29, 0x07, 0xa3, 0xfa, 0xeb, 0xa3, 0x13, 0x84, 0x6b, 0x6f, 0x42, 0x8e, 0x9d, 0x0a, 0x52,
0x14, 0x1b, 0x3d, 0x64, 0xa4, 0x98, 0x2a, 0x76, 0xa8, 0x90, 0x27, 0x30, 0x01, 0x29, 0x7a, 0x44,
0x48, 0xd9, 0x12, 0x05, 0xa7, 0x8b, 0xfa, 0xf9, 0x11, 0x30, 0x83, 0x65, 0xd6, 0x5c, 0x90, 0x36,
0x6d, 0xeb, 0x71, 0x3f, 0x28, 0xca, 0xff, 0x37, 0xcb, 0x5e, 0xbf, 0xfa, 0xcd, 0xcb, 0x6d, 0xdd,
0xe9, 0xb8, 0x5b, 0x5e, 0xdc, 0x5f, 0xe2, 0xb8, 0xaf, 0xe9, 0x96, 0xff, 0x75, 0x49, 0x37, 0x1d,
0x62, 0x9b, 0xaa, 0x71, 0x89, 0xcd, 0xe5, 0x43, 0x7b, 0x5b, 0x5b, 0x79, 0xf6, 0x7f, 0xf9, 0xbf,
0x01, 0x00, 0x00, 0xff, 0xff, 0x00, 0x65, 0x05, 0x2f, 0x1a, 0x34, 0x00, 0x00,
// 2643 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0xcd, 0x6f, 0xdc, 0xc6,
0xf5, 0x9a, 0x5d, 0xed, 0xd7, 0x5b, 0xae, 0xb4, 0x19, 0x7d, 0x6d, 0xd6, 0x1f, 0x91, 0x98, 0xf8,
0x17, 0x59, 0x76, 0xa4, 0x44, 0xb6, 0x7f, 0x49, 0x3f, 0x53, 0xdb, 0xaa, 0x6d, 0xc1, 0x1f, 0x55,
0xb8, 0x6e, 0xd0, 0x34, 0x30, 0x16, 0xd4, 0x72, 0xbc, 0x4b, 0x88, 0x4b, 0x6e, 0x39, 0xa4, 0xe4,
0xf5, 0xa9, 0x80, 0xd3, 0x02, 0x45, 0x5b, 0x07, 0x45, 0x83, 0x02, 0xed, 0xa1, 0x28, 0x5a, 0xe4,
0xd0, 0x53, 0x5b, 0xa4, 0x40, 0x81, 0x9e, 0x7a, 0xc8, 0xa1, 0x87, 0x02, 0x2d, 0x7a, 0xed, 0xb5,
0x3d, 0xe6, 0x7f, 0x28, 0x38, 0x43, 0x72, 0x49, 0x6a, 0xb8, 0x5a, 0x79, 0xe3, 0x4a, 0xba, 0x91,
0x6f, 0xde, 0x9b, 0x79, 0xdf, 0xf3, 0xe6, 0xcd, 0x80, 0xd4, 0xd5, 0x8d, 0x5d, 0x97, 0xae, 0xf6,
0x6c, 0xcb, 0xb1, 0xf0, 0x4c, 0xf4, 0x6f, 0x95, 0xff, 0xd4, 0xa5, 0x96, 0xd5, 0xed, 0x5a, 0x26,
0x07, 0xd6, 0x25, 0xda, 0xea, 0x90, 0xae, 0xca, 0xff, 0xe4, 0x4f, 0x11, 0x2c, 0x5c, 0xb7, 0x89,
0xea, 0x90, 0xeb, 0x96, 0x61, 0x90, 0x96, 0xa3, 0x5b, 0xa6, 0x42, 0xbe, 0xe3, 0x12, 0xea, 0xe0,
0xd7, 0x61, 0x72, 0x5b, 0xa5, 0xa4, 0x86, 0x16, 0xd1, 0x72, 0x79, 0xfd, 0xf4, 0x6a, 0x6c, 0x6e,
0x7f, 0xce, 0xbb, 0xb4, 0x7d, 0x4d, 0xa5, 0x44, 0x61, 0x98, 0x78, 0x01, 0x0a, 0xda, 0x76, 0xd3,
0x54, 0xbb, 0xa4, 0x96, 0x59, 0x44, 0xcb, 0x25, 0x25, 0xaf, 0x6d, 0xdf, 0x53, 0xbb, 0x04, 0xbf,
0x0a, 0xd3, 0xad, 0x70, 0x7e, 0x8e, 0x90, 0x65, 0x08, 0x53, 0x03, 0x30, 0x43, 0x9c, 0x87, 0x3c,
0xe7, 0xaf, 0x36, 0xb9, 0x88, 0x96, 0x25, 0xc5, 0xff, 0xc3, 0x67, 0x00, 0x68, 0x47, 0xb5, 0x35,
0xda, 0x34, 0xdd, 0x6e, 0x2d, 0xb7, 0x88, 0x96, 0x73, 0x4a, 0x89, 0x43, 0xee, 0xb9, 0x5d, 0xf9,
0x87, 0x08, 0xe6, 0x36, 0x6c, 0xab, 0x77, 0x2c, 0x84, 0x90, 0x7f, 0x8b, 0x60, 0xf6, 0x96, 0x4a,
0x8f, 0x87, 0x46, 0xcf, 0x00, 0x38, 0x7a, 0x97, 0x34, 0xa9, 0xa3, 0x76, 0x7b, 0x4c, 0xab, 0x93,
0x4a, 0xc9, 0x83, 0x34, 0x3c, 0x80, 0xfc, 0x1e, 0x48, 0xd7, 0x2c, 0xcb, 0x50, 0x08, 0xed, 0x59,
0x26, 0x25, 0xf8, 0x12, 0xe4, 0xa9, 0xa3, 0x3a, 0x2e, 0xf5, 0x99, 0x3c, 0x25, 0x64, 0xb2, 0xc1,
0x50, 0x14, 0x1f, 0x15, 0xcf, 0x42, 0x6e, 0x57, 0x35, 0x5c, 0xce, 0x63, 0x51, 0xe1, 0x3f, 0xf2,
0xfb, 0x30, 0xd5, 0x70, 0x6c, 0xdd, 0x6c, 0x7f, 0x8e, 0x93, 0x97, 0x82, 0xc9, 0xff, 0x89, 0xe0,
0xc5, 0x0d, 0x42, 0x5b, 0xb6, 0xbe, 0x7d, 0x4c, 0x5c, 0x57, 0x06, 0x69, 0x00, 0xd9, 0xdc, 0x60,
0xaa, 0xce, 0x2a, 0x31, 0x58, 0xc2, 0x18, 0xb9, 0xa4, 0x31, 0x7e, 0x99, 0x81, 0xba, 0x48, 0xa8,
0x71, 0xd4, 0xf7, 0x95, 0x30, 0xa2, 0x32, 0x8c, 0xe8, 0x5c, 0x9c, 0xc8, 0xcf, 0x06, 0x83, 0xd5,
0x1a, 0x0c, 0x10, 0x06, 0x5e, 0x52, 0xaa, 0xac, 0x40, 0xaa, 0x75, 0x98, 0xdb, 0xd5, 0x6d, 0xc7,
0x55, 0x8d, 0x66, 0xab, 0xa3, 0x9a, 0x26, 0x31, 0x98, 0x9e, 0x68, 0x6d, 0x72, 0x31, 0xbb, 0x5c,
0x52, 0x66, 0xfc, 0xc1, 0xeb, 0x7c, 0xcc, 0x53, 0x16, 0xc5, 0x97, 0x61, 0xbe, 0xd7, 0xe9, 0x53,
0xbd, 0xb5, 0x8f, 0x28, 0xc7, 0x88, 0x66, 0x83, 0xd1, 0x28, 0x15, 0x8b, 0xf3, 0x3b, 0x96, 0xaa,
0x1d, 0x8f, 0x38, 0x7f, 0x8a, 0xa0, 0xa6, 0x10, 0x83, 0xa8, 0xf4, 0x78, 0xb8, 0xa0, 0xfc, 0x11,
0x82, 0xb3, 0x37, 0x89, 0x13, 0x31, 0xa6, 0xa3, 0x3a, 0x3a, 0x75, 0xf4, 0x16, 0x3d, 0x4a, 0xb6,
0x3e, 0x44, 0xf0, 0x52, 0x2a, 0x5b, 0xe3, 0xf8, 0xf6, 0x9b, 0x90, 0xf3, 0xbe, 0x68, 0x2d, 0xb3,
0x98, 0x5d, 0x2e, 0xaf, 0x2f, 0x09, 0x69, 0x6e, 0x93, 0xfe, 0xbb, 0x5e, 0xca, 0xd8, 0x52, 0x75,
0x5b, 0xe1, 0xf8, 0xf2, 0x5f, 0x10, 0xcc, 0x37, 0x3a, 0xd6, 0xde, 0x80, 0xa5, 0xe7, 0xa1, 0xa0,
0x78, 0xb4, 0x67, 0x13, 0xd1, 0x8e, 0xbf, 0x0c, 0x93, 0x4e, 0xbf, 0x47, 0x58, 0xa2, 0x98, 0x5a,
0x5f, 0x5e, 0x15, 0xec, 0xdd, 0xab, 0x09, 0x26, 0xef, 0xf7, 0x7b, 0x44, 0x61, 0x54, 0xf2, 0xaf,
0x10, 0x2c, 0xec, 0x13, 0x61, 0x1c, 0x65, 0x9e, 0x87, 0x6a, 0xc2, 0x9c, 0x5c, 0xaf, 0x25, 0x65,
0x3a, 0x6e, 0x4f, 0x8a, 0xcf, 0x41, 0xc4, 0xc4, 0x4d, 0x5d, 0xa3, 0xb5, 0xec, 0x62, 0x76, 0x39,
0xab, 0x54, 0x22, 0x69, 0x41, 0xa3, 0xf2, 0x27, 0x08, 0xe6, 0x79, 0x71, 0xb1, 0xa5, 0xda, 0x8e,
0x7e, 0xd4, 0x09, 0xfa, 0x1c, 0x4c, 0xf5, 0x02, 0x3e, 0x38, 0xde, 0x24, 0xc3, 0xab, 0x84, 0x50,
0xe6, 0xad, 0x7f, 0x40, 0x30, 0xeb, 0xd5, 0x12, 0x27, 0x89, 0xe7, 0xdf, 0x23, 0x98, 0xb9, 0xa5,
0xd2, 0x93, 0xc4, 0xf2, 0x1f, 0xfd, 0x54, 0x1e, 0xf2, 0x7c, 0x94, 0x29, 0xca, 0x43, 0x8c, 0x33,
0x1d, 0x6c, 0x5e, 0x53, 0x31, 0xae, 0xa9, 0xfc, 0xa7, 0x41, 0xce, 0x3f, 0x61, 0x9c, 0xff, 0x19,
0xc1, 0x99, 0x9b, 0xc4, 0x09, 0xb9, 0x3e, 0x16, 0x7b, 0xc3, 0xa8, 0xde, 0xf2, 0x94, 0xef, 0x6c,
0x42, 0xe6, 0x8f, 0x64, 0x07, 0xf9, 0x1d, 0x82, 0x39, 0x2f, 0xfd, 0x1e, 0x0f, 0x27, 0x18, 0xa1,
0xf6, 0x94, 0x7f, 0xe1, 0xef, 0x79, 0x51, 0x8e, 0xc7, 0x51, 0x9d, 0xc0, 0xf1, 0x32, 0x22, 0xc7,
0xf3, 0x98, 0x0b, 0x21, 0x9b, 0x1b, 0xc1, 0x5e, 0x11, 0x83, 0xc9, 0x3f, 0x42, 0x30, 0x1f, 0x54,
0xbe, 0x0d, 0xd2, 0xee, 0x12, 0xd3, 0x79, 0x76, 0x7d, 0x26, 0xb5, 0x91, 0x11, 0xd4, 0xac, 0xa7,
0xa1, 0x44, 0xf9, 0x3a, 0x61, 0x51, 0x3b, 0x00, 0xc8, 0x1f, 0x23, 0x58, 0xd8, 0xc7, 0xce, 0x38,
0xca, 0xaa, 0x41, 0x41, 0x37, 0x35, 0xf2, 0x28, 0xe4, 0x26, 0xf8, 0xf5, 0x46, 0xb6, 0x5d, 0xdd,
0xd0, 0x42, 0x36, 0x82, 0x5f, 0xbc, 0x04, 0x12, 0x31, 0xd5, 0x6d, 0x83, 0x34, 0x19, 0x2e, 0x33,
0x6a, 0x51, 0x29, 0x73, 0xd8, 0xa6, 0x07, 0x92, 0x7f, 0x8c, 0x60, 0xc6, 0xb3, 0xa9, 0xcf, 0x23,
0x7d, 0xbe, 0x3a, 0x5b, 0x84, 0x72, 0xc4, 0x68, 0x3e, 0xbb, 0x51, 0x90, 0xbc, 0x03, 0xb3, 0x71,
0x76, 0xc6, 0xd1, 0xd9, 0x59, 0x80, 0xd0, 0x22, 0xdc, 0xb7, 0xb2, 0x4a, 0x04, 0x22, 0x7f, 0x86,
0x00, 0xf3, 0xf2, 0x82, 0x29, 0xe3, 0x88, 0x0f, 0xd9, 0x0f, 0x75, 0x62, 0x68, 0xd1, 0x0c, 0x56,
0x62, 0x10, 0x36, 0xbc, 0x01, 0x12, 0x79, 0xe4, 0xd8, 0x6a, 0xb3, 0xa7, 0xda, 0x6a, 0x97, 0x1f,
0x71, 0x46, 0x4a, 0x36, 0x65, 0x46, 0xb6, 0xc5, 0xa8, 0xe4, 0xbf, 0x7a, 0x85, 0x89, 0xef, 0x94,
0xc7, 0x5d, 0xe2, 0x33, 0x00, 0xcc, 0x69, 0xf9, 0x70, 0x8e, 0x0f, 0x33, 0x08, 0x4b, 0xe7, 0x1f,
0x23, 0xa8, 0x32, 0x11, 0xb8, 0x3c, 0x3d, 0x6f, 0xda, 0x04, 0x0d, 0x4a, 0xd0, 0x0c, 0x09, 0xa1,
0x2f, 0x40, 0xde, 0x57, 0x6c, 0x76, 0x54, 0xc5, 0xfa, 0x04, 0x07, 0x88, 0x21, 0xff, 0x1a, 0xc1,
0x5c, 0x42, 0xe5, 0xe3, 0x78, 0xf4, 0x7d, 0xc0, 0x5c, 0x42, 0x6d, 0x20, 0x76, 0xb0, 0xf5, 0x9c,
0x13, 0xd6, 0xff, 0x49, 0x25, 0x29, 0x2f, 0xe8, 0x09, 0x08, 0x95, 0xff, 0x81, 0xe0, 0xf4, 0x4d,
0xe2, 0x30, 0xd4, 0x6b, 0x5e, 0xee, 0xd8, 0xb2, 0xad, 0xb6, 0x4d, 0x28, 0x3d, 0xb9, 0xfe, 0xf1,
0x33, 0x5e, 0xab, 0x88, 0x44, 0x1a, 0x47, 0xff, 0x4b, 0x20, 0xb1, 0x35, 0x88, 0xd6, 0xb4, 0xad,
0x3d, 0xea, 0xfb, 0x51, 0xd9, 0x87, 0x29, 0xd6, 0x1e, 0x73, 0x08, 0xc7, 0x72, 0x54, 0x83, 0x23,
0xf8, 0x1b, 0x03, 0x83, 0x78, 0xc3, 0x2c, 0x06, 0x03, 0xc6, 0xbc, 0xc9, 0xc9, 0xc9, 0xd5, 0xf1,
0x13, 0x04, 0x73, 0x09, 0x51, 0xc6, 0xd1, 0xed, 0x15, 0x5e, 0x49, 0x71, 0x61, 0xa6, 0xd6, 0x5f,
0x12, 0xd2, 0x44, 0x16, 0xe3, 0xd8, 0xf2, 0xa7, 0x08, 0xaa, 0xde, 0x69, 0xeb, 0x84, 0x27, 0xb4,
0xdf, 0x64, 0xa0, 0xb2, 0x69, 0x52, 0x62, 0x3b, 0xc7, 0xbf, 0x98, 0xc6, 0x6f, 0x43, 0x99, 0x09,
0x46, 0x9b, 0x9a, 0xea, 0xa8, 0xfe, 0x6e, 0x74, 0x56, 0xd8, 0x17, 0xbc, 0xe1, 0xe1, 0x6d, 0xa8,
0x8e, 0xaa, 0x70, 0xed, 0x50, 0xef, 0x1b, 0x9f, 0x82, 0x52, 0x47, 0xa5, 0x9d, 0xe6, 0x0e, 0xe9,
0xd3, 0x5a, 0x7e, 0x31, 0xbb, 0x5c, 0x51, 0x8a, 0x1e, 0xe0, 0x36, 0xe9, 0x53, 0xfc, 0x22, 0x14,
0x4d, 0xb7, 0xcb, 0xe3, 0xa7, 0xb0, 0x88, 0x96, 0x2b, 0x4a, 0xc1, 0x74, 0xbb, 0x2c, 0x7a, 0xfe,
0x96, 0x81, 0xa9, 0xbb, 0xae, 0x57, 0xba, 0xb3, 0xae, 0xa6, 0x6b, 0x38, 0xcf, 0xe6, 0x6b, 0x2b,
0x90, 0xe5, 0x25, 0x81, 0x47, 0x51, 0x13, 0x32, 0xbe, 0xb9, 0x41, 0x15, 0x0f, 0x89, 0xdd, 0x1c,
0xb8, 0xad, 0x96, 0x5f, 0x43, 0x65, 0x19, 0xb3, 0x25, 0x0f, 0xc2, 0x3c, 0xce, 0x13, 0x85, 0xd8,
0x76, 0x58, 0x61, 0x31, 0x51, 0x88, 0x6d, 0xf3, 0x41, 0x19, 0x24, 0xb5, 0xb5, 0x63, 0x5a, 0x7b,
0x06, 0xd1, 0xda, 0x44, 0x63, 0x66, 0x2f, 0x2a, 0x31, 0x18, 0x77, 0x0c, 0xcf, 0xf0, 0xcd, 0x96,
0xe9, 0xd4, 0xf2, 0x3c, 0x61, 0x70, 0xc8, 0x75, 0xd3, 0xf1, 0x86, 0x35, 0x62, 0x10, 0x87, 0xb0,
0xe1, 0x02, 0x1f, 0xe6, 0x10, 0x7f, 0xd8, 0xed, 0x85, 0xd4, 0x45, 0x3e, 0xcc, 0x21, 0xde, 0xf0,
0x69, 0x60, 0xfd, 0x22, 0xde, 0x40, 0x2a, 0x0d, 0x1a, 0x48, 0x0c, 0x20, 0xef, 0x42, 0x75, 0xcb,
0x50, 0x5b, 0xa4, 0x63, 0x19, 0x1a, 0xb1, 0xd9, 0xe6, 0x86, 0xab, 0x90, 0x75, 0xd4, 0xb6, 0xbf,
0x7b, 0x7a, 0x9f, 0xf8, 0x2d, 0xbf, 0xcd, 0xc4, 0xe3, 0xf2, 0x15, 0xe1, 0x36, 0x13, 0x99, 0x66,
0xd0, 0x62, 0xc2, 0xf3, 0x90, 0x67, 0xcd, 0x76, 0xbe, 0xaf, 0x4a, 0x8a, 0xff, 0x27, 0x3f, 0x88,
0xad, 0x7b, 0xd3, 0xb6, 0xdc, 0x1e, 0xde, 0x04, 0xa9, 0x37, 0x80, 0x79, 0xd6, 0x4c, 0xdf, 0xd4,
0x92, 0x4c, 0x2b, 0x31, 0x52, 0xf9, 0xb3, 0x2c, 0x54, 0x1a, 0x44, 0xb5, 0x5b, 0x9d, 0x93, 0x70,
0xae, 0xf6, 0x34, 0xae, 0x51, 0xc3, 0x4f, 0x09, 0xde, 0x27, 0xbe, 0x00, 0x2f, 0x44, 0x04, 0x6a,
0xb6, 0x3d, 0x05, 0x31, 0xcf, 0x90, 0x94, 0x6a, 0x2f, 0xa9, 0xb8, 0x37, 0xa1, 0xa8, 0x51, 0xa3,
0xc9, 0x4c, 0x54, 0x60, 0x26, 0x12, 0xcb, 0xb7, 0x41, 0x0d, 0x66, 0x9a, 0x82, 0xc6, 0x3f, 0xf0,
0xcb, 0x50, 0xb1, 0x5c, 0xa7, 0xe7, 0x3a, 0x4d, 0x1e, 0x99, 0xb5, 0x22, 0x63, 0x4f, 0xe2, 0x40,
0x16, 0xb8, 0x14, 0xdf, 0x80, 0x0a, 0x65, 0xaa, 0x0c, 0x4a, 0xcf, 0xd2, 0xa8, 0x15, 0x92, 0xc4,
0xe9, 0x78, 0xed, 0x89, 0xcf, 0x43, 0xd5, 0xb1, 0xd5, 0x5d, 0x62, 0x34, 0x07, 0xfe, 0x08, 0xcc,
0x1f, 0xa7, 0x39, 0xfc, 0x7e, 0x00, 0xc6, 0x6b, 0x30, 0xd3, 0x76, 0x55, 0x5b, 0x35, 0x1d, 0x42,
0x22, 0xd8, 0x65, 0x86, 0x8d, 0xc3, 0xa1, 0x90, 0x40, 0xfe, 0x57, 0x06, 0xa6, 0x15, 0xe2, 0xd8,
0x3a, 0xd9, 0x25, 0x27, 0xc2, 0xe2, 0x2b, 0x90, 0xd5, 0x35, 0xca, 0x2c, 0x3e, 0x34, 0xfd, 0xe8,
0x1a, 0xdd, 0x6f, 0xa5, 0xbc, 0xc0, 0x4a, 0x22, 0xed, 0x16, 0x0e, 0xa5, 0xdd, 0x62, 0xaa, 0x76,
0x3f, 0x41, 0x51, 0xed, 0x7a, 0x39, 0x97, 0x3e, 0x73, 0xd2, 0xf5, 0xa4, 0xce, 0x8c, 0x22, 0x75,
0x62, 0x87, 0xc9, 0x1e, 0x76, 0x87, 0x91, 0x6f, 0xc3, 0xe4, 0x2d, 0xdd, 0x61, 0xc1, 0xe5, 0x65,
0x7a, 0xc4, 0x0e, 0x7f, 0x2c, 0x9f, 0xbf, 0x08, 0x45, 0xdb, 0xda, 0xe3, 0xf3, 0x66, 0x58, 0x5a,
0x2a, 0xd8, 0xd6, 0x1e, 0xdb, 0x96, 0xd8, 0xe5, 0xb1, 0x65, 0xfb, 0xf9, 0x2a, 0xa3, 0xf8, 0x7f,
0xf2, 0xf7, 0xd0, 0x20, 0xa1, 0x8c, 0xa1, 0x80, 0xb7, 0xa1, 0x60, 0x73, 0xfa, 0xa1, 0x57, 0x69,
0xd1, 0x95, 0x98, 0x5c, 0x01, 0x95, 0xfc, 0x01, 0x02, 0xe9, 0x86, 0xe1, 0xd2, 0xe7, 0x91, 0xd7,
0x44, 0xdd, 0xfb, 0xac, 0xb0, 0x7b, 0x2f, 0xff, 0x24, 0x03, 0x15, 0x9f, 0x8d, 0x71, 0x0a, 0xbe,
0x54, 0x56, 0x1a, 0x50, 0xf6, 0x96, 0x6c, 0x52, 0xd2, 0x0e, 0xda, 0x3d, 0xe5, 0xf5, 0x75, 0xe1,
0x4e, 0x10, 0x63, 0x83, 0x5d, 0x42, 0x36, 0x18, 0xd1, 0xd7, 0x4d, 0xc7, 0xee, 0x2b, 0xd0, 0x0a,
0x01, 0xf5, 0x07, 0x30, 0x9d, 0x18, 0xf6, 0x7c, 0x63, 0x87, 0xf4, 0x83, 0xad, 0x6e, 0x87, 0xf4,
0xf1, 0xe5, 0xe8, 0x55, 0x71, 0x9a, 0xc3, 0xdd, 0xb1, 0xcc, 0xf6, 0x55, 0xdb, 0x56, 0xfb, 0xfe,
0x55, 0xf2, 0x17, 0x33, 0x6f, 0x21, 0xf9, 0xdf, 0x08, 0xa4, 0x77, 0x5c, 0x62, 0xf7, 0x8f, 0x32,
0x01, 0x61, 0x98, 0x24, 0x8f, 0x7a, 0xb6, 0x5f, 0xb4, 0xb1, 0xef, 0xfd, 0xf9, 0x23, 0x27, 0xc8,
0x1f, 0x82, 0xcc, 0x95, 0x17, 0xf6, 0x80, 0x3f, 0x18, 0x88, 0x39, 0x56, 0x20, 0xc4, 0xa2, 0x3b,
0x73, 0xe8, 0xe8, 0xfe, 0x3b, 0x82, 0xb9, 0x2d, 0x62, 0x53, 0x9d, 0x3a, 0xc4, 0x74, 0xfc, 0x6e,
0xd1, 0xa6, 0xf9, 0xd0, 0x8a, 0xb7, 0xe5, 0x50, 0xa2, 0x2d, 0xf7, 0xf9, 0x34, 0xa9, 0x62, 0x05,
0x2a, 0x6f, 0x94, 0x06, 0x05, 0x6a, 0xd0, 0x0e, 0xe6, 0x05, 0xfe, 0x54, 0xca, 0x36, 0xe9, 0xf3,
0x1b, 0x3b, 0xc6, 0xfc, 0x94, 0x5f, 0x71, 0x0a, 0x85, 0x7a, 0x76, 0x97, 0x9a, 0x07, 0xdf, 0x87,
0x12, 0x1e, 0xf5, 0x7f, 0x90, 0x70, 0x9d, 0x94, 0x8b, 0xd7, 0x9f, 0x23, 0x58, 0x4c, 0xe7, 0x6a,
0x9c, 0xe0, 0xff, 0x1a, 0xe4, 0x74, 0xf3, 0xa1, 0x15, 0x34, 0x2f, 0x56, 0xc4, 0x75, 0x9e, 0x70,
0x5d, 0x4e, 0x28, 0xff, 0x07, 0x41, 0x95, 0xb9, 0xe2, 0x11, 0x98, 0xbf, 0x4b, 0xba, 0x4d, 0xaa,
0x3f, 0x26, 0x81, 0xf9, 0xbb, 0xa4, 0xdb, 0xd0, 0x1f, 0x93, 0x98, 0x67, 0xe4, 0xe2, 0x9e, 0x11,
0x3f, 0xff, 0xe5, 0x87, 0x34, 0xa7, 0x0a, 0xb1, 0xe6, 0x94, 0xfc, 0x14, 0x41, 0xfd, 0x26, 0x71,
0x92, 0xa2, 0x1e, 0x9d, 0x53, 0x7c, 0x88, 0xe0, 0x94, 0x90, 0xa1, 0x71, 0xfc, 0xe1, 0x4b, 0x71,
0x7f, 0x10, 0xd7, 0xfd, 0xfb, 0x96, 0xf4, 0x5d, 0xe1, 0x0d, 0x90, 0x36, 0xdc, 0x6e, 0x37, 0xcc,
0xbd, 0x4b, 0x20, 0xd9, 0xfc, 0x93, 0x97, 0xc5, 0x3c, 0xc3, 0x97, 0x7d, 0x98, 0x57, 0xfc, 0xca,
0x17, 0xa0, 0xe2, 0x93, 0xf8, 0x5c, 0xd7, 0xa1, 0x68, 0xfb, 0xdf, 0x3e, 0x7e, 0xf8, 0x2f, 0xcf,
0xc1, 0x8c, 0x42, 0xda, 0x9e, 0x27, 0xda, 0x77, 0x74, 0x73, 0xc7, 0x5f, 0x46, 0x7e, 0x82, 0x60,
0x36, 0x0e, 0xf7, 0xe7, 0xfa, 0x7f, 0x28, 0xa8, 0x9a, 0x66, 0x13, 0x4a, 0x87, 0x9a, 0xe5, 0x2a,
0xc7, 0x51, 0x02, 0xe4, 0x88, 0xe6, 0x32, 0x23, 0x6b, 0x6e, 0xe5, 0x22, 0xef, 0xe0, 0x27, 0x2e,
0xf9, 0x71, 0x01, 0xb2, 0x57, 0x0d, 0xa3, 0x3a, 0x81, 0x25, 0x28, 0x6e, 0x9a, 0x77, 0x49, 0xd7,
0xb2, 0xfb, 0x55, 0xb4, 0xf2, 0x55, 0x98, 0x4e, 0x9c, 0xd5, 0x70, 0x11, 0x26, 0xef, 0x59, 0x26,
0xa9, 0x4e, 0xe0, 0x2a, 0x48, 0xd7, 0x74, 0x53, 0xb5, 0xfb, 0xef, 0x92, 0x96, 0x63, 0xd9, 0x55,
0x0d, 0x4f, 0x43, 0xf9, 0x86, 0x61, 0xa9, 0x8e, 0x0f, 0x20, 0xeb, 0x1f, 0x2d, 0x40, 0xe5, 0x2e,
0x63, 0xaa, 0x41, 0xec, 0x5d, 0xbd, 0x45, 0x70, 0x13, 0xaa, 0xc9, 0x07, 0x80, 0xf8, 0xa2, 0xd0,
0x7c, 0x29, 0xef, 0x04, 0xeb, 0xc3, 0xc4, 0x94, 0x27, 0xf0, 0xfb, 0x30, 0x15, 0x7f, 0x9a, 0x87,
0xc5, 0xd9, 0x42, 0xf8, 0x7e, 0xef, 0xa0, 0xc9, 0x9b, 0x50, 0x89, 0xbd, 0xb4, 0xc3, 0xe7, 0x85,
0x73, 0x8b, 0x5e, 0xe3, 0xd5, 0x97, 0x84, 0xa8, 0xd1, 0xd7, 0x70, 0x9c, 0xfb, 0xf8, 0x83, 0xa3,
0x14, 0xee, 0x85, 0xaf, 0x92, 0x0e, 0xe2, 0x5e, 0x85, 0x17, 0xf6, 0xbd, 0x1f, 0xc2, 0xaf, 0x09,
0xe7, 0x4f, 0x7b, 0x67, 0x74, 0xd0, 0x12, 0x7b, 0x80, 0xf7, 0xbf, 0x28, 0xc3, 0xab, 0x62, 0x0b,
0xa4, 0xbd, 0xa7, 0xab, 0xaf, 0x8d, 0x8c, 0x1f, 0x2a, 0xee, 0xfb, 0x08, 0x16, 0x52, 0x1e, 0xfd,
0xe0, 0x4b, 0xc2, 0xe9, 0x86, 0xbf, 0x5c, 0xaa, 0x5f, 0x3e, 0x1c, 0x51, 0xc8, 0x88, 0x09, 0xd3,
0x89, 0x00, 0xc3, 0x17, 0x46, 0x79, 0x6b, 0x13, 0xac, 0x7b, 0x71, 0x34, 0xe4, 0x70, 0x3d, 0xaf,
0x52, 0x8d, 0x3f, 0x7a, 0x49, 0x59, 0x4f, 0xfc, 0x34, 0xe6, 0x20, 0x83, 0xbe, 0x07, 0x95, 0xd8,
0xeb, 0x94, 0x14, 0x8f, 0x17, 0xbd, 0x60, 0x39, 0x68, 0xea, 0x07, 0x20, 0x45, 0x1f, 0x91, 0xe0,
0xe5, 0xb4, 0x58, 0xda, 0x37, 0xf1, 0x61, 0x42, 0x69, 0x70, 0xff, 0x3c, 0x24, 0x94, 0xf6, 0x5d,
0xab, 0x8f, 0x1e, 0x4a, 0x91, 0xf9, 0x87, 0x86, 0xd2, 0xa1, 0x97, 0x78, 0x82, 0x60, 0x5e, 0xfc,
0x06, 0x01, 0xaf, 0xa7, 0xf9, 0x66, 0xfa, 0x6b, 0x8b, 0xfa, 0xa5, 0x43, 0xd1, 0x84, 0x5a, 0xdc,
0x81, 0xa9, 0xf8, 0x2d, 0x7e, 0x8a, 0x16, 0x85, 0x8f, 0x13, 0xea, 0x17, 0x46, 0xc2, 0x0d, 0x17,
0xfb, 0x26, 0x94, 0x23, 0x37, 0xac, 0xf8, 0xd5, 0x21, 0x7e, 0x1c, 0x6d, 0xe0, 0x1f, 0xa4, 0xc9,
0x0e, 0x54, 0x62, 0xb7, 0x6a, 0x69, 0x3e, 0x2c, 0xb8, 0xec, 0xac, 0xaf, 0x8c, 0x82, 0x1a, 0x0a,
0xd0, 0x81, 0x4a, 0xec, 0x8e, 0x23, 0x65, 0x25, 0xd1, 0x95, 0x4e, 0xca, 0x4a, 0xc2, 0x2b, 0x13,
0x79, 0x02, 0x7f, 0x37, 0x72, 0x9d, 0x12, 0xbb, 0xb2, 0xc2, 0x6f, 0x0c, 0x9d, 0x47, 0x74, 0x63,
0x57, 0x5f, 0x3f, 0x0c, 0x49, 0xc8, 0xc2, 0x3b, 0x50, 0x0a, 0xaf, 0x52, 0xf0, 0xb9, 0xd4, 0xb4,
0x70, 0x18, 0x4b, 0x35, 0x20, 0xcf, 0xaf, 0x35, 0xb0, 0x9c, 0x72, 0x3f, 0x19, 0xb9, 0xf3, 0xa8,
0xbf, 0x2c, 0xc4, 0x89, 0x77, 0xfc, 0xe5, 0x09, 0xac, 0x40, 0x9e, 0x37, 0x49, 0x52, 0x26, 0x8d,
0x35, 0x7f, 0xeb, 0xc3, 0x71, 0x78, 0x67, 0x65, 0x02, 0x7f, 0x0b, 0x8a, 0x41, 0x97, 0x0b, 0xbf,
0x92, 0x12, 0xf6, 0xb1, 0x16, 0x63, 0xfd, 0x20, 0xac, 0x60, 0xe6, 0x2d, 0xc8, 0xb1, 0x36, 0x05,
0x5e, 0x1a, 0xd6, 0xc2, 0x18, 0xc6, 0x6b, 0xac, 0xcb, 0x21, 0x4f, 0xe0, 0x6f, 0x40, 0x8e, 0x95,
0xc2, 0x29, 0x33, 0x46, 0xfb, 0x10, 0xf5, 0xa1, 0x28, 0x01, 0x8b, 0x3f, 0x40, 0x50, 0x4b, 0x3b,
0xe7, 0xe1, 0xd4, 0x7d, 0x73, 0xd8, 0x61, 0xb5, 0x7e, 0xe5, 0x90, 0x54, 0xa1, 0x70, 0x8f, 0x61,
0x46, 0x70, 0xba, 0xc0, 0x6b, 0x69, 0xf3, 0xa5, 0x1c, 0x8c, 0xea, 0xaf, 0x8f, 0x4e, 0x10, 0xae,
0xbd, 0x05, 0x39, 0x76, 0x2a, 0x48, 0x51, 0x6c, 0xf4, 0x90, 0x91, 0x62, 0xaa, 0xd8, 0xa1, 0x42,
0x9e, 0xc0, 0x04, 0xa4, 0xe8, 0x11, 0x21, 0x65, 0x4b, 0x14, 0x9c, 0x2e, 0xea, 0xe7, 0x47, 0xc0,
0x0c, 0x96, 0x59, 0x77, 0x41, 0xda, 0xb2, 0xad, 0x47, 0xfd, 0xa0, 0x28, 0xff, 0xdf, 0x2c, 0x7b,
0xed, 0xca, 0xb7, 0x2f, 0xb5, 0x75, 0xa7, 0xe3, 0x6e, 0x7b, 0x71, 0xbf, 0xc6, 0x71, 0x5f, 0xd3,
0x2d, 0xff, 0x6b, 0x4d, 0x37, 0x1d, 0x62, 0x9b, 0xaa, 0xb1, 0xc6, 0xe6, 0xf2, 0xa1, 0xbd, 0xed,
0xed, 0x3c, 0xfb, 0xbf, 0xf4, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x10, 0x05, 0x53, 0xed, 0x7c,
0x34, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -1317,7 +1317,12 @@ func (st *SearchTask) PreExecute(ctx context.Context) error {
if travelTimestamp == 0 {
travelTimestamp = st.BeginTs()
}
guaranteeTimestamp := st.query.GuaranteeTimestamp
if guaranteeTimestamp == 0 {
guaranteeTimestamp = st.BeginTs()
}
st.SearchRequest.TravelTimestamp = travelTimestamp
st.SearchRequest.GuaranteeTimestamp = guaranteeTimestamp
st.SearchRequest.ResultChannelID = Params.SearchResultChannelNames[0]
st.SearchRequest.DbID = 0 // todo
@ -2090,7 +2095,12 @@ func (rt *RetrieveTask) PreExecute(ctx context.Context) error {
if travelTimestamp == 0 {
travelTimestamp = rt.BeginTs()
}
guaranteeTimestamp := rt.retrieve.GuaranteeTimestamp
if guaranteeTimestamp == 0 {
guaranteeTimestamp = rt.BeginTs()
}
rt.RetrieveRequest.TravelTimestamp = travelTimestamp
rt.RetrieveRequest.GuaranteeTimestamp = guaranteeTimestamp
rt.ResultChannelID = Params.RetrieveResultChannelNames[0]
rt.DbID = 0 // todo(yukun)

View File

@ -36,6 +36,12 @@ import (
"github.com/milvus-io/milvus/internal/util/typeutil"
)
type queryMsg interface {
msgstream.TsMsg
GuaranteeTs() Timestamp
TravelTs() Timestamp
}
type queryCollection struct {
releaseCtx context.Context
cancel context.CancelFunc
@ -45,7 +51,7 @@ type queryCollection struct {
streaming *streaming
unsolvedMsgMu sync.Mutex // guards unsolvedMsg
unsolvedMsg []msgstream.TsMsg
unsolvedMsg []queryMsg
tSafeWatchers map[Channel]*tSafeWatcher
watcherSelectCase []reflect.SelectCase
@ -66,7 +72,7 @@ func newQueryCollection(releaseCtx context.Context,
streaming *streaming,
factory msgstream.Factory) *queryCollection {
unsolvedMsg := make([]msgstream.TsMsg, 0)
unsolvedMsg := make([]queryMsg, 0)
queryStream, _ := factory.NewQueryMsgStream(releaseCtx)
queryResultStream, _ := factory.NewQueryMsgStream(releaseCtx)
@ -130,13 +136,13 @@ func (q *queryCollection) register() {
}
}
func (q *queryCollection) addToUnsolvedMsg(msg msgstream.TsMsg) {
func (q *queryCollection) addToUnsolvedMsg(msg queryMsg) {
q.unsolvedMsgMu.Lock()
defer q.unsolvedMsgMu.Unlock()
q.unsolvedMsg = append(q.unsolvedMsg, msg)
}
func (q *queryCollection) popAllUnsolvedMsg() []msgstream.TsMsg {
func (q *queryCollection) popAllUnsolvedMsg() []queryMsg {
q.unsolvedMsgMu.Lock()
defer q.unsolvedMsgMu.Unlock()
tmp := q.unsolvedMsg
@ -250,7 +256,7 @@ func (q *queryCollection) loadBalance(msg *msgstream.LoadBalanceSegmentsMsg) {
// zap.Int("num of segment", len(msg.Infos)))
}
func (q *queryCollection) receiveQueryMsg(msg msgstream.TsMsg) {
func (q *queryCollection) receiveQueryMsg(msg queryMsg) {
msgType := msg.Type()
var collectionID UniqueID
var msgTypeStr string
@ -304,7 +310,8 @@ func (q *queryCollection) receiveQueryMsg(msg msgstream.TsMsg) {
}
return
}
if msg.BeginTs() >= collection.getReleaseTime() {
guaranteeTs := msg.GuaranteeTs()
if guaranteeTs >= collection.getReleaseTime() {
err = fmt.Errorf("retrieve failed, collection has been released, msgID = %d, collectionID = %d", msg.ID(), collectionID)
log.Error(err.Error())
err = q.publishFailedQueryResult(msg, err.Error())
@ -321,23 +328,23 @@ func (q *queryCollection) receiveQueryMsg(msg msgstream.TsMsg) {
}
serviceTime := q.getServiceableTime()
if msg.BeginTs() > serviceTime {
bt, _ := tsoutil.ParseTS(msg.BeginTs())
if guaranteeTs > serviceTime {
gt, _ := tsoutil.ParseTS(guaranteeTs)
st, _ := tsoutil.ParseTS(serviceTime)
log.Debug("query node::receiveQueryMsg: add to unsolvedMsg",
zap.Any("collectionID", q.collectionID),
zap.Any("sm.BeginTs", bt),
zap.Any("sm.GuaranteeTimestamp", gt),
zap.Any("serviceTime", st),
zap.Any("delta seconds", (msg.BeginTs()-serviceTime)/(1000*1000*1000)),
zap.Any("delta seconds", (guaranteeTs-serviceTime)/(1000*1000*1000)),
zap.Any("msgID", msg.ID()),
zap.String("msgType", msgTypeStr),
)
q.addToUnsolvedMsg(msg)
sp.LogFields(
oplog.String("send to unsolved buffer", "send to unsolved buffer"),
oplog.Object("begin ts", bt),
oplog.Object("guarantee ts", gt),
oplog.Object("serviceTime", st),
oplog.Float64("delta seconds", float64(msg.BeginTs()-serviceTime)/(1000.0*1000.0*1000.0)),
oplog.Float64("delta seconds", float64(guaranteeTs-serviceTime)/(1000.0*1000.0*1000.0)),
)
sp.Finish()
return
@ -401,29 +408,30 @@ func (q *queryCollection) doUnsolvedQueryMsg() {
q.setServiceableTime(serviceTime)
//log.Debug("query node::doUnsolvedMsg: setServiceableTime", zap.Any("serviceTime", st))
unSolvedMsg := make([]msgstream.TsMsg, 0)
unSolvedMsg := make([]queryMsg, 0)
tempMsg := q.popAllUnsolvedMsg()
for _, m := range tempMsg {
bt, _ := tsoutil.ParseTS(m.EndTs())
guaranteeTs := m.GuaranteeTs()
gt, _ := tsoutil.ParseTS(guaranteeTs)
st, _ = tsoutil.ParseTS(serviceTime)
log.Debug("get query message from unsolvedMsg",
zap.Int64("collectionID", q.collectionID),
zap.Int64("msgID", m.ID()),
zap.Any("reqTime_p", bt),
zap.Any("reqTime_p", gt),
zap.Any("serviceTime_p", st),
zap.Any("reqTime_l", m.EndTs()),
zap.Any("guaranteeTime_l", guaranteeTs),
zap.Any("serviceTime_l", serviceTime),
)
if m.EndTs() <= serviceTime {
if guaranteeTs <= serviceTime {
unSolvedMsg = append(unSolvedMsg, m)
continue
}
log.Debug("query node::doUnsolvedMsg: add to unsolvedMsg",
zap.Any("collectionID", q.collectionID),
zap.Any("sm.BeginTs", bt),
zap.Any("sm.BeginTs", gt),
zap.Any("serviceTime", st),
zap.Any("delta seconds", (m.BeginTs()-serviceTime)/(1000*1000*1000)),
zap.Any("delta seconds", (guaranteeTs-serviceTime)/(1000*1000*1000)),
zap.Any("msgID", m.ID()),
)
q.addToUnsolvedMsg(m)
@ -699,12 +707,13 @@ func translateHits(schema *typeutil.SchemaHelper, fieldIDs []int64, rawHits [][]
// TODO:: cache map[dsl]plan
// TODO: reBatched search requests
func (q *queryCollection) search(msg msgstream.TsMsg) error {
func (q *queryCollection) search(msg queryMsg) error {
searchMsg := msg.(*msgstream.SearchMsg)
sp, ctx := trace.StartSpanFromContext(searchMsg.TraceCtx())
defer sp.Finish()
searchMsg.SetTraceCtx(ctx)
searchTimestamp := searchMsg.BeginTs()
travelTimestamp := searchMsg.TravelTimestamp
collectionID := searchMsg.CollectionID
collection, err := q.streaming.replica.getCollectionByID(collectionID)
@ -763,7 +772,7 @@ func (q *queryCollection) search(msg msgstream.TsMsg) error {
sealedSegmentSearched := make([]UniqueID, 0)
// historical search
hisSearchResults, hisSegmentResults, err1 := q.historical.search(searchRequests, collectionID, searchMsg.PartitionIDs, plan, searchTimestamp)
hisSearchResults, hisSegmentResults, err1 := q.historical.search(searchRequests, collectionID, searchMsg.PartitionIDs, plan, travelTimestamp)
if err1 != nil {
log.Error(err1.Error())
return err1
@ -780,7 +789,7 @@ func (q *queryCollection) search(msg msgstream.TsMsg) error {
for _, channel := range collection.getVChannels() {
var strSearchResults []*SearchResult
var strSegmentResults []*Segment
strSearchResults, strSegmentResults, err2 = q.streaming.search(searchRequests, collectionID, searchMsg.PartitionIDs, channel, plan, searchTimestamp)
strSearchResults, strSegmentResults, err2 = q.streaming.search(searchRequests, collectionID, searchMsg.PartitionIDs, channel, plan, travelTimestamp)
if err2 != nil {
log.Error(err2.Error())
return err2
@ -986,7 +995,7 @@ func (q *queryCollection) search(msg msgstream.TsMsg) error {
return nil
}
func (q *queryCollection) retrieve(msg msgstream.TsMsg) error {
func (q *queryCollection) retrieve(msg queryMsg) error {
// TODO(yukun)
// step 1: get retrieve object and defer destruction
// step 2: for each segment, call retrieve to get ids proto buffer

View File

@ -1,502 +0,0 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querynode
import (
"context"
"errors"
"math"
"reflect"
"sync"
oplog "github.com/opentracing/opentracing-go/log"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/msgstream"
"github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/proto/segcorepb"
"github.com/milvus-io/milvus/internal/util/trace"
"github.com/milvus-io/milvus/internal/util/tsoutil"
)
type retrieveCollection struct {
releaseCtx context.Context
cancel context.CancelFunc
collectionID UniqueID
historical *historical
streaming *streaming
msgBuffer chan *msgstream.RetrieveMsg
unsolvedMsgMu sync.Mutex
unsolvedMsg []*msgstream.RetrieveMsg
tSafeWatchers map[Channel]*tSafeWatcher
watcherSelectCase []reflect.SelectCase
serviceableTimeMutex sync.Mutex
serviceableTime Timestamp
retrieveResultMsgStream msgstream.MsgStream
}
func newRetrieveCollection(releaseCtx context.Context,
cancel context.CancelFunc,
collectionID UniqueID,
historical *historical,
streaming *streaming,
retrieveResultStream msgstream.MsgStream) *retrieveCollection {
receiveBufSize := Params.RetrieveReceiveBufSize
msgBuffer := make(chan *msgstream.RetrieveMsg, receiveBufSize)
unsolvedMsg := make([]*msgstream.RetrieveMsg, 0)
rc := &retrieveCollection{
releaseCtx: releaseCtx,
cancel: cancel,
collectionID: collectionID,
historical: historical,
streaming: streaming,
tSafeWatchers: make(map[Channel]*tSafeWatcher),
msgBuffer: msgBuffer,
unsolvedMsg: unsolvedMsg,
retrieveResultMsgStream: retrieveResultStream,
}
rc.register()
return rc
}
func (rc *retrieveCollection) getServiceableTime() Timestamp {
rc.serviceableTimeMutex.Lock()
defer rc.serviceableTimeMutex.Unlock()
return rc.serviceableTime
}
func (rc *retrieveCollection) setServiceableTime(t Timestamp) {
rc.serviceableTimeMutex.Lock()
defer rc.serviceableTimeMutex.Unlock()
if t < rc.serviceableTime {
return
}
gracefulTimeInMilliSecond := Params.GracefulTime
if gracefulTimeInMilliSecond > 0 {
gracefulTime := tsoutil.ComposeTS(gracefulTimeInMilliSecond, 0)
rc.serviceableTime = t + gracefulTime
} else {
rc.serviceableTime = t
}
}
func (rc *retrieveCollection) waitNewTSafe() Timestamp {
// block until any vChannel updating tSafe
_, _, recvOK := reflect.Select(rc.watcherSelectCase)
if !recvOK {
log.Error("tSafe has been closed")
return invalidTimestamp
}
t := Timestamp(math.MaxInt64)
for channel := range rc.tSafeWatchers {
ts := rc.streaming.tSafeReplica.getTSafe(channel)
if ts <= t {
t = ts
}
}
return t
}
func (rc *retrieveCollection) start() {
go rc.receiveRetrieveMsg()
go rc.doUnsolvedMsgRetrieve()
}
func (rc *retrieveCollection) register() {
// register tSafe watcher and init watcher select case
collection, err := rc.streaming.replica.getCollectionByID(rc.collectionID)
if err != nil {
log.Error(err.Error())
return
}
rc.watcherSelectCase = make([]reflect.SelectCase, 0)
for _, channel := range collection.getVChannels() {
rc.streaming.tSafeReplica.addTSafe(channel)
rc.tSafeWatchers[channel] = newTSafeWatcher()
rc.streaming.tSafeReplica.registerTSafeWatcher(channel, rc.tSafeWatchers[channel])
rc.watcherSelectCase = append(rc.watcherSelectCase, reflect.SelectCase{
Dir: reflect.SelectRecv,
Chan: reflect.ValueOf(rc.tSafeWatchers[channel].watcherChan()),
})
}
}
func (rc *retrieveCollection) addToUnsolvedMsg(msg *msgstream.RetrieveMsg) {
rc.unsolvedMsgMu.Lock()
defer rc.unsolvedMsgMu.Unlock()
rc.unsolvedMsg = append(rc.unsolvedMsg, msg)
}
func (rc *retrieveCollection) receiveRetrieveMsg() {
for {
select {
case <-rc.releaseCtx.Done():
log.Debug("stop retrieveCollection's receiveRetrieveMsg", zap.Int64("collectionID", rc.collectionID))
return
case rm := <-rc.msgBuffer:
log.Info("RetrieveCollection get retrieve message from msgBuffer",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
sp, ctx := trace.StartSpanFromContext(rm.TraceCtx())
rm.SetTraceCtx(ctx)
serviceTime := rc.getServiceableTime()
if rm.BeginTs() > serviceTime {
bt, _ := tsoutil.ParseTS(rm.BeginTs())
st, _ := tsoutil.ParseTS(serviceTime)
log.Debug("Timestamp of retrieve request great than serviceTime, add to unsolvedMsgs",
zap.Any("sm.BeginTs", bt),
zap.Any("serviceTime", st),
zap.Any("delta seconds", (rm.BeginTs()-serviceTime)/(1000*1000*1000)),
zap.Any("collectionID", rc.collectionID),
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
rc.addToUnsolvedMsg(rm)
sp.LogFields(
oplog.String("send to unsolved retrieve buffer", "send to unsolved buffer"),
oplog.Object("begin ts", bt),
oplog.Object("serviceTime", st),
oplog.Float64("delta seconds", float64(rm.BeginTs()-serviceTime)/(1000.0*1000.0*1000.0)),
)
sp.Finish()
continue
}
log.Info("Doing retrieve in receiveRetrieveMsg...",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
err := rc.retrieve(rm)
if err != nil {
log.Error(err.Error(),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
log.Debug("Failed to execute retrieve, prepare to publish failed retrieve result",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
err2 := rc.publishFailedRetrieveResult(rm, err.Error())
if err2 != nil {
log.Error("Failed to publish FailedRetrieveResult",
zap.Error(err2),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
}
}
log.Debug("Do retrieve done in retrieveRetrieveMsg",
zap.Int64("msgID", rm.ID()),
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
sp.Finish()
}
}
}
func (rc *retrieveCollection) doUnsolvedMsgRetrieve() {
for {
select {
case <-rc.releaseCtx.Done():
log.Debug("stop retrieveCollection's doUnsolvedMsgRetrieve", zap.Int64("collectionID", rc.collectionID))
return
default:
serviceTime := rc.waitNewTSafe()
rc.setServiceableTime(serviceTime)
log.Debug("Update serviceTime",
zap.Any("serviceTime", serviceTime),
zap.Uint64("tSafe", serviceTime),
zap.Int64("collectionID", rc.collectionID),
)
retrieveMsg := make([]*msgstream.RetrieveMsg, 0)
rc.unsolvedMsgMu.Lock()
tmpMsg := rc.unsolvedMsg
rc.unsolvedMsg = rc.unsolvedMsg[:0]
rc.unsolvedMsgMu.Unlock()
for _, rm := range tmpMsg {
log.Debug("Get retrieve message from unsolvedMsg",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
if rm.EndTs() <= serviceTime {
retrieveMsg = append(retrieveMsg, rm)
continue
}
rc.addToUnsolvedMsg(rm)
}
if len(retrieveMsg) <= 0 {
continue
}
for _, rm := range retrieveMsg {
sp, ctx := trace.StartSpanFromContext(rm.TraceCtx())
rm.SetTraceCtx(ctx)
log.Debug("Doing retrieve in doUnsolvedMsgRetrieve...",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
err := rc.retrieve(rm)
if err != nil {
log.Error(err.Error(),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
log.Debug("Failed to do retrieve in doUnsolvedMsgRetrieve, prepare to publish failed retrieve result",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
err2 := rc.publishFailedRetrieveResult(rm, err.Error())
if err2 != nil {
log.Error("Failed to publish FailedRetrieveResult",
zap.Error(err2),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
}
}
sp.Finish()
log.Debug("Do retrieve done in doUnsolvedMsgRetrieve",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", rm.ID()),
zap.Any("requestType", "retrieve"),
)
}
log.Debug("doUnsolvedMsgRetrieve, do retrieve done", zap.Int("num of retrieveMsg", len(retrieveMsg)))
}
}
}
func (rc *retrieveCollection) retrieve(retrieveMsg *msgstream.RetrieveMsg) error {
// TODO(yukun)
// step 1: get retrieve object and defer destruction
// step 2: for each segment, call retrieve to get ids proto buffer
// step 3: merge all proto in go
// step 4: publish results
// retrieveProtoBlob, err := proto.Marshal(&retrieveMsg.RetrieveRequest)
sp, ctx := trace.StartSpanFromContext(retrieveMsg.TraceCtx())
defer sp.Finish()
retrieveMsg.SetTraceCtx(ctx)
timestamp := retrieveMsg.RetrieveRequest.TravelTimestamp
collectionID := retrieveMsg.CollectionID
collection, err := rc.streaming.replica.getCollectionByID(collectionID)
if err != nil {
return err
}
req := &segcorepb.RetrieveRequest{
Ids: retrieveMsg.Ids,
OutputFields: retrieveMsg.OutputFields,
}
plan, err := createRetrievePlan(collection, req, timestamp)
if err != nil {
return err
}
defer plan.delete()
var partitionIDsInHistorical []UniqueID
var partitionIDsInStreaming []UniqueID
partitionIDsInQuery := retrieveMsg.PartitionIDs
if len(partitionIDsInQuery) == 0 {
partitionIDsInHistoricalCol, err1 := rc.historical.replica.getPartitionIDs(collectionID)
partitionIDsInStreamingCol, err2 := rc.streaming.replica.getPartitionIDs(collectionID)
if err1 != nil && err2 != nil {
return err2
}
if len(partitionIDsInHistoricalCol) == 0 {
return errors.New("none of this collection's partition has been loaded")
}
partitionIDsInHistorical = partitionIDsInHistoricalCol
partitionIDsInStreaming = partitionIDsInStreamingCol
} else {
for _, id := range partitionIDsInQuery {
_, err1 := rc.historical.replica.getPartitionByID(id)
if err1 == nil {
partitionIDsInHistorical = append(partitionIDsInHistorical, id)
}
_, err2 := rc.streaming.replica.getPartitionByID(id)
if err2 == nil {
partitionIDsInStreaming = append(partitionIDsInStreaming, id)
}
if err1 != nil && err2 != nil {
return err2
}
}
}
sealedSegmentRetrieved := make([]UniqueID, 0)
var mergeList []*segcorepb.RetrieveResults
for _, partitionID := range partitionIDsInHistorical {
segmentIDs, err := rc.historical.replica.getSegmentIDs(partitionID)
if err != nil {
return err
}
for _, segmentID := range segmentIDs {
segment, err := rc.historical.replica.getSegmentByID(segmentID)
if err != nil {
return err
}
result, err := segment.segmentGetEntityByIds(plan)
if err != nil {
return err
}
mergeList = append(mergeList, result)
sealedSegmentRetrieved = append(sealedSegmentRetrieved, segmentID)
}
}
for _, partitionID := range partitionIDsInStreaming {
segmentIDs, err := rc.streaming.replica.getSegmentIDs(partitionID)
if err != nil {
return err
}
for _, segmentID := range segmentIDs {
segment, err := rc.streaming.replica.getSegmentByID(segmentID)
if err != nil {
return err
}
result, err := segment.segmentGetEntityByIds(plan)
if err != nil {
return err
}
mergeList = append(mergeList, result)
}
}
result, err := mergeRetrieveResults(mergeList)
if err != nil {
return err
}
resultChannelInt := 0
retrieveResultMsg := &msgstream.RetrieveResultMsg{
BaseMsg: msgstream.BaseMsg{Ctx: retrieveMsg.Ctx, HashValues: []uint32{uint32(resultChannelInt)}},
RetrieveResults: internalpb.RetrieveResults{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_RetrieveResult,
MsgID: retrieveMsg.Base.MsgID,
SourceID: retrieveMsg.Base.SourceID,
},
Status: &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success},
Ids: result.Ids,
FieldsData: result.FieldsData,
ResultChannelID: retrieveMsg.ResultChannelID,
SealedSegmentIDsRetrieved: sealedSegmentRetrieved,
ChannelIDsRetrieved: collection.getVChannels(),
//TODO(yukun):: get global sealed segment from etcd
GlobalSealedSegmentIDs: sealedSegmentRetrieved,
},
}
log.Debug("QueryNode RetrieveResultMsg",
zap.Any("vChannels", collection.getVChannels()),
zap.Any("collectionID", collection.ID()),
zap.Any("sealedSegmentRetrieved", sealedSegmentRetrieved),
)
err3 := rc.publishRetrieveResult(retrieveResultMsg, retrieveMsg.CollectionID)
if err3 != nil {
return err3
}
return nil
}
func (rc *retrieveCollection) publishRetrieveResult(msg msgstream.TsMsg, collectionID UniqueID) error {
log.Debug("publishing retrieve result...",
zap.Int64("msgID", msg.ID()),
zap.Int64("collectionID", collectionID))
span, ctx := trace.StartSpanFromContext(msg.TraceCtx())
defer span.Finish()
msg.SetTraceCtx(ctx)
msgPack := msgstream.MsgPack{}
msgPack.Msgs = append(msgPack.Msgs, msg)
err := rc.retrieveResultMsgStream.Produce(&msgPack)
if err != nil {
log.Error(err.Error())
} else {
log.Debug("publish retrieve result done",
zap.Int64("msgID", msg.ID()),
zap.Int64("collectionID", collectionID))
}
return err
}
func (rc *retrieveCollection) publishFailedRetrieveResult(retrieveMsg *msgstream.RetrieveMsg, errMsg string) error {
span, ctx := trace.StartSpanFromContext(retrieveMsg.TraceCtx())
defer span.Finish()
retrieveMsg.SetTraceCtx(ctx)
msgPack := msgstream.MsgPack{}
resultChannelInt := 0
retrieveResultMsg := &msgstream.RetrieveResultMsg{
BaseMsg: msgstream.BaseMsg{HashValues: []uint32{uint32(resultChannelInt)}},
RetrieveResults: internalpb.RetrieveResults{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_RetrieveResult,
MsgID: retrieveMsg.Base.MsgID,
Timestamp: retrieveMsg.Base.Timestamp,
SourceID: retrieveMsg.Base.SourceID,
},
Status: &commonpb.Status{ErrorCode: commonpb.ErrorCode_UnexpectedError, Reason: errMsg},
ResultChannelID: retrieveMsg.ResultChannelID,
Ids: nil,
FieldsData: nil,
},
}
msgPack.Msgs = append(msgPack.Msgs, retrieveResultMsg)
err := rc.retrieveResultMsgStream.Produce(&msgPack)
if err != nil {
return err
}
return nil
}

View File

@ -1,54 +0,0 @@
package querynode
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus/internal/proto/schemapb"
"github.com/milvus-io/milvus/internal/proto/segcorepb"
)
func TestRetrieve_Merge(t *testing.T) {
col1 := &schemapb.FieldData{
Field: &schemapb.FieldData_Scalars{
Scalars: &schemapb.ScalarField{
Data: &schemapb.ScalarField_IntData{
IntData: &schemapb.IntArray{
Data: []int32{1, 2, 3},
},
},
},
},
}
col2 := &schemapb.FieldData{
Field: &schemapb.FieldData_Vectors{
Vectors: &schemapb.VectorField{
Data: &schemapb.VectorField_FloatVector{
FloatVector: &schemapb.FloatArray{
Data: []float32{1, 1, 2, 2, 3, 3},
},
},
},
},
}
subRes := &segcorepb.RetrieveResults{
Ids: &schemapb.IDs{
IdField: &schemapb.IDs_IntId{
IntId: &schemapb.LongArray{
Data: []int64{1, 2, 3},
},
},
},
FieldsData: []*schemapb.FieldData{
col1,
col2,
},
}
finalRes, err := mergeRetrieveResults([]*segcorepb.RetrieveResults{subRes, subRes})
assert.NoError(t, err)
println(finalRes.String())
}

View File

@ -1,183 +0,0 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
package querynode
import (
"context"
"errors"
"strconv"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/msgstream"
"github.com/milvus-io/milvus/internal/util/trace"
)
type retrieveService struct {
ctx context.Context
cancel context.CancelFunc
historical *historical
streaming *streaming
retrieveMsgStream msgstream.MsgStream
retrieveResultMsgStream msgstream.MsgStream
queryNodeID UniqueID
retrieveCollections map[UniqueID]*retrieveCollection
}
func newRetrieveService(ctx context.Context,
historical *historical,
streaming *streaming,
factory msgstream.Factory) *retrieveService {
retrieveStream, _ := factory.NewQueryMsgStream(ctx)
retrieveResultStream, _ := factory.NewQueryMsgStream(ctx)
if len(Params.SearchChannelNames) > 0 && len(Params.SearchResultChannelNames) > 0 {
consumeChannels := Params.SearchChannelNames
consumeSubName := "RetrieveSubName"
retrieveStream.AsConsumer(consumeChannels, consumeSubName)
log.Debug("query node AsConsumer", zap.Any("retrieveChannels", consumeChannels), zap.Any("consumeSubName", consumeSubName))
producerChannels := Params.SearchResultChannelNames
retrieveResultStream.AsProducer(producerChannels)
log.Debug("query node AsProducer", zap.Any("retrieveResultChannels", producerChannels))
}
retrieveServiceCtx, retrieveServiceCancel := context.WithCancel(ctx)
return &retrieveService{
ctx: retrieveServiceCtx,
cancel: retrieveServiceCancel,
historical: historical,
streaming: streaming,
retrieveMsgStream: retrieveStream,
retrieveResultMsgStream: retrieveResultStream,
queryNodeID: Params.QueryNodeID,
retrieveCollections: make(map[UniqueID]*retrieveCollection),
}
}
func (rs *retrieveService) start() {
rs.retrieveMsgStream.Start()
rs.retrieveResultMsgStream.Start()
rs.consumeRetrieve()
}
func (rs *retrieveService) collectionCheck(collectionID UniqueID) error {
if ok := rs.historical.replica.hasCollection(collectionID); !ok {
err := errors.New("no collection found, collectionID = " + strconv.FormatInt(collectionID, 10))
log.Error(err.Error())
return err
}
return nil
}
func (rs *retrieveService) consumeRetrieve() {
for {
select {
case <-rs.ctx.Done():
return
default:
msgPack := rs.retrieveMsgStream.Consume()
if msgPack == nil || len(msgPack.Msgs) <= 0 {
continue
}
for _, msg := range msgPack.Msgs {
rm, ok := msg.(*msgstream.RetrieveMsg)
if !ok {
// Not a retrieve request, discard
continue
}
log.Info("RetrieveService consume retrieve message",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", msg.ID()),
zap.Any("requestType", "retrieve"),
)
sp, ctx := trace.StartSpanFromContext(rm.TraceCtx())
rm.SetTraceCtx(ctx)
err := rs.collectionCheck(rm.CollectionID)
if err != nil {
log.Debug("Failed to check collection exist, discard.",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", msg.ID()),
zap.Any("requestType", "retrieve"),
)
continue
}
_, ok = rs.retrieveCollections[rm.CollectionID]
if !ok {
rs.startRetrieveCollection(rm.CollectionID)
log.Debug("Receive retrieve request on new collection, start an new retrieve collection service",
zap.Int64("collectionID", rm.CollectionID),
zap.Int64("requestID", msg.ID()),
zap.Any("requestType", "retrieve"),
)
}
rs.retrieveCollections[rm.CollectionID].msgBuffer <- rm
log.Info("Put retrieve msg into msgBuffer",
zap.Any("requestID", msg.ID),
zap.Any("requestType", "retrieve"),
)
sp.Finish()
}
}
}
}
func (rs *retrieveService) close() {
if rs.retrieveMsgStream != nil {
rs.retrieveMsgStream.Close()
}
if rs.retrieveResultMsgStream != nil {
rs.retrieveResultMsgStream.Close()
}
for collectionID := range rs.retrieveCollections {
rs.stopRetrieveCollection(collectionID)
}
rs.retrieveCollections = make(map[UniqueID]*retrieveCollection)
rs.cancel()
}
func (rs *retrieveService) startRetrieveCollection(collectionID UniqueID) {
ctx1, cancel := context.WithCancel(rs.ctx)
rc := newRetrieveCollection(ctx1,
cancel,
collectionID,
rs.historical,
rs.streaming,
rs.retrieveResultMsgStream)
rs.retrieveCollections[collectionID] = rc
rc.start()
}
func (rs *retrieveService) hasRetrieveCollection(collectionID UniqueID) bool {
_, ok := rs.retrieveCollections[collectionID]
return ok
}
func (rs *retrieveService) stopRetrieveCollection(collectionID UniqueID) {
rc, ok := rs.retrieveCollections[collectionID]
if !ok {
log.Error("stopRetrieveCollection failed, collection doesn't exist", zap.Int64("collectionID", collectionID))
}
rc.cancel()
delete(rs.retrieveCollections, collectionID)
}

View File

@ -425,7 +425,7 @@ func TestSegment_segmentSearch(t *testing.T) {
log.Print("marshal placeholderGroup failed")
}
searchTimestamp := Timestamp(1020)
travelTimestamp := Timestamp(1020)
plan, err := createPlan(collection, dslString)
assert.NoError(t, err)
holder, err := parseSearchRequest(plan, placeHolderGroupBlob)
@ -436,7 +436,7 @@ func TestSegment_segmentSearch(t *testing.T) {
searchResults := make([]*SearchResult, 0)
matchedSegments := make([]*Segment, 0)
searchResult, err := segment.segmentSearch(plan, placeholderGroups, []Timestamp{searchTimestamp})
searchResult, err := segment.segmentSearch(plan, placeholderGroups, []Timestamp{travelTimestamp})
assert.Nil(t, err)
searchResults = append(searchResults, searchResult)