Impl GetReplicas in Proxy (#16390)

See also: #16298

Signed-off-by: yangxuan <xuan.yang@zilliz.com>
pull/16400/head
XuanYang-cn 2022-04-06 14:57:31 +08:00 committed by GitHub
parent 2b27fa4609
commit 78200009a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 3823 additions and 887 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -647,6 +647,10 @@ func (s *Server) GetImportState(ctx context.Context, req *milvuspb.GetImportStat
return s.proxy.GetImportState(ctx, req) return s.proxy.GetImportState(ctx, req)
} }
func (s *Server) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
return s.proxy.GetReplicas(ctx, req)
}
// Check is required by gRPC healthy checking // Check is required by gRPC healthy checking
func (s *Server) Check(ctx context.Context, req *grpc_health_v1.HealthCheckRequest) (*grpc_health_v1.HealthCheckResponse, error) { func (s *Server) Check(ctx context.Context, req *grpc_health_v1.HealthCheckRequest) (*grpc_health_v1.HealthCheckResponse, error) {
ret := &grpc_health_v1.HealthCheckResponse{ ret := &grpc_health_v1.HealthCheckResponse{

View File

@ -360,7 +360,7 @@ func (m *MockQueryCoord) GetMetrics(ctx context.Context, req *milvuspb.GetMetric
return nil, nil return nil, nil
} }
func (m *MockQueryCoord) GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) { func (m *MockQueryCoord) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
return nil, nil return nil, nil
} }
@ -708,6 +708,10 @@ func (m *MockProxy) GetImportState(ctx context.Context, req *milvuspb.GetImportS
return nil, nil return nil, nil
} }
func (m *MockProxy) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
return nil, nil
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
func Test_NewServer(t *testing.T) { func Test_NewServer(t *testing.T) {
ctx := context.Background() ctx := context.Background()

View File

@ -302,7 +302,7 @@ func (c *Client) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest
} }
// GetReplicas gets the replicas of a certain collection. // GetReplicas gets the replicas of a certain collection.
func (c *Client) GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) { func (c *Client) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) { ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) { if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err() return nil, ctx.Err()
@ -312,7 +312,7 @@ func (c *Client) GetReplicas(ctx context.Context, req *querypb.GetReplicasReques
if err != nil || ret == nil { if err != nil || ret == nil {
return nil, err return nil, err
} }
return ret.(*querypb.GetReplicasResponse), err return ret.(*milvuspb.GetReplicasResponse), err
} }
// GetShardLeaders gets the shard leaders of a certain collection. // GetShardLeaders gets the shard leaders of a certain collection.

View File

@ -391,7 +391,7 @@ func (s *Server) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest
} }
// GetReplicas returns the shard leaders of a certain collection. // GetReplicas returns the shard leaders of a certain collection.
func (s *Server) GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) { func (s *Server) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
return s.queryCoord.GetReplicas(ctx, req) return s.queryCoord.GetReplicas(ctx, req)
} }

View File

@ -48,7 +48,7 @@ type MockQueryCoord struct {
channelResp *querypb.CreateQueryChannelResponse channelResp *querypb.CreateQueryChannelResponse
infoResp *querypb.GetSegmentInfoResponse infoResp *querypb.GetSegmentInfoResponse
metricResp *milvuspb.GetMetricsResponse metricResp *milvuspb.GetMetricsResponse
replicasResp *querypb.GetReplicasResponse replicasResp *milvuspb.GetReplicasResponse
shardLeadersResp *querypb.GetShardLeadersResponse shardLeadersResp *querypb.GetShardLeadersResponse
} }
@ -144,7 +144,7 @@ func (m *MockQueryCoord) GetMetrics(ctx context.Context, req *milvuspb.GetMetric
return m.metricResp, m.err return m.metricResp, m.err
} }
func (m *MockQueryCoord) GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) { func (m *MockQueryCoord) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
return m.replicasResp, m.err return m.replicasResp, m.err
} }

View File

@ -49,6 +49,7 @@ service MilvusService {
rpc GetFlushState(GetFlushStateRequest) returns (GetFlushStateResponse) {} rpc GetFlushState(GetFlushStateRequest) returns (GetFlushStateResponse) {}
rpc GetPersistentSegmentInfo(GetPersistentSegmentInfoRequest) returns (GetPersistentSegmentInfoResponse) {} rpc GetPersistentSegmentInfo(GetPersistentSegmentInfoRequest) returns (GetPersistentSegmentInfoResponse) {}
rpc GetQuerySegmentInfo(GetQuerySegmentInfoRequest) returns (GetQuerySegmentInfoResponse) {} rpc GetQuerySegmentInfo(GetQuerySegmentInfoRequest) returns (GetQuerySegmentInfoResponse) {}
rpc GetReplicas(GetReplicasRequest) returns (GetReplicasResponse) {}
rpc Dummy(DummyRequest) returns (DummyResponse) {} rpc Dummy(DummyRequest) returns (DummyResponse) {}
@ -821,6 +822,37 @@ message GetImportStateResponse {
repeated common.KeyValuePair infos = 5; // more informations about the task, progress percent, file path, failed reason, etc. repeated common.KeyValuePair infos = 5; // more informations about the task, progress percent, file path, failed reason, etc.
} }
message GetReplicasRequest {
common.MsgBase base = 1;
int64 collectionID = 2;
bool with_shard_nodes = 3;
}
message GetReplicasResponse {
common.Status status = 1;
repeated ReplicaInfo replicas = 2;
}
message ReplicaInfo { // ReplicaGroup
int64 replicaID = 1;
int64 collectionID = 2;
repeated int64 partition_ids = 3; // empty indicates to load collection
repeated ShardReplica shard_replicas = 4;
repeated int64 node_ids = 5; // include leaders
}
message ShardReplica {
int64 leaderID = 1;
string leader_addr = 2; // IP:port
string dm_channel_name = 3;
// optional, DO NOT save it in meta, set it only for GetReplicas()
// if with_shard_nodes is true
repeated int64 node_ids = 4;
}
service ProxyService { service ProxyService {
rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {} rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {}
} }

View File

@ -5191,6 +5191,244 @@ func (m *GetImportStateResponse) GetInfos() []*commonpb.KeyValuePair {
return nil return nil
} }
type GetReplicasRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
WithShardNodes bool `protobuf:"varint,3,opt,name=with_shard_nodes,json=withShardNodes,proto3" json:"with_shard_nodes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetReplicasRequest) Reset() { *m = GetReplicasRequest{} }
func (m *GetReplicasRequest) String() string { return proto.CompactTextString(m) }
func (*GetReplicasRequest) ProtoMessage() {}
func (*GetReplicasRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{80}
}
func (m *GetReplicasRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReplicasRequest.Unmarshal(m, b)
}
func (m *GetReplicasRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetReplicasRequest.Marshal(b, m, deterministic)
}
func (m *GetReplicasRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetReplicasRequest.Merge(m, src)
}
func (m *GetReplicasRequest) XXX_Size() int {
return xxx_messageInfo_GetReplicasRequest.Size(m)
}
func (m *GetReplicasRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetReplicasRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetReplicasRequest proto.InternalMessageInfo
func (m *GetReplicasRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *GetReplicasRequest) GetCollectionID() int64 {
if m != nil {
return m.CollectionID
}
return 0
}
func (m *GetReplicasRequest) GetWithShardNodes() bool {
if m != nil {
return m.WithShardNodes
}
return false
}
type GetReplicasResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Replicas []*ReplicaInfo `protobuf:"bytes,2,rep,name=replicas,proto3" json:"replicas,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetReplicasResponse) Reset() { *m = GetReplicasResponse{} }
func (m *GetReplicasResponse) String() string { return proto.CompactTextString(m) }
func (*GetReplicasResponse) ProtoMessage() {}
func (*GetReplicasResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{81}
}
func (m *GetReplicasResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReplicasResponse.Unmarshal(m, b)
}
func (m *GetReplicasResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetReplicasResponse.Marshal(b, m, deterministic)
}
func (m *GetReplicasResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetReplicasResponse.Merge(m, src)
}
func (m *GetReplicasResponse) XXX_Size() int {
return xxx_messageInfo_GetReplicasResponse.Size(m)
}
func (m *GetReplicasResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetReplicasResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetReplicasResponse proto.InternalMessageInfo
func (m *GetReplicasResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *GetReplicasResponse) GetReplicas() []*ReplicaInfo {
if m != nil {
return m.Replicas
}
return nil
}
type ReplicaInfo struct {
ReplicaID int64 `protobuf:"varint,1,opt,name=replicaID,proto3" json:"replicaID,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
PartitionIds []int64 `protobuf:"varint,3,rep,packed,name=partition_ids,json=partitionIds,proto3" json:"partition_ids,omitempty"`
ShardReplicas []*ShardReplica `protobuf:"bytes,4,rep,name=shard_replicas,json=shardReplicas,proto3" json:"shard_replicas,omitempty"`
NodeIds []int64 `protobuf:"varint,5,rep,packed,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReplicaInfo) Reset() { *m = ReplicaInfo{} }
func (m *ReplicaInfo) String() string { return proto.CompactTextString(m) }
func (*ReplicaInfo) ProtoMessage() {}
func (*ReplicaInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{82}
}
func (m *ReplicaInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplicaInfo.Unmarshal(m, b)
}
func (m *ReplicaInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReplicaInfo.Marshal(b, m, deterministic)
}
func (m *ReplicaInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReplicaInfo.Merge(m, src)
}
func (m *ReplicaInfo) XXX_Size() int {
return xxx_messageInfo_ReplicaInfo.Size(m)
}
func (m *ReplicaInfo) XXX_DiscardUnknown() {
xxx_messageInfo_ReplicaInfo.DiscardUnknown(m)
}
var xxx_messageInfo_ReplicaInfo proto.InternalMessageInfo
func (m *ReplicaInfo) GetReplicaID() int64 {
if m != nil {
return m.ReplicaID
}
return 0
}
func (m *ReplicaInfo) GetCollectionID() int64 {
if m != nil {
return m.CollectionID
}
return 0
}
func (m *ReplicaInfo) GetPartitionIds() []int64 {
if m != nil {
return m.PartitionIds
}
return nil
}
func (m *ReplicaInfo) GetShardReplicas() []*ShardReplica {
if m != nil {
return m.ShardReplicas
}
return nil
}
func (m *ReplicaInfo) GetNodeIds() []int64 {
if m != nil {
return m.NodeIds
}
return nil
}
type ShardReplica struct {
LeaderID int64 `protobuf:"varint,1,opt,name=leaderID,proto3" json:"leaderID,omitempty"`
LeaderAddr string `protobuf:"bytes,2,opt,name=leader_addr,json=leaderAddr,proto3" json:"leader_addr,omitempty"`
DmChannelName string `protobuf:"bytes,3,opt,name=dm_channel_name,json=dmChannelName,proto3" json:"dm_channel_name,omitempty"`
// optional, DO NOT save it in meta, set it only for GetReplicas()
// if with_shard_nodes is true
NodeIds []int64 `protobuf:"varint,4,rep,packed,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ShardReplica) Reset() { *m = ShardReplica{} }
func (m *ShardReplica) String() string { return proto.CompactTextString(m) }
func (*ShardReplica) ProtoMessage() {}
func (*ShardReplica) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{83}
}
func (m *ShardReplica) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardReplica.Unmarshal(m, b)
}
func (m *ShardReplica) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ShardReplica.Marshal(b, m, deterministic)
}
func (m *ShardReplica) XXX_Merge(src proto.Message) {
xxx_messageInfo_ShardReplica.Merge(m, src)
}
func (m *ShardReplica) XXX_Size() int {
return xxx_messageInfo_ShardReplica.Size(m)
}
func (m *ShardReplica) XXX_DiscardUnknown() {
xxx_messageInfo_ShardReplica.DiscardUnknown(m)
}
var xxx_messageInfo_ShardReplica proto.InternalMessageInfo
func (m *ShardReplica) GetLeaderID() int64 {
if m != nil {
return m.LeaderID
}
return 0
}
func (m *ShardReplica) GetLeaderAddr() string {
if m != nil {
return m.LeaderAddr
}
return ""
}
func (m *ShardReplica) GetDmChannelName() string {
if m != nil {
return m.DmChannelName
}
return ""
}
func (m *ShardReplica) GetNodeIds() []int64 {
if m != nil {
return m.NodeIds
}
return nil
}
func init() { func init() {
proto.RegisterEnum("milvus.proto.milvus.ShowType", ShowType_name, ShowType_value) proto.RegisterEnum("milvus.proto.milvus.ShowType", ShowType_name, ShowType_value)
proto.RegisterEnum("milvus.proto.milvus.PlaceholderType", PlaceholderType_name, PlaceholderType_value) proto.RegisterEnum("milvus.proto.milvus.PlaceholderType", PlaceholderType_name, PlaceholderType_value)
@ -5275,253 +5513,269 @@ func init() {
proto.RegisterType((*ImportResponse)(nil), "milvus.proto.milvus.ImportResponse") proto.RegisterType((*ImportResponse)(nil), "milvus.proto.milvus.ImportResponse")
proto.RegisterType((*GetImportStateRequest)(nil), "milvus.proto.milvus.GetImportStateRequest") proto.RegisterType((*GetImportStateRequest)(nil), "milvus.proto.milvus.GetImportStateRequest")
proto.RegisterType((*GetImportStateResponse)(nil), "milvus.proto.milvus.GetImportStateResponse") proto.RegisterType((*GetImportStateResponse)(nil), "milvus.proto.milvus.GetImportStateResponse")
proto.RegisterType((*GetReplicasRequest)(nil), "milvus.proto.milvus.GetReplicasRequest")
proto.RegisterType((*GetReplicasResponse)(nil), "milvus.proto.milvus.GetReplicasResponse")
proto.RegisterType((*ReplicaInfo)(nil), "milvus.proto.milvus.ReplicaInfo")
proto.RegisterType((*ShardReplica)(nil), "milvus.proto.milvus.ShardReplica")
} }
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) } func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{ var fileDescriptor_02345ba45cc0e303 = []byte{
// 3843 bytes of a gzipped FileDescriptorProto // 4041 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3b, 0x4d, 0x6f, 0x1c, 0xc9, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3c, 0x4d, 0x6f, 0x1c, 0xc9,
0x75, 0xec, 0x19, 0xce, 0xd7, 0x9b, 0x19, 0x72, 0x58, 0xfc, 0xd0, 0xec, 0x68, 0xb5, 0xa2, 0xda, 0x75, 0xec, 0x19, 0xce, 0xd7, 0x9b, 0x19, 0x72, 0x54, 0xa4, 0xa8, 0xd9, 0xd1, 0x6a, 0x97, 0xea,
0xbb, 0x5e, 0x4a, 0xb2, 0x24, 0x8b, 0x5a, 0xef, 0x3a, 0xda, 0x24, 0x6b, 0x91, 0xcc, 0x4a, 0xc4, 0xfd, 0xe2, 0x4a, 0x5e, 0xc9, 0x4b, 0xad, 0x77, 0x9d, 0x5d, 0x27, 0x6b, 0x49, 0xcc, 0x4a, 0xc4,
0x4a, 0x0a, 0xdd, 0x5c, 0xdb, 0x70, 0x16, 0x42, 0xa3, 0xd9, 0x5d, 0x1c, 0x36, 0xd8, 0xd3, 0x3d, 0x4a, 0x0a, 0xdd, 0x5c, 0xdb, 0x70, 0x16, 0x42, 0xa3, 0xd8, 0x5d, 0x1c, 0x36, 0xd4, 0xd3, 0x3d,
0xee, 0xaa, 0x11, 0xc5, 0x3d, 0x19, 0x70, 0x90, 0x20, 0xf0, 0x66, 0x8d, 0x20, 0x41, 0x3e, 0x0e, 0xee, 0xaa, 0x11, 0xc5, 0x3d, 0x19, 0x70, 0x90, 0x0f, 0x78, 0xb3, 0x46, 0x10, 0x23, 0x1f, 0x87,
0x09, 0x82, 0x7c, 0x1c, 0x72, 0x48, 0x10, 0xdb, 0x41, 0x12, 0xe4, 0x92, 0x1c, 0x02, 0x24, 0x87, 0x04, 0x41, 0x3e, 0x0e, 0x41, 0x90, 0x20, 0xb6, 0x83, 0x24, 0xc8, 0x25, 0x39, 0xe4, 0x90, 0x43,
0x00, 0xf9, 0xb8, 0xe4, 0x90, 0x4b, 0xfe, 0x40, 0x6e, 0x39, 0xe6, 0x10, 0xd4, 0x47, 0xf7, 0x74, 0x80, 0x7c, 0x5c, 0x82, 0x20, 0x97, 0xfc, 0x81, 0xdc, 0x72, 0xcc, 0x21, 0xa8, 0x8f, 0xee, 0xe9,
0xf7, 0x54, 0x0f, 0x87, 0x1a, 0xcb, 0x24, 0x6f, 0xdd, 0xaf, 0xde, 0xab, 0x7a, 0xf5, 0xea, 0x7d, 0xee, 0xa9, 0x1e, 0x0e, 0x77, 0x2c, 0x93, 0xba, 0x4d, 0xbf, 0x7a, 0xaf, 0xea, 0xd5, 0xab, 0x57,
0x54, 0xbd, 0x7a, 0x05, 0x8d, 0x9e, 0xeb, 0x3d, 0x1f, 0x90, 0xdb, 0xfd, 0x30, 0xa0, 0x01, 0x5a, 0xaf, 0x5e, 0xbd, 0xf7, 0x6a, 0xa0, 0x35, 0xf0, 0xfc, 0xc7, 0x23, 0x7a, 0x6d, 0x18, 0x85, 0x2c,
0x4c, 0xfe, 0xdd, 0x16, 0x3f, 0x9d, 0x86, 0x1d, 0xf4, 0x7a, 0x81, 0x2f, 0x80, 0x9d, 0x06, 0xb1, 0x44, 0x2b, 0xe9, 0xaf, 0x6b, 0xf2, 0xa3, 0xd7, 0x72, 0xc2, 0xc1, 0x20, 0x0c, 0x24, 0xb0, 0xd7,
0x0f, 0x70, 0xcf, 0x12, 0x7f, 0xfa, 0x1f, 0x68, 0x80, 0x36, 0x43, 0x6c, 0x51, 0xfc, 0xc0, 0x73, 0xa2, 0xce, 0x01, 0x19, 0x60, 0xf9, 0x65, 0xfe, 0xbe, 0x01, 0xe8, 0x76, 0x44, 0x30, 0x23, 0x37,
0x2d, 0x62, 0xe0, 0xef, 0x0c, 0x30, 0xa1, 0xe8, 0xcb, 0x30, 0xbb, 0x67, 0x11, 0xdc, 0xd6, 0x56, 0x7d, 0x0f, 0x53, 0x8b, 0x7c, 0x7b, 0x44, 0x28, 0x43, 0x5f, 0x84, 0xc5, 0x3d, 0x4c, 0x49, 0xd7,
0xb5, 0xb5, 0xfa, 0xfa, 0xeb, 0xb7, 0x53, 0xdd, 0xca, 0xee, 0x9e, 0x90, 0xee, 0x86, 0x45, 0xb0, 0x58, 0x37, 0x36, 0x9a, 0x9b, 0xcf, 0x5f, 0xcb, 0x74, 0xab, 0xba, 0xbb, 0x4f, 0xfb, 0xb7, 0x30,
0xc1, 0x31, 0xd1, 0x25, 0xa8, 0x38, 0x7b, 0xa6, 0x6f, 0xf5, 0x70, 0xbb, 0xb0, 0xaa, 0xad, 0xd5, 0x25, 0x96, 0xc0, 0x44, 0x17, 0xa0, 0xe6, 0xee, 0xd9, 0x01, 0x1e, 0x90, 0x6e, 0x69, 0xdd, 0xd8,
0x8c, 0xb2, 0xb3, 0xf7, 0xd4, 0xea, 0x61, 0xf4, 0x36, 0xcc, 0xdb, 0x81, 0xe7, 0x61, 0x9b, 0xba, 0x68, 0x58, 0x55, 0x77, 0xef, 0x01, 0x1e, 0x10, 0xf4, 0x1a, 0x2c, 0x3b, 0xa1, 0xef, 0x13, 0x87,
0x81, 0x2f, 0x10, 0x8a, 0x1c, 0x61, 0x6e, 0x08, 0xe6, 0x88, 0x4b, 0x50, 0xb2, 0x18, 0x0f, 0xed, 0x79, 0x61, 0x20, 0x11, 0xca, 0x02, 0x61, 0x69, 0x0c, 0x16, 0x88, 0xab, 0x50, 0xc1, 0x9c, 0x87,
0x59, 0xde, 0x2c, 0x7e, 0x74, 0x02, 0xad, 0xad, 0x30, 0xe8, 0xbf, 0x2a, 0xee, 0xe2, 0x41, 0x8b, 0xee, 0xa2, 0x68, 0x96, 0x1f, 0x26, 0x85, 0xce, 0x56, 0x14, 0x0e, 0x9f, 0x16, 0x77, 0xc9, 0xa0,
0xc9, 0x41, 0x7f, 0x5f, 0x83, 0x85, 0x07, 0x1e, 0xc5, 0xe1, 0x39, 0x15, 0xca, 0xef, 0x16, 0xe0, 0xe5, 0xf4, 0xa0, 0xbf, 0x67, 0xc0, 0xb9, 0x9b, 0x3e, 0x23, 0xd1, 0x19, 0x15, 0xca, 0xef, 0x94,
0x92, 0x58, 0xb5, 0xcd, 0x18, 0xfd, 0x2c, 0xb9, 0x5c, 0x81, 0xb2, 0xd0, 0x2a, 0xce, 0x66, 0xc3, 0xe0, 0x82, 0x5c, 0xb5, 0xdb, 0x09, 0xfa, 0x69, 0x72, 0xb9, 0x06, 0x55, 0xa9, 0x55, 0x82, 0xcd,
0x90, 0x7f, 0xe8, 0x0a, 0x00, 0x39, 0xb0, 0x42, 0x87, 0x98, 0xfe, 0xa0, 0xd7, 0x2e, 0xad, 0x6a, 0x96, 0xa5, 0xbe, 0xd0, 0x25, 0x00, 0x7a, 0x80, 0x23, 0x97, 0xda, 0xc1, 0x68, 0xd0, 0xad, 0xac,
0x6b, 0x25, 0xa3, 0x26, 0x20, 0x4f, 0x07, 0x3d, 0x64, 0xc0, 0x82, 0x1d, 0xf8, 0xc4, 0x25, 0x14, 0x1b, 0x1b, 0x15, 0xab, 0x21, 0x21, 0x0f, 0x46, 0x03, 0x64, 0xc1, 0x39, 0x27, 0x0c, 0xa8, 0x47,
0xfb, 0xf6, 0xb1, 0xe9, 0xe1, 0xe7, 0xd8, 0x6b, 0x97, 0x57, 0xb5, 0xb5, 0xb9, 0xf5, 0xb7, 0x94, 0x19, 0x09, 0x9c, 0x23, 0xdb, 0x27, 0x8f, 0x89, 0xdf, 0xad, 0xae, 0x1b, 0x1b, 0x4b, 0x9b, 0xaf,
0x7c, 0x6f, 0x0e, 0xb1, 0x1f, 0x33, 0x64, 0xa3, 0x65, 0x67, 0x20, 0xfa, 0xf7, 0x35, 0x58, 0x66, 0x68, 0xf9, 0xbe, 0x3d, 0xc6, 0xbe, 0xc7, 0x91, 0xad, 0x8e, 0x93, 0x83, 0x98, 0xdf, 0x33, 0xe0,
0x0a, 0x73, 0x2e, 0x04, 0xa3, 0xff, 0x99, 0x06, 0x4b, 0x8f, 0x2c, 0x72, 0x3e, 0x56, 0xe9, 0x0a, 0x3c, 0x57, 0x98, 0x33, 0x21, 0x18, 0xf3, 0x4f, 0x0d, 0x58, 0xbd, 0x8b, 0xe9, 0xd9, 0x58, 0xa5,
0x00, 0x75, 0x7b, 0xd8, 0x24, 0xd4, 0xea, 0xf5, 0xf9, 0x4a, 0xcd, 0x1a, 0x35, 0x06, 0xd9, 0x65, 0x4b, 0x00, 0xcc, 0x1b, 0x10, 0x9b, 0x32, 0x3c, 0x18, 0x8a, 0x95, 0x5a, 0xb4, 0x1a, 0x1c, 0xb2,
0x00, 0xfd, 0xdb, 0xd0, 0xd8, 0x08, 0x02, 0xcf, 0xc0, 0xa4, 0x1f, 0xf8, 0x04, 0xa3, 0x7b, 0x50, 0xcb, 0x01, 0xe6, 0xb7, 0xa0, 0x75, 0x2b, 0x0c, 0x7d, 0x8b, 0xd0, 0x61, 0x18, 0x50, 0x82, 0x6e,
0x26, 0xd4, 0xa2, 0x03, 0x22, 0x99, 0xbc, 0xac, 0x64, 0x72, 0x97, 0xa3, 0x18, 0x12, 0x95, 0xe9, 0x40, 0x95, 0x32, 0xcc, 0x46, 0x54, 0x31, 0x79, 0x51, 0xcb, 0xe4, 0xae, 0x40, 0xb1, 0x14, 0x2a,
0xeb, 0x73, 0xcb, 0x1b, 0x08, 0x1e, 0xab, 0x86, 0xf8, 0xd1, 0x3f, 0x81, 0xb9, 0x5d, 0x1a, 0xba, 0xd7, 0xd7, 0xc7, 0xd8, 0x1f, 0x49, 0x1e, 0xeb, 0x96, 0xfc, 0x30, 0x3f, 0x86, 0xa5, 0x5d, 0x16,
0x7e, 0xf7, 0x27, 0xd8, 0x79, 0x2d, 0xea, 0xfc, 0x3f, 0x34, 0x78, 0x6d, 0x0b, 0x13, 0x3b, 0x74, 0x79, 0x41, 0xff, 0x27, 0xd8, 0x79, 0x23, 0xee, 0xfc, 0xdf, 0x0d, 0x78, 0x6e, 0x8b, 0x50, 0x27,
0xf7, 0xce, 0x89, 0x39, 0xe8, 0xd0, 0x18, 0x42, 0xb6, 0xb7, 0xb8, 0xa8, 0x8b, 0x46, 0x0a, 0x96, 0xf2, 0xf6, 0xce, 0xc8, 0x76, 0x30, 0xa1, 0x35, 0x86, 0x6c, 0x6f, 0x09, 0x51, 0x97, 0xad, 0x0c,
0x59, 0x8c, 0x52, 0x76, 0x31, 0xbe, 0x5b, 0x82, 0x8e, 0x6a, 0x52, 0xd3, 0x88, 0xef, 0xe7, 0x62, 0x2c, 0xb7, 0x18, 0x95, 0xfc, 0x62, 0x7c, 0xa7, 0x02, 0x3d, 0xdd, 0xa4, 0xe6, 0x11, 0xdf, 0xcf,
0x2b, 0x2d, 0x70, 0xa2, 0x8c, 0x8d, 0xc9, 0xb8, 0x30, 0x1c, 0x6d, 0x97, 0x03, 0x62, 0x63, 0xce, 0x26, 0xbb, 0xb4, 0x24, 0x88, 0x72, 0x7b, 0x4c, 0x9d, 0x0b, 0xe3, 0xd1, 0x76, 0x05, 0x20, 0xd9,
0xce, 0xaa, 0xa8, 0x98, 0xd5, 0x3a, 0x2c, 0x3f, 0x77, 0x43, 0x3a, 0xb0, 0x3c, 0xd3, 0x3e, 0xb0, 0xcc, 0xf9, 0x59, 0x95, 0x35, 0xb3, 0xda, 0x84, 0xf3, 0x8f, 0xbd, 0x88, 0x8d, 0xb0, 0x6f, 0x3b,
0x7c, 0x1f, 0x7b, 0x5c, 0x4e, 0xcc, 0x7d, 0x15, 0xd7, 0x6a, 0xc6, 0xa2, 0x6c, 0xdc, 0x14, 0x6d, 0x07, 0x38, 0x08, 0x88, 0x2f, 0xe4, 0xc4, 0xcd, 0x57, 0x79, 0xa3, 0x61, 0xad, 0xa8, 0xc6, 0xdb,
0x4c, 0x58, 0x04, 0xbd, 0x03, 0x2b, 0xfd, 0x83, 0x63, 0xe2, 0xda, 0x23, 0x44, 0x25, 0x4e, 0xb4, 0xb2, 0x8d, 0x0b, 0x8b, 0xa2, 0xb7, 0x60, 0x6d, 0x78, 0x70, 0x44, 0x3d, 0x67, 0x82, 0xa8, 0x22,
0x14, 0xb5, 0xa6, 0xa8, 0x6e, 0xc2, 0x82, 0xcd, 0x3d, 0xa0, 0x63, 0x32, 0xa9, 0x09, 0x31, 0x96, 0x88, 0x56, 0xe3, 0xd6, 0x0c, 0xd5, 0x55, 0x38, 0xe7, 0x08, 0x0b, 0xe8, 0xda, 0x5c, 0x6a, 0x52,
0xb9, 0x18, 0x5b, 0xb2, 0xe1, 0xe3, 0x08, 0xce, 0xd8, 0x8a, 0x90, 0x07, 0xd4, 0x4e, 0x10, 0x54, 0x8c, 0x55, 0x21, 0xc6, 0x8e, 0x6a, 0xf8, 0x28, 0x86, 0x73, 0xb6, 0x62, 0xe4, 0x11, 0x73, 0x52,
0x38, 0xc1, 0xa2, 0x6c, 0xfc, 0x06, 0xb5, 0x87, 0x34, 0x69, 0xdf, 0x55, 0xcd, 0xfa, 0xae, 0x36, 0x04, 0x35, 0x41, 0xb0, 0xa2, 0x1a, 0xbf, 0xce, 0x9c, 0x31, 0x4d, 0xd6, 0x76, 0xd5, 0xf3, 0xb6,
0x54, 0xb8, 0x2f, 0xc6, 0xa4, 0x5d, 0xe3, 0x6c, 0x46, 0xbf, 0x68, 0x1b, 0xe6, 0x09, 0xb5, 0x42, 0xab, 0x0b, 0x35, 0x61, 0x8b, 0x09, 0xed, 0x36, 0x04, 0x9b, 0xf1, 0x27, 0xda, 0x86, 0x65, 0xca,
0x6a, 0xf6, 0x03, 0xe2, 0x32, 0xb9, 0x90, 0x36, 0xac, 0x16, 0xd7, 0xea, 0xeb, 0xab, 0xca, 0x45, 0x70, 0xc4, 0xec, 0x61, 0x48, 0x3d, 0x2e, 0x17, 0xda, 0x85, 0xf5, 0xf2, 0x46, 0x73, 0x73, 0x5d,
0xfa, 0x08, 0x1f, 0x6f, 0x59, 0xd4, 0xda, 0xb1, 0xdc, 0xd0, 0x98, 0xe3, 0x84, 0x3b, 0x11, 0x9d, 0xbb, 0x48, 0x1f, 0x92, 0xa3, 0x2d, 0xcc, 0xf0, 0x0e, 0xf6, 0x22, 0x6b, 0x49, 0x10, 0xee, 0xc4,
0xda, 0x41, 0xd6, 0xa7, 0x72, 0x90, 0x2a, 0x2d, 0x6e, 0x28, 0x7d, 0xd7, 0x8f, 0x34, 0x58, 0x7e, 0x74, 0x7a, 0x03, 0xd9, 0x9c, 0xcb, 0x40, 0xea, 0xb4, 0xb8, 0xa5, 0xb5, 0x5d, 0x3f, 0x32, 0xe0,
0x1c, 0x58, 0xce, 0xf9, 0xb0, 0xa9, 0xb7, 0x60, 0x2e, 0xc4, 0x7d, 0xcf, 0xb5, 0x2d, 0xb6, 0x1e, 0xfc, 0xbd, 0x10, 0xbb, 0x67, 0x63, 0x4f, 0xbd, 0x02, 0x4b, 0x11, 0x19, 0xfa, 0x9e, 0x83, 0xf9,
0x7b, 0x38, 0xe4, 0x56, 0x55, 0x32, 0x9a, 0x12, 0xfa, 0x94, 0x03, 0xf5, 0xcf, 0x35, 0x68, 0x1b, 0x7a, 0xec, 0x91, 0x48, 0xec, 0xaa, 0x8a, 0xd5, 0x56, 0xd0, 0x07, 0x02, 0x68, 0x7e, 0x66, 0x40,
0xd8, 0xc3, 0x16, 0x39, 0x1f, 0xbe, 0x40, 0xff, 0x2d, 0x0d, 0xde, 0x78, 0x88, 0x69, 0xc2, 0xaa, 0xd7, 0x22, 0x3e, 0xc1, 0xf4, 0x6c, 0xd8, 0x02, 0xf3, 0x07, 0x06, 0xbc, 0x70, 0x87, 0xb0, 0xd4,
0xa8, 0x45, 0x5d, 0x42, 0x5d, 0xfb, 0x2c, 0xf7, 0x15, 0xfa, 0x0f, 0x34, 0xb8, 0x9a, 0xcb, 0xd6, 0xae, 0x62, 0x98, 0x79, 0x94, 0x79, 0xce, 0x69, 0xfa, 0x15, 0xe6, 0xf7, 0x0d, 0x78, 0xb1, 0x90,
0x34, 0x4e, 0xe6, 0x3d, 0x28, 0xb1, 0x2f, 0xd2, 0x2e, 0x70, 0x9d, 0xbf, 0x96, 0xa7, 0xf3, 0xdf, 0xad, 0x79, 0x8c, 0xcc, 0x3b, 0x50, 0xe1, 0xbf, 0x68, 0xb7, 0x24, 0x74, 0xfe, 0x72, 0x91, 0xce,
0x64, 0xbe, 0x9b, 0x2b, 0xbd, 0xc0, 0xd7, 0xff, 0x5b, 0x83, 0x95, 0xdd, 0x83, 0xe0, 0x68, 0xc8, 0x7f, 0x83, 0xdb, 0x6e, 0xa1, 0xf4, 0x12, 0xdf, 0xfc, 0x6f, 0x03, 0xd6, 0x76, 0x0f, 0xc2, 0xc3,
0xd2, 0xab, 0x10, 0x50, 0xda, 0xed, 0x16, 0x33, 0x6e, 0x17, 0xdd, 0x85, 0x59, 0x7a, 0xdc, 0xc7, 0x31, 0x4b, 0x4f, 0x43, 0x40, 0x59, 0xb3, 0x5b, 0xce, 0x99, 0x5d, 0xf4, 0x26, 0x2c, 0xb2, 0xa3,
0x5c, 0xb7, 0xe6, 0xd6, 0xaf, 0xdc, 0x56, 0x6c, 0xa7, 0x6f, 0x33, 0x26, 0x3f, 0x3e, 0xee, 0x63, 0x21, 0x11, 0xba, 0xb5, 0xb4, 0x79, 0xe9, 0x9a, 0xc6, 0x9d, 0xbe, 0xc6, 0x99, 0xfc, 0xe8, 0x68,
0x83, 0xa3, 0xa2, 0xeb, 0xd0, 0xca, 0x88, 0x3c, 0x72, 0x5c, 0xf3, 0x69, 0x99, 0x13, 0xfd, 0x6f, 0x48, 0x2c, 0x81, 0x8a, 0x5e, 0x87, 0x4e, 0x4e, 0xe4, 0xb1, 0xe1, 0x5a, 0xce, 0xca, 0x9c, 0x9a,
0x0b, 0x70, 0x69, 0x64, 0x8a, 0xd3, 0x08, 0x5b, 0x35, 0x76, 0x41, 0x39, 0x36, 0xb3, 0x9f, 0x04, 0x7f, 0x5b, 0x82, 0x0b, 0x13, 0x53, 0x9c, 0x47, 0xd8, 0xba, 0xb1, 0x4b, 0xda, 0xb1, 0xf9, 0xfe,
0xaa, 0xeb, 0xb0, 0x1d, 0x6f, 0x71, 0xad, 0x68, 0x34, 0x13, 0xfe, 0xdb, 0x21, 0xe8, 0x16, 0xa0, 0x49, 0xa1, 0x7a, 0x2e, 0xf7, 0x78, 0xcb, 0x1b, 0x65, 0xab, 0x9d, 0xb2, 0xdf, 0x2e, 0x45, 0x6f,
0x11, 0xb7, 0x2a, 0xbc, 0xf7, 0xac, 0xb1, 0x90, 0xf5, 0xab, 0xdc, 0x77, 0x2b, 0x1d, 0xab, 0x10, 0x00, 0x9a, 0x30, 0xab, 0xd2, 0x7a, 0x2f, 0x5a, 0xe7, 0xf2, 0x76, 0x55, 0xd8, 0x6e, 0xad, 0x61,
0xc1, 0xac, 0xb1, 0xa4, 0xf0, 0xac, 0x04, 0xdd, 0x85, 0x25, 0xd7, 0x7f, 0x82, 0x7b, 0x41, 0x78, 0x95, 0x22, 0x58, 0xb4, 0x56, 0x35, 0x96, 0x95, 0xa2, 0x37, 0x61, 0xd5, 0x0b, 0xee, 0x93, 0x41,
0x6c, 0xf6, 0x71, 0x68, 0x63, 0x9f, 0x5a, 0x5d, 0x4c, 0xda, 0x65, 0xce, 0xd1, 0x62, 0xd4, 0xb6, 0x18, 0x1d, 0xd9, 0x43, 0x12, 0x39, 0x24, 0x60, 0xb8, 0x4f, 0x68, 0xb7, 0x2a, 0x38, 0x5a, 0x89,
0x33, 0x6c, 0xd2, 0x7f, 0xac, 0xc1, 0x8a, 0xd8, 0xf1, 0xee, 0x58, 0x21, 0x75, 0xcf, 0x81, 0x37, 0xdb, 0x76, 0xc6, 0x4d, 0xe6, 0x8f, 0x0d, 0x58, 0x93, 0x1e, 0xef, 0x0e, 0x8e, 0x98, 0x77, 0x06,
0xea, 0x47, 0x7c, 0x08, 0x3c, 0xb1, 0x3f, 0x6f, 0xc6, 0x50, 0x6e, 0x65, 0x3f, 0xd4, 0x60, 0x89, 0xac, 0xd1, 0x30, 0xe6, 0x43, 0xe2, 0x49, 0xff, 0xbc, 0x9d, 0x40, 0xc5, 0x2e, 0xfb, 0xa1, 0x01,
0x6d, 0x46, 0x2f, 0x12, 0xcf, 0x7f, 0xa9, 0xc1, 0xe2, 0x23, 0x8b, 0x5c, 0x24, 0x96, 0xff, 0x4a, 0xab, 0xdc, 0x19, 0x7d, 0x96, 0x78, 0xfe, 0x4b, 0x03, 0x56, 0xee, 0x62, 0xfa, 0x2c, 0xb1, 0xfc,
0x46, 0xaa, 0x98, 0xe7, 0x33, 0x3d, 0xb2, 0xbd, 0x0d, 0xf3, 0x69, 0xa6, 0xa3, 0xdd, 0xcf, 0x5c, 0x57, 0xea, 0xa4, 0x4a, 0x78, 0x3e, 0xd5, 0x2b, 0xdb, 0x6b, 0xb0, 0x9c, 0x65, 0x3a, 0xf6, 0x7e,
0x8a, 0x6b, 0xa2, 0xff, 0xcd, 0x30, 0x56, 0x5d, 0x30, 0xce, 0xff, 0x4e, 0x83, 0x2b, 0x0f, 0x31, 0x96, 0x32, 0x5c, 0x53, 0xf3, 0x6f, 0xc6, 0x67, 0xd5, 0x33, 0xc6, 0xf9, 0xdf, 0x19, 0x70, 0xe9,
0x8d, 0xb9, 0x3e, 0x17, 0x31, 0x6d, 0x52, 0x6d, 0xf9, 0x5c, 0x44, 0x64, 0x25, 0xf3, 0x67, 0x12, 0x0e, 0x61, 0x09, 0xd7, 0x67, 0xe2, 0x4c, 0x9b, 0x55, 0x5b, 0x3e, 0x93, 0x27, 0xb2, 0x96, 0xf9,
0xf9, 0xbe, 0x5f, 0x80, 0x65, 0x16, 0x16, 0xce, 0x87, 0x12, 0x4c, 0x72, 0x78, 0x51, 0x28, 0x4a, 0x53, 0x39, 0xf9, 0xbe, 0x57, 0x82, 0xf3, 0xfc, 0x58, 0x38, 0x1b, 0x4a, 0x30, 0xcb, 0xe5, 0x45,
0x49, 0xa5, 0x28, 0x71, 0x3c, 0x2d, 0x4f, 0x1c, 0x4f, 0xf5, 0x1f, 0x15, 0xc4, 0x3e, 0x20, 0x29, 0xa3, 0x28, 0x15, 0x9d, 0xa2, 0x24, 0xe7, 0x69, 0x75, 0xe6, 0xf3, 0xd4, 0xfc, 0x51, 0x49, 0xfa,
0x8d, 0x69, 0x96, 0x45, 0xc1, 0x6b, 0x41, 0xc9, 0xab, 0x0e, 0x8d, 0x18, 0xb2, 0xbd, 0x15, 0xc5, 0x01, 0x69, 0x69, 0xcc, 0xb3, 0x2c, 0x1a, 0x5e, 0x4b, 0x5a, 0x5e, 0x4d, 0x68, 0x25, 0x90, 0xed,
0xc7, 0x14, 0xec, 0xdc, 0x86, 0xc7, 0xcf, 0x34, 0x58, 0x89, 0x8e, 0x8b, 0xbb, 0xb8, 0xdb, 0xc3, 0xad, 0xf8, 0x7c, 0xcc, 0xc0, 0xce, 0xec, 0xf1, 0xf8, 0xa9, 0x01, 0x6b, 0xf1, 0x75, 0x71, 0x97,
0x3e, 0x7d, 0x79, 0x1d, 0xca, 0x6a, 0x40, 0x41, 0xa1, 0x01, 0xaf, 0x43, 0x8d, 0x88, 0x71, 0xe2, 0xf4, 0x07, 0x24, 0x60, 0x9f, 0x5f, 0x87, 0xf2, 0x1a, 0x50, 0xd2, 0x68, 0xc0, 0xf3, 0xd0, 0xa0,
0x93, 0xe0, 0x10, 0xa0, 0xff, 0xbd, 0x06, 0x97, 0x46, 0xd8, 0x99, 0x66, 0x11, 0xdb, 0x50, 0x71, 0x72, 0x9c, 0xe4, 0x26, 0x38, 0x06, 0x98, 0x7f, 0x6f, 0xc0, 0x85, 0x09, 0x76, 0xe6, 0x59, 0xc4,
0x7d, 0x07, 0xbf, 0x88, 0xb9, 0x89, 0x7e, 0x59, 0xcb, 0xde, 0xc0, 0xf5, 0x9c, 0x98, 0x8d, 0xe8, 0x2e, 0xd4, 0xbc, 0xc0, 0x25, 0x4f, 0x12, 0x6e, 0xe2, 0x4f, 0xde, 0xb2, 0x37, 0xf2, 0x7c, 0x37,
0x17, 0x5d, 0x83, 0x06, 0xf6, 0xad, 0x3d, 0x0f, 0x9b, 0x1c, 0x97, 0x2b, 0x72, 0xd5, 0xa8, 0x0b, 0x61, 0x23, 0xfe, 0x44, 0x97, 0xa1, 0x45, 0x02, 0xbc, 0xe7, 0x13, 0x5b, 0xe0, 0x0a, 0x45, 0xae,
0xd8, 0x36, 0x03, 0x31, 0xe2, 0x7d, 0x17, 0x73, 0xe2, 0x92, 0x20, 0x96, 0xbf, 0xfa, 0xaf, 0x6b, 0x5b, 0x4d, 0x09, 0xdb, 0xe6, 0x20, 0x4e, 0xbc, 0xef, 0x11, 0x41, 0x5c, 0x91, 0xc4, 0xea, 0xd3,
0xb0, 0xc8, 0xb4, 0x50, 0x72, 0x4f, 0x5e, 0xad, 0x34, 0x57, 0xa1, 0x9e, 0x50, 0x33, 0x39, 0x91, 0xfc, 0x75, 0x03, 0x56, 0xb8, 0x16, 0x2a, 0xee, 0xe9, 0xd3, 0x95, 0xe6, 0x3a, 0x34, 0x53, 0x6a,
0x24, 0x48, 0x3f, 0x84, 0xa5, 0x34, 0x3b, 0xd3, 0x48, 0xf3, 0x0d, 0x80, 0x78, 0xad, 0x84, 0x35, 0xa6, 0x26, 0x92, 0x06, 0x99, 0x8f, 0x60, 0x35, 0xcb, 0xce, 0x3c, 0xd2, 0x7c, 0x01, 0x20, 0x59,
0x14, 0x8d, 0x04, 0x44, 0xff, 0xac, 0x10, 0x25, 0x85, 0xb9, 0x98, 0xce, 0x38, 0x67, 0xc5, 0x97, 0x2b, 0xb9, 0x1b, 0xca, 0x56, 0x0a, 0x62, 0x7e, 0x5a, 0x8a, 0x83, 0xc2, 0x42, 0x4c, 0xa7, 0x1c,
0x24, 0xe9, 0xcf, 0x6b, 0x1c, 0xc2, 0x9b, 0xb7, 0xa0, 0x81, 0x5f, 0xd0, 0xd0, 0x32, 0xfb, 0x56, 0xb3, 0x12, 0x4b, 0x92, 0xb6, 0xe7, 0x0d, 0x01, 0x11, 0xcd, 0x5b, 0xd0, 0x22, 0x4f, 0x58, 0x84,
0x68, 0xf5, 0x84, 0x59, 0x4d, 0xe4, 0x7a, 0xeb, 0x9c, 0x6c, 0x87, 0x53, 0xb1, 0x41, 0xb8, 0x8a, 0xed, 0x21, 0x8e, 0xf0, 0x40, 0x6e, 0xab, 0x99, 0x4c, 0x6f, 0x53, 0x90, 0xed, 0x08, 0x2a, 0x3e,
0x88, 0x41, 0xca, 0x62, 0x10, 0x0e, 0xe1, 0x01, 0xe3, 0x9f, 0xd9, 0x2e, 0x4e, 0x6a, 0xf3, 0x79, 0x88, 0x50, 0x11, 0x39, 0x48, 0x55, 0x0e, 0x22, 0x20, 0xe2, 0xc0, 0xf8, 0x27, 0xee, 0xc5, 0x29,
0x17, 0x48, 0x7a, 0x2a, 0xa5, 0xec, 0x54, 0xfe, 0x54, 0x83, 0x16, 0x9f, 0x82, 0x98, 0x4f, 0x9f, 0x6d, 0x3e, 0xeb, 0x02, 0xc9, 0x4e, 0xa5, 0x92, 0x9f, 0xca, 0x9f, 0x18, 0xd0, 0x11, 0x53, 0x90,
0x75, 0x9b, 0xa1, 0xd1, 0x32, 0x34, 0x63, 0x6c, 0xef, 0x67, 0xa0, 0x2c, 0xe5, 0x5e, 0x9c, 0x54, 0xf3, 0x19, 0xf2, 0x6e, 0x73, 0x34, 0x46, 0x8e, 0x66, 0xca, 0xde, 0xfb, 0x19, 0xa8, 0x2a, 0xb9,
0xee, 0x92, 0xe0, 0x84, 0x69, 0xe8, 0x7f, 0xa4, 0xc1, 0x72, 0x46, 0xe4, 0xd3, 0x28, 0xfc, 0xc7, 0x97, 0x67, 0x95, 0xbb, 0x22, 0x38, 0x66, 0x1a, 0xe6, 0x1f, 0x1a, 0x70, 0x3e, 0x27, 0xf2, 0x79,
0x80, 0xc4, 0x0c, 0x9d, 0xe1, 0xb4, 0xa3, 0x38, 0xfd, 0x96, 0x32, 0x28, 0x65, 0x85, 0x64, 0x2c, 0x14, 0xfe, 0x23, 0x40, 0x72, 0x86, 0xee, 0x78, 0xda, 0xf1, 0x39, 0xfd, 0x8a, 0xf6, 0x50, 0xca,
0xb8, 0x19, 0x08, 0xd1, 0xff, 0x4d, 0x83, 0xd7, 0x1f, 0x62, 0xca, 0x51, 0x37, 0x98, 0xd3, 0xd9, 0x0b, 0xc9, 0x3a, 0xe7, 0xe5, 0x20, 0xd4, 0xfc, 0x57, 0x03, 0x9e, 0xbf, 0x43, 0x98, 0x40, 0xbd,
0x09, 0x83, 0x6e, 0x88, 0x09, 0xb9, 0xb8, 0xfa, 0xf1, 0xdb, 0x62, 0x63, 0xa7, 0x9a, 0xd2, 0x34, 0xc5, 0x8d, 0xce, 0x4e, 0x14, 0xf6, 0x23, 0x42, 0xe9, 0xb3, 0xab, 0x1f, 0xbf, 0x25, 0x1d, 0x3b,
0xf2, 0xbf, 0x06, 0x0d, 0x3e, 0x06, 0x76, 0xcc, 0x30, 0x38, 0x22, 0x52, 0x8f, 0xea, 0x12, 0x66, 0xdd, 0x94, 0xe6, 0x91, 0xff, 0x65, 0x68, 0x89, 0x31, 0x88, 0x6b, 0x47, 0xe1, 0x21, 0x55, 0x7a,
0x04, 0x47, 0x5c, 0x21, 0x68, 0x40, 0x2d, 0x4f, 0x20, 0xc8, 0x88, 0xc2, 0x21, 0xac, 0x99, 0xdb, 0xd4, 0x54, 0x30, 0x2b, 0x3c, 0x14, 0x0a, 0xc1, 0x42, 0x86, 0x7d, 0x89, 0xa0, 0x4e, 0x14, 0x01,
0x60, 0xc4, 0x18, 0xeb, 0x1c, 0x5f, 0x5c, 0x19, 0xff, 0x89, 0x06, 0xcb, 0x99, 0xa9, 0x4c, 0x23, 0xe1, 0xcd, 0x62, 0x0f, 0xc6, 0x8c, 0xf1, 0xce, 0xc9, 0xb3, 0x2b, 0xe3, 0x3f, 0x36, 0xe0, 0x7c,
0xdb, 0xaf, 0x88, 0x6d, 0xa7, 0x98, 0xcc, 0xdc, 0xfa, 0x55, 0x25, 0x4d, 0x62, 0x30, 0x81, 0x8d, 0x6e, 0x2a, 0xf3, 0xc8, 0xf6, 0x4b, 0xd2, 0xed, 0x94, 0x93, 0x59, 0xda, 0x7c, 0x51, 0x4b, 0x93,
0xae, 0x42, 0x7d, 0xdf, 0x72, 0x3d, 0x33, 0xc4, 0x16, 0x09, 0x7c, 0x39, 0x51, 0x60, 0x20, 0x83, 0x1a, 0x4c, 0x62, 0xa3, 0x17, 0xa1, 0xb9, 0x8f, 0x3d, 0xdf, 0x8e, 0x08, 0xa6, 0x61, 0xa0, 0x26,
0x43, 0xf4, 0x7f, 0xd4, 0xc4, 0xcd, 0xdb, 0x05, 0xf7, 0x78, 0x7f, 0x5c, 0x80, 0xe6, 0xb6, 0x4f, 0x0a, 0x1c, 0x64, 0x09, 0x88, 0xf9, 0x8f, 0x86, 0xcc, 0xbc, 0x3d, 0xe3, 0x16, 0xef, 0x8f, 0x4a,
0x70, 0x48, 0xcf, 0xff, 0xd1, 0x04, 0x7d, 0x00, 0x75, 0x3e, 0x31, 0x62, 0x3a, 0x16, 0xb5, 0x64, 0xd0, 0xde, 0x0e, 0x28, 0x89, 0xd8, 0xd9, 0xbf, 0x9a, 0xa0, 0xf7, 0xa1, 0x29, 0x26, 0x46, 0x6d,
0x34, 0x7b, 0x43, 0x99, 0xa6, 0xff, 0x90, 0xe1, 0x6d, 0x59, 0xd4, 0x32, 0x84, 0x74, 0x08, 0xfb, 0x17, 0x33, 0xac, 0x4e, 0xb3, 0x17, 0xb4, 0x61, 0xfa, 0x0f, 0x38, 0xde, 0x16, 0x66, 0xd8, 0x92,
0x46, 0x97, 0xa1, 0x76, 0x60, 0x91, 0x03, 0xf3, 0x10, 0x1f, 0x8b, 0xfd, 0x62, 0xd3, 0xa8, 0x32, 0xd2, 0xa1, 0xfc, 0x37, 0xba, 0x08, 0x8d, 0x03, 0x4c, 0x0f, 0xec, 0x47, 0xe4, 0x48, 0xfa, 0x8b,
0xc0, 0x47, 0xf8, 0x98, 0xa0, 0xd7, 0xa0, 0xea, 0x0f, 0x7a, 0xc2, 0xc0, 0x2a, 0xab, 0xda, 0x5a, 0x6d, 0xab, 0xce, 0x01, 0x1f, 0x92, 0x23, 0x8a, 0x9e, 0x83, 0x7a, 0x30, 0x1a, 0xc8, 0x0d, 0x56,
0xd3, 0xa8, 0xf8, 0x83, 0x1e, 0x37, 0xaf, 0x7f, 0x29, 0xc0, 0xdc, 0x93, 0x01, 0x3b, 0x08, 0xf1, 0x5b, 0x37, 0x36, 0xda, 0x56, 0x2d, 0x18, 0x0d, 0xc4, 0xf6, 0xfa, 0xe7, 0x12, 0x2c, 0xdd, 0x1f,
0x4b, 0x86, 0x81, 0x47, 0x5f, 0x4e, 0x19, 0x6f, 0x40, 0x51, 0x6c, 0x29, 0x18, 0x45, 0x5b, 0xc9, 0xf1, 0x8b, 0x90, 0x48, 0x32, 0x8c, 0x7c, 0xf6, 0xf9, 0x94, 0xf1, 0x0a, 0x94, 0xa5, 0x4b, 0xc1,
0xf8, 0xf6, 0x16, 0x31, 0x18, 0x12, 0x4f, 0xb0, 0x0f, 0x6c, 0x5b, 0xee, 0xce, 0x8a, 0x9c, 0xd9, 0x29, 0xba, 0x5a, 0xc6, 0xb7, 0xb7, 0xa8, 0xc5, 0x91, 0x44, 0x80, 0x7d, 0xe4, 0x38, 0xca, 0x3b,
0x1a, 0x83, 0x88, 0xbd, 0xd9, 0x65, 0xa8, 0xe1, 0x30, 0x8c, 0xf7, 0x6e, 0x7c, 0x2a, 0x38, 0x0c, 0x2b, 0x0b, 0x66, 0x1b, 0x1c, 0x22, 0x7d, 0xb3, 0x8b, 0xd0, 0x20, 0x51, 0x94, 0xf8, 0x6e, 0x62,
0x45, 0xa3, 0x0e, 0x0d, 0xcb, 0x3e, 0xf4, 0x83, 0x23, 0x0f, 0x3b, 0x5d, 0xec, 0xf0, 0x65, 0xaf, 0x2a, 0x24, 0x8a, 0x64, 0xa3, 0x09, 0x2d, 0xec, 0x3c, 0x0a, 0xc2, 0x43, 0x9f, 0xb8, 0x7d, 0xe2,
0x1a, 0x29, 0x98, 0x50, 0x0c, 0xb6, 0xf0, 0xa6, 0xed, 0x53, 0x1e, 0xd5, 0x8b, 0x4c, 0x31, 0x18, 0x8a, 0x65, 0xaf, 0x5b, 0x19, 0x98, 0x54, 0x0c, 0xbe, 0xf0, 0xb6, 0x13, 0x30, 0x71, 0xaa, 0x97,
0x64, 0xd3, 0xa7, 0xac, 0xd9, 0xc1, 0x1e, 0xa6, 0x98, 0x37, 0x57, 0x44, 0xb3, 0x80, 0xc8, 0xe6, 0xb9, 0x62, 0x70, 0xc8, 0xed, 0x80, 0xf1, 0x66, 0x97, 0xf8, 0x84, 0x11, 0xd1, 0x5c, 0x93, 0xcd,
0x41, 0x3f, 0xa6, 0xae, 0x8a, 0x66, 0x01, 0x61, 0xcd, 0xaf, 0x43, 0x6d, 0x78, 0x8b, 0x50, 0x1b, 0x12, 0xa2, 0x9a, 0x47, 0xc3, 0x84, 0xba, 0x2e, 0x9b, 0x25, 0x84, 0x37, 0x3f, 0x0f, 0x8d, 0x71,
0xa6, 0x11, 0x39, 0x40, 0xff, 0x2f, 0x0d, 0x9a, 0x5b, 0xbc, 0xab, 0x0b, 0xa0, 0x74, 0x08, 0x66, 0x16, 0xa1, 0x31, 0x0e, 0x23, 0x0a, 0x80, 0xf9, 0x5f, 0x06, 0xb4, 0xb7, 0x44, 0x57, 0xcf, 0x80,
0xf1, 0x8b, 0x7e, 0x28, 0x4d, 0x87, 0x7f, 0x8f, 0xd5, 0x23, 0xfd, 0x39, 0xb4, 0x76, 0x3c, 0xcb, 0xd2, 0x21, 0x58, 0x24, 0x4f, 0x86, 0x91, 0xda, 0x3a, 0xe2, 0xf7, 0x54, 0x3d, 0x32, 0x1f, 0x43,
0xc6, 0x07, 0x81, 0xe7, 0xe0, 0x90, 0xc7, 0x76, 0xd4, 0x82, 0x22, 0xb5, 0xba, 0x72, 0xf3, 0xc0, 0x67, 0xc7, 0xc7, 0x0e, 0x39, 0x08, 0x7d, 0x97, 0x44, 0xe2, 0x6c, 0x47, 0x1d, 0x28, 0x33, 0xdc,
0x3e, 0xd1, 0x57, 0xe5, 0xd1, 0x4f, 0xb8, 0xa5, 0x37, 0x95, 0x51, 0x36, 0xd1, 0x4d, 0x22, 0xa3, 0x57, 0xce, 0x03, 0xff, 0x89, 0xbe, 0xac, 0xae, 0x7e, 0xd2, 0x2c, 0xbd, 0xac, 0x3d, 0x65, 0x53,
0xba, 0x02, 0x65, 0x7e, 0xb3, 0x27, 0xb6, 0x15, 0x0d, 0x43, 0xfe, 0xe9, 0xcf, 0x52, 0xe3, 0x3e, 0xdd, 0xa4, 0x22, 0xaa, 0x6b, 0x50, 0x15, 0x99, 0x3d, 0xe9, 0x56, 0xb4, 0x2c, 0xf5, 0x65, 0x3e,
0x0c, 0x83, 0x41, 0x1f, 0x6d, 0x43, 0xa3, 0x3f, 0x84, 0x31, 0x5d, 0xcd, 0x8f, 0xe9, 0x59, 0xa6, 0xcc, 0x8c, 0x7b, 0x27, 0x0a, 0x47, 0x43, 0xb4, 0x0d, 0xad, 0xe1, 0x18, 0xc6, 0x75, 0xb5, 0xf8,
0x8d, 0x14, 0xa9, 0xfe, 0x3f, 0x45, 0x68, 0xee, 0x62, 0x2b, 0xb4, 0x0f, 0x2e, 0x42, 0x0e, 0x86, 0x4c, 0xcf, 0x33, 0x6d, 0x65, 0x48, 0xcd, 0xff, 0x29, 0x43, 0x7b, 0x97, 0xe0, 0xc8, 0x39, 0x78,
0x49, 0xdc, 0x21, 0x9e, 0x5c, 0x35, 0xf6, 0x89, 0x6e, 0xc2, 0x42, 0x62, 0x42, 0x66, 0x97, 0x09, 0x16, 0x62, 0x30, 0x5c, 0xe2, 0x2e, 0xf5, 0xd5, 0xaa, 0xf1, 0x9f, 0xe8, 0x2a, 0x9c, 0x4b, 0x4d,
0x88, 0xeb, 0x7d, 0xc3, 0x68, 0xf5, 0xb3, 0x82, 0x7b, 0x0f, 0xaa, 0x0e, 0xf1, 0x4c, 0xbe, 0x44, 0xc8, 0xee, 0x73, 0x01, 0x09, 0xbd, 0x6f, 0x59, 0x9d, 0x61, 0x5e, 0x70, 0xef, 0x40, 0xdd, 0xa5,
0x15, 0xbe, 0x44, 0xea, 0xf9, 0x6d, 0x11, 0x8f, 0x2f, 0x4d, 0xc5, 0x11, 0x1f, 0xe8, 0x0b, 0xd0, 0xbe, 0x2d, 0x96, 0xa8, 0x26, 0x96, 0x48, 0x3f, 0xbf, 0x2d, 0xea, 0x8b, 0xa5, 0xa9, 0xb9, 0xf2,
0x0c, 0x06, 0xb4, 0x3f, 0xa0, 0xa6, 0xf0, 0x3b, 0xed, 0x2a, 0x67, 0xaf, 0x21, 0x80, 0xdc, 0x2d, 0x07, 0x7a, 0x09, 0xda, 0xe1, 0x88, 0x0d, 0x47, 0xcc, 0x96, 0x76, 0xa7, 0x5b, 0x17, 0xec, 0xb5,
0x11, 0xf4, 0x21, 0x34, 0x09, 0x17, 0x65, 0xb4, 0x31, 0xaf, 0x4d, 0xba, 0x41, 0x6c, 0x08, 0x3a, 0x24, 0x50, 0x98, 0x25, 0x8a, 0x3e, 0x80, 0x36, 0x15, 0xa2, 0x8c, 0x1d, 0xf3, 0xc6, 0xac, 0x0e,
0xb9, 0x33, 0xbf, 0x0e, 0x2d, 0x1a, 0x5a, 0xcf, 0xb1, 0x97, 0xb8, 0xb3, 0x03, 0x6e, 0x6d, 0xf3, 0x62, 0x4b, 0xd2, 0x29, 0xcf, 0xfc, 0x75, 0xe8, 0xb0, 0x08, 0x3f, 0x26, 0x7e, 0x2a, 0x67, 0x07,
0x02, 0x3e, 0xbc, 0xaf, 0xbb, 0x03, 0x8b, 0xdd, 0x81, 0x15, 0x5a, 0x3e, 0xc5, 0x38, 0x81, 0x5d, 0x62, 0xb7, 0x2d, 0x4b, 0xf8, 0x38, 0x5f, 0x77, 0x1d, 0x56, 0xfa, 0x23, 0x1c, 0xe1, 0x80, 0x11,
0xe7, 0xd8, 0x28, 0x6e, 0x8a, 0x09, 0xf4, 0x8f, 0x60, 0xf6, 0x91, 0x4b, 0xb9, 0x20, 0x99, 0xcf, 0x92, 0xc2, 0x6e, 0x0a, 0x6c, 0x94, 0x34, 0x25, 0x04, 0xe6, 0x87, 0xb0, 0x78, 0xd7, 0x63, 0x42,
0xd2, 0xf8, 0x31, 0x88, 0x7b, 0xa6, 0xd7, 0xa0, 0x1a, 0x06, 0x47, 0xc2, 0x07, 0x17, 0xb8, 0x0a, 0x90, 0xdc, 0x66, 0x19, 0xe2, 0x1a, 0x24, 0x2c, 0xd3, 0x73, 0x50, 0x8f, 0xc2, 0x43, 0x69, 0x83,
0x56, 0xc2, 0xe0, 0x88, 0x3b, 0x58, 0x5e, 0xe9, 0x10, 0x84, 0x52, 0x37, 0x0b, 0x86, 0xfc, 0xd3, 0x4b, 0x42, 0x05, 0x6b, 0x51, 0x78, 0x28, 0x0c, 0xac, 0xa8, 0x74, 0x08, 0x23, 0xa5, 0x9b, 0x25,
0xff, 0x42, 0x1b, 0x2a, 0x0f, 0x73, 0x9f, 0xe4, 0xe5, 0xfc, 0xe7, 0x07, 0x50, 0x09, 0x05, 0xfd, 0x4b, 0x7d, 0x99, 0x7f, 0x61, 0x8c, 0x95, 0x87, 0x9b, 0x4f, 0xfa, 0xf9, 0xec, 0xe7, 0xfb, 0x50,
0xd8, 0x3b, 0xda, 0xe4, 0x48, 0x3c, 0x06, 0x44, 0x54, 0x93, 0x5f, 0x00, 0xfd, 0xb2, 0x06, 0x8d, 0x8b, 0x24, 0xfd, 0xd4, 0x1c, 0x6d, 0x7a, 0x24, 0x71, 0x06, 0xc4, 0x54, 0xb3, 0x27, 0x80, 0x7e,
0x0f, 0xbd, 0x01, 0x79, 0x15, 0xca, 0xae, 0xba, 0x96, 0x28, 0xaa, 0xaf, 0x44, 0x7e, 0xa3, 0x00, 0xc9, 0x80, 0xd6, 0x07, 0xfe, 0x88, 0x3e, 0x0d, 0x65, 0xd7, 0xa5, 0x25, 0xca, 0xfa, 0x94, 0xc8,
0x4d, 0xc9, 0xc6, 0x34, 0x9b, 0xa0, 0x5c, 0x56, 0x76, 0xa1, 0xce, 0x86, 0x34, 0x09, 0xee, 0x46, 0x6f, 0x94, 0xa0, 0xad, 0xd8, 0x98, 0xc7, 0x09, 0x2a, 0x64, 0x65, 0x17, 0x9a, 0x7c, 0x48, 0x9b,
0x39, 0x9d, 0xfa, 0xfa, 0xba, 0xd2, 0x3d, 0xa4, 0xd8, 0xe0, 0xd7, 0xe0, 0xbb, 0x9c, 0xe8, 0x17, 0x92, 0x7e, 0x1c, 0xd3, 0x69, 0x6e, 0x6e, 0x6a, 0xcd, 0x43, 0x86, 0x0d, 0x91, 0x06, 0xdf, 0x15,
0x7c, 0x1a, 0x1e, 0x1b, 0x60, 0xc7, 0x80, 0xce, 0x33, 0x98, 0xcf, 0x34, 0x33, 0x25, 0x3a, 0xc4, 0x44, 0x3f, 0x1f, 0xb0, 0xe8, 0xc8, 0x02, 0x27, 0x01, 0xf4, 0x1e, 0xc2, 0x72, 0xae, 0x99, 0x2b,
0xc7, 0x91, 0xff, 0x3b, 0xc4, 0xc7, 0xe8, 0x9d, 0x64, 0xb1, 0x42, 0x5e, 0x14, 0x7f, 0x1c, 0xf8, 0xd1, 0x23, 0x72, 0x14, 0xdb, 0xbf, 0x47, 0xe4, 0x08, 0xbd, 0x95, 0x2e, 0x56, 0x28, 0x3a, 0xc5,
0xdd, 0x07, 0x61, 0x68, 0x1d, 0xcb, 0x62, 0x86, 0xfb, 0x85, 0xaf, 0x6a, 0xfa, 0x3f, 0x14, 0xa0, 0xef, 0x85, 0x41, 0xff, 0x66, 0x14, 0xe1, 0x23, 0x55, 0xcc, 0xf0, 0x6e, 0xe9, 0xcb, 0x86, 0xf9,
0xf1, 0xf5, 0x01, 0x0e, 0x8f, 0xcf, 0xd2, 0x0f, 0x45, 0x51, 0x61, 0x36, 0x11, 0x15, 0x46, 0x4c, 0x0f, 0x25, 0x68, 0x7d, 0x6d, 0x44, 0xa2, 0xa3, 0xd3, 0xb4, 0x43, 0xf1, 0xa9, 0xb0, 0x98, 0x3a,
0xbf, 0xa4, 0x30, 0x7d, 0x85, 0x03, 0x2b, 0x2b, 0x1d, 0x98, 0xca, 0xb6, 0x2b, 0xa7, 0xb2, 0xed, 0x15, 0x26, 0xb6, 0x7e, 0x45, 0xb3, 0xf5, 0x35, 0x06, 0xac, 0xaa, 0x35, 0x60, 0xba, 0xbd, 0x5d,
0x6a, 0xae, 0x6d, 0xff, 0xb9, 0x16, 0x8b, 0x70, 0x2a, 0x6b, 0x4c, 0x6d, 0xc7, 0x0a, 0xa7, 0xde, 0x3b, 0xd1, 0xde, 0xae, 0x17, 0xee, 0xed, 0x3f, 0x37, 0x12, 0x11, 0xce, 0xb5, 0x1b, 0x33, 0xee,
0x8e, 0x4d, 0x6c, 0x8d, 0x3f, 0xd4, 0xa0, 0xf6, 0x4d, 0x6c, 0xd3, 0x20, 0x64, 0xfe, 0x47, 0x41, 0x58, 0xe9, 0xc4, 0xee, 0xd8, 0xcc, 0xbb, 0xf1, 0x87, 0x06, 0x34, 0xbe, 0x41, 0x1c, 0x16, 0x46,
0xa6, 0x4d, 0xb0, 0x35, 0x2e, 0x64, 0xb7, 0xc6, 0xf7, 0xa0, 0xea, 0x3a, 0xa6, 0xc5, 0xf4, 0x8b, 0xdc, 0xfe, 0x68, 0xc8, 0x8c, 0x19, 0x5c, 0xe3, 0x52, 0xde, 0x35, 0xbe, 0x01, 0x75, 0xcf, 0xb5,
0x8f, 0x3b, 0x6e, 0x4b, 0x56, 0x71, 0x1d, 0xae, 0x88, 0x93, 0x5f, 0x02, 0xfc, 0x8e, 0x06, 0x0d, 0x31, 0xd7, 0x2f, 0x31, 0xee, 0x34, 0x97, 0xac, 0xe6, 0xb9, 0x42, 0x11, 0x67, 0x4f, 0x02, 0xfc,
0xc1, 0x33, 0x11, 0x94, 0xef, 0x27, 0x86, 0xd3, 0x54, 0x4a, 0x2f, 0x7f, 0xe2, 0x89, 0x3e, 0x9a, 0xb6, 0x01, 0x2d, 0xc9, 0x33, 0x95, 0x94, 0xef, 0xa5, 0x86, 0x33, 0x74, 0x4a, 0xaf, 0x3e, 0x92,
0x19, 0x0e, 0xfb, 0x00, 0x80, 0x09, 0x59, 0x92, 0x0b, 0x9b, 0x59, 0x55, 0x72, 0x2b, 0xc8, 0xb9, 0x89, 0xde, 0x5d, 0x18, 0x0f, 0x7b, 0x13, 0x80, 0x0b, 0x59, 0x91, 0xcb, 0x3d, 0xb3, 0xae, 0xe5,
0xc0, 0x1f, 0xcd, 0x18, 0x35, 0x46, 0xc5, 0xbb, 0xd8, 0xa8, 0x40, 0x89, 0x53, 0xeb, 0xff, 0xa7, 0x56, 0x92, 0x0b, 0x81, 0xdf, 0x5d, 0xb0, 0x1a, 0x9c, 0x4a, 0x74, 0x71, 0xab, 0x06, 0x15, 0x41,
0xc1, 0xe2, 0xa6, 0xe5, 0xd9, 0x5b, 0x2e, 0xa1, 0x96, 0x6f, 0x4f, 0xb1, 0x09, 0xbb, 0x0f, 0x95, 0x6d, 0xfe, 0x9f, 0x01, 0x2b, 0xb7, 0xb1, 0xef, 0x6c, 0x79, 0x94, 0xe1, 0xc0, 0x99, 0xc3, 0x09,
0xa0, 0x6f, 0x7a, 0x78, 0x9f, 0x4a, 0x96, 0xae, 0x8d, 0x99, 0x91, 0x10, 0x83, 0x51, 0x0e, 0xfa, 0x7b, 0x17, 0x6a, 0xe1, 0xd0, 0xf6, 0xc9, 0x3e, 0x53, 0x2c, 0x5d, 0x9e, 0x32, 0x23, 0x29, 0x06,
0x8f, 0xf1, 0x3e, 0x45, 0x3f, 0x0b, 0xd5, 0xa0, 0x6f, 0x86, 0x6e, 0xf7, 0x80, 0x4a, 0xe9, 0x4f, 0xab, 0x1a, 0x0e, 0xef, 0x91, 0x7d, 0x86, 0xbe, 0x02, 0xf5, 0x70, 0x68, 0x47, 0x5e, 0xff, 0x80,
0x40, 0x5c, 0x09, 0xfa, 0x06, 0xa3, 0x48, 0xe4, 0x56, 0x66, 0x4f, 0x99, 0x5b, 0xd1, 0xff, 0x7d, 0x29, 0xe9, 0xcf, 0x40, 0x5c, 0x0b, 0x87, 0x16, 0xa7, 0x48, 0xc5, 0x56, 0x16, 0x4f, 0x18, 0x5b,
0x64, 0xfa, 0x53, 0xd8, 0xc0, 0x7d, 0xa8, 0xba, 0x3e, 0x35, 0x1d, 0x97, 0x44, 0x22, 0xb8, 0xa2, 0x31, 0xff, 0x6d, 0x62, 0xfa, 0x73, 0xec, 0x81, 0x77, 0xa1, 0xee, 0x05, 0xcc, 0x76, 0x3d, 0x1a,
0xd6, 0x21, 0x9f, 0xf2, 0x19, 0xf0, 0x35, 0xf5, 0x29, 0x1b, 0x1b, 0x7d, 0x0d, 0x60, 0xdf, 0x0b, 0x8b, 0xe0, 0x92, 0x5e, 0x87, 0x02, 0x26, 0x66, 0x20, 0xd6, 0x34, 0x60, 0x7c, 0x6c, 0xf4, 0x55,
0x2c, 0x49, 0x2d, 0x64, 0x70, 0x55, 0x6d, 0x3e, 0x0c, 0x2d, 0xa2, 0xaf, 0x71, 0x22, 0xd6, 0xc3, 0x80, 0x7d, 0x3f, 0xc4, 0x8a, 0x5a, 0xca, 0xe0, 0x45, 0xfd, 0xf6, 0xe1, 0x68, 0x31, 0x7d, 0x43,
0x70, 0x49, 0xff, 0x55, 0x83, 0xe5, 0x1d, 0x1c, 0x8a, 0x52, 0x16, 0x2a, 0xd3, 0xa0, 0xdb, 0xfe, 0x10, 0xf1, 0x1e, 0xc6, 0x4b, 0xfa, 0x2f, 0x06, 0x9c, 0xdf, 0x21, 0x91, 0x2c, 0x65, 0x61, 0x2a,
0x7e, 0x90, 0xce, 0x44, 0x6b, 0x99, 0x4c, 0xf4, 0x4f, 0x26, 0xfb, 0x9a, 0x3a, 0x39, 0x89, 0xfb, 0x0c, 0xba, 0x1d, 0xec, 0x87, 0xd9, 0x48, 0xb4, 0x91, 0x8b, 0x44, 0xff, 0x64, 0xa2, 0xaf, 0x99,
0x90, 0xe8, 0xe4, 0x14, 0xdd, 0xfa, 0x88, 0x93, 0xe7, 0x5c, 0xce, 0x32, 0x49, 0x7e, 0x93, 0x07, 0x9b, 0x93, 0xcc, 0x87, 0xc4, 0x37, 0xa7, 0x38, 0xeb, 0x23, 0x6f, 0x9e, 0x4b, 0x05, 0xcb, 0xa4,
0x70, 0xfd, 0x37, 0x45, 0x05, 0x86, 0x72, 0x52, 0x2f, 0xaf, 0xb0, 0x2b, 0x20, 0x3d, 0x7d, 0xc6, 0xf8, 0x4d, 0x5f, 0xc0, 0xcd, 0xdf, 0x94, 0x15, 0x18, 0xda, 0x49, 0x7d, 0x7e, 0x85, 0x5d, 0x03,
0xef, 0x7f, 0x11, 0x32, 0xbe, 0x23, 0xc7, 0x11, 0xfd, 0x9e, 0x06, 0xab, 0xf9, 0x5c, 0x4d, 0x13, 0x65, 0xe9, 0x73, 0x76, 0xff, 0x55, 0xc8, 0xd9, 0x8e, 0x02, 0x43, 0xf4, 0xbb, 0x06, 0xac, 0x17,
0xa2, 0xbf, 0x06, 0x25, 0xd7, 0xdf, 0x0f, 0xa2, 0xb4, 0xdb, 0x0d, 0xf5, 0x16, 0x5d, 0x39, 0xae, 0x73, 0x35, 0xcf, 0x11, 0xfd, 0x55, 0xa8, 0x78, 0xc1, 0x7e, 0x18, 0x87, 0xdd, 0xae, 0xe8, 0x5d,
0x20, 0xd4, 0xff, 0xba, 0x00, 0x2d, 0xee, 0xd4, 0xcf, 0x60, 0xf9, 0x7b, 0xb8, 0x67, 0x12, 0xf7, 0x74, 0xed, 0xb8, 0x92, 0xd0, 0xfc, 0xeb, 0x12, 0x74, 0x84, 0x51, 0x3f, 0x85, 0xe5, 0x1f, 0x90,
0x53, 0x1c, 0x2d, 0x7f, 0x0f, 0xf7, 0x76, 0xdd, 0x4f, 0x71, 0x4a, 0x33, 0x4a, 0x69, 0xcd, 0x18, 0x81, 0x4d, 0xbd, 0x4f, 0x48, 0xbc, 0xfc, 0x03, 0x32, 0xd8, 0xf5, 0x3e, 0x21, 0x19, 0xcd, 0xa8,
0x9f, 0x55, 0x4e, 0xa6, 0x55, 0x2b, 0xe9, 0xb4, 0xea, 0x0a, 0x94, 0xfd, 0xc0, 0xc1, 0xdb, 0x5b, 0x64, 0x35, 0x63, 0x7a, 0x54, 0x39, 0x1d, 0x56, 0xad, 0x65, 0xc3, 0xaa, 0x6b, 0x50, 0x0d, 0x42,
0xf2, 0xd8, 0x29, 0xff, 0x86, 0xaa, 0x56, 0x3b, 0xa5, 0xaa, 0x7d, 0xae, 0x41, 0xe7, 0x21, 0xa6, 0x97, 0x6c, 0x6f, 0xa9, 0x6b, 0xa7, 0xfa, 0x1a, 0xab, 0x5a, 0xe3, 0x84, 0xaa, 0xf6, 0x99, 0x01,
0x59, 0xd9, 0x9d, 0x9d, 0x96, 0xfd, 0x40, 0x83, 0xcb, 0x4a, 0x86, 0xa6, 0x51, 0xb0, 0xf7, 0xd3, 0xbd, 0x3b, 0x84, 0xe5, 0x65, 0x77, 0x7a, 0x5a, 0xf6, 0x7d, 0x03, 0x2e, 0x6a, 0x19, 0x9a, 0x47,
0x0a, 0xa6, 0x3e, 0x03, 0x8e, 0x0c, 0x29, 0x75, 0xeb, 0x2e, 0x34, 0xb6, 0x06, 0xbd, 0x5e, 0xbc, 0xc1, 0xde, 0xcb, 0x2a, 0x98, 0xfe, 0x0e, 0x38, 0x31, 0xa4, 0xd2, 0xad, 0x37, 0xa1, 0xb5, 0x35,
0xe5, 0xba, 0x06, 0x8d, 0x50, 0x7c, 0x8a, 0x23, 0x92, 0x88, 0xbf, 0x75, 0x09, 0x63, 0x07, 0x21, 0x1a, 0x0c, 0x12, 0x97, 0xeb, 0x32, 0xb4, 0x22, 0xf9, 0x53, 0x5e, 0x91, 0xe4, 0xf9, 0xdb, 0x54,
0xfd, 0x26, 0x34, 0x25, 0x89, 0xe4, 0xba, 0x03, 0xd5, 0x50, 0x7e, 0x4b, 0xfc, 0xf8, 0x5f, 0x5f, 0x30, 0x7e, 0x11, 0x32, 0xaf, 0x42, 0x5b, 0x91, 0x28, 0xae, 0x7b, 0x50, 0x8f, 0xd4, 0x6f, 0x85,
0x86, 0x45, 0x03, 0x77, 0x99, 0x6a, 0x87, 0x8f, 0x5d, 0xff, 0x50, 0x0e, 0xa3, 0x7f, 0x4f, 0x83, 0x9f, 0x7c, 0x9b, 0xe7, 0x61, 0xc5, 0x22, 0x7d, 0xae, 0xda, 0xd1, 0x3d, 0x2f, 0x78, 0xa4, 0x86,
0xa5, 0x34, 0x5c, 0xf6, 0xf5, 0x2e, 0x54, 0x2c, 0xc7, 0x09, 0x31, 0x21, 0x63, 0x97, 0xe5, 0x81, 0x31, 0xbf, 0x6b, 0xc0, 0x6a, 0x16, 0xae, 0xfa, 0x7a, 0x1b, 0x6a, 0xd8, 0x75, 0x23, 0x42, 0xe9,
0xc0, 0x31, 0x22, 0xe4, 0x84, 0xe4, 0x0a, 0x13, 0x4b, 0x4e, 0x37, 0x61, 0xe1, 0x21, 0xa6, 0x4f, 0xd4, 0x65, 0xb9, 0x29, 0x71, 0xac, 0x18, 0x39, 0x25, 0xb9, 0xd2, 0xcc, 0x92, 0x33, 0x6d, 0x38,
0x30, 0x0d, 0xa7, 0xba, 0xc1, 0x6f, 0xb3, 0xc3, 0x0b, 0x27, 0x96, 0x6a, 0x11, 0xfd, 0xea, 0x9f, 0x77, 0x87, 0xb0, 0xfb, 0x84, 0x45, 0x73, 0x65, 0xf0, 0xbb, 0xfc, 0xf2, 0x22, 0x88, 0x95, 0x5a,
0x69, 0x80, 0x92, 0x23, 0x4c, 0xb3, 0xcc, 0x49, 0x29, 0x17, 0xd2, 0x52, 0x16, 0x45, 0x4e, 0xbd, 0xc4, 0x9f, 0xe6, 0xa7, 0x06, 0xa0, 0xf4, 0x08, 0xf3, 0x2c, 0x73, 0x5a, 0xca, 0xa5, 0xac, 0x94,
0x7e, 0xe0, 0x63, 0x9f, 0x26, 0xb7, 0x5b, 0xcd, 0x18, 0xca, 0xd5, 0xef, 0xc7, 0x1a, 0xa0, 0xc7, 0x65, 0x91, 0xd3, 0x60, 0x18, 0x06, 0x24, 0x60, 0x69, 0x77, 0xab, 0x9d, 0x40, 0x85, 0xfa, 0xfd,
0x81, 0xe5, 0x6c, 0x58, 0xde, 0x74, 0xdb, 0x83, 0x2b, 0x00, 0x24, 0xb4, 0x4d, 0x69, 0xad, 0x05, 0xd8, 0x00, 0x74, 0x2f, 0xc4, 0xee, 0x2d, 0xec, 0xcf, 0xe7, 0x1e, 0x5c, 0x02, 0xa0, 0x91, 0x63,
0xe9, 0x7d, 0x42, 0xfb, 0xa9, 0x30, 0xd8, 0xab, 0x50, 0x77, 0x08, 0x95, 0xcd, 0xd1, 0x85, 0x32, 0xab, 0xdd, 0x5a, 0x52, 0xd6, 0x27, 0x72, 0x1e, 0xc8, 0x0d, 0xfb, 0x22, 0x34, 0x5d, 0xca, 0x54,
0x38, 0x84, 0x8a, 0x76, 0x5e, 0xc4, 0x4a, 0xb0, 0xe5, 0x61, 0xc7, 0x4c, 0xdc, 0xc7, 0xcd, 0x72, 0x73, 0x9c, 0x50, 0x06, 0x97, 0x32, 0xd9, 0x2e, 0x8a, 0x58, 0x29, 0xc1, 0x3e, 0x71, 0xed, 0x54,
0xb4, 0x96, 0x68, 0xd8, 0x1d, 0xde, 0xca, 0x3d, 0x83, 0x4b, 0x4f, 0x2c, 0x7f, 0x60, 0x79, 0x9b, 0x3e, 0x6e, 0x51, 0xa0, 0x75, 0x64, 0xc3, 0xee, 0x38, 0x2b, 0xf7, 0x10, 0x2e, 0xdc, 0xc7, 0xc1,
0x41, 0xaf, 0x6f, 0xa5, 0x0a, 0x1b, 0xb3, 0x6e, 0x4e, 0x53, 0xb8, 0xb9, 0x37, 0x44, 0xe5, 0x9b, 0x08, 0xfb, 0xb7, 0xc3, 0xc1, 0x10, 0x67, 0x0a, 0x1b, 0xf3, 0x66, 0xce, 0xd0, 0x98, 0xb9, 0x17,
0xd8, 0x5a, 0x73, 0x5e, 0x67, 0x8d, 0x04, 0x44, 0x27, 0xd0, 0x1e, 0xed, 0x7e, 0x9a, 0x85, 0xe2, 0x64, 0xe5, 0x9b, 0x74, 0xad, 0x05, 0xaf, 0x8b, 0x56, 0x0a, 0x62, 0x52, 0xe8, 0x4e, 0x76, 0x3f,
0x4c, 0x45, 0x5d, 0x25, 0x7d, 0xef, 0x10, 0xa6, 0x7f, 0x00, 0xaf, 0xf1, 0x2a, 0xc4, 0x08, 0x94, 0xcf, 0x42, 0x09, 0xa6, 0xe2, 0xae, 0xd2, 0xb6, 0x77, 0x0c, 0x33, 0xdf, 0x87, 0xe7, 0x44, 0x15,
0x4a, 0xed, 0x67, 0x3b, 0xd0, 0x14, 0x1d, 0xfc, 0x6a, 0x81, 0xbb, 0xb6, 0x91, 0x1e, 0xa6, 0x61, 0x62, 0x0c, 0xca, 0x84, 0xf6, 0xf3, 0x1d, 0x18, 0x9a, 0x0e, 0x7e, 0xa5, 0x24, 0x4c, 0xdb, 0x44,
0xfc, 0x7e, 0x3a, 0xa3, 0xfe, 0x66, 0x4e, 0xa5, 0x6d, 0x7a, 0x44, 0x99, 0x56, 0x5f, 0x83, 0x79, 0x0f, 0xf3, 0x30, 0xfe, 0x6e, 0x36, 0xa2, 0xfe, 0x72, 0x41, 0xa5, 0x6d, 0x76, 0x44, 0x15, 0x56,
0xfc, 0x02, 0xdb, 0x03, 0xea, 0xfa, 0xdd, 0x1d, 0xcf, 0xf2, 0x9f, 0x06, 0x32, 0xa0, 0x64, 0xc1, 0xdf, 0x80, 0x65, 0xf2, 0x84, 0x38, 0x23, 0xe6, 0x05, 0xfd, 0x1d, 0x1f, 0x07, 0x0f, 0x42, 0x75,
0xe8, 0x4d, 0x68, 0x32, 0xe9, 0x07, 0x03, 0x2a, 0xf1, 0x44, 0x64, 0x49, 0x03, 0x59, 0x7f, 0x6c, 0xa0, 0xe4, 0xc1, 0xe8, 0x65, 0x68, 0x73, 0xe9, 0x87, 0x23, 0xa6, 0xf0, 0xe4, 0xc9, 0x92, 0x05,
0xbe, 0x1e, 0xa6, 0xd8, 0x91, 0x78, 0x22, 0xcc, 0x64, 0xc1, 0x23, 0xa2, 0x64, 0x60, 0x72, 0x1a, 0xf2, 0xfe, 0xf8, 0x7c, 0x7d, 0xc2, 0x88, 0xab, 0xf0, 0xe4, 0x31, 0x93, 0x07, 0x4f, 0x88, 0x92,
0x51, 0xfe, 0xa7, 0x96, 0x11, 0xa5, 0xec, 0xe1, 0xac, 0x44, 0xf9, 0x08, 0xa0, 0x87, 0xc3, 0x2e, 0x83, 0xe9, 0x49, 0x44, 0xf9, 0x1f, 0x46, 0x4e, 0x94, 0xaa, 0x87, 0xd3, 0x12, 0xe5, 0x5d, 0x80,
0xde, 0xe6, 0x4e, 0x5d, 0x9c, 0xdc, 0xd7, 0x94, 0x4e, 0x7d, 0xd8, 0xc1, 0x93, 0x88, 0xc0, 0x48, 0x01, 0x89, 0xfa, 0x64, 0x5b, 0x18, 0x75, 0x79, 0x73, 0xdf, 0xd0, 0x1a, 0xf5, 0x71, 0x07, 0xf7,
0xd0, 0xea, 0x0f, 0x61, 0x51, 0x81, 0xc2, 0xfc, 0x15, 0x09, 0x06, 0xa1, 0x8d, 0xa3, 0xe4, 0x4f, 0x63, 0x02, 0x2b, 0x45, 0x6b, 0xde, 0x81, 0x15, 0x0d, 0x0a, 0xb7, 0x57, 0x34, 0x1c, 0x45, 0x0e,
0xf4, 0xcb, 0xe2, 0x1b, 0xb5, 0xc2, 0x2e, 0xa6, 0x52, 0x69, 0xe5, 0x9f, 0xfe, 0x2e, 0xbf, 0x84, 0x89, 0x83, 0x3f, 0xf1, 0x27, 0x3f, 0xdf, 0x18, 0x8e, 0xfa, 0x84, 0x29, 0xa5, 0x55, 0x5f, 0xe6,
0xe2, 0x89, 0x82, 0x94, 0xa6, 0xa6, 0x2f, 0xd4, 0xb5, 0x91, 0x0b, 0xf5, 0x7d, 0x7e, 0xe3, 0x93, 0xdb, 0x22, 0x09, 0x25, 0x02, 0x05, 0x19, 0x4d, 0xcd, 0x26, 0xd4, 0x8d, 0x89, 0x84, 0xfa, 0xbe,
0xa4, 0x9b, 0xb2, 0x18, 0x62, 0x9f, 0x75, 0x85, 0x1d, 0xf9, 0xca, 0x22, 0xfa, 0x65, 0xbb, 0xe4, 0xc8, 0xf8, 0xa4, 0xe9, 0xe6, 0x2c, 0x86, 0xd8, 0xe7, 0x5d, 0x11, 0x57, 0xbd, 0xb2, 0x88, 0x3f,
0xe6, 0x76, 0xaf, 0x1f, 0x0c, 0x2f, 0x3b, 0x26, 0x3e, 0x4a, 0x8e, 0x26, 0x8b, 0x0b, 0xaa, 0x64, 0xb9, 0x97, 0xdc, 0xde, 0x1e, 0x0c, 0xc3, 0x71, 0xb2, 0x63, 0xe6, 0xab, 0xe4, 0x64, 0xb0, 0xb8,
0xf1, 0x65, 0xa8, 0x85, 0xc1, 0x91, 0xc9, 0xbc, 0x9f, 0xc3, 0x35, 0xbb, 0x6a, 0x54, 0xc3, 0xe0, 0xa4, 0x0b, 0x16, 0x5f, 0x84, 0x46, 0x14, 0x1e, 0xda, 0xdc, 0xfa, 0xb9, 0x42, 0xb3, 0xeb, 0x56,
0x88, 0xf9, 0x44, 0x07, 0x2d, 0x41, 0x69, 0xdf, 0xf5, 0xe2, 0x03, 0xa3, 0xf8, 0x41, 0xef, 0xb3, 0x3d, 0x0a, 0x0f, 0xb9, 0x4d, 0x74, 0xd1, 0x2a, 0x54, 0xf6, 0x3d, 0x3f, 0xb9, 0x30, 0xca, 0x0f,
0x33, 0x94, 0xb8, 0x71, 0x9d, 0xf8, 0x7a, 0x3e, 0xa2, 0xd0, 0x3f, 0x81, 0xb9, 0x68, 0x42, 0x53, 0xf4, 0x1e, 0xbf, 0x43, 0xc9, 0x8c, 0xeb, 0xcc, 0xe9, 0xf9, 0x98, 0xc2, 0xfc, 0x18, 0x96, 0xe2,
0xbe, 0x1c, 0xa1, 0x16, 0x39, 0x8c, 0x8a, 0x1d, 0xc4, 0x8f, 0x7e, 0x53, 0x5c, 0xc4, 0xf1, 0xfe, 0x09, 0xcd, 0xf9, 0x72, 0x84, 0x61, 0xfa, 0x28, 0x2e, 0x76, 0x90, 0x1f, 0xe6, 0x55, 0x99, 0x88,
0x53, 0xeb, 0x89, 0x60, 0x96, 0x61, 0x48, 0x33, 0xe1, 0xdf, 0xfa, 0xff, 0x6a, 0xb0, 0x92, 0xc5, 0x13, 0xfd, 0x67, 0xd6, 0x13, 0xc1, 0x22, 0xc7, 0x50, 0xdb, 0x44, 0xfc, 0x36, 0xff, 0xd7, 0x80,
0x9e, 0x86, 0xa5, 0x77, 0xd3, 0xa6, 0xa1, 0x7e, 0x1c, 0x90, 0x1c, 0x4d, 0x9a, 0x85, 0x5c, 0x01, 0xb5, 0x3c, 0xf6, 0x3c, 0x2c, 0xbd, 0x9d, 0xdd, 0x1a, 0xfa, 0xc7, 0x01, 0xe9, 0xd1, 0xd4, 0xb6,
0x3b, 0x18, 0xf8, 0x54, 0xfa, 0x16, 0xb6, 0x02, 0x9b, 0xec, 0x1f, 0x5d, 0x82, 0x8a, 0xeb, 0x98, 0x50, 0x2b, 0xe0, 0x84, 0xa3, 0x80, 0x29, 0xdb, 0xc2, 0x57, 0xe0, 0x36, 0xff, 0x46, 0x17, 0xa0,
0x1e, 0x3b, 0x6e, 0x89, 0x30, 0x52, 0x76, 0x9d, 0xc7, 0xec, 0x28, 0xf6, 0x5e, 0xb4, 0x39, 0x9a, 0xe6, 0xb9, 0xb6, 0xcf, 0xaf, 0x5b, 0xf2, 0x18, 0xa9, 0x7a, 0xee, 0x3d, 0x7e, 0x15, 0x7b, 0x27,
0x78, 0x09, 0x04, 0xfe, 0x8d, 0x6b, 0x50, 0x8d, 0x0a, 0xb4, 0x50, 0x05, 0x8a, 0x0f, 0x3c, 0xaf, 0x76, 0x8e, 0x66, 0x5e, 0x02, 0xe5, 0x18, 0xfd, 0x40, 0x1e, 0xdd, 0x96, 0xac, 0xb2, 0x7f, 0xca,
0x35, 0x83, 0x1a, 0x50, 0xdd, 0x96, 0x55, 0x48, 0x2d, 0xed, 0xc6, 0xcf, 0xc3, 0x7c, 0x26, 0x91, 0x75, 0x30, 0x1b, 0xd0, 0x39, 0xf4, 0xd8, 0x81, 0x2d, 0x9e, 0x59, 0x88, 0x73, 0x93, 0x2a, 0x25,
0x8f, 0xaa, 0x30, 0xfb, 0x34, 0xf0, 0x71, 0x6b, 0x06, 0xb5, 0xa0, 0xb1, 0xe1, 0xfa, 0x56, 0x78, 0x5b, 0xe2, 0xf0, 0x5d, 0x0e, 0xe6, 0x67, 0x27, 0x35, 0x7f, 0xd5, 0x80, 0x95, 0x0c, 0x5b, 0xf3,
0x2c, 0x8e, 0xb9, 0x2d, 0x07, 0xcd, 0x43, 0x9d, 0x1f, 0xf7, 0x24, 0x00, 0xaf, 0xff, 0xd3, 0x2a, 0x2c, 0xc5, 0x57, 0xb8, 0x4b, 0x21, 0x3b, 0x52, 0xce, 0xe3, 0xba, 0xd6, 0xce, 0xa8, 0xd1, 0x84,
0x34, 0x9f, 0x70, 0x76, 0x76, 0x71, 0xf8, 0xdc, 0xb5, 0x31, 0x32, 0xa1, 0x95, 0x7d, 0xde, 0x86, 0x7d, 0x49, 0x28, 0xcc, 0xff, 0x34, 0xa0, 0x99, 0x6a, 0xe1, 0x37, 0x12, 0xd5, 0x36, 0xbe, 0x91,
0xbe, 0xa4, 0x36, 0x7d, 0xf5, 0x2b, 0xb8, 0xce, 0xb8, 0x25, 0xd0, 0x67, 0xd0, 0x27, 0x30, 0x97, 0x24, 0x80, 0x99, 0xc4, 0xf0, 0x12, 0x8c, 0x77, 0x5d, 0xaa, 0x54, 0x3b, 0x55, 0x8a, 0xe6, 0x52,
0x7e, 0x24, 0x86, 0xd4, 0xe7, 0x11, 0xe5, 0x4b, 0xb2, 0x93, 0x3a, 0x37, 0xa1, 0x99, 0x7a, 0xf3, 0x74, 0x17, 0x96, 0xa4, 0x98, 0x12, 0xd6, 0xb5, 0x81, 0x82, 0xa4, 0xc8, 0x0e, 0x47, 0xae, 0xe2,
0x85, 0xae, 0x2b, 0xfb, 0x56, 0xbd, 0x0b, 0xeb, 0xa8, 0x53, 0x04, 0xc9, 0x77, 0x59, 0x82, 0xfb, 0xd2, 0x6a, 0xd3, 0xd4, 0x97, 0xcc, 0x0b, 0x86, 0x2e, 0x11, 0x23, 0x55, 0xa4, 0x21, 0x14, 0x2e,
0xf4, 0xc3, 0x8c, 0x1c, 0xee, 0x95, 0xaf, 0x37, 0x4e, 0xe2, 0xde, 0x82, 0x85, 0x91, 0x07, 0x14, 0x8b, 0x4b, 0xf9, 0xcd, 0xa1, 0x95, 0x26, 0xe5, 0xde, 0x97, 0x4f, 0xb0, 0x4b, 0xa2, 0x64, 0x6e,
0xe8, 0x96, 0xb2, 0xff, 0xbc, 0x87, 0x16, 0x27, 0x0d, 0x71, 0x04, 0x68, 0xf4, 0x6d, 0x13, 0xba, 0xc9, 0x37, 0x77, 0x77, 0xe4, 0x6f, 0x9b, 0x7b, 0xa3, 0xca, 0x7e, 0x80, 0x04, 0x71, 0x47, 0x15,
0xad, 0x5e, 0x81, 0xbc, 0x97, 0x5d, 0x9d, 0x3b, 0x13, 0xe3, 0xc7, 0x82, 0xfb, 0x15, 0x0d, 0x2e, 0xbd, 0x0a, 0xcb, 0xee, 0x20, 0xf3, 0xc6, 0x27, 0xf6, 0xcf, 0xdc, 0x41, 0xea, 0x71, 0x4f, 0x86,
0xe5, 0xbc, 0x7a, 0x40, 0xf7, 0x94, 0xdd, 0x8d, 0x7f, 0xba, 0xd1, 0x79, 0xe7, 0x74, 0x44, 0x31, 0xa1, 0xc5, 0x0c, 0x43, 0x57, 0x2e, 0x43, 0x3d, 0xae, 0x17, 0x44, 0x35, 0x28, 0xdf, 0xf4, 0xfd,
0x23, 0x3e, 0xcc, 0x67, 0x1e, 0x02, 0xa0, 0x9b, 0xb9, 0xc5, 0x91, 0xa3, 0x2f, 0x22, 0x3a, 0x5f, 0xce, 0x02, 0x6a, 0x41, 0x7d, 0x5b, 0x15, 0xc5, 0x75, 0x8c, 0x2b, 0x3f, 0x07, 0xcb, 0xb9, 0xbc,
0x9a, 0x0c, 0x39, 0x1e, 0xef, 0x19, 0xcc, 0x67, 0xaa, 0xe7, 0x73, 0xc6, 0x53, 0xd7, 0xd8, 0x9f, 0x12, 0xaa, 0xc3, 0xe2, 0x83, 0x30, 0x20, 0x9d, 0x05, 0xd4, 0x81, 0xd6, 0x2d, 0x2f, 0xc0, 0xd1,
0xb4, 0xa0, 0xdf, 0x86, 0x66, 0xaa, 0xcc, 0x3d, 0x47, 0xe3, 0x55, 0xa5, 0xf0, 0x27, 0x75, 0xfd, 0x91, 0x8c, 0xba, 0x74, 0x5c, 0xb4, 0x0c, 0x4d, 0x11, 0x7d, 0x50, 0x00, 0xb2, 0xf9, 0x67, 0x97,
0x0c, 0x1a, 0xc9, 0x6a, 0x74, 0xb4, 0x96, 0x67, 0x4b, 0x23, 0x1d, 0x9f, 0xc6, 0x94, 0x86, 0xc5, 0xa1, 0x7d, 0x5f, 0x48, 0x6d, 0x97, 0x44, 0x8f, 0x3d, 0x87, 0x20, 0x1b, 0x3a, 0xf9, 0xd7, 0x96,
0xa6, 0x63, 0x4c, 0x69, 0xa4, 0x3e, 0x77, 0x72, 0x53, 0x4a, 0xf4, 0x3f, 0xd6, 0x94, 0x4e, 0x3d, 0xe8, 0x0b, 0xfa, 0x93, 0x48, 0xff, 0x28, 0xb3, 0x37, 0x4d, 0x0d, 0xcd, 0x05, 0xf4, 0x31, 0x2c,
0xc4, 0xf7, 0x44, 0x54, 0x52, 0x14, 0x33, 0xa3, 0xf5, 0x3c, 0xdd, 0xcc, 0x2f, 0xdb, 0xee, 0xdc, 0x65, 0xdf, 0x2c, 0x22, 0xfd, 0xf5, 0x58, 0xfb, 0xb0, 0xf1, 0xb8, 0xce, 0x6d, 0x68, 0x67, 0x9e,
0x3b, 0x15, 0x4d, 0x2c, 0xc5, 0x43, 0x98, 0x4b, 0x97, 0xec, 0xe6, 0x48, 0x51, 0x59, 0xe5, 0xdc, 0x20, 0xa2, 0xd7, 0xb5, 0x7d, 0xeb, 0x9e, 0x29, 0xf6, 0xf4, 0xca, 0x94, 0x7e, 0x26, 0x28, 0xb9,
0xb9, 0x39, 0x11, 0x6e, 0x3c, 0xd8, 0x37, 0xa0, 0x9e, 0x78, 0xb1, 0x8e, 0xde, 0x1e, 0xa3, 0xc7, 0xcf, 0xbe, 0x13, 0x2a, 0xe0, 0x5e, 0xfb, 0x98, 0xe8, 0x38, 0xee, 0x31, 0x9c, 0x9b, 0x78, 0xcf,
0xc9, 0xe7, 0xdb, 0x27, 0x49, 0xf2, 0xeb, 0x50, 0x8b, 0x1f, 0x9a, 0xa3, 0xb7, 0x72, 0xf5, 0xf7, 0x83, 0xde, 0x28, 0xd8, 0x9e, 0xfa, 0x77, 0x3f, 0xc7, 0x0d, 0x71, 0x08, 0x68, 0xf2, 0xa9, 0x1d,
0x34, 0x5d, 0xee, 0x02, 0x0c, 0x5f, 0x91, 0xa3, 0x2f, 0x2a, 0xfb, 0x1c, 0x79, 0x66, 0x7e, 0x52, 0xba, 0xa6, 0x5f, 0x81, 0xa2, 0x87, 0x86, 0xbd, 0xeb, 0x33, 0xe3, 0x27, 0x82, 0xfb, 0x65, 0x03,
0xa7, 0xf1, 0xf4, 0x45, 0x25, 0xc4, 0xb8, 0xe9, 0x27, 0x4b, 0x77, 0x4e, 0xea, 0xf6, 0x00, 0x9a, 0x2e, 0x14, 0x3c, 0xc2, 0x41, 0x37, 0xb4, 0xdd, 0x4d, 0x7f, 0x49, 0xd4, 0x7b, 0xeb, 0x64, 0x44,
0xa9, 0x82, 0xbb, 0x3c, 0x13, 0x56, 0xd4, 0x41, 0x76, 0x6e, 0x4c, 0x82, 0x1a, 0xaf, 0xdf, 0x01, 0x09, 0x23, 0x01, 0x2c, 0xe7, 0xde, 0xa5, 0xa0, 0xab, 0x85, 0xb5, 0xba, 0x93, 0x0f, 0x74, 0x7a,
0x34, 0x53, 0xe5, 0x4f, 0x39, 0x23, 0xa9, 0xaa, 0xbd, 0x72, 0x46, 0x52, 0x56, 0x53, 0xe9, 0x33, 0x5f, 0x98, 0x0d, 0x39, 0x19, 0xef, 0x21, 0x2c, 0xe7, 0x1e, 0x73, 0x14, 0x8c, 0xa7, 0x7f, 0xf2,
0xe8, 0xbb, 0x89, 0x4a, 0xab, 0x54, 0x35, 0x1b, 0xba, 0x3b, 0xb6, 0x1f, 0x55, 0x31, 0x5f, 0x67, 0x71, 0xdc, 0x82, 0x7e, 0x0b, 0xda, 0x99, 0x57, 0x17, 0x05, 0x1a, 0xaf, 0x7b, 0x99, 0x71, 0x5c,
0xfd, 0x34, 0x24, 0x31, 0x0b, 0x52, 0xab, 0x84, 0x48, 0xf3, 0xb5, 0xea, 0x34, 0x2b, 0xb5, 0x0b, 0xd7, 0x0f, 0xa1, 0x95, 0x7e, 0x1c, 0x81, 0x36, 0x8a, 0xf6, 0xd2, 0x44, 0xc7, 0x27, 0xd9, 0x4a,
0x65, 0x51, 0xd0, 0x84, 0xf4, 0x9c, 0xd2, 0xc5, 0x44, 0xb5, 0x53, 0xe7, 0x0b, 0x4a, 0x9c, 0x74, 0xe3, 0xda, 0xe7, 0x29, 0x5b, 0x69, 0xa2, 0x5c, 0x7c, 0xf6, 0xad, 0x94, 0xea, 0x7f, 0xea, 0x56,
0xad, 0x8f, 0xe8, 0x54, 0x14, 0xac, 0xe4, 0x74, 0x9a, 0xaa, 0x66, 0x99, 0xb4, 0x53, 0x03, 0xca, 0x3a, 0xf1, 0x10, 0xdf, 0x95, 0x4e, 0x92, 0xa6, 0xb6, 0x1e, 0x6d, 0x16, 0xe9, 0x66, 0xf1, 0x2b,
0xe2, 0xa6, 0x3a, 0xa7, 0xd3, 0x54, 0xb5, 0x45, 0x67, 0x3c, 0x0e, 0xbf, 0xc2, 0xd0, 0x67, 0xd0, 0x82, 0xde, 0x8d, 0x13, 0xd1, 0x24, 0x52, 0x7c, 0x04, 0x4b, 0xd9, 0x0a, 0xf2, 0x02, 0x29, 0x6a,
0x0e, 0x94, 0xf8, 0x39, 0x0a, 0x5d, 0x1b, 0x77, 0x89, 0x3b, 0xae, 0xc7, 0xd4, 0x3d, 0xaf, 0x3e, 0x8b, 0xee, 0x7b, 0x57, 0x67, 0xc2, 0x4d, 0x06, 0xfb, 0x3a, 0x34, 0x53, 0x7f, 0xa0, 0x80, 0x5e,
0x83, 0x7e, 0x11, 0x4a, 0x3c, 0x2b, 0x98, 0xd3, 0x63, 0xf2, 0x26, 0xb6, 0x33, 0x16, 0x25, 0x62, 0x9b, 0xa2, 0xc7, 0xe9, 0x7f, 0x13, 0x38, 0x4e, 0x92, 0x5f, 0x83, 0x46, 0xf2, 0xbf, 0x07, 0xe8,
0xd1, 0x81, 0x46, 0xf2, 0xfa, 0x25, 0x27, 0x64, 0x29, 0x2e, 0xa8, 0x3a, 0x93, 0x60, 0x46, 0xa3, 0x95, 0x42, 0xfd, 0x3d, 0x49, 0x97, 0xbb, 0x00, 0xe3, 0x3f, 0x35, 0x40, 0xaf, 0x6a, 0xfb, 0x9c,
0x08, 0x33, 0x1a, 0x9e, 0x29, 0xf3, 0xcd, 0x68, 0xe4, 0xbc, 0x9a, 0x6f, 0x46, 0xa3, 0x47, 0x54, 0xf8, 0xd7, 0x83, 0xe3, 0x3a, 0x4d, 0xa6, 0x2f, 0x0b, 0x73, 0xa6, 0x4d, 0x3f, 0x5d, 0x49, 0x76,
0x7d, 0x06, 0xfd, 0x9a, 0x06, 0xed, 0xbc, 0x3b, 0x01, 0x94, 0xbb, 0x03, 0x1a, 0x77, 0xb1, 0xd1, 0x5c, 0xb7, 0x07, 0xd0, 0xce, 0xd4, 0x7f, 0x16, 0x6d, 0x61, 0x4d, 0x59, 0x6e, 0xef, 0xca, 0x2c,
0xf9, 0xca, 0x29, 0xa9, 0x62, 0x5e, 0x3e, 0x85, 0x45, 0x45, 0xe2, 0x18, 0xdd, 0xc9, 0xeb, 0x2f, 0xa8, 0xc9, 0xfa, 0x1d, 0x40, 0x3b, 0x53, 0x8d, 0x57, 0x30, 0x92, 0xae, 0xf8, 0xb0, 0x60, 0x24,
0x27, 0xe7, 0xdd, 0xf9, 0xf2, 0xe4, 0x04, 0xf1, 0xd8, 0x3b, 0x50, 0xe2, 0x09, 0xdf, 0x1c, 0x45, 0x6d, 0x71, 0x9f, 0xb9, 0x80, 0xbe, 0x93, 0x2a, 0xfc, 0xcb, 0x14, 0x57, 0xa2, 0x37, 0xa7, 0xf6,
0x49, 0xe6, 0x8f, 0x73, 0x54, 0x2f, 0x95, 0x2f, 0xd6, 0x67, 0x10, 0x86, 0x46, 0x32, 0xfb, 0x9b, 0xa3, 0xab, 0x2d, 0xed, 0x6d, 0x9e, 0x84, 0x24, 0x61, 0x41, 0x69, 0x95, 0x14, 0x69, 0xb1, 0x56,
0xa3, 0x29, 0x8a, 0xc4, 0x71, 0xe7, 0xfa, 0x04, 0x98, 0xf1, 0x30, 0x26, 0xc0, 0x30, 0xfb, 0x9a, 0x9d, 0x64, 0xa5, 0x76, 0xa1, 0x2a, 0xeb, 0xeb, 0x90, 0x59, 0x50, 0x49, 0x9b, 0x2a, 0xbe, 0xeb,
0x13, 0x87, 0x46, 0x12, 0xc0, 0x9d, 0xb7, 0x4f, 0xc4, 0x4b, 0x86, 0xe4, 0x44, 0x3e, 0x35, 0x27, 0xbd, 0xa4, 0xc5, 0xc9, 0x96, 0x9e, 0xc9, 0x4e, 0x65, 0xfd, 0x54, 0x41, 0xa7, 0x99, 0xe2, 0xaa,
0x26, 0x8d, 0x66, 0x5c, 0x27, 0x38, 0x27, 0x8c, 0xe6, 0xf6, 0x72, 0xce, 0x09, 0xb9, 0x69, 0xc4, 0x59, 0x3b, 0xb5, 0xa0, 0x2a, 0x0b, 0x27, 0x0a, 0x3a, 0xcd, 0x14, 0xff, 0xf4, 0xa6, 0xe3, 0x88,
0xce, 0x9d, 0x89, 0xf1, 0xe3, 0xf9, 0x7c, 0x07, 0x5a, 0xd9, 0x5c, 0x68, 0xce, 0xf9, 0x33, 0x27, 0x8c, 0x9a, 0xb9, 0x80, 0x76, 0xa0, 0x22, 0xae, 0xf5, 0xe8, 0xf2, 0xb4, 0x9a, 0x82, 0x69, 0x3d,
0x23, 0xdb, 0xb9, 0x35, 0x21, 0x76, 0x32, 0x56, 0x5d, 0x1e, 0xe5, 0xe9, 0x5b, 0x2e, 0x3d, 0xe0, 0x66, 0xca, 0x0e, 0xcc, 0x05, 0xf4, 0x0b, 0x50, 0x11, 0x41, 0xea, 0x82, 0x1e, 0xd3, 0x85, 0x01,
0x69, 0xb8, 0x49, 0x66, 0x9d, 0xcc, 0xf8, 0x4d, 0x32, 0xeb, 0x54, 0x7e, 0x4f, 0x06, 0x16, 0x9e, 0xbd, 0xa9, 0x28, 0x31, 0x8b, 0x2e, 0xb4, 0xd2, 0xd9, 0xc0, 0x82, 0x23, 0x4b, 0x93, 0x2f, 0xed,
0x6f, 0xc8, 0x0b, 0x2c, 0xc9, 0xcc, 0x52, 0x4e, 0x0c, 0x48, 0x27, 0x6b, 0xc4, 0xd6, 0x30, 0x9d, 0xcd, 0x82, 0x19, 0x8f, 0x22, 0xb7, 0xd1, 0x38, 0xc4, 0x51, 0xbc, 0x8d, 0x26, 0xc2, 0x27, 0xc5,
0x35, 0x41, 0xf9, 0x31, 0x7c, 0x24, 0x11, 0x93, 0xb3, 0x35, 0x54, 0xa7, 0x61, 0xf4, 0x99, 0xf5, 0xdb, 0x68, 0x32, 0x62, 0x62, 0x2e, 0xa0, 0x5f, 0x33, 0xa0, 0x5b, 0x94, 0xa2, 0x42, 0x85, 0x1e,
0x01, 0x34, 0x76, 0xc2, 0xe0, 0xc5, 0x71, 0x94, 0x47, 0xf8, 0xe9, 0xd8, 0xd7, 0xc6, 0xb7, 0x60, 0xd0, 0xb4, 0x3c, 0x5b, 0xef, 0x4b, 0x27, 0xa4, 0x4a, 0x78, 0xf9, 0x44, 0xdc, 0x42, 0x27, 0x92,
0xce, 0x8d, 0x71, 0xba, 0x61, 0xdf, 0xde, 0xa8, 0x8b, 0x7c, 0xc6, 0x0e, 0x23, 0xde, 0xd1, 0x7e, 0x52, 0xd7, 0x8b, 0xfa, 0x2b, 0x48, 0xc1, 0xf4, 0xbe, 0x38, 0x3b, 0x41, 0x32, 0xf6, 0x1e, 0x34,
0xe9, 0x5e, 0xd7, 0xa5, 0x07, 0x83, 0x3d, 0xa6, 0xe0, 0x77, 0x04, 0xda, 0x2d, 0x37, 0x90, 0x5f, 0x53, 0x37, 0xe0, 0x02, 0xcb, 0x3b, 0x79, 0x75, 0x2f, 0x58, 0x55, 0xcd, 0x65, 0x5a, 0xaa, 0xb7,
0x77, 0x5c, 0x9f, 0xe2, 0xd0, 0xb7, 0xbc, 0x3b, 0x7c, 0x28, 0x09, 0xed, 0xef, 0xfd, 0xa1, 0xa6, 0xc8, 0x71, 0x14, 0x28, 0x63, 0x3a, 0x65, 0x52, 0xa0, 0xde, 0x99, 0x14, 0x89, 0xb9, 0x80, 0x08,
0xed, 0x95, 0x39, 0xe8, 0xde, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x8b, 0x72, 0x0c, 0xe5, 0xb4, 0xd2, 0x09, 0x8f, 0x02, 0x6d, 0xd4, 0xe4, 0x4a, 0x7a, 0xaf, 0xcf, 0x80, 0x99, 0x0c, 0x63,
0x49, 0x00, 0x00, 0x03, 0x8c, 0x13, 0x0e, 0x05, 0x67, 0xdd, 0x44, 0xce, 0xa3, 0xf7, 0xda, 0xb1, 0x78, 0xe9, 0x63,
0x3f, 0x95, 0x42, 0x28, 0x90, 0xfe, 0x64, 0x92, 0x61, 0x86, 0xbb, 0xc8, 0x64, 0x38, 0xbb, 0xe0,
0x2e, 0x52, 0x18, 0x39, 0xef, 0x5d, 0x9f, 0x19, 0x3f, 0x99, 0xcf, 0xb7, 0xa1, 0x93, 0x0f, 0xff,
0x17, 0xdc, 0x71, 0x0b, 0x92, 0x10, 0xbd, 0x37, 0x66, 0xc4, 0x4e, 0x9f, 0x87, 0x17, 0x27, 0x79,
0xfa, 0xa6, 0xc7, 0x0e, 0x44, 0xe4, 0x79, 0x96, 0x59, 0xa7, 0x83, 0xdc, 0xb3, 0xcc, 0x3a, 0x13,
0xd2, 0x56, 0x87, 0x97, 0x08, 0xb1, 0x15, 0x1d, 0x5e, 0xe9, 0x60, 0x6a, 0xc1, 0x39, 0x93, 0x8d,
0x4f, 0x4a, 0xf7, 0x33, 0x1b, 0x28, 0x44, 0xc5, 0x7e, 0xc2, 0x44, 0xec, 0xb1, 0xc0, 0xfd, 0xd4,
0x47, 0x1e, 0xcd, 0x85, 0xcd, 0x11, 0xb4, 0x76, 0xa2, 0xf0, 0xc9, 0x51, 0x1c, 0xab, 0xf8, 0xe9,
0xec, 0xaf, 0x5b, 0xdf, 0x84, 0x25, 0x2f, 0xc1, 0xe9, 0x47, 0x43, 0xe7, 0x56, 0x53, 0xc6, 0x4c,
0x76, 0x38, 0xf1, 0x8e, 0xf1, 0x8b, 0x37, 0xfa, 0x1e, 0x3b, 0x18, 0xed, 0x71, 0x05, 0xbf, 0x2e,
0xd1, 0xde, 0xf0, 0x42, 0xf5, 0xeb, 0xba, 0x17, 0x30, 0x12, 0x05, 0xd8, 0xbf, 0x2e, 0x86, 0x52,
0xd0, 0xe1, 0xde, 0x1f, 0x18, 0xc6, 0x5e, 0x55, 0x80, 0x6e, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xff,
0xff, 0x8a, 0x5f, 0xf0, 0xa5, 0xd8, 0x4c, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -5568,6 +5822,7 @@ type MilvusServiceClient interface {
GetFlushState(ctx context.Context, in *GetFlushStateRequest, opts ...grpc.CallOption) (*GetFlushStateResponse, error) GetFlushState(ctx context.Context, in *GetFlushStateRequest, opts ...grpc.CallOption) (*GetFlushStateResponse, error)
GetPersistentSegmentInfo(ctx context.Context, in *GetPersistentSegmentInfoRequest, opts ...grpc.CallOption) (*GetPersistentSegmentInfoResponse, error) GetPersistentSegmentInfo(ctx context.Context, in *GetPersistentSegmentInfoRequest, opts ...grpc.CallOption) (*GetPersistentSegmentInfoResponse, error)
GetQuerySegmentInfo(ctx context.Context, in *GetQuerySegmentInfoRequest, opts ...grpc.CallOption) (*GetQuerySegmentInfoResponse, error) GetQuerySegmentInfo(ctx context.Context, in *GetQuerySegmentInfoRequest, opts ...grpc.CallOption) (*GetQuerySegmentInfoResponse, error)
GetReplicas(ctx context.Context, in *GetReplicasRequest, opts ...grpc.CallOption) (*GetReplicasResponse, error)
Dummy(ctx context.Context, in *DummyRequest, opts ...grpc.CallOption) (*DummyResponse, error) Dummy(ctx context.Context, in *DummyRequest, opts ...grpc.CallOption) (*DummyResponse, error)
// TODO: remove // TODO: remove
RegisterLink(ctx context.Context, in *RegisterLinkRequest, opts ...grpc.CallOption) (*RegisterLinkResponse, error) RegisterLink(ctx context.Context, in *RegisterLinkRequest, opts ...grpc.CallOption) (*RegisterLinkResponse, error)
@ -5878,6 +6133,15 @@ func (c *milvusServiceClient) GetQuerySegmentInfo(ctx context.Context, in *GetQu
return out, nil return out, nil
} }
func (c *milvusServiceClient) GetReplicas(ctx context.Context, in *GetReplicasRequest, opts ...grpc.CallOption) (*GetReplicasResponse, error) {
out := new(GetReplicasResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/GetReplicas", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *milvusServiceClient) Dummy(ctx context.Context, in *DummyRequest, opts ...grpc.CallOption) (*DummyResponse, error) { func (c *milvusServiceClient) Dummy(ctx context.Context, in *DummyRequest, opts ...grpc.CallOption) (*DummyResponse, error) {
out := new(DummyResponse) out := new(DummyResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/Dummy", in, out, opts...) err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/Dummy", in, out, opts...)
@ -5993,6 +6257,7 @@ type MilvusServiceServer interface {
GetFlushState(context.Context, *GetFlushStateRequest) (*GetFlushStateResponse, error) GetFlushState(context.Context, *GetFlushStateRequest) (*GetFlushStateResponse, error)
GetPersistentSegmentInfo(context.Context, *GetPersistentSegmentInfoRequest) (*GetPersistentSegmentInfoResponse, error) GetPersistentSegmentInfo(context.Context, *GetPersistentSegmentInfoRequest) (*GetPersistentSegmentInfoResponse, error)
GetQuerySegmentInfo(context.Context, *GetQuerySegmentInfoRequest) (*GetQuerySegmentInfoResponse, error) GetQuerySegmentInfo(context.Context, *GetQuerySegmentInfoRequest) (*GetQuerySegmentInfoResponse, error)
GetReplicas(context.Context, *GetReplicasRequest) (*GetReplicasResponse, error)
Dummy(context.Context, *DummyRequest) (*DummyResponse, error) Dummy(context.Context, *DummyRequest) (*DummyResponse, error)
// TODO: remove // TODO: remove
RegisterLink(context.Context, *RegisterLinkRequest) (*RegisterLinkResponse, error) RegisterLink(context.Context, *RegisterLinkRequest) (*RegisterLinkResponse, error)
@ -6107,6 +6372,9 @@ func (*UnimplementedMilvusServiceServer) GetPersistentSegmentInfo(ctx context.Co
func (*UnimplementedMilvusServiceServer) GetQuerySegmentInfo(ctx context.Context, req *GetQuerySegmentInfoRequest) (*GetQuerySegmentInfoResponse, error) { func (*UnimplementedMilvusServiceServer) GetQuerySegmentInfo(ctx context.Context, req *GetQuerySegmentInfoRequest) (*GetQuerySegmentInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetQuerySegmentInfo not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetQuerySegmentInfo not implemented")
} }
func (*UnimplementedMilvusServiceServer) GetReplicas(ctx context.Context, req *GetReplicasRequest) (*GetReplicasResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetReplicas not implemented")
}
func (*UnimplementedMilvusServiceServer) Dummy(ctx context.Context, req *DummyRequest) (*DummyResponse, error) { func (*UnimplementedMilvusServiceServer) Dummy(ctx context.Context, req *DummyRequest) (*DummyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Dummy not implemented") return nil, status.Errorf(codes.Unimplemented, "method Dummy not implemented")
} }
@ -6715,6 +6983,24 @@ func _MilvusService_GetQuerySegmentInfo_Handler(srv interface{}, ctx context.Con
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _MilvusService_GetReplicas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetReplicasRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MilvusServiceServer).GetReplicas(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.milvus.MilvusService/GetReplicas",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MilvusServiceServer).GetReplicas(ctx, req.(*GetReplicasRequest))
}
return interceptor(ctx, in, info, handler)
}
func _MilvusService_Dummy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _MilvusService_Dummy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DummyRequest) in := new(DummyRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -7009,6 +7295,10 @@ var _MilvusService_serviceDesc = grpc.ServiceDesc{
MethodName: "GetQuerySegmentInfo", MethodName: "GetQuerySegmentInfo",
Handler: _MilvusService_GetQuerySegmentInfo_Handler, Handler: _MilvusService_GetQuerySegmentInfo_Handler,
}, },
{
MethodName: "GetReplicas",
Handler: _MilvusService_GetReplicas_Handler,
},
{ {
MethodName: "Dummy", MethodName: "Dummy",
Handler: _MilvusService_Dummy_Handler, Handler: _MilvusService_Dummy_Handler,

View File

@ -32,7 +32,7 @@ service QueryCoord {
rpc GetMetrics(milvus.GetMetricsRequest) returns (milvus.GetMetricsResponse) {} rpc GetMetrics(milvus.GetMetricsRequest) returns (milvus.GetMetricsResponse) {}
// https://wiki.lfaidata.foundation/display/MIL/MEP+23+--+Multiple+memory+replication+design // https://wiki.lfaidata.foundation/display/MIL/MEP+23+--+Multiple+memory+replication+design
rpc GetReplicas(GetReplicasRequest) returns (GetReplicasResponse) {} rpc GetReplicas(milvus.GetReplicasRequest) returns (milvus.GetReplicasResponse) {}
rpc GetShardLeaders(GetShardLeadersRequest) returns (GetShardLeadersResponse) {} rpc GetShardLeaders(GetShardLeadersRequest) returns (GetShardLeadersResponse) {}
} }
@ -151,17 +151,6 @@ message GetSegmentInfoResponse {
repeated SegmentInfo infos = 2; repeated SegmentInfo infos = 2;
} }
message GetReplicasRequest {
common.MsgBase base = 1;
int64 collectionID = 2;
bool with_shard_nodes = 3;
}
message GetReplicasResponse {
common.Status status = 1;
repeated ReplicaInfo replicas = 2;
}
message GetShardLeadersRequest { message GetShardLeadersRequest {
common.MsgBase base = 1; common.MsgBase base = 1;
int64 collectionID = 2; int64 collectionID = 2;
@ -369,23 +358,6 @@ message CollectionInfo {
int32 replica_number = 9; int32 replica_number = 9;
} }
message ReplicaInfo { // ReplicaGroup
int64 replicaID = 1;
int64 collectionID = 2;
repeated int64 partition_ids = 3; // empty indicates to load collection
repeated ShardReplica shard_replicas = 4;
repeated int64 node_ids = 5; // include leaders
}
message ShardReplica {
int64 leaderID = 1;
string leader_addr = 2; // IP:port
string dm_channel_name = 3;
// optional, DO NOT save it in meta, set it only for GetReplicas()
// if with_shard_nodes is true
repeated int64 node_ids = 4;
}
message UnsubscribeChannels { message UnsubscribeChannels {
int64 collectionID = 1; int64 collectionID = 1;
repeated string channels = 2; repeated string channels = 2;

View File

@ -960,108 +960,6 @@ func (m *GetSegmentInfoResponse) GetInfos() []*SegmentInfo {
return nil return nil
} }
type GetReplicasRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
WithShardNodes bool `protobuf:"varint,3,opt,name=with_shard_nodes,json=withShardNodes,proto3" json:"with_shard_nodes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetReplicasRequest) Reset() { *m = GetReplicasRequest{} }
func (m *GetReplicasRequest) String() string { return proto.CompactTextString(m) }
func (*GetReplicasRequest) ProtoMessage() {}
func (*GetReplicasRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{14}
}
func (m *GetReplicasRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReplicasRequest.Unmarshal(m, b)
}
func (m *GetReplicasRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetReplicasRequest.Marshal(b, m, deterministic)
}
func (m *GetReplicasRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetReplicasRequest.Merge(m, src)
}
func (m *GetReplicasRequest) XXX_Size() int {
return xxx_messageInfo_GetReplicasRequest.Size(m)
}
func (m *GetReplicasRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetReplicasRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetReplicasRequest proto.InternalMessageInfo
func (m *GetReplicasRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *GetReplicasRequest) GetCollectionID() int64 {
if m != nil {
return m.CollectionID
}
return 0
}
func (m *GetReplicasRequest) GetWithShardNodes() bool {
if m != nil {
return m.WithShardNodes
}
return false
}
type GetReplicasResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Replicas []*ReplicaInfo `protobuf:"bytes,2,rep,name=replicas,proto3" json:"replicas,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetReplicasResponse) Reset() { *m = GetReplicasResponse{} }
func (m *GetReplicasResponse) String() string { return proto.CompactTextString(m) }
func (*GetReplicasResponse) ProtoMessage() {}
func (*GetReplicasResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{15}
}
func (m *GetReplicasResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReplicasResponse.Unmarshal(m, b)
}
func (m *GetReplicasResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetReplicasResponse.Marshal(b, m, deterministic)
}
func (m *GetReplicasResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetReplicasResponse.Merge(m, src)
}
func (m *GetReplicasResponse) XXX_Size() int {
return xxx_messageInfo_GetReplicasResponse.Size(m)
}
func (m *GetReplicasResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetReplicasResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetReplicasResponse proto.InternalMessageInfo
func (m *GetReplicasResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *GetReplicasResponse) GetReplicas() []*ReplicaInfo {
if m != nil {
return m.Replicas
}
return nil
}
type GetShardLeadersRequest struct { type GetShardLeadersRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"` CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
@ -1074,7 +972,7 @@ func (m *GetShardLeadersRequest) Reset() { *m = GetShardLeadersRequest{}
func (m *GetShardLeadersRequest) String() string { return proto.CompactTextString(m) } func (m *GetShardLeadersRequest) String() string { return proto.CompactTextString(m) }
func (*GetShardLeadersRequest) ProtoMessage() {} func (*GetShardLeadersRequest) ProtoMessage() {}
func (*GetShardLeadersRequest) Descriptor() ([]byte, []int) { func (*GetShardLeadersRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{16} return fileDescriptor_aab7cc9a69ed26e8, []int{14}
} }
func (m *GetShardLeadersRequest) XXX_Unmarshal(b []byte) error { func (m *GetShardLeadersRequest) XXX_Unmarshal(b []byte) error {
@ -1121,7 +1019,7 @@ func (m *GetShardLeadersResponse) Reset() { *m = GetShardLeadersResponse
func (m *GetShardLeadersResponse) String() string { return proto.CompactTextString(m) } func (m *GetShardLeadersResponse) String() string { return proto.CompactTextString(m) }
func (*GetShardLeadersResponse) ProtoMessage() {} func (*GetShardLeadersResponse) ProtoMessage() {}
func (*GetShardLeadersResponse) Descriptor() ([]byte, []int) { func (*GetShardLeadersResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{17} return fileDescriptor_aab7cc9a69ed26e8, []int{15}
} }
func (m *GetShardLeadersResponse) XXX_Unmarshal(b []byte) error { func (m *GetShardLeadersResponse) XXX_Unmarshal(b []byte) error {
@ -1169,7 +1067,7 @@ func (m *ShardLeadersList) Reset() { *m = ShardLeadersList{} }
func (m *ShardLeadersList) String() string { return proto.CompactTextString(m) } func (m *ShardLeadersList) String() string { return proto.CompactTextString(m) }
func (*ShardLeadersList) ProtoMessage() {} func (*ShardLeadersList) ProtoMessage() {}
func (*ShardLeadersList) Descriptor() ([]byte, []int) { func (*ShardLeadersList) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{18} return fileDescriptor_aab7cc9a69ed26e8, []int{16}
} }
func (m *ShardLeadersList) XXX_Unmarshal(b []byte) error { func (m *ShardLeadersList) XXX_Unmarshal(b []byte) error {
@ -1229,7 +1127,7 @@ func (m *AddQueryChannelRequest) Reset() { *m = AddQueryChannelRequest{}
func (m *AddQueryChannelRequest) String() string { return proto.CompactTextString(m) } func (m *AddQueryChannelRequest) String() string { return proto.CompactTextString(m) }
func (*AddQueryChannelRequest) ProtoMessage() {} func (*AddQueryChannelRequest) ProtoMessage() {}
func (*AddQueryChannelRequest) Descriptor() ([]byte, []int) { func (*AddQueryChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{19} return fileDescriptor_aab7cc9a69ed26e8, []int{17}
} }
func (m *AddQueryChannelRequest) XXX_Unmarshal(b []byte) error { func (m *AddQueryChannelRequest) XXX_Unmarshal(b []byte) error {
@ -1314,7 +1212,7 @@ func (m *RemoveQueryChannelRequest) Reset() { *m = RemoveQueryChannelReq
func (m *RemoveQueryChannelRequest) String() string { return proto.CompactTextString(m) } func (m *RemoveQueryChannelRequest) String() string { return proto.CompactTextString(m) }
func (*RemoveQueryChannelRequest) ProtoMessage() {} func (*RemoveQueryChannelRequest) ProtoMessage() {}
func (*RemoveQueryChannelRequest) Descriptor() ([]byte, []int) { func (*RemoveQueryChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{20} return fileDescriptor_aab7cc9a69ed26e8, []int{18}
} }
func (m *RemoveQueryChannelRequest) XXX_Unmarshal(b []byte) error { func (m *RemoveQueryChannelRequest) XXX_Unmarshal(b []byte) error {
@ -1383,7 +1281,7 @@ func (m *LoadMetaInfo) Reset() { *m = LoadMetaInfo{} }
func (m *LoadMetaInfo) String() string { return proto.CompactTextString(m) } func (m *LoadMetaInfo) String() string { return proto.CompactTextString(m) }
func (*LoadMetaInfo) ProtoMessage() {} func (*LoadMetaInfo) ProtoMessage() {}
func (*LoadMetaInfo) Descriptor() ([]byte, []int) { func (*LoadMetaInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{21} return fileDescriptor_aab7cc9a69ed26e8, []int{19}
} }
func (m *LoadMetaInfo) XXX_Unmarshal(b []byte) error { func (m *LoadMetaInfo) XXX_Unmarshal(b []byte) error {
@ -1443,7 +1341,7 @@ func (m *WatchDmChannelsRequest) Reset() { *m = WatchDmChannelsRequest{}
func (m *WatchDmChannelsRequest) String() string { return proto.CompactTextString(m) } func (m *WatchDmChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*WatchDmChannelsRequest) ProtoMessage() {} func (*WatchDmChannelsRequest) ProtoMessage() {}
func (*WatchDmChannelsRequest) Descriptor() ([]byte, []int) { func (*WatchDmChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{22} return fileDescriptor_aab7cc9a69ed26e8, []int{20}
} }
func (m *WatchDmChannelsRequest) XXX_Unmarshal(b []byte) error { func (m *WatchDmChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -1535,7 +1433,7 @@ func (m *WatchDeltaChannelsRequest) Reset() { *m = WatchDeltaChannelsReq
func (m *WatchDeltaChannelsRequest) String() string { return proto.CompactTextString(m) } func (m *WatchDeltaChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*WatchDeltaChannelsRequest) ProtoMessage() {} func (*WatchDeltaChannelsRequest) ProtoMessage() {}
func (*WatchDeltaChannelsRequest) Descriptor() ([]byte, []int) { func (*WatchDeltaChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{23} return fileDescriptor_aab7cc9a69ed26e8, []int{21}
} }
func (m *WatchDeltaChannelsRequest) XXX_Unmarshal(b []byte) error { func (m *WatchDeltaChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -1613,7 +1511,7 @@ func (m *SegmentLoadInfo) Reset() { *m = SegmentLoadInfo{} }
func (m *SegmentLoadInfo) String() string { return proto.CompactTextString(m) } func (m *SegmentLoadInfo) String() string { return proto.CompactTextString(m) }
func (*SegmentLoadInfo) ProtoMessage() {} func (*SegmentLoadInfo) ProtoMessage() {}
func (*SegmentLoadInfo) Descriptor() ([]byte, []int) { func (*SegmentLoadInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{24} return fileDescriptor_aab7cc9a69ed26e8, []int{22}
} }
func (m *SegmentLoadInfo) XXX_Unmarshal(b []byte) error { func (m *SegmentLoadInfo) XXX_Unmarshal(b []byte) error {
@ -1736,7 +1634,7 @@ func (m *FieldIndexInfo) Reset() { *m = FieldIndexInfo{} }
func (m *FieldIndexInfo) String() string { return proto.CompactTextString(m) } func (m *FieldIndexInfo) String() string { return proto.CompactTextString(m) }
func (*FieldIndexInfo) ProtoMessage() {} func (*FieldIndexInfo) ProtoMessage() {}
func (*FieldIndexInfo) Descriptor() ([]byte, []int) { func (*FieldIndexInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{25} return fileDescriptor_aab7cc9a69ed26e8, []int{23}
} }
func (m *FieldIndexInfo) XXX_Unmarshal(b []byte) error { func (m *FieldIndexInfo) XXX_Unmarshal(b []byte) error {
@ -1830,7 +1728,7 @@ func (m *LoadSegmentsRequest) Reset() { *m = LoadSegmentsRequest{} }
func (m *LoadSegmentsRequest) String() string { return proto.CompactTextString(m) } func (m *LoadSegmentsRequest) String() string { return proto.CompactTextString(m) }
func (*LoadSegmentsRequest) ProtoMessage() {} func (*LoadSegmentsRequest) ProtoMessage() {}
func (*LoadSegmentsRequest) Descriptor() ([]byte, []int) { func (*LoadSegmentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{26} return fileDescriptor_aab7cc9a69ed26e8, []int{24}
} }
func (m *LoadSegmentsRequest) XXX_Unmarshal(b []byte) error { func (m *LoadSegmentsRequest) XXX_Unmarshal(b []byte) error {
@ -1917,7 +1815,7 @@ func (m *ReleaseSegmentsRequest) Reset() { *m = ReleaseSegmentsRequest{}
func (m *ReleaseSegmentsRequest) String() string { return proto.CompactTextString(m) } func (m *ReleaseSegmentsRequest) String() string { return proto.CompactTextString(m) }
func (*ReleaseSegmentsRequest) ProtoMessage() {} func (*ReleaseSegmentsRequest) ProtoMessage() {}
func (*ReleaseSegmentsRequest) Descriptor() ([]byte, []int) { func (*ReleaseSegmentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{27} return fileDescriptor_aab7cc9a69ed26e8, []int{25}
} }
func (m *ReleaseSegmentsRequest) XXX_Unmarshal(b []byte) error { func (m *ReleaseSegmentsRequest) XXX_Unmarshal(b []byte) error {
@ -1993,7 +1891,7 @@ func (m *SearchRequest) Reset() { *m = SearchRequest{} }
func (m *SearchRequest) String() string { return proto.CompactTextString(m) } func (m *SearchRequest) String() string { return proto.CompactTextString(m) }
func (*SearchRequest) ProtoMessage() {} func (*SearchRequest) ProtoMessage() {}
func (*SearchRequest) Descriptor() ([]byte, []int) { func (*SearchRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{28} return fileDescriptor_aab7cc9a69ed26e8, []int{26}
} }
func (m *SearchRequest) XXX_Unmarshal(b []byte) error { func (m *SearchRequest) XXX_Unmarshal(b []byte) error {
@ -2048,7 +1946,7 @@ func (m *QueryRequest) Reset() { *m = QueryRequest{} }
func (m *QueryRequest) String() string { return proto.CompactTextString(m) } func (m *QueryRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRequest) ProtoMessage() {} func (*QueryRequest) ProtoMessage() {}
func (*QueryRequest) Descriptor() ([]byte, []int) { func (*QueryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{29} return fileDescriptor_aab7cc9a69ed26e8, []int{27}
} }
func (m *QueryRequest) XXX_Unmarshal(b []byte) error { func (m *QueryRequest) XXX_Unmarshal(b []byte) error {
@ -2103,7 +2001,7 @@ func (m *HandoffSegmentsRequest) Reset() { *m = HandoffSegmentsRequest{}
func (m *HandoffSegmentsRequest) String() string { return proto.CompactTextString(m) } func (m *HandoffSegmentsRequest) String() string { return proto.CompactTextString(m) }
func (*HandoffSegmentsRequest) ProtoMessage() {} func (*HandoffSegmentsRequest) ProtoMessage() {}
func (*HandoffSegmentsRequest) Descriptor() ([]byte, []int) { func (*HandoffSegmentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{30} return fileDescriptor_aab7cc9a69ed26e8, []int{28}
} }
func (m *HandoffSegmentsRequest) XXX_Unmarshal(b []byte) error { func (m *HandoffSegmentsRequest) XXX_Unmarshal(b []byte) error {
@ -2153,7 +2051,7 @@ func (m *LoadBalanceRequest) Reset() { *m = LoadBalanceRequest{} }
func (m *LoadBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *LoadBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*LoadBalanceRequest) ProtoMessage() {} func (*LoadBalanceRequest) ProtoMessage() {}
func (*LoadBalanceRequest) Descriptor() ([]byte, []int) { func (*LoadBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{31} return fileDescriptor_aab7cc9a69ed26e8, []int{29}
} }
func (m *LoadBalanceRequest) XXX_Unmarshal(b []byte) error { func (m *LoadBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -2222,7 +2120,7 @@ func (m *DmChannelWatchInfo) Reset() { *m = DmChannelWatchInfo{} }
func (m *DmChannelWatchInfo) String() string { return proto.CompactTextString(m) } func (m *DmChannelWatchInfo) String() string { return proto.CompactTextString(m) }
func (*DmChannelWatchInfo) ProtoMessage() {} func (*DmChannelWatchInfo) ProtoMessage() {}
func (*DmChannelWatchInfo) Descriptor() ([]byte, []int) { func (*DmChannelWatchInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{32} return fileDescriptor_aab7cc9a69ed26e8, []int{30}
} }
func (m *DmChannelWatchInfo) XXX_Unmarshal(b []byte) error { func (m *DmChannelWatchInfo) XXX_Unmarshal(b []byte) error {
@ -2279,7 +2177,7 @@ func (m *QueryChannelInfo) Reset() { *m = QueryChannelInfo{} }
func (m *QueryChannelInfo) String() string { return proto.CompactTextString(m) } func (m *QueryChannelInfo) String() string { return proto.CompactTextString(m) }
func (*QueryChannelInfo) ProtoMessage() {} func (*QueryChannelInfo) ProtoMessage() {}
func (*QueryChannelInfo) Descriptor() ([]byte, []int) { func (*QueryChannelInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{33} return fileDescriptor_aab7cc9a69ed26e8, []int{31}
} }
func (m *QueryChannelInfo) XXX_Unmarshal(b []byte) error { func (m *QueryChannelInfo) XXX_Unmarshal(b []byte) error {
@ -2348,7 +2246,7 @@ func (m *PartitionStates) Reset() { *m = PartitionStates{} }
func (m *PartitionStates) String() string { return proto.CompactTextString(m) } func (m *PartitionStates) String() string { return proto.CompactTextString(m) }
func (*PartitionStates) ProtoMessage() {} func (*PartitionStates) ProtoMessage() {}
func (*PartitionStates) Descriptor() ([]byte, []int) { func (*PartitionStates) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{34} return fileDescriptor_aab7cc9a69ed26e8, []int{32}
} }
func (m *PartitionStates) XXX_Unmarshal(b []byte) error { func (m *PartitionStates) XXX_Unmarshal(b []byte) error {
@ -2415,7 +2313,7 @@ func (m *SegmentInfo) Reset() { *m = SegmentInfo{} }
func (m *SegmentInfo) String() string { return proto.CompactTextString(m) } func (m *SegmentInfo) String() string { return proto.CompactTextString(m) }
func (*SegmentInfo) ProtoMessage() {} func (*SegmentInfo) ProtoMessage() {}
func (*SegmentInfo) Descriptor() ([]byte, []int) { func (*SegmentInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{35} return fileDescriptor_aab7cc9a69ed26e8, []int{33}
} }
func (m *SegmentInfo) XXX_Unmarshal(b []byte) error { func (m *SegmentInfo) XXX_Unmarshal(b []byte) error {
@ -2560,7 +2458,7 @@ func (m *CollectionInfo) Reset() { *m = CollectionInfo{} }
func (m *CollectionInfo) String() string { return proto.CompactTextString(m) } func (m *CollectionInfo) String() string { return proto.CompactTextString(m) }
func (*CollectionInfo) ProtoMessage() {} func (*CollectionInfo) ProtoMessage() {}
func (*CollectionInfo) Descriptor() ([]byte, []int) { func (*CollectionInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{36} return fileDescriptor_aab7cc9a69ed26e8, []int{34}
} }
func (m *CollectionInfo) XXX_Unmarshal(b []byte) error { func (m *CollectionInfo) XXX_Unmarshal(b []byte) error {
@ -2644,142 +2542,6 @@ func (m *CollectionInfo) GetReplicaNumber() int32 {
return 0 return 0
} }
type ReplicaInfo struct {
ReplicaID int64 `protobuf:"varint,1,opt,name=replicaID,proto3" json:"replicaID,omitempty"`
CollectionID int64 `protobuf:"varint,2,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
PartitionIds []int64 `protobuf:"varint,3,rep,packed,name=partition_ids,json=partitionIds,proto3" json:"partition_ids,omitempty"`
ShardReplicas []*ShardReplica `protobuf:"bytes,4,rep,name=shard_replicas,json=shardReplicas,proto3" json:"shard_replicas,omitempty"`
NodeIds []int64 `protobuf:"varint,5,rep,packed,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReplicaInfo) Reset() { *m = ReplicaInfo{} }
func (m *ReplicaInfo) String() string { return proto.CompactTextString(m) }
func (*ReplicaInfo) ProtoMessage() {}
func (*ReplicaInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{37}
}
func (m *ReplicaInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplicaInfo.Unmarshal(m, b)
}
func (m *ReplicaInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReplicaInfo.Marshal(b, m, deterministic)
}
func (m *ReplicaInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReplicaInfo.Merge(m, src)
}
func (m *ReplicaInfo) XXX_Size() int {
return xxx_messageInfo_ReplicaInfo.Size(m)
}
func (m *ReplicaInfo) XXX_DiscardUnknown() {
xxx_messageInfo_ReplicaInfo.DiscardUnknown(m)
}
var xxx_messageInfo_ReplicaInfo proto.InternalMessageInfo
func (m *ReplicaInfo) GetReplicaID() int64 {
if m != nil {
return m.ReplicaID
}
return 0
}
func (m *ReplicaInfo) GetCollectionID() int64 {
if m != nil {
return m.CollectionID
}
return 0
}
func (m *ReplicaInfo) GetPartitionIds() []int64 {
if m != nil {
return m.PartitionIds
}
return nil
}
func (m *ReplicaInfo) GetShardReplicas() []*ShardReplica {
if m != nil {
return m.ShardReplicas
}
return nil
}
func (m *ReplicaInfo) GetNodeIds() []int64 {
if m != nil {
return m.NodeIds
}
return nil
}
type ShardReplica struct {
LeaderID int64 `protobuf:"varint,1,opt,name=leaderID,proto3" json:"leaderID,omitempty"`
LeaderAddr string `protobuf:"bytes,2,opt,name=leader_addr,json=leaderAddr,proto3" json:"leader_addr,omitempty"`
DmChannelName string `protobuf:"bytes,3,opt,name=dm_channel_name,json=dmChannelName,proto3" json:"dm_channel_name,omitempty"`
// optional, DO NOT save it in meta, set it only for GetReplicas()
// if with_shard_nodes is true
NodeIds []int64 `protobuf:"varint,4,rep,packed,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ShardReplica) Reset() { *m = ShardReplica{} }
func (m *ShardReplica) String() string { return proto.CompactTextString(m) }
func (*ShardReplica) ProtoMessage() {}
func (*ShardReplica) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{38}
}
func (m *ShardReplica) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ShardReplica.Unmarshal(m, b)
}
func (m *ShardReplica) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ShardReplica.Marshal(b, m, deterministic)
}
func (m *ShardReplica) XXX_Merge(src proto.Message) {
xxx_messageInfo_ShardReplica.Merge(m, src)
}
func (m *ShardReplica) XXX_Size() int {
return xxx_messageInfo_ShardReplica.Size(m)
}
func (m *ShardReplica) XXX_DiscardUnknown() {
xxx_messageInfo_ShardReplica.DiscardUnknown(m)
}
var xxx_messageInfo_ShardReplica proto.InternalMessageInfo
func (m *ShardReplica) GetLeaderID() int64 {
if m != nil {
return m.LeaderID
}
return 0
}
func (m *ShardReplica) GetLeaderAddr() string {
if m != nil {
return m.LeaderAddr
}
return ""
}
func (m *ShardReplica) GetDmChannelName() string {
if m != nil {
return m.DmChannelName
}
return ""
}
func (m *ShardReplica) GetNodeIds() []int64 {
if m != nil {
return m.NodeIds
}
return nil
}
type UnsubscribeChannels struct { type UnsubscribeChannels struct {
CollectionID int64 `protobuf:"varint,1,opt,name=collectionID,proto3" json:"collectionID,omitempty"` CollectionID int64 `protobuf:"varint,1,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
Channels []string `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` Channels []string `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"`
@ -2792,7 +2554,7 @@ func (m *UnsubscribeChannels) Reset() { *m = UnsubscribeChannels{} }
func (m *UnsubscribeChannels) String() string { return proto.CompactTextString(m) } func (m *UnsubscribeChannels) String() string { return proto.CompactTextString(m) }
func (*UnsubscribeChannels) ProtoMessage() {} func (*UnsubscribeChannels) ProtoMessage() {}
func (*UnsubscribeChannels) Descriptor() ([]byte, []int) { func (*UnsubscribeChannels) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{39} return fileDescriptor_aab7cc9a69ed26e8, []int{35}
} }
func (m *UnsubscribeChannels) XXX_Unmarshal(b []byte) error { func (m *UnsubscribeChannels) XXX_Unmarshal(b []byte) error {
@ -2839,7 +2601,7 @@ func (m *UnsubscribeChannelInfo) Reset() { *m = UnsubscribeChannelInfo{}
func (m *UnsubscribeChannelInfo) String() string { return proto.CompactTextString(m) } func (m *UnsubscribeChannelInfo) String() string { return proto.CompactTextString(m) }
func (*UnsubscribeChannelInfo) ProtoMessage() {} func (*UnsubscribeChannelInfo) ProtoMessage() {}
func (*UnsubscribeChannelInfo) Descriptor() ([]byte, []int) { func (*UnsubscribeChannelInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{40} return fileDescriptor_aab7cc9a69ed26e8, []int{36}
} }
func (m *UnsubscribeChannelInfo) XXX_Unmarshal(b []byte) error { func (m *UnsubscribeChannelInfo) XXX_Unmarshal(b []byte) error {
@ -2889,7 +2651,7 @@ func (m *SegmentChangeInfo) Reset() { *m = SegmentChangeInfo{} }
func (m *SegmentChangeInfo) String() string { return proto.CompactTextString(m) } func (m *SegmentChangeInfo) String() string { return proto.CompactTextString(m) }
func (*SegmentChangeInfo) ProtoMessage() {} func (*SegmentChangeInfo) ProtoMessage() {}
func (*SegmentChangeInfo) Descriptor() ([]byte, []int) { func (*SegmentChangeInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{41} return fileDescriptor_aab7cc9a69ed26e8, []int{37}
} }
func (m *SegmentChangeInfo) XXX_Unmarshal(b []byte) error { func (m *SegmentChangeInfo) XXX_Unmarshal(b []byte) error {
@ -2950,7 +2712,7 @@ func (m *SealedSegmentsChangeInfo) Reset() { *m = SealedSegmentsChangeIn
func (m *SealedSegmentsChangeInfo) String() string { return proto.CompactTextString(m) } func (m *SealedSegmentsChangeInfo) String() string { return proto.CompactTextString(m) }
func (*SealedSegmentsChangeInfo) ProtoMessage() {} func (*SealedSegmentsChangeInfo) ProtoMessage() {}
func (*SealedSegmentsChangeInfo) Descriptor() ([]byte, []int) { func (*SealedSegmentsChangeInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_aab7cc9a69ed26e8, []int{42} return fileDescriptor_aab7cc9a69ed26e8, []int{38}
} }
func (m *SealedSegmentsChangeInfo) XXX_Unmarshal(b []byte) error { func (m *SealedSegmentsChangeInfo) XXX_Unmarshal(b []byte) error {
@ -3003,8 +2765,6 @@ func init() {
proto.RegisterType((*GetPartitionStatesResponse)(nil), "milvus.proto.query.GetPartitionStatesResponse") proto.RegisterType((*GetPartitionStatesResponse)(nil), "milvus.proto.query.GetPartitionStatesResponse")
proto.RegisterType((*GetSegmentInfoRequest)(nil), "milvus.proto.query.GetSegmentInfoRequest") proto.RegisterType((*GetSegmentInfoRequest)(nil), "milvus.proto.query.GetSegmentInfoRequest")
proto.RegisterType((*GetSegmentInfoResponse)(nil), "milvus.proto.query.GetSegmentInfoResponse") proto.RegisterType((*GetSegmentInfoResponse)(nil), "milvus.proto.query.GetSegmentInfoResponse")
proto.RegisterType((*GetReplicasRequest)(nil), "milvus.proto.query.GetReplicasRequest")
proto.RegisterType((*GetReplicasResponse)(nil), "milvus.proto.query.GetReplicasResponse")
proto.RegisterType((*GetShardLeadersRequest)(nil), "milvus.proto.query.GetShardLeadersRequest") proto.RegisterType((*GetShardLeadersRequest)(nil), "milvus.proto.query.GetShardLeadersRequest")
proto.RegisterType((*GetShardLeadersResponse)(nil), "milvus.proto.query.GetShardLeadersResponse") proto.RegisterType((*GetShardLeadersResponse)(nil), "milvus.proto.query.GetShardLeadersResponse")
proto.RegisterType((*ShardLeadersList)(nil), "milvus.proto.query.ShardLeadersList") proto.RegisterType((*ShardLeadersList)(nil), "milvus.proto.query.ShardLeadersList")
@ -3026,8 +2786,6 @@ func init() {
proto.RegisterType((*PartitionStates)(nil), "milvus.proto.query.PartitionStates") proto.RegisterType((*PartitionStates)(nil), "milvus.proto.query.PartitionStates")
proto.RegisterType((*SegmentInfo)(nil), "milvus.proto.query.SegmentInfo") proto.RegisterType((*SegmentInfo)(nil), "milvus.proto.query.SegmentInfo")
proto.RegisterType((*CollectionInfo)(nil), "milvus.proto.query.CollectionInfo") proto.RegisterType((*CollectionInfo)(nil), "milvus.proto.query.CollectionInfo")
proto.RegisterType((*ReplicaInfo)(nil), "milvus.proto.query.ReplicaInfo")
proto.RegisterType((*ShardReplica)(nil), "milvus.proto.query.ShardReplica")
proto.RegisterType((*UnsubscribeChannels)(nil), "milvus.proto.query.UnsubscribeChannels") proto.RegisterType((*UnsubscribeChannels)(nil), "milvus.proto.query.UnsubscribeChannels")
proto.RegisterType((*UnsubscribeChannelInfo)(nil), "milvus.proto.query.UnsubscribeChannelInfo") proto.RegisterType((*UnsubscribeChannelInfo)(nil), "milvus.proto.query.UnsubscribeChannelInfo")
proto.RegisterType((*SegmentChangeInfo)(nil), "milvus.proto.query.SegmentChangeInfo") proto.RegisterType((*SegmentChangeInfo)(nil), "milvus.proto.query.SegmentChangeInfo")
@ -3037,187 +2795,177 @@ func init() {
func init() { proto.RegisterFile("query_coord.proto", fileDescriptor_aab7cc9a69ed26e8) } func init() { proto.RegisterFile("query_coord.proto", fileDescriptor_aab7cc9a69ed26e8) }
var fileDescriptor_aab7cc9a69ed26e8 = []byte{ var fileDescriptor_aab7cc9a69ed26e8 = []byte{
// 2868 bytes of a gzipped FileDescriptorProto // 2707 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x1a, 0x4b, 0x6f, 0x24, 0x47, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0x4b, 0x73, 0x1c, 0x49,
0xd9, 0x3d, 0x2f, 0xcf, 0x7c, 0xf3, 0xdc, 0xf2, 0xae, 0x33, 0x1e, 0xf2, 0x70, 0x7a, 0xb3, 0x0f, 0x11, 0x56, 0xcf, 0x4b, 0x33, 0x39, 0x0f, 0x8d, 0x4b, 0xb6, 0x76, 0x34, 0xec, 0xae, 0xe5, 0xf6,
0x36, 0xc4, 0xbb, 0x38, 0x80, 0x12, 0x05, 0x0e, 0x6b, 0x9b, 0x75, 0x4c, 0x76, 0x1d, 0xa7, 0xed, 0x4b, 0x78, 0x59, 0xd9, 0xc8, 0x40, 0xec, 0x06, 0x70, 0xb0, 0x24, 0xac, 0x15, 0xb6, 0xb5, 0xda,
0x0d, 0xb0, 0x8a, 0xd4, 0xe9, 0x99, 0x2e, 0x8f, 0x5b, 0xe9, 0xc7, 0x6c, 0x57, 0x4f, 0xbc, 0x5e, 0x96, 0x6c, 0xc0, 0xe1, 0x88, 0xa1, 0x67, 0xba, 0x34, 0xea, 0x70, 0x3f, 0xc6, 0x5d, 0x3d, 0xb6,
0xae, 0x48, 0x24, 0x3c, 0x85, 0x04, 0xe2, 0x82, 0x38, 0x81, 0x80, 0x43, 0xc4, 0x99, 0x1b, 0x3f, 0x65, 0xae, 0x1c, 0x76, 0x79, 0x04, 0xc1, 0x69, 0x2f, 0x04, 0x27, 0x08, 0xe0, 0xb0, 0xc1, 0x99,
0x01, 0x89, 0x0b, 0x27, 0xc4, 0x0d, 0xfe, 0x00, 0x47, 0x04, 0xaa, 0x47, 0xf7, 0xf4, 0xa3, 0xda, 0x1b, 0x3f, 0x81, 0x08, 0xee, 0x04, 0x37, 0xf8, 0x03, 0x1c, 0x09, 0x88, 0x7a, 0x74, 0x4f, 0x3f,
0x33, 0xb6, 0xe3, 0xec, 0x0a, 0x71, 0xeb, 0xfa, 0xba, 0xea, 0xfb, 0xbe, 0xfa, 0xbe, 0xaf, 0xbe, 0xaa, 0x35, 0x2d, 0x69, 0xbd, 0x76, 0x10, 0xdc, 0xba, 0xb2, 0xaa, 0x32, 0xb3, 0x2a, 0xb3, 0x32,
0x57, 0x15, 0x5c, 0x78, 0x38, 0xc6, 0xfe, 0x91, 0x3e, 0xf0, 0x3c, 0xdf, 0x5c, 0x19, 0xf9, 0x5e, 0xbf, 0xaa, 0x6c, 0x38, 0xf3, 0x64, 0x8c, 0xbd, 0xc3, 0xde, 0xc0, 0x75, 0x3d, 0x63, 0x65, 0xe4,
0xe0, 0x21, 0xe4, 0x58, 0xf6, 0x87, 0x63, 0xc2, 0x47, 0x2b, 0xec, 0x7f, 0xaf, 0x31, 0xf0, 0x1c, 0xb9, 0xbe, 0x8b, 0x90, 0x6d, 0x5a, 0x4f, 0xc7, 0x84, 0xb7, 0x56, 0x58, 0x7f, 0xb7, 0x31, 0x70,
0xc7, 0x73, 0x39, 0xac, 0xd7, 0x88, 0xcf, 0xe8, 0xb5, 0x2c, 0x37, 0xc0, 0xbe, 0x6b, 0xd8, 0xe1, 0x6d, 0xdb, 0x75, 0x38, 0xad, 0xdb, 0x88, 0x8e, 0xe8, 0xb6, 0x4c, 0xc7, 0xc7, 0x9e, 0xa3, 0x5b,
0x5f, 0x32, 0x38, 0xc0, 0x8e, 0x21, 0x46, 0x1d, 0xd3, 0x08, 0x8c, 0x38, 0x7e, 0xf5, 0xbb, 0x0a, 0x41, 0x2f, 0x19, 0x1c, 0x60, 0x5b, 0x17, 0xad, 0xb6, 0xa1, 0xfb, 0x7a, 0x94, 0xbf, 0xfa, 0x63,
0x2c, 0xee, 0x1e, 0x78, 0x87, 0xeb, 0x9e, 0x6d, 0xe3, 0x41, 0x60, 0x79, 0x2e, 0xd1, 0xf0, 0xc3, 0x05, 0x16, 0x76, 0x0f, 0xdc, 0x67, 0xeb, 0xae, 0x65, 0xe1, 0x81, 0x6f, 0xba, 0x0e, 0xd1, 0xf0,
0x31, 0x26, 0x01, 0xba, 0x05, 0xa5, 0xbe, 0x41, 0x70, 0x57, 0x59, 0x56, 0xae, 0xd7, 0x57, 0x9f, 0x93, 0x31, 0x26, 0x3e, 0xba, 0x01, 0xa5, 0xbe, 0x4e, 0x70, 0x47, 0x59, 0x52, 0x96, 0xeb, 0xab,
0x5d, 0x49, 0x70, 0x22, 0x58, 0xb8, 0x47, 0x86, 0x6b, 0x06, 0xc1, 0x1a, 0x9b, 0x89, 0x10, 0x94, 0x6f, 0xae, 0xc4, 0x34, 0x11, 0x2a, 0xdc, 0x23, 0xc3, 0x35, 0x9d, 0x60, 0x8d, 0x8d, 0x44, 0x08,
0xcc, 0xfe, 0xd6, 0x46, 0xb7, 0xb0, 0xac, 0x5c, 0x2f, 0x6a, 0xec, 0x1b, 0xbd, 0x04, 0xcd, 0x41, 0x4a, 0x46, 0x7f, 0x6b, 0xa3, 0x53, 0x58, 0x52, 0x96, 0x8b, 0x1a, 0xfb, 0x46, 0x97, 0xa0, 0x39,
0x84, 0x7b, 0x6b, 0x83, 0x74, 0x8b, 0xcb, 0xc5, 0xeb, 0x45, 0x2d, 0x09, 0x54, 0x7f, 0xab, 0xc0, 0x08, 0x79, 0x6f, 0x6d, 0x90, 0x4e, 0x71, 0xa9, 0xb8, 0x5c, 0xd4, 0xe2, 0x44, 0xf5, 0x77, 0x0a,
0x33, 0x19, 0x36, 0xc8, 0xc8, 0x73, 0x09, 0x46, 0xaf, 0x42, 0x85, 0x04, 0x46, 0x30, 0x26, 0x82, 0xbc, 0x91, 0x52, 0x83, 0x8c, 0x5c, 0x87, 0x60, 0x74, 0x13, 0x2a, 0xc4, 0xd7, 0xfd, 0x31, 0x11,
0x93, 0xcf, 0x49, 0x39, 0xd9, 0x65, 0x53, 0x34, 0x31, 0x35, 0x4b, 0xb6, 0x20, 0x21, 0x8b, 0xbe, 0x9a, 0x7c, 0x49, 0xaa, 0xc9, 0x2e, 0x1b, 0xa2, 0x89, 0xa1, 0x69, 0xb1, 0x05, 0x89, 0x58, 0xf4,
0x08, 0x17, 0x2d, 0xf7, 0x1e, 0x76, 0x3c, 0xff, 0x48, 0x1f, 0x61, 0x7f, 0x80, 0xdd, 0xc0, 0x18, 0x55, 0x38, 0x6b, 0x3a, 0xf7, 0xb0, 0xed, 0x7a, 0x87, 0xbd, 0x11, 0xf6, 0x06, 0xd8, 0xf1, 0xf5,
0xe2, 0x90, 0xc7, 0x85, 0xf0, 0xdf, 0xce, 0xe4, 0x97, 0xfa, 0x1b, 0x05, 0x2e, 0x51, 0x4e, 0x77, 0x21, 0x0e, 0x74, 0x9c, 0x0f, 0xfa, 0x76, 0x26, 0x5d, 0xea, 0x6f, 0x15, 0x38, 0x47, 0x35, 0xdd,
0x0c, 0x3f, 0xb0, 0xce, 0x41, 0x5e, 0x2a, 0x34, 0xe2, 0x3c, 0x76, 0x8b, 0xec, 0x5f, 0x02, 0x46, 0xd1, 0x3d, 0xdf, 0x7c, 0x09, 0xfb, 0xa5, 0x42, 0x23, 0xaa, 0x63, 0xa7, 0xc8, 0xfa, 0x62, 0x34,
0xe7, 0x8c, 0x42, 0xf2, 0x74, 0x6f, 0x25, 0xc6, 0x6e, 0x02, 0xa6, 0xfe, 0x5a, 0x28, 0x36, 0xce, 0x3a, 0x66, 0x14, 0x88, 0xa7, 0x6b, 0x2b, 0x31, 0x75, 0x63, 0x34, 0xf5, 0x37, 0xc2, 0xb0, 0x51,
0xe7, 0x59, 0x04, 0x9a, 0xa6, 0x59, 0xc8, 0xd2, 0x3c, 0x8d, 0x38, 0xff, 0xa1, 0xc0, 0xa5, 0xbb, 0x3d, 0x4f, 0xb3, 0xa1, 0x49, 0x99, 0x85, 0xb4, 0xcc, 0x93, 0x6c, 0xe7, 0x3f, 0x14, 0x38, 0x77,
0x9e, 0x61, 0x4e, 0x14, 0xff, 0xd9, 0x8b, 0xf3, 0x6b, 0x50, 0xe1, 0xa7, 0xa4, 0x5b, 0x62, 0xb4, 0xd7, 0xd5, 0x8d, 0x89, 0xe1, 0xbf, 0xf8, 0xed, 0xfc, 0x36, 0x54, 0xf8, 0x29, 0xe9, 0x94, 0x98,
0xae, 0x24, 0x69, 0x89, 0x13, 0x34, 0xe1, 0x70, 0x97, 0x01, 0x34, 0xb1, 0x08, 0x5d, 0x81, 0x96, 0xac, 0xcb, 0x71, 0x59, 0xe2, 0x04, 0x4d, 0x34, 0xdc, 0x65, 0x04, 0x4d, 0x4c, 0x42, 0x97, 0xa1,
0x8f, 0x47, 0xb6, 0x35, 0x30, 0x74, 0x77, 0xec, 0xf4, 0xb1, 0xdf, 0x2d, 0x2f, 0x2b, 0xd7, 0xcb, 0xe5, 0xe1, 0x91, 0x65, 0x0e, 0xf4, 0x9e, 0x33, 0xb6, 0xfb, 0xd8, 0xeb, 0x94, 0x97, 0x94, 0xe5,
0x5a, 0x53, 0x40, 0xb7, 0x19, 0x50, 0xfd, 0xa5, 0x02, 0x5d, 0x0d, 0xdb, 0xd8, 0x20, 0xf8, 0x49, 0xb2, 0xd6, 0x14, 0xd4, 0x6d, 0x46, 0x54, 0x7f, 0xa5, 0x40, 0x47, 0xc3, 0x16, 0xd6, 0x09, 0x7e,
0x6e, 0x76, 0x11, 0x2a, 0xae, 0x67, 0xe2, 0xad, 0x0d, 0xb6, 0xd9, 0xa2, 0x26, 0x46, 0xea, 0x0f, 0x95, 0x8b, 0x5d, 0x80, 0x8a, 0xe3, 0x1a, 0x78, 0x6b, 0x83, 0x2d, 0xb6, 0xa8, 0x89, 0x96, 0xfa,
0x0a, 0x5c, 0x11, 0x4f, 0xb9, 0x5d, 0xc7, 0x94, 0x55, 0xfe, 0x74, 0x94, 0x55, 0x91, 0x29, 0xeb, 0xd3, 0x02, 0x37, 0xc4, 0x6b, 0xee, 0xd7, 0x11, 0x63, 0x95, 0x3f, 0x1f, 0x63, 0x55, 0x64, 0xc6,
0x4f, 0x13, 0x65, 0x3d, 0xed, 0x02, 0x99, 0x28, 0xb4, 0x9c, 0x50, 0xe8, 0xb7, 0x61, 0x69, 0xdd, 0xfa, 0xf3, 0xc4, 0x58, 0xaf, 0xfb, 0x86, 0x4c, 0x0c, 0x5a, 0x8e, 0x19, 0xf4, 0x07, 0xb0, 0xb8,
0xc7, 0x46, 0x80, 0xdf, 0xa1, 0x41, 0x63, 0xfd, 0xc0, 0x70, 0x5d, 0x6c, 0x87, 0x5b, 0x48, 0x13, 0xee, 0x61, 0xdd, 0xc7, 0x1f, 0xd1, 0xa4, 0xb1, 0x7e, 0xa0, 0x3b, 0x0e, 0xb6, 0x82, 0x25, 0x24,
0x57, 0x24, 0xc4, 0xbb, 0x30, 0x3f, 0xf2, 0xbd, 0x47, 0x47, 0x11, 0xdf, 0xe1, 0x50, 0xfd, 0x9d, 0x85, 0x2b, 0x12, 0xe1, 0x1d, 0x98, 0x1d, 0x79, 0xee, 0xf3, 0xc3, 0x50, 0xef, 0xa0, 0xa9, 0xfe,
0x02, 0x3d, 0x19, 0xee, 0xb3, 0xf8, 0x97, 0xcb, 0xd0, 0x14, 0xd1, 0x8f, 0x63, 0x63, 0x34, 0x6b, 0x5e, 0x81, 0xae, 0x8c, 0xf7, 0x69, 0xe2, 0xcb, 0x45, 0x68, 0x8a, 0xec, 0xc7, 0xb9, 0x31, 0x99,
0x5a, 0xe3, 0x61, 0x8c, 0x02, 0xba, 0x05, 0x17, 0xf9, 0x24, 0x1f, 0x93, 0xb1, 0x1d, 0x44, 0x73, 0x35, 0xad, 0xf1, 0x24, 0x22, 0x01, 0xdd, 0x80, 0xb3, 0x7c, 0x90, 0x87, 0xc9, 0xd8, 0xf2, 0xc3,
0x8b, 0x6c, 0x2e, 0x62, 0xff, 0x34, 0xf6, 0x4b, 0xac, 0x50, 0x7f, 0xaf, 0xc0, 0xd2, 0x26, 0x0e, 0xb1, 0x45, 0x36, 0x16, 0xb1, 0x3e, 0x8d, 0x75, 0x89, 0x19, 0xea, 0x1f, 0x14, 0x58, 0xdc, 0xc4,
0x22, 0x25, 0x52, 0xaa, 0xf8, 0x29, 0x75, 0xd9, 0x9f, 0x28, 0xd0, 0x93, 0xf1, 0x7a, 0x16, 0xb1, 0x7e, 0x68, 0x44, 0x2a, 0x15, 0xbf, 0xa6, 0x21, 0xfb, 0x33, 0x05, 0xba, 0x32, 0x5d, 0x4f, 0xb3,
0x3e, 0x80, 0xc5, 0x88, 0x86, 0x6e, 0x62, 0x32, 0xf0, 0xad, 0x11, 0x33, 0x66, 0xe6, 0xc0, 0xeb, 0xad, 0x0f, 0x61, 0x21, 0x94, 0xd1, 0x33, 0x30, 0x19, 0x78, 0xe6, 0x88, 0x39, 0x33, 0x0b, 0xe0,
0xab, 0x97, 0x57, 0xb2, 0x09, 0xc6, 0x4a, 0x9a, 0x83, 0x4b, 0x11, 0x8a, 0x8d, 0x18, 0x06, 0xf5, 0xf5, 0xd5, 0x8b, 0x2b, 0x69, 0x80, 0xb1, 0x92, 0xd4, 0xe0, 0x5c, 0xc8, 0x62, 0x23, 0xc2, 0x41,
0x47, 0x0a, 0x5c, 0xda, 0xc4, 0xc1, 0x2e, 0x1e, 0x3a, 0xd8, 0x0d, 0xb6, 0xdc, 0x7d, 0xef, 0xf4, 0xfd, 0xb9, 0x02, 0xe7, 0x36, 0xb1, 0xbf, 0x8b, 0x87, 0x36, 0x76, 0xfc, 0x2d, 0x67, 0xdf, 0x3d,
0x72, 0x7d, 0x1e, 0x80, 0x08, 0x3c, 0x51, 0x70, 0x89, 0x41, 0x66, 0x91, 0x31, 0xcb, 0x65, 0xd2, 0xf9, 0xbe, 0xbe, 0x0d, 0x40, 0x04, 0x9f, 0x30, 0xb9, 0x44, 0x28, 0x79, 0xf6, 0x98, 0x61, 0x99,
0xfc, 0x9c, 0x45, 0x76, 0x5f, 0x86, 0xb2, 0xe5, 0xee, 0x7b, 0xa1, 0xa8, 0x5e, 0x90, 0x89, 0x2a, 0xa4, 0x3e, 0xa7, 0xd9, 0xbb, 0xaf, 0x43, 0xd9, 0x74, 0xf6, 0xdd, 0x60, 0xab, 0xce, 0xcb, 0xb6,
0x4e, 0x8c, 0xcf, 0x56, 0x7f, 0xa6, 0x00, 0xda, 0xc4, 0x81, 0xc6, 0x1d, 0xca, 0x19, 0x6c, 0x2d, 0x2a, 0x2a, 0x8c, 0x8f, 0x56, 0x1d, 0xae, 0xc5, 0x81, 0xee, 0x19, 0x77, 0xb1, 0x6e, 0x60, 0xef,
0xbd, 0xe7, 0x82, 0xc4, 0xae, 0xae, 0x43, 0xe7, 0xd0, 0x0a, 0x0e, 0x74, 0x72, 0x60, 0xf8, 0xa6, 0x14, 0xee, 0x96, 0x5c, 0x76, 0x41, 0xb2, 0xec, 0x9f, 0x29, 0xf0, 0x46, 0x4a, 0xe0, 0x69, 0xd6,
0x4e, 0x8f, 0x3e, 0x61, 0xb2, 0xa9, 0x6a, 0x2d, 0x0a, 0xdf, 0xa5, 0xe0, 0x6d, 0x0a, 0x55, 0xbf, 0xfd, 0x2d, 0xa8, 0x10, 0xca, 0x2c, 0x58, 0xf8, 0x25, 0xe9, 0xc2, 0x23, 0xe2, 0xee, 0x9a, 0xc4,
0xa7, 0xc0, 0x42, 0x82, 0xad, 0xb3, 0x88, 0xe6, 0x0d, 0xa8, 0x0a, 0x87, 0x79, 0xac, 0x74, 0x04, 0xd7, 0xc4, 0x1c, 0xd5, 0x85, 0x76, 0xb2, 0x0f, 0x5d, 0x80, 0x86, 0x38, 0xaa, 0x3d, 0x47, 0xb7,
0x31, 0x26, 0x9d, 0x68, 0x81, 0xea, 0x72, 0x35, 0x51, 0xd6, 0xee, 0x62, 0xc3, 0xc4, 0xfe, 0xf9, 0xf9, 0x06, 0xd4, 0xb4, 0xba, 0xa0, 0x6d, 0xeb, 0x36, 0x46, 0x8b, 0x50, 0xa5, 0x81, 0xab, 0x67,
0xca, 0x48, 0xfd, 0xa1, 0x02, 0xcf, 0x64, 0x08, 0x9e, 0x65, 0xf7, 0x5f, 0x85, 0x0a, 0x93, 0x77, 0x1a, 0x81, 0xf9, 0x67, 0x59, 0x20, 0x33, 0x08, 0x7a, 0x0b, 0x80, 0x75, 0xe9, 0x86, 0xe1, 0x71,
0xb8, 0xf7, 0x97, 0xa4, 0x96, 0x11, 0x23, 0x77, 0xd7, 0x22, 0x81, 0x26, 0xd6, 0xa8, 0x1e, 0x74, 0x30, 0x51, 0xd3, 0x6a, 0x94, 0x72, 0x8b, 0x12, 0xd4, 0x7f, 0x17, 0x60, 0xe1, 0x96, 0x61, 0xc8,
0xd2, 0xff, 0xd0, 0x8b, 0xd0, 0x10, 0xbe, 0x4c, 0x77, 0x0d, 0x87, 0x0b, 0xa0, 0xa6, 0xd5, 0x05, 0xc2, 0xdc, 0xf1, 0x37, 0x7c, 0x12, 0x4d, 0x0b, 0xd1, 0x68, 0x9a, 0xeb, 0x8c, 0xa7, 0x42, 0x58,
0x6c, 0xdb, 0x70, 0x30, 0x5a, 0x82, 0x2a, 0x55, 0xaf, 0x6e, 0x99, 0xe1, 0xf9, 0x98, 0x67, 0x9e, 0xe9, 0x18, 0x21, 0xac, 0x9c, 0x15, 0xc2, 0xd0, 0x26, 0x34, 0x09, 0xc6, 0x8f, 0x7b, 0x23, 0x97,
0xde, 0x24, 0xe8, 0x39, 0x00, 0xf6, 0xcb, 0x30, 0x4d, 0x9f, 0x67, 0x5b, 0x35, 0xad, 0x46, 0x21, 0xb0, 0x33, 0xc8, 0x32, 0x56, 0x7d, 0x55, 0x8d, 0xaf, 0x26, 0xc4, 0xfd, 0xf7, 0xc8, 0x70, 0x47,
0xb7, 0x29, 0x40, 0xfd, 0x77, 0x01, 0x16, 0x6f, 0x9b, 0xa6, 0x2c, 0x0e, 0x9c, 0x5c, 0xe0, 0x93, 0x8c, 0xd4, 0x1a, 0x74, 0x62, 0xd0, 0x42, 0xf7, 0x61, 0x61, 0x68, 0xb9, 0x7d, 0xdd, 0xea, 0x11,
0x70, 0x53, 0x88, 0x87, 0x9b, 0x99, 0x9c, 0x60, 0xc6, 0xc7, 0x97, 0x4e, 0xe0, 0xe3, 0xcb, 0x79, 0xac, 0x5b, 0xd8, 0xe8, 0x89, 0xf3, 0x45, 0x3a, 0xb3, 0xf9, 0x1c, 0xfc, 0x2c, 0x9f, 0xbe, 0xcb,
0x3e, 0x1e, 0x6d, 0x42, 0x93, 0x60, 0xfc, 0x81, 0x3e, 0xf2, 0x08, 0x73, 0x52, 0x2c, 0xa4, 0xd7, 0x66, 0x8b, 0x0e, 0xa2, 0xfe, 0x5d, 0x81, 0x45, 0x0d, 0xdb, 0xee, 0x53, 0xfc, 0xbf, 0x6a, 0x02,
0x57, 0xd5, 0xe4, 0x6e, 0xa2, 0xc2, 0xe8, 0x1e, 0x19, 0xee, 0x88, 0x99, 0x5a, 0x83, 0x2e, 0x0c, 0xf5, 0x97, 0x0a, 0x34, 0x28, 0x38, 0xba, 0x87, 0x7d, 0x9d, 0xee, 0x04, 0x7a, 0x1f, 0x6a, 0x96,
0x47, 0xe8, 0x3e, 0x2c, 0x0e, 0x6d, 0xaf, 0x6f, 0xd8, 0x3a, 0xc1, 0x86, 0x8d, 0x4d, 0x5d, 0x38, 0xab, 0x1b, 0x3d, 0xff, 0x70, 0xc4, 0x97, 0xd6, 0x4a, 0x2e, 0x8d, 0xef, 0x1e, 0x9d, 0xb4, 0x77,
0x20, 0xd2, 0x9d, 0x9f, 0xcd, 0x03, 0x5c, 0xe4, 0xcb, 0x77, 0xd9, 0x6a, 0xf1, 0x83, 0xa8, 0x7f, 0x38, 0xc2, 0x5a, 0xd5, 0x12, 0x5f, 0x79, 0x8e, 0x74, 0x2a, 0x5b, 0x14, 0x65, 0x00, 0xbf, 0x08,
0x57, 0x60, 0x49, 0xc3, 0x8e, 0xf7, 0x21, 0xfe, 0x5f, 0x55, 0x81, 0xfa, 0x53, 0x05, 0x1a, 0x34, 0x0b, 0xdf, 0xd3, 0xfd, 0xc1, 0xc1, 0x86, 0x2d, 0xd4, 0x24, 0xaf, 0x66, 0xcf, 0xf3, 0x80, 0x94,
0x7b, 0xbc, 0x87, 0x03, 0x76, 0xda, 0xd1, 0xeb, 0x50, 0xb3, 0x3d, 0xc3, 0xd4, 0x83, 0xa3, 0x11, 0x30, 0x94, 0x96, 0x65, 0x9e, 0x46, 0x6f, 0xa5, 0x2b, 0x0f, 0x84, 0x19, 0x22, 0xa1, 0x34, 0x02,
0xdf, 0x5a, 0x2b, 0xbd, 0x35, 0x2e, 0x3d, 0xba, 0x68, 0xef, 0x68, 0x84, 0xb5, 0xaa, 0x2d, 0xbe, 0xf6, 0x2a, 0x27, 0x01, 0x7b, 0xeb, 0xd0, 0xc4, 0xcf, 0x07, 0xd6, 0x98, 0x86, 0x15, 0x26, 0x9d,
0x66, 0x72, 0x7b, 0xe9, 0x70, 0x5a, 0x94, 0x55, 0x40, 0x45, 0x58, 0xfc, 0xa6, 0x11, 0x0c, 0x0e, 0xfb, 0xf9, 0xdb, 0x12, 0xe9, 0x51, 0x37, 0x6f, 0x88, 0x49, 0x5b, 0x42, 0x07, 0x6e, 0x6a, 0x1b,
0x36, 0x1c, 0xc1, 0x26, 0x79, 0x32, 0x32, 0x9f, 0x25, 0x8b, 0x8b, 0x62, 0x4d, 0x59, 0x66, 0x69, 0xfb, 0x7a, 0xa7, 0xca, 0xd4, 0x58, 0xca, 0x32, 0x75, 0xe0, 0x1f, 0xdc, 0xdc, 0xb4, 0xa5, 0xfe,
0xb4, 0x6c, 0x5f, 0x79, 0x57, 0xa8, 0x21, 0x16, 0x6b, 0x62, 0xd9, 0x70, 0xe5, 0x34, 0xd9, 0xf0, 0x47, 0x81, 0x45, 0x6e, 0x26, 0x6c, 0xf9, 0xfa, 0xab, 0xb5, 0x54, 0x68, 0x85, 0xd2, 0x31, 0xad,
0x3a, 0x34, 0xf1, 0xa3, 0x81, 0x3d, 0xa6, 0x6e, 0x85, 0x51, 0xe7, 0x76, 0xfe, 0xbc, 0x84, 0x7a, 0x10, 0xd9, 0x81, 0xda, 0xb1, 0x77, 0xe0, 0xd3, 0x12, 0xcc, 0x89, 0xed, 0xa5, 0x23, 0xd8, 0xf9,
0xdc, 0xcc, 0x1b, 0x62, 0xd1, 0x96, 0xe0, 0x81, 0xab, 0xda, 0xc1, 0x81, 0xd1, 0xad, 0x32, 0x36, 0x79, 0x13, 0x6a, 0x61, 0x72, 0x17, 0xe0, 0x73, 0x42, 0x40, 0x4b, 0x50, 0x8f, 0x78, 0x8f, 0x58,
0x96, 0xf3, 0x54, 0x1d, 0xda, 0x07, 0x57, 0x37, 0x1d, 0xa9, 0xff, 0x51, 0x60, 0x89, 0xab, 0x09, 0x68, 0x94, 0x94, 0x6b, 0xb5, 0x01, 0x54, 0x2b, 0x45, 0xa0, 0xda, 0x5b, 0x00, 0xfb, 0xd6, 0x98,
0xdb, 0x81, 0xf1, 0x64, 0x35, 0x15, 0x69, 0xa1, 0x74, 0x42, 0x2d, 0xc4, 0x24, 0x50, 0x3b, 0xb1, 0x1c, 0xf4, 0x7c, 0xd3, 0xc6, 0x02, 0x30, 0xd7, 0x18, 0x65, 0xcf, 0xb4, 0x31, 0xba, 0x05, 0x8d,
0x04, 0x7e, 0x51, 0x82, 0xb6, 0x10, 0x2f, 0x9d, 0xc1, 0xce, 0xcf, 0xb3, 0x50, 0x8b, 0xb2, 0x1f, 0xbe, 0xe9, 0x58, 0xee, 0xb0, 0x37, 0xd2, 0xfd, 0x03, 0xd2, 0xa9, 0x64, 0xfa, 0xcb, 0x6d, 0x13,
0x91, 0x9d, 0x4f, 0x00, 0x68, 0x19, 0xea, 0x31, 0xeb, 0x11, 0x1b, 0x8d, 0x83, 0x66, 0xda, 0x6d, 0x5b, 0xc6, 0x1a, 0x1b, 0xab, 0xd5, 0xf9, 0x9c, 0x1d, 0x3a, 0x05, 0xbd, 0x0d, 0x75, 0x67, 0x6c,
0x98, 0xcb, 0x96, 0x62, 0xb9, 0xec, 0x73, 0x00, 0xfb, 0xf6, 0x98, 0x1c, 0xe8, 0x81, 0xe5, 0x60, 0xf7, 0xdc, 0xfd, 0x9e, 0xe7, 0x3e, 0xa3, 0x1e, 0xc7, 0x44, 0x38, 0x63, 0xfb, 0xc3, 0x7d, 0xcd,
0x51, 0x51, 0xd4, 0x18, 0x64, 0xcf, 0x72, 0x30, 0xba, 0x0d, 0x8d, 0xbe, 0xe5, 0xda, 0xde, 0x50, 0x7d, 0x46, 0x93, 0x6b, 0x8d, 0xa6, 0x59, 0x62, 0xb9, 0x43, 0xd2, 0xa9, 0xe6, 0xe2, 0x3f, 0x99,
0x1f, 0x19, 0xc1, 0x01, 0xe9, 0x56, 0x72, 0xed, 0xe5, 0x8e, 0x85, 0x6d, 0x73, 0x8d, 0xcd, 0xd5, 0x40, 0x67, 0x1b, 0xd4, 0x8f, 0xd8, 0xec, 0x5a, 0xbe, 0xd9, 0xe1, 0x04, 0x74, 0x05, 0x5a, 0x03,
0xea, 0x7c, 0xcd, 0x0e, 0x5d, 0x82, 0x9e, 0x87, 0xba, 0x3b, 0x76, 0x74, 0x6f, 0x5f, 0xf7, 0xbd, 0xd7, 0x1e, 0xe9, 0x6c, 0x87, 0x6e, 0x7b, 0xae, 0xdd, 0x01, 0x76, 0x56, 0x13, 0x54, 0xb4, 0x0e,
0x43, 0x6a, 0x71, 0x8c, 0x84, 0x3b, 0x76, 0xde, 0xde, 0xd7, 0xbc, 0x43, 0x1a, 0x5c, 0x6b, 0x34, 0x75, 0xd3, 0x31, 0xf0, 0x73, 0x71, 0x6a, 0xea, 0x4c, 0x8e, 0x2a, 0x33, 0x39, 0x13, 0xb4, 0x45,
0xcc, 0x12, 0xdb, 0x1b, 0x92, 0x6e, 0x75, 0x26, 0xfc, 0x93, 0x05, 0x74, 0xb5, 0x49, 0xed, 0x88, 0xc7, 0x32, 0xa3, 0x83, 0x19, 0x7c, 0x12, 0x9a, 0xf3, 0x85, 0x45, 0x7b, 0xc4, 0x7c, 0x81, 0x3b,
0xad, 0xae, 0xcd, 0xb6, 0x3a, 0x5a, 0x80, 0xae, 0x42, 0x6b, 0xe0, 0x39, 0x23, 0x83, 0x49, 0xe8, 0x0d, 0x6e, 0x45, 0x41, 0xdb, 0x35, 0x5f, 0x60, 0xf5, 0x8f, 0x05, 0x68, 0xc5, 0x39, 0xd0, 0x4b,
0x8e, 0xef, 0x39, 0x5d, 0x60, 0x67, 0x35, 0x05, 0x45, 0xeb, 0x50, 0xb7, 0x5c, 0x13, 0x3f, 0x12, 0xc7, 0x3e, 0xa3, 0x04, 0x6e, 0x11, 0x34, 0x29, 0x3f, 0xec, 0xe8, 0x7d, 0x8b, 0x9e, 0x65, 0x03,
0xa7, 0xa6, 0xce, 0xe8, 0xa8, 0x32, 0x95, 0x33, 0x42, 0x5b, 0x74, 0x2e, 0x53, 0x3a, 0x58, 0xe1, 0x3f, 0x67, 0x5e, 0x51, 0xd5, 0xea, 0x9c, 0xc6, 0x18, 0x50, 0xeb, 0x72, 0xbd, 0x19, 0xc8, 0xe0,
0x27, 0xa1, 0x31, 0x5f, 0x68, 0x54, 0x27, 0xd6, 0x63, 0xdc, 0x6d, 0x70, 0x2d, 0x0a, 0xd8, 0xae, 0x97, 0x82, 0x1a, 0xa3, 0x30, 0x88, 0xd1, 0x81, 0x59, 0xae, 0x5f, 0xe0, 0x13, 0x41, 0x93, 0xf6,
0xf5, 0x18, 0xab, 0x7f, 0x28, 0x40, 0x2b, 0x89, 0x81, 0x56, 0x65, 0xfb, 0x0c, 0x12, 0x9a, 0x45, 0xf4, 0xc7, 0x26, 0x93, 0xca, 0x7d, 0x22, 0x68, 0xa2, 0x0d, 0x68, 0x70, 0x96, 0x23, 0xdd, 0xd3,
0x38, 0xa4, 0xf8, 0xb0, 0x6b, 0xf4, 0x6d, 0x7a, 0x96, 0x4d, 0xfc, 0x88, 0x59, 0x45, 0x55, 0xab, 0xed, 0xc0, 0x23, 0x2e, 0x48, 0x0f, 0xea, 0x1d, 0x7c, 0xf8, 0x40, 0xb7, 0xc6, 0x78, 0x47, 0x37,
0x73, 0x18, 0x43, 0x40, 0xb5, 0xcb, 0xf9, 0x66, 0x49, 0x06, 0xaf, 0x9a, 0x6a, 0x0c, 0xc2, 0x52, 0x3d, 0x8d, 0xef, 0xe0, 0x0e, 0x9b, 0x85, 0x96, 0xa1, 0xcd, 0xb9, 0xec, 0x9b, 0x16, 0x16, 0xbe,
0x8c, 0x2e, 0xcc, 0x73, 0xfe, 0x42, 0x9b, 0x08, 0x87, 0xf4, 0x4f, 0x7f, 0x6c, 0x31, 0xaa, 0xdc, 0x35, 0xcb, 0x70, 0x4c, 0x8b, 0xd1, 0x6f, 0x9b, 0x16, 0xe6, 0xee, 0x13, 0x2e, 0x81, 0xed, 0x59,
0x26, 0xc2, 0x21, 0xda, 0x80, 0x06, 0x47, 0x39, 0x32, 0x7c, 0xc3, 0x09, 0x2d, 0xe2, 0x45, 0xe9, 0x95, 0x7b, 0x0f, 0xa3, 0xb0, 0x1d, 0xfb, 0x67, 0x01, 0xe6, 0xe9, 0x21, 0x0a, 0x92, 0xef, 0xc9,
0x41, 0x7d, 0x0b, 0x1f, 0xbd, 0x6b, 0xd8, 0x63, 0xbc, 0x63, 0x58, 0xbe, 0xc6, 0x25, 0xb8, 0xc3, 0xe3, 0xc8, 0x5b, 0x00, 0x06, 0xf1, 0x7b, 0xb1, 0x58, 0x52, 0x33, 0x88, 0xbf, 0xcd, 0xc3, 0xc9,
0x56, 0xd1, 0x34, 0x96, 0x63, 0xd9, 0xb7, 0x6c, 0x2c, 0x6c, 0x6b, 0x9e, 0xe5, 0x31, 0x2d, 0x06, 0xfb, 0x41, 0xa8, 0x28, 0x66, 0x5f, 0x13, 0x12, 0x87, 0x3a, 0x1d, 0xb4, 0x4f, 0xf4, 0x9c, 0x72,
0xbf, 0x63, 0xd9, 0x98, 0x9b, 0x4f, 0xb4, 0x05, 0x26, 0xb3, 0x2a, 0xb7, 0x1e, 0x06, 0x61, 0x12, 0x11, 0x9a, 0xc4, 0x1d, 0x7b, 0x03, 0xdc, 0x8b, 0x5d, 0x6b, 0x1b, 0x9c, 0xb8, 0x2d, 0x8f, 0x76,
0xfb, 0x67, 0x01, 0x16, 0xe8, 0x21, 0x0a, 0x83, 0xef, 0xe9, 0xfd, 0xc8, 0x73, 0x00, 0x26, 0x09, 0x15, 0xe9, 0xb3, 0x4e, 0x24, 0x6c, 0xcd, 0x1e, 0x3b, 0x6c, 0xfd, 0x4d, 0x81, 0x05, 0xf1, 0x04,
0xf4, 0x84, 0x2f, 0xa9, 0x99, 0x24, 0xd8, 0xe6, 0xee, 0xe4, 0xf5, 0xd0, 0x55, 0x14, 0xf3, 0xeb, 0x70, 0xfa, 0xdd, 0xce, 0x8a, 0xda, 0x41, 0x8c, 0x2a, 0x1e, 0x71, 0x9d, 0x2c, 0xe5, 0xc8, 0xb9,
0xa8, 0xd4, 0xa1, 0xce, 0x3a, 0xed, 0x53, 0xf5, 0x9b, 0x2e, 0x43, 0x93, 0x78, 0x63, 0x7f, 0x80, 0x65, 0x49, 0xce, 0x8d, 0x5f, 0xa9, 0x2a, 0xc9, 0x2b, 0x95, 0xfa, 0xb1, 0x02, 0xcd, 0x5d, 0xac,
0xf5, 0x44, 0xdd, 0xdf, 0xe0, 0xc0, 0x6d, 0xb9, 0xb7, 0xab, 0x48, 0xfb, 0x5e, 0x31, 0xb7, 0x35, 0x7b, 0x83, 0x83, 0x60, 0x5d, 0xdf, 0x80, 0xa2, 0x87, 0x9f, 0x88, 0x65, 0x5d, 0xca, 0xc0, 0x97,
0x7f, 0x62, 0xb7, 0xf5, 0x37, 0x05, 0x16, 0x45, 0x8f, 0xe4, 0xec, 0xd2, 0xce, 0xf3, 0xda, 0xa1, 0xb1, 0x29, 0x1a, 0x9d, 0x80, 0xce, 0x43, 0xdd, 0xb0, 0xad, 0xc4, 0xcd, 0x1d, 0x0c, 0xdb, 0x0a,
0x8f, 0x2a, 0x1e, 0x53, 0x6f, 0x97, 0x66, 0x88, 0xb9, 0x65, 0x49, 0xcc, 0x4d, 0xd6, 0x9c, 0x95, 0x10, 0x57, 0x5c, 0x95, 0x62, 0x4a, 0x95, 0x4f, 0x14, 0x68, 0x7c, 0xc4, 0x61, 0x17, 0xd7, 0xe4,
0x74, 0xcd, 0xa9, 0x7e, 0xa4, 0x40, 0x73, 0x17, 0x1b, 0xfe, 0xe0, 0x20, 0xdc, 0xd7, 0x57, 0xa0, 0xbd, 0xa8, 0x26, 0x57, 0x32, 0x34, 0xd1, 0xb0, 0xef, 0x99, 0xf8, 0x29, 0xfe, 0x7c, 0x75, 0xf9,
0xe8, 0xe3, 0x87, 0x62, 0x5b, 0x2f, 0xe5, 0xe4, 0x97, 0x89, 0x25, 0x1a, 0x5d, 0x80, 0x5e, 0x80, 0x85, 0x02, 0x0b, 0x1f, 0xe8, 0x8e, 0xe1, 0xee, 0xef, 0x9f, 0xde, 0xee, 0xeb, 0x61, 0x10, 0xdc,
0xba, 0xe9, 0xd8, 0xa9, 0xd6, 0x06, 0x98, 0x8e, 0x1d, 0x66, 0x5c, 0x49, 0x56, 0x8a, 0x19, 0x56, 0x3a, 0xce, 0x4d, 0x32, 0x36, 0x49, 0xfd, 0xb8, 0x00, 0x88, 0x3a, 0xe9, 0x9a, 0x6e, 0xe9, 0xce,
0x3e, 0x56, 0xa0, 0xf1, 0x0e, 0x4f, 0xbb, 0x38, 0x27, 0xaf, 0xc5, 0x39, 0xb9, 0x9a, 0xc3, 0x89, 0x00, 0x9f, 0x5c, 0x9b, 0xcb, 0xd0, 0x8a, 0x1d, 0xad, 0xf0, 0x55, 0x3c, 0x7a, 0xb6, 0x08, 0xba,
0x86, 0x03, 0xdf, 0xc2, 0x1f, 0xe2, 0x4f, 0x97, 0x97, 0x9f, 0x28, 0xb0, 0xf8, 0xa6, 0xe1, 0x9a, 0x03, 0xad, 0x3e, 0x17, 0xd5, 0xf3, 0xb0, 0x4e, 0x5c, 0x87, 0xb9, 0x67, 0x4b, 0x7e, 0x0f, 0xdc,
0xde, 0xfe, 0xfe, 0xd9, 0xf5, 0xbe, 0x1e, 0x39, 0xc1, 0xad, 0x93, 0x94, 0xda, 0x89, 0x45, 0xea, 0xf3, 0xcc, 0xe1, 0x10, 0x7b, 0xeb, 0xae, 0x63, 0xf0, 0x3b, 0x47, 0xb3, 0x1f, 0xa8, 0x49, 0xa7,
0x47, 0x05, 0x40, 0xd4, 0x48, 0xd7, 0x0c, 0xdb, 0x70, 0x07, 0xf8, 0xf4, 0xdc, 0x5c, 0x81, 0x56, 0x32, 0x7b, 0x84, 0x71, 0x26, 0x00, 0x87, 0x10, 0x06, 0x1a, 0x82, 0xde, 0x81, 0x33, 0xf1, 0xeb,
0xe2, 0x68, 0x45, 0xd7, 0x06, 0xf1, 0xb3, 0x45, 0xd0, 0x5b, 0xd0, 0xea, 0x73, 0x52, 0xba, 0x8f, 0xc8, 0xc4, 0x9f, 0xdb, 0x24, 0x7a, 0xd3, 0xa0, 0xc6, 0xf9, 0x11, 0xa0, 0x10, 0xee, 0x32, 0x54,
0x0d, 0xe2, 0xb9, 0xcc, 0x3c, 0x5b, 0xf2, 0x3a, 0x70, 0xcf, 0xb7, 0x86, 0x43, 0xec, 0xaf, 0x7b, 0xc5, 0x92, 0x46, 0x9e, 0xd7, 0xac, 0x37, 0xa1, 0x66, 0x04, 0x33, 0x85, 0x57, 0x4c, 0x08, 0x34,
0xae, 0xc9, 0x6b, 0x8e, 0x66, 0x3f, 0x64, 0x93, 0x2e, 0x65, 0xfa, 0x88, 0xfc, 0x4c, 0x98, 0x1c, 0xe8, 0x70, 0x0d, 0x7b, 0xf4, 0xfc, 0x63, 0x23, 0x00, 0x14, 0x9c, 0x78, 0x97, 0xd1, 0xd4, 0xcf,
0x42, 0xe4, 0x68, 0x08, 0x7a, 0x19, 0x2e, 0x24, 0xcb, 0x91, 0x89, 0x3d, 0x77, 0x48, 0xbc, 0xd2, 0x0a, 0xd0, 0x8e, 0x5e, 0x71, 0x72, 0xcb, 0x7e, 0x39, 0x6f, 0x5b, 0x47, 0xdc, 0xe7, 0x4a, 0xa7,
0xa0, 0xca, 0xf9, 0x0e, 0xa0, 0x28, 0xdd, 0x65, 0x59, 0x15, 0x0b, 0x1a, 0xb3, 0xb4, 0xfb, 0x9e, 0xb8, 0xcf, 0xa5, 0xef, 0x9b, 0xe5, 0x93, 0xdd, 0x37, 0xd5, 0x5f, 0x2b, 0x30, 0x97, 0x78, 0x4a,
0x85, 0x9a, 0x19, 0xae, 0x14, 0x56, 0x31, 0x01, 0x50, 0xa7, 0xc3, 0x39, 0xd4, 0xe9, 0xf9, 0xc7, 0x4a, 0x42, 0x3b, 0x25, 0x0d, 0xed, 0xde, 0x83, 0x32, 0xc5, 0x3b, 0x98, 0x6d, 0x52, 0x4b, 0x0e,
0x66, 0x98, 0x50, 0x70, 0xe0, 0x5d, 0x06, 0x53, 0x3f, 0x29, 0x40, 0x27, 0x5e, 0xe2, 0xcc, 0x4c, 0x3b, 0xe2, 0x5c, 0x35, 0x3e, 0x01, 0x5d, 0x87, 0x79, 0x49, 0xf9, 0x41, 0x98, 0x12, 0xa5, 0xab,
0xfb, 0x7c, 0x9a, 0x7f, 0xc7, 0xd4, 0x73, 0xa5, 0x33, 0xd4, 0x73, 0xd9, 0x7a, 0xb3, 0x7c, 0xba, 0x0f, 0xea, 0x9f, 0x4a, 0x50, 0x8f, 0xec, 0xc7, 0x14, 0x54, 0x9a, 0xe7, 0xe2, 0x96, 0x58, 0x5e,
0x7a, 0x53, 0xfd, 0x95, 0x02, 0xed, 0x54, 0xaf, 0x2d, 0x9d, 0xda, 0x29, 0xd9, 0xd4, 0xee, 0x35, 0x31, 0xbd, 0xbc, 0x8c, 0xf7, 0x77, 0xb4, 0x08, 0x55, 0x1b, 0xdb, 0x3c, 0xed, 0x0b, 0x0c, 0x62,
0x28, 0xd3, 0x7c, 0x07, 0x33, 0x21, 0xb5, 0xe4, 0x69, 0x47, 0x12, 0xab, 0xc6, 0x17, 0xa0, 0x9b, 0x63, 0x9b, 0x26, 0x7d, 0xf6, 0x34, 0x32, 0xb6, 0x39, 0x9e, 0xe4, 0x89, 0x6e, 0xd6, 0x19, 0xdb,
0xb0, 0x20, 0xb9, 0x9f, 0x11, 0xaa, 0x44, 0xd9, 0xeb, 0x19, 0xf5, 0x8f, 0x25, 0xa8, 0xc7, 0xe4, 0x0c, 0x4d, 0xc6, 0x11, 0xcf, 0xec, 0x11, 0x88, 0xa7, 0x1a, 0x47, 0x3c, 0xb1, 0xe3, 0x50, 0x4b,
0x31, 0x25, 0x2b, 0x9d, 0xa5, 0x70, 0x4b, 0x6d, 0xaf, 0x98, 0xdd, 0x5e, 0xce, 0x05, 0x05, 0x5a, 0x1e, 0x87, 0xbc, 0x40, 0xf1, 0x06, 0xcc, 0x0f, 0xd8, 0x3b, 0xb0, 0xb1, 0x76, 0xb8, 0x1e, 0x76,
0x82, 0xaa, 0x83, 0x1d, 0x1e, 0xf6, 0x45, 0x0e, 0xe2, 0x60, 0x87, 0x06, 0x7d, 0xd6, 0x1a, 0x19, 0x75, 0xea, 0x0c, 0x9a, 0xc9, 0xba, 0xd0, 0x6d, 0xea, 0x5c, 0x02, 0x15, 0x32, 0x2b, 0x37, 0x98,
0x3b, 0x3c, 0x9f, 0xe4, 0x81, 0x6e, 0xde, 0x1d, 0x3b, 0x2c, 0x9b, 0x4c, 0x66, 0x3c, 0xf3, 0xc7, 0x95, 0xe5, 0x80, 0x4a, 0xd8, 0x86, 0x1b, 0x39, 0x88, 0x89, 0xac, 0x95, 0x84, 0xa8, 0xcd, 0x13,
0x64, 0x3c, 0xd5, 0x64, 0xc6, 0x93, 0x38, 0x0e, 0xb5, 0xf4, 0x71, 0x98, 0x35, 0x51, 0xbc, 0x05, 0x41, 0xd4, 0xf3, 0x50, 0x0f, 0x8a, 0x01, 0xa6, 0x41, 0x3a, 0x2d, 0x1e, 0x9b, 0x04, 0x69, 0xcb,
0x0b, 0x03, 0xd6, 0x28, 0x37, 0xd7, 0x8e, 0xd6, 0xa3, 0x5f, 0xdd, 0x3a, 0x4b, 0xcd, 0x64, 0xbf, 0x20, 0xb1, 0x47, 0xa9, 0xb9, 0xd8, 0xa3, 0x94, 0xfa, 0x97, 0x22, 0xb4, 0x26, 0x18, 0x26, 0x77,
0xd0, 0x1d, 0x6a, 0x5c, 0x22, 0x2b, 0x64, 0x5a, 0x6e, 0x30, 0x2d, 0xcb, 0x13, 0x2a, 0xa1, 0x1b, 0x28, 0xc8, 0x53, 0x46, 0xdb, 0x86, 0xf6, 0xe4, 0xcd, 0x96, 0xed, 0xd2, 0x91, 0x30, 0x2c, 0xf9,
0xae, 0xe4, 0xd0, 0x27, 0xb2, 0x51, 0x3a, 0x45, 0x6d, 0x9e, 0x2a, 0x45, 0x7d, 0x01, 0xea, 0xe1, 0x5a, 0x3b, 0x37, 0x4a, 0x9c, 0xb9, 0xd8, 0x63, 0x45, 0xe9, 0x58, 0x8f, 0x15, 0xa7, 0xac, 0xb6,
0x6d, 0x89, 0x65, 0x92, 0x6e, 0x8b, 0xfb, 0x26, 0x01, 0xda, 0x32, 0x49, 0xa2, 0x29, 0xd5, 0x4e, 0xdc, 0x84, 0x73, 0x1e, 0x87, 0x50, 0x46, 0x2f, 0xb6, 0x6c, 0x8e, 0x46, 0xce, 0x06, 0x9d, 0x3b,
0x34, 0xa5, 0xd4, 0x3f, 0x17, 0xa1, 0x35, 0xc9, 0x61, 0x66, 0x76, 0x05, 0xb3, 0xdc, 0x33, 0x6e, 0xd1, 0xe5, 0x67, 0x1c, 0xe3, 0xd9, 0xac, 0x63, 0x9c, 0x34, 0x63, 0x35, 0x65, 0xc6, 0x74, 0xd1,
0x43, 0x67, 0xd2, 0xd4, 0x66, 0x52, 0x3a, 0x36, 0x0d, 0x4b, 0xb7, 0xb3, 0xdb, 0xa3, 0xd4, 0x99, 0xa7, 0x26, 0x2b, 0xfa, 0xdc, 0x87, 0xf9, 0xfb, 0x0e, 0x19, 0xf7, 0xc9, 0xc0, 0x33, 0xfb, 0x38,
0x4b, 0x34, 0x2b, 0x4a, 0x27, 0x6a, 0x56, 0x9c, 0xf1, 0x3a, 0xea, 0x55, 0xb8, 0xe4, 0xf3, 0x14, 0xb8, 0xaa, 0xe7, 0x32, 0x6b, 0x17, 0xaa, 0x22, 0x5e, 0x73, 0x93, 0xd6, 0xb4, 0xb0, 0xad, 0xfe,
0xca, 0xd4, 0x13, 0xdb, 0xe6, 0xd9, 0xc8, 0xc5, 0xf0, 0xe7, 0x4e, 0x7c, 0xfb, 0x39, 0xc7, 0x78, 0x44, 0x81, 0x85, 0x34, 0x5f, 0xe6, 0x31, 0x93, 0x60, 0xa0, 0xc4, 0x82, 0xc1, 0xf7, 0x61, 0x7e,
0x3e, 0xef, 0x18, 0xa7, 0xd5, 0x58, 0xcd, 0xa8, 0x31, 0x7b, 0x2b, 0x56, 0x93, 0xdd, 0x8a, 0xfd, 0xc2, 0xbe, 0x17, 0xe3, 0x5c, 0x5f, 0xbd, 0x2a, 0xb3, 0x9d, 0x44, 0x71, 0x0d, 0x4d, 0x78, 0x04,
0x55, 0x81, 0x7a, 0xac, 0xa5, 0x4b, 0xcf, 0x48, 0x88, 0x24, 0x72, 0x07, 0x11, 0x60, 0x26, 0x77, 0x34, 0xf5, 0x5f, 0x0a, 0x9c, 0x11, 0xc7, 0x8a, 0xd2, 0x86, 0xec, 0x91, 0x83, 0x26, 0x28, 0xd7,
0x70, 0x19, 0x9a, 0x13, 0x4d, 0x52, 0xde, 0x32, 0x8d, 0x1c, 0x93, 0xfa, 0xdb, 0x16, 0x6f, 0x6f, 0xb1, 0x4c, 0x27, 0xc4, 0xdc, 0x62, 0x8d, 0x9c, 0x28, 0x30, 0xf7, 0x07, 0x30, 0x27, 0x06, 0x85,
0x47, 0x2d, 0x67, 0xee, 0xbe, 0x97, 0x73, 0xdb, 0xae, 0x82, 0x49, 0xad, 0x49, 0x62, 0xa3, 0xa4, 0x79, 0x26, 0x27, 0x9c, 0x69, 0xf1, 0x79, 0x61, 0x86, 0xb9, 0x0c, 0x2d, 0x77, 0x7f, 0x3f, 0x2a,
0xb5, 0x96, 0x93, 0xd6, 0xfa, 0x63, 0x05, 0x1a, 0xf1, 0xa5, 0xa8, 0x07, 0x55, 0x9b, 0x35, 0x68, 0x8f, 0x07, 0xca, 0xa6, 0xa0, 0x0a, 0x81, 0xdf, 0x85, 0x76, 0x30, 0xec, 0xb8, 0x99, 0x6d, 0x4e,
0xa3, 0xad, 0x45, 0x63, 0x2a, 0x4f, 0xfe, 0xcd, 0x3a, 0xae, 0x61, 0x0a, 0xc5, 0x41, 0xb7, 0x4d, 0x4c, 0x0c, 0x1f, 0x29, 0x3f, 0x51, 0xa0, 0x13, 0xcf, 0x73, 0x91, 0xe5, 0x1f, 0x1f, 0x49, 0x7d,
0xd3, 0x47, 0x57, 0xa1, 0x6d, 0x3a, 0x7a, 0xa2, 0xa3, 0xcb, 0xa3, 0x54, 0x33, 0x72, 0x21, 0x99, 0x33, 0x5e, 0x1a, 0xb8, 0x7c, 0x84, 0x3e, 0x13, 0x39, 0xe2, 0x82, 0x74, 0xed, 0x05, 0xb4, 0xe2,
0x9e, 0x6e, 0x29, 0xc9, 0xd0, 0x7d, 0x58, 0xb8, 0xef, 0x92, 0x71, 0x9f, 0x0c, 0x7c, 0xab, 0x8f, 0x67, 0x16, 0x35, 0xa0, 0xba, 0xed, 0xfa, 0xdf, 0x79, 0x6e, 0x12, 0xbf, 0x3d, 0x83, 0x5a, 0x00,
0xc3, 0xb6, 0xc8, 0x4c, 0x47, 0xa8, 0x07, 0x55, 0x41, 0x9a, 0x1f, 0x9f, 0x9a, 0x16, 0x8d, 0xd5, 0xdb, 0xae, 0xbf, 0xe3, 0x61, 0x82, 0x1d, 0xbf, 0xad, 0x20, 0x80, 0xca, 0x87, 0xce, 0x86, 0x49,
0xef, 0x2b, 0xb0, 0x98, 0xc5, 0xcb, 0xb4, 0x39, 0x71, 0xbc, 0x4a, 0xc2, 0xf1, 0x7e, 0x0b, 0x16, 0x1e, 0xb7, 0x0b, 0x68, 0x5e, 0xa4, 0x54, 0xdd, 0xda, 0x12, 0x07, 0xa1, 0x5d, 0xa4, 0xd3, 0xc3,
0x26, 0xe8, 0xf5, 0x04, 0xe6, 0xfa, 0xea, 0x35, 0x99, 0x0e, 0x24, 0x8c, 0x6b, 0x68, 0x82, 0x23, 0x56, 0x09, 0xb5, 0xa1, 0x11, 0x0e, 0xd9, 0xdc, 0xb9, 0xdf, 0x2e, 0xa3, 0x1a, 0x94, 0xf9, 0x67,
0x84, 0xa9, 0xff, 0x52, 0xe0, 0x82, 0x70, 0x61, 0x14, 0x36, 0x64, 0x0d, 0x25, 0x6a, 0x13, 0x9e, 0xe5, 0x9a, 0x01, 0xed, 0x24, 0x62, 0xa3, 0x3c, 0xef, 0x3b, 0x77, 0x1c, 0xf7, 0x59, 0x48, 0x6a,
0x6b, 0x5b, 0x6e, 0x54, 0xdf, 0x88, 0x3d, 0x72, 0xa0, 0xa8, 0x6f, 0xde, 0x84, 0xb6, 0x98, 0x14, 0xcf, 0xa0, 0x3a, 0xcc, 0x0a, 0x14, 0xdc, 0x56, 0xd0, 0x1c, 0xd4, 0x23, 0x00, 0xb4, 0x5d, 0xa0,
0xc5, 0xf4, 0x19, 0x53, 0xc7, 0x16, 0x5f, 0x17, 0x45, 0xf3, 0x2b, 0xd0, 0xf2, 0xf6, 0xf7, 0xe3, 0x84, 0x4d, 0x6f, 0x34, 0x10, 0x50, 0x94, 0xab, 0x40, 0xad, 0xb6, 0xe1, 0x3e, 0x73, 0xda, 0xa5,
0xf4, 0x78, 0x50, 0x6a, 0x0a, 0xa8, 0x20, 0xf8, 0x0d, 0xe8, 0x84, 0xd3, 0x4e, 0x9a, 0x45, 0xb4, 0x6b, 0x6b, 0x50, 0x0d, 0x82, 0x09, 0x1d, 0xca, 0xb9, 0x3b, 0xb4, 0xd9, 0x9e, 0x41, 0x67, 0xa0,
0xc5, 0xc2, 0xa8, 0x21, 0xfc, 0xb1, 0x02, 0xdd, 0x64, 0x4e, 0x11, 0xdb, 0xfe, 0xc9, 0xb3, 0xd6, 0x19, 0x2b, 0x34, 0xb7, 0x15, 0x84, 0xa0, 0x15, 0xff, 0x09, 0xa0, 0x5d, 0x58, 0xfd, 0xb4, 0x09,
0x37, 0x92, 0xf7, 0x54, 0x57, 0x8e, 0xe1, 0x67, 0x42, 0x47, 0x14, 0xa3, 0x37, 0x1e, 0x43, 0x2b, 0xc0, 0xd1, 0x96, 0xeb, 0x7a, 0x06, 0x1a, 0x01, 0xda, 0xc4, 0x3e, 0xcd, 0x24, 0xae, 0x13, 0x64,
0xe9, 0x1f, 0x51, 0x03, 0xaa, 0xdb, 0x5e, 0xf0, 0xf5, 0x47, 0x16, 0x09, 0x3a, 0x73, 0xa8, 0x05, 0x01, 0x82, 0x6e, 0x64, 0x80, 0x92, 0xf4, 0x50, 0xa1, 0x6a, 0x37, 0xeb, 0x32, 0x91, 0x18, 0xae,
0xb0, 0xed, 0x05, 0x3b, 0x3e, 0x26, 0xd8, 0x0d, 0x3a, 0x0a, 0x02, 0xa8, 0xbc, 0xed, 0x6e, 0x58, 0xce, 0x20, 0x9b, 0x49, 0xdc, 0x33, 0x6d, 0xbc, 0x67, 0x0e, 0x1e, 0x87, 0x30, 0x2d, 0x5b, 0x62,
0xe4, 0x83, 0x4e, 0x01, 0x2d, 0x88, 0xf4, 0xc5, 0xb0, 0xb7, 0x84, 0xd3, 0xe9, 0x14, 0xe9, 0xf2, 0x62, 0x68, 0x20, 0x31, 0x11, 0xb4, 0x45, 0x63, 0xd7, 0xf7, 0x4c, 0x67, 0x18, 0x14, 0x6a, 0xd4,
0x68, 0x54, 0x42, 0x1d, 0x68, 0x44, 0x53, 0x36, 0x77, 0xee, 0x77, 0xca, 0xa8, 0x06, 0x65, 0xfe, 0x19, 0xf4, 0x04, 0xce, 0x6e, 0x62, 0x26, 0xdd, 0x24, 0xbe, 0x39, 0x20, 0x81, 0xc0, 0xd5, 0x6c,
0x59, 0xb9, 0x61, 0x42, 0x27, 0x9d, 0x1d, 0x53, 0x9c, 0xf7, 0xdd, 0xb7, 0x5c, 0xef, 0x30, 0x02, 0x81, 0xa9, 0xc1, 0xc7, 0x14, 0x69, 0xc1, 0x5c, 0xe2, 0xa7, 0x1b, 0x74, 0x4d, 0x5e, 0xeb, 0x91,
0x75, 0xe6, 0x50, 0x1d, 0xe6, 0x45, 0xc5, 0xd1, 0x51, 0x50, 0x1b, 0xea, 0xb1, 0x64, 0xbf, 0x53, 0xfd, 0x20, 0xd4, 0x7d, 0x27, 0xd7, 0xd8, 0x50, 0x9a, 0x09, 0xad, 0xf8, 0x0f, 0x29, 0xe8, 0xcb,
0xa0, 0x80, 0x4d, 0x7f, 0x34, 0x10, 0x69, 0x3f, 0x67, 0x81, 0x6a, 0x6d, 0xc3, 0x3b, 0x74, 0x3b, 0x59, 0x0c, 0x52, 0x35, 0xf7, 0xee, 0xb5, 0x3c, 0x43, 0x43, 0x51, 0x0f, 0xb9, 0x3f, 0x4d, 0x13,
0xa5, 0x1b, 0x6b, 0x50, 0x0d, 0x1d, 0x37, 0x9d, 0xca, 0xb1, 0xbb, 0x74, 0xd8, 0x99, 0x43, 0x17, 0x25, 0xfd, 0xdf, 0xa1, 0x7b, 0x54, 0x8d, 0x4c, 0x9d, 0x41, 0x3f, 0x84, 0x33, 0xa9, 0x3f, 0x03,
0xa0, 0x99, 0x78, 0xf5, 0xd0, 0x51, 0x10, 0x82, 0x56, 0xf2, 0x45, 0x4a, 0xa7, 0xb0, 0xfa, 0xf3, 0xd0, 0x57, 0x64, 0xec, 0xb3, 0x7e, 0x20, 0x98, 0x26, 0xe1, 0x61, 0xf2, 0x34, 0x64, 0x6b, 0x9f,
0x26, 0x00, 0xcf, 0x6c, 0x3d, 0xcf, 0x37, 0xd1, 0x88, 0xdd, 0xf0, 0xd1, 0xa8, 0xed, 0xb9, 0x61, 0xfa, 0x93, 0x24, 0xbf, 0xf6, 0x11, 0xf6, 0x47, 0x69, 0x7f, 0x6c, 0x09, 0x63, 0x40, 0xe9, 0x7f,
0xc4, 0x25, 0xe8, 0x56, 0x4e, 0x02, 0x98, 0x9d, 0x2a, 0x58, 0xed, 0xe5, 0x15, 0x6e, 0xa9, 0xe9, 0x03, 0xd0, 0xbb, 0x32, 0x11, 0x99, 0xff, 0x27, 0x74, 0x57, 0xf2, 0x0e, 0x0f, 0x4d, 0x3e, 0x66,
0xea, 0x1c, 0x72, 0x18, 0xc5, 0x3d, 0xcb, 0xc1, 0x7b, 0xd6, 0xe0, 0x83, 0x28, 0x25, 0xce, 0xa7, 0xa7, 0x35, 0x79, 0xdd, 0x90, 0x8a, 0xcd, 0xfc, 0x1f, 0x40, 0x2e, 0x36, 0xbb, 0x24, 0xcf, 0x9d,
0x98, 0x9a, 0x1a, 0x52, 0x4c, 0x05, 0x48, 0x31, 0xd8, 0x0d, 0x7c, 0xcb, 0x1d, 0x86, 0x97, 0x62, 0x3a, 0x5e, 0x72, 0x96, 0xdb, 0x4a, 0x5a, 0x26, 0x97, 0x3b, 0xb5, 0xbc, 0x82, 0xad, 0xce, 0xa0,
0xea, 0x1c, 0x7a, 0x08, 0x17, 0x37, 0x31, 0xa3, 0x6e, 0x91, 0xc0, 0x1a, 0x90, 0x90, 0xe0, 0x6a, 0xbd, 0x58, 0x10, 0x46, 0x57, 0xb2, 0x7c, 0x22, 0xfe, 0x4c, 0x30, 0xcd, 0x5c, 0x3d, 0x80, 0x4d,
0x3e, 0xc1, 0xcc, 0xe4, 0x13, 0x92, 0xb4, 0xa1, 0x9d, 0x7a, 0x01, 0x86, 0x6e, 0xc8, 0x1d, 0xbc, 0xec, 0xdf, 0xc3, 0xbe, 0x67, 0x0e, 0x48, 0x92, 0xa9, 0x68, 0x4c, 0x06, 0x04, 0x4c, 0xaf, 0x4e,
0xec, 0xb5, 0x5a, 0xef, 0xe5, 0x99, 0xe6, 0x46, 0xd4, 0x2c, 0x68, 0x25, 0x5f, 0x47, 0xa1, 0xcf, 0x1d, 0x17, 0xaa, 0xdd, 0x87, 0xfa, 0x26, 0xf6, 0x35, 0x8e, 0xb4, 0x08, 0xca, 0x9c, 0x19, 0x8c,
0xe7, 0x21, 0xc8, 0x3c, 0x00, 0xe9, 0xdd, 0x98, 0x65, 0x6a, 0x44, 0xea, 0x01, 0xb7, 0xa7, 0x69, 0x08, 0x44, 0x2c, 0x4f, 0x1f, 0x18, 0x0d, 0x64, 0x89, 0x0a, 0x38, 0xca, 0xdc, 0xdb, 0x74, 0x5d,
0xa4, 0xa4, 0x8f, 0x6f, 0x7a, 0xc7, 0xdd, 0x47, 0xaa, 0x73, 0xe8, 0x7d, 0xb8, 0x90, 0x79, 0xa6, 0x5e, 0x1e, 0xc8, 0x32, 0x4a, 0xea, 0xea, 0xcc, 0xea, 0x5f, 0xeb, 0x50, 0x63, 0x5e, 0x48, 0x33,
0x82, 0xbe, 0x20, 0xbf, 0x8a, 0x95, 0xbf, 0x66, 0x99, 0x46, 0xe1, 0x41, 0xfa, 0x34, 0xe4, 0x73, 0xde, 0xff, 0x13, 0xd3, 0x4b, 0x48, 0x4c, 0x8f, 0x60, 0x2e, 0x51, 0xd1, 0x97, 0xdb, 0x53, 0x5e,
0x9f, 0x79, 0xd6, 0x34, 0x3b, 0xf7, 0x31, 0xf4, 0xc7, 0x71, 0x7f, 0x62, 0x0a, 0x63, 0x40, 0xd9, 0xf6, 0x9f, 0xe6, 0xf2, 0x7d, 0x40, 0xe9, 0x7a, 0xb5, 0x3c, 0x54, 0x64, 0xd6, 0xb5, 0xa7, 0xc9,
0x87, 0x2a, 0xe8, 0x15, 0x19, 0x89, 0xdc, 0xc7, 0x32, 0xbd, 0x95, 0x59, 0xa7, 0x47, 0x2a, 0x1f, 0x78, 0x04, 0x73, 0x89, 0xe2, 0xac, 0x7c, 0x05, 0xf2, 0x0a, 0x6e, 0x8e, 0x15, 0xa4, 0x6b, 0x8a,
0xb3, 0xd3, 0x9a, 0x2e, 0xed, 0xa4, 0x64, 0x73, 0x1f, 0xa7, 0xc8, 0xc9, 0xe6, 0xbf, 0x0f, 0xe1, 0xf2, 0x15, 0x64, 0xd6, 0x1e, 0xa7, 0xc9, 0x78, 0xc0, 0x4b, 0xde, 0x21, 0x68, 0xbf, 0x9a, 0x15,
0x46, 0x9d, 0x7c, 0xff, 0x20, 0xd7, 0x95, 0xf4, 0xcd, 0x86, 0xdc, 0xa8, 0xe5, 0xcf, 0x29, 0xd4, 0x6f, 0x12, 0xaf, 0xa4, 0xaf, 0x3e, 0x03, 0xbd, 0xfc, 0x0c, 0xfd, 0x08, 0xe6, 0x12, 0xa5, 0x01,
0x39, 0xb4, 0x97, 0x70, 0xc2, 0xe8, 0x6a, 0x9e, 0x4d, 0x24, 0x5b, 0x32, 0xd3, 0xd4, 0xa5, 0x03, 0xb9, 0x75, 0xe5, 0xf5, 0x83, 0x69, 0xdc, 0xbf, 0xc0, 0x9c, 0xb2, 0x0b, 0x15, 0xfe, 0x9e, 0x8f,
0x6c, 0xe2, 0xe0, 0x1e, 0x0e, 0x7c, 0x6b, 0x40, 0xd2, 0x48, 0xc5, 0x60, 0x32, 0x21, 0x44, 0x7a, 0x2e, 0xc8, 0xaf, 0x30, 0x91, 0xb7, 0xfe, 0xee, 0xb4, 0x8a, 0x00, 0x19, 0x5b, 0x3e, 0x61, 0x4c,
0x6d, 0xea, 0xbc, 0x88, 0xed, 0xf7, 0xa1, 0x1e, 0x7b, 0x03, 0x21, 0x67, 0x3b, 0xfb, 0x76, 0xa3, 0xcb, 0xec, 0xc4, 0x20, 0x69, 0xb9, 0x25, 0xfa, 0xce, 0xdf, 0x9d, 0xfe, 0xb4, 0x1f, 0x30, 0x7d,
0x77, 0x6d, 0xea, 0xbc, 0xb8, 0x1b, 0x4b, 0xbd, 0x35, 0x40, 0xb9, 0x92, 0xcd, 0xbe, 0x80, 0x90, 0xd9, 0x79, 0x6a, 0xed, 0x6b, 0x0f, 0x57, 0x87, 0xa6, 0x7f, 0x30, 0xee, 0x53, 0x7b, 0x5c, 0xe7,
0xbb, 0xb1, 0x9c, 0xc7, 0x0b, 0xea, 0xdc, 0xea, 0x5f, 0xea, 0x50, 0x63, 0x36, 0x48, 0xe3, 0xdd, 0x23, 0xdf, 0x35, 0x5d, 0xf1, 0x75, 0x3d, 0x50, 0xed, 0x3a, 0xe3, 0x74, 0x9d, 0xad, 0x65, 0xd4,
0xff, 0xc3, 0xd2, 0x39, 0x84, 0xa5, 0xf7, 0xa0, 0x9d, 0x7a, 0x3b, 0x21, 0xd7, 0xa7, 0xfc, 0x81, 0xef, 0x57, 0x58, 0xf3, 0xe6, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x45, 0x22, 0x53, 0xbb,
0xc5, 0x34, 0x83, 0xef, 0x03, 0xca, 0xbe, 0x0c, 0x90, 0x3b, 0x8a, 0xdc, 0x17, 0x04, 0xd3, 0x68, 0x2f, 0x00, 0x00,
0xbc, 0x07, 0xed, 0xd4, 0x35, 0xb8, 0x7c, 0x07, 0xf2, 0xbb, 0xf2, 0x19, 0x76, 0x90, 0xbd, 0xbd,
0x95, 0xef, 0x20, 0xf7, 0x96, 0x77, 0x1a, 0x8d, 0x77, 0xf9, 0xe3, 0x82, 0x28, 0x65, 0xbf, 0x96,
0xe7, 0x6d, 0x52, 0xfd, 0xe8, 0x27, 0x1f, 0x7f, 0xce, 0x3f, 0x3e, 0xbf, 0x07, 0xed, 0xd4, 0x25,
0x8c, 0x5c, 0xbb, 0xf2, 0x9b, 0x9a, 0x69, 0xd8, 0x3f, 0xc3, 0x88, 0xb2, 0x0b, 0x15, 0x7e, 0x73,
0x82, 0x5e, 0x94, 0x17, 0x30, 0xb1, 0x5b, 0x95, 0xde, 0xb4, 0xbb, 0x17, 0x32, 0xb6, 0x03, 0xc2,
0x90, 0x96, 0xd9, 0x89, 0x41, 0xd2, 0x5e, 0x41, 0xfc, 0x46, 0xa5, 0x37, 0xfd, 0x12, 0x25, 0x44,
0x7a, 0xde, 0x51, 0x6a, 0xed, 0x4b, 0x0f, 0x56, 0x87, 0x56, 0x70, 0x30, 0xee, 0x53, 0x7d, 0xdc,
0xe4, 0x33, 0x5f, 0xb1, 0x3c, 0xf1, 0x75, 0x33, 0x64, 0xed, 0x26, 0xc3, 0x74, 0x93, 0xed, 0x65,
0xd4, 0xef, 0x57, 0xd8, 0xf0, 0xd5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x40, 0x04, 0x6c,
0x46, 0x32, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -3248,7 +2996,7 @@ type QueryCoordClient interface {
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy // https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error) GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest, opts ...grpc.CallOption) (*milvuspb.GetMetricsResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+23+--+Multiple+memory+replication+design // https://wiki.lfaidata.foundation/display/MIL/MEP+23+--+Multiple+memory+replication+design
GetReplicas(ctx context.Context, in *GetReplicasRequest, opts ...grpc.CallOption) (*GetReplicasResponse, error) GetReplicas(ctx context.Context, in *milvuspb.GetReplicasRequest, opts ...grpc.CallOption) (*milvuspb.GetReplicasResponse, error)
GetShardLeaders(ctx context.Context, in *GetShardLeadersRequest, opts ...grpc.CallOption) (*GetShardLeadersResponse, error) GetShardLeaders(ctx context.Context, in *GetShardLeadersRequest, opts ...grpc.CallOption) (*GetShardLeadersResponse, error)
} }
@ -3386,8 +3134,8 @@ func (c *queryCoordClient) GetMetrics(ctx context.Context, in *milvuspb.GetMetri
return out, nil return out, nil
} }
func (c *queryCoordClient) GetReplicas(ctx context.Context, in *GetReplicasRequest, opts ...grpc.CallOption) (*GetReplicasResponse, error) { func (c *queryCoordClient) GetReplicas(ctx context.Context, in *milvuspb.GetReplicasRequest, opts ...grpc.CallOption) (*milvuspb.GetReplicasResponse, error) {
out := new(GetReplicasResponse) out := new(milvuspb.GetReplicasResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.query.QueryCoord/GetReplicas", in, out, opts...) err := c.cc.Invoke(ctx, "/milvus.proto.query.QueryCoord/GetReplicas", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
@ -3422,7 +3170,7 @@ type QueryCoordServer interface {
// https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy // https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy
GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) GetMetrics(context.Context, *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
// https://wiki.lfaidata.foundation/display/MIL/MEP+23+--+Multiple+memory+replication+design // https://wiki.lfaidata.foundation/display/MIL/MEP+23+--+Multiple+memory+replication+design
GetReplicas(context.Context, *GetReplicasRequest) (*GetReplicasResponse, error) GetReplicas(context.Context, *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error)
GetShardLeaders(context.Context, *GetShardLeadersRequest) (*GetShardLeadersResponse, error) GetShardLeaders(context.Context, *GetShardLeadersRequest) (*GetShardLeadersResponse, error)
} }
@ -3472,7 +3220,7 @@ func (*UnimplementedQueryCoordServer) LoadBalance(ctx context.Context, req *Load
func (*UnimplementedQueryCoordServer) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) { func (*UnimplementedQueryCoordServer) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented")
} }
func (*UnimplementedQueryCoordServer) GetReplicas(ctx context.Context, req *GetReplicasRequest) (*GetReplicasResponse, error) { func (*UnimplementedQueryCoordServer) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetReplicas not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetReplicas not implemented")
} }
func (*UnimplementedQueryCoordServer) GetShardLeaders(ctx context.Context, req *GetShardLeadersRequest) (*GetShardLeadersResponse, error) { func (*UnimplementedQueryCoordServer) GetShardLeaders(ctx context.Context, req *GetShardLeadersRequest) (*GetShardLeadersResponse, error) {
@ -3736,7 +3484,7 @@ func _QueryCoord_GetMetrics_Handler(srv interface{}, ctx context.Context, dec fu
} }
func _QueryCoord_GetReplicas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _QueryCoord_GetReplicas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetReplicasRequest) in := new(milvuspb.GetReplicasRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
@ -3748,7 +3496,7 @@ func _QueryCoord_GetReplicas_Handler(srv interface{}, ctx context.Context, dec f
FullMethod: "/milvus.proto.query.QueryCoord/GetReplicas", FullMethod: "/milvus.proto.query.QueryCoord/GetReplicas",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(QueryCoordServer).GetReplicas(ctx, req.(*GetReplicasRequest)) return srv.(QueryCoordServer).GetReplicas(ctx, req.(*milvuspb.GetReplicasRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }

View File

@ -3932,6 +3932,20 @@ func (node *Proxy) Import(ctx context.Context, req *milvuspb.ImportRequest) (*mi
return resp, err return resp, err
} }
// GetReplicas gets replica info
func (node *Proxy) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
log.Info("received get replicas request")
resp := &milvuspb.GetReplicasResponse{}
if !node.checkHealthy() {
resp.Status = unhealthyStatus()
return resp, nil
}
resp, err := node.queryCoord.GetReplicas(ctx, req)
log.Info("received get replicas response", zap.Any("resp", resp), zap.Error(err))
return resp, err
}
// Check import task state from datanode // Check import task state from datanode
func (node *Proxy) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) { func (node *Proxy) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
log.Info("received get import state request", zap.Int64("taskID", req.GetTask())) log.Info("received get import state request", zap.Int64("taskID", req.GetTask()))

View File

@ -332,9 +332,9 @@ func (coord *QueryCoordMock) GetMetrics(ctx context.Context, req *milvuspb.GetMe
}, nil }, nil
} }
func (coord *QueryCoordMock) GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) { func (coord *QueryCoordMock) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
if !coord.healthy() { if !coord.healthy() {
return &querypb.GetReplicasResponse{ return &milvuspb.GetReplicasResponse{
Status: &commonpb.Status{ Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError, ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: "unhealthy", Reason: "unhealthy",
@ -342,7 +342,7 @@ func (coord *QueryCoordMock) GetReplicas(ctx context.Context, req *querypb.GetRe
}, nil }, nil
} }
return &querypb.GetReplicasResponse{ return &milvuspb.GetReplicasResponse{
Status: &commonpb.Status{ Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError, ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: "not implemented", Reason: "not implemented",

View File

@ -76,7 +76,7 @@ type Cluster interface {
allocateSegmentsToQueryNode(ctx context.Context, reqs []*querypb.LoadSegmentsRequest, wait bool, excludeNodeIDs []int64, includeNodeIDs []int64) error allocateSegmentsToQueryNode(ctx context.Context, reqs []*querypb.LoadSegmentsRequest, wait bool, excludeNodeIDs []int64, includeNodeIDs []int64) error
allocateChannelsToQueryNode(ctx context.Context, reqs []*querypb.WatchDmChannelsRequest, wait bool, excludeNodeIDs []int64) error allocateChannelsToQueryNode(ctx context.Context, reqs []*querypb.WatchDmChannelsRequest, wait bool, excludeNodeIDs []int64) error
assignNodesToReplicas(ctx context.Context, replicas []*querypb.ReplicaInfo) error assignNodesToReplicas(ctx context.Context, replicas []*milvuspb.ReplicaInfo) error
getSessionVersion() int64 getSessionVersion() int64
@ -704,7 +704,7 @@ func (c *queryNodeCluster) allocateChannelsToQueryNode(ctx context.Context, reqs
return c.channelAllocator(ctx, reqs, c, c.clusterMeta, wait, excludeNodeIDs) return c.channelAllocator(ctx, reqs, c, c.clusterMeta, wait, excludeNodeIDs)
} }
func (c *queryNodeCluster) assignNodesToReplicas(ctx context.Context, replicas []*querypb.ReplicaInfo) error { func (c *queryNodeCluster) assignNodesToReplicas(ctx context.Context, replicas []*milvuspb.ReplicaInfo) error {
nodes := c.onlineNodeIDs() nodes := c.onlineNodeIDs()
if len(nodes) < len(replicas) { if len(nodes) < len(replicas) {
return errors.New("no enough nodes to create replicas") return errors.New("no enough nodes to create replicas")

View File

@ -1017,9 +1017,9 @@ func (qc *QueryCoord) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRe
} }
// GetReplicas gets replicas of a certain collection // GetReplicas gets replicas of a certain collection
func (qc *QueryCoord) GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) { func (qc *QueryCoord) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) {
// TODO: to impl // TODO: to impl
return &querypb.GetReplicasResponse{ return &milvuspb.GetReplicasResponse{
Status: &commonpb.Status{ Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError, ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: "Not implemented", Reason: "Not implemented",

View File

@ -35,6 +35,7 @@ import (
"github.com/milvus-io/milvus/internal/proto/commonpb" "github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/milvus-io/milvus/internal/proto/datapb" "github.com/milvus-io/milvus/internal/proto/datapb"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/proto/milvuspb"
"github.com/milvus-io/milvus/internal/proto/querypb" "github.com/milvus-io/milvus/internal/proto/querypb"
"github.com/milvus-io/milvus/internal/proto/schemapb" "github.com/milvus-io/milvus/internal/proto/schemapb"
"github.com/milvus-io/milvus/internal/util" "github.com/milvus-io/milvus/internal/util"
@ -92,12 +93,12 @@ type Meta interface {
getWatchedChannelsByNodeID(nodeID int64) *querypb.UnsubscribeChannelInfo getWatchedChannelsByNodeID(nodeID int64) *querypb.UnsubscribeChannelInfo
generateReplica(collectionID int64, partitionIds []int64) (*querypb.ReplicaInfo, error) generateReplica(collectionID int64, partitionIds []int64) (*milvuspb.ReplicaInfo, error)
addReplica(replica *querypb.ReplicaInfo) error addReplica(replica *milvuspb.ReplicaInfo) error
setReplicaInfo(info *querypb.ReplicaInfo) error setReplicaInfo(info *milvuspb.ReplicaInfo) error
getReplicaByID(replicaID int64) (*querypb.ReplicaInfo, error) getReplicaByID(replicaID int64) (*milvuspb.ReplicaInfo, error)
getReplicasByCollectionID(collectionID int64) ([]*querypb.ReplicaInfo, error) getReplicasByCollectionID(collectionID int64) ([]*milvuspb.ReplicaInfo, error)
getReplicasByNodeID(nodeID int64) ([]*querypb.ReplicaInfo, error) getReplicasByNodeID(nodeID int64) ([]*milvuspb.ReplicaInfo, error)
} }
// MetaReplica records the current load information on all querynodes // MetaReplica records the current load information on all querynodes
@ -1025,22 +1026,22 @@ func (m *MetaReplica) getWatchedChannelsByNodeID(nodeID int64) *querypb.Unsubscr
return unsubscribeChannelInfo return unsubscribeChannelInfo
} }
func (m *MetaReplica) generateReplica(collectionID int64, partitionIds []int64) (*querypb.ReplicaInfo, error) { func (m *MetaReplica) generateReplica(collectionID int64, partitionIds []int64) (*milvuspb.ReplicaInfo, error) {
id, err := m.idAllocator() id, err := m.idAllocator()
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &querypb.ReplicaInfo{ return &milvuspb.ReplicaInfo{
ReplicaID: id, ReplicaID: id,
CollectionID: collectionID, CollectionID: collectionID,
PartitionIds: partitionIds, PartitionIds: partitionIds,
ShardReplicas: make([]*querypb.ShardReplica, 0), ShardReplicas: make([]*milvuspb.ShardReplica, 0),
NodeIds: make([]int64, 0), NodeIds: make([]int64, 0),
}, nil }, nil
} }
func (m *MetaReplica) addReplica(replica *querypb.ReplicaInfo) error { func (m *MetaReplica) addReplica(replica *milvuspb.ReplicaInfo) error {
err := saveReplicaInfo(replica, m.client) err := saveReplicaInfo(replica, m.client)
if err != nil { if err != nil {
return err return err
@ -1050,7 +1051,7 @@ func (m *MetaReplica) addReplica(replica *querypb.ReplicaInfo) error {
return nil return nil
} }
func (m *MetaReplica) setReplicaInfo(info *querypb.ReplicaInfo) error { func (m *MetaReplica) setReplicaInfo(info *milvuspb.ReplicaInfo) error {
err := saveReplicaInfo(info, m.client) err := saveReplicaInfo(info, m.client)
if err != nil { if err != nil {
return err return err
@ -1060,7 +1061,7 @@ func (m *MetaReplica) setReplicaInfo(info *querypb.ReplicaInfo) error {
return nil return nil
} }
func (m *MetaReplica) getReplicaByID(replicaID int64) (*querypb.ReplicaInfo, error) { func (m *MetaReplica) getReplicaByID(replicaID int64) (*milvuspb.ReplicaInfo, error) {
replica, ok := m.replicas.Get(replicaID) replica, ok := m.replicas.Get(replicaID)
if !ok { if !ok {
return nil, errors.New("replica not found") return nil, errors.New("replica not found")
@ -1069,18 +1070,18 @@ func (m *MetaReplica) getReplicaByID(replicaID int64) (*querypb.ReplicaInfo, err
return replica, nil return replica, nil
} }
func (m *MetaReplica) getReplicasByNodeID(nodeID int64) ([]*querypb.ReplicaInfo, error) { func (m *MetaReplica) getReplicasByNodeID(nodeID int64) ([]*milvuspb.ReplicaInfo, error) {
replicas := m.replicas.GetReplicasByNodeID(nodeID) replicas := m.replicas.GetReplicasByNodeID(nodeID)
return replicas, nil return replicas, nil
} }
func (m *MetaReplica) getReplicasByCollectionID(collectionID int64) ([]*querypb.ReplicaInfo, error) { func (m *MetaReplica) getReplicasByCollectionID(collectionID int64) ([]*milvuspb.ReplicaInfo, error) {
collection, err := m.getCollectionInfoByID(collectionID) collection, err := m.getCollectionInfoByID(collectionID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
replicas := make([]*querypb.ReplicaInfo, 0, len(collection.ReplicaIds)) replicas := make([]*milvuspb.ReplicaInfo, 0, len(collection.ReplicaIds))
for _, replicaID := range collection.ReplicaIds { for _, replicaID := range collection.ReplicaIds {
replica, err := m.getReplicaByID(replicaID) replica, err := m.getReplicaByID(replicaID)
if err != nil { if err != nil {
@ -1147,7 +1148,7 @@ func saveDmChannelWatchInfos(infos []*querypb.DmChannelWatchInfo, kv kv.MetaKv)
return kv.MultiSave(kvs) return kv.MultiSave(kvs)
} }
func saveReplicaInfo(info *querypb.ReplicaInfo, kv kv.MetaKv) error { func saveReplicaInfo(info *milvuspb.ReplicaInfo, kv kv.MetaKv) error {
infoBytes, err := proto.Marshal(info) infoBytes, err := proto.Marshal(info)
if err != nil { if err != nil {
return err return err

View File

@ -19,30 +19,30 @@ package querycoord
import ( import (
"sync" "sync"
"github.com/milvus-io/milvus/internal/proto/querypb" "github.com/milvus-io/milvus/internal/proto/milvuspb"
) )
type replicaSlice = []*querypb.ReplicaInfo type replicaSlice = []*milvuspb.ReplicaInfo
type ReplicaInfos struct { type ReplicaInfos struct {
globalGuard sync.RWMutex // We have to make sure atomically update replicas and index globalGuard sync.RWMutex // We have to make sure atomically update replicas and index
// Persistent Info // Persistent Info
replicas map[UniqueID]*querypb.ReplicaInfo // replica_id -> *ReplicaInfo replicas map[UniqueID]*milvuspb.ReplicaInfo // replica_id -> *ReplicaInfo
// Non-persistent info // Non-persistent info
nodeIndex map[UniqueID][]*querypb.ReplicaInfo // node_id -> []*ReplicaInfo nodeIndex map[UniqueID][]*milvuspb.ReplicaInfo // node_id -> []*ReplicaInfo
} }
func NewReplicaInfos() *ReplicaInfos { func NewReplicaInfos() *ReplicaInfos {
return &ReplicaInfos{ return &ReplicaInfos{
globalGuard: sync.RWMutex{}, globalGuard: sync.RWMutex{},
replicas: make(map[int64]*querypb.ReplicaInfo), replicas: make(map[int64]*milvuspb.ReplicaInfo),
nodeIndex: make(map[int64][]*querypb.ReplicaInfo), nodeIndex: make(map[int64][]*milvuspb.ReplicaInfo),
} }
} }
func (rep *ReplicaInfos) Get(replicaID UniqueID) (*querypb.ReplicaInfo, bool) { func (rep *ReplicaInfos) Get(replicaID UniqueID) (*milvuspb.ReplicaInfo, bool) {
rep.globalGuard.RLock() rep.globalGuard.RLock()
defer rep.globalGuard.RUnlock() defer rep.globalGuard.RUnlock()
@ -51,7 +51,7 @@ func (rep *ReplicaInfos) Get(replicaID UniqueID) (*querypb.ReplicaInfo, bool) {
} }
// Make sure atomically update replica and index // Make sure atomically update replica and index
func (rep *ReplicaInfos) Insert(info *querypb.ReplicaInfo) { func (rep *ReplicaInfos) Insert(info *milvuspb.ReplicaInfo) {
rep.globalGuard.Lock() rep.globalGuard.Lock()
defer rep.globalGuard.Unlock() defer rep.globalGuard.Unlock()
@ -68,7 +68,7 @@ func (rep *ReplicaInfos) Insert(info *querypb.ReplicaInfo) {
for _, nodeID := range info.NodeIds { for _, nodeID := range info.NodeIds {
replicas, ok := rep.nodeIndex[nodeID] replicas, ok := rep.nodeIndex[nodeID]
if !ok { if !ok {
replicas = make([]*querypb.ReplicaInfo, 0) replicas = make([]*milvuspb.ReplicaInfo, 0)
rep.nodeIndex[nodeID] = replicas rep.nodeIndex[nodeID] = replicas
} }
@ -77,7 +77,7 @@ func (rep *ReplicaInfos) Insert(info *querypb.ReplicaInfo) {
} }
} }
func (rep *ReplicaInfos) GetReplicasByNodeID(nodeID UniqueID) []*querypb.ReplicaInfo { func (rep *ReplicaInfos) GetReplicasByNodeID(nodeID UniqueID) []*milvuspb.ReplicaInfo {
rep.globalGuard.RLock() rep.globalGuard.RLock()
defer rep.globalGuard.RUnlock() defer rep.globalGuard.RUnlock()

View File

@ -1100,6 +1100,8 @@ type ProxyComponent interface {
// the `state` in `GetImportStateResponse` return the state of the import task. // the `state` in `GetImportStateResponse` return the state of the import task.
// error is always nil // error is always nil
GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error)
GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error)
} }
// QueryNode is the interface `querynode` package implements // QueryNode is the interface `querynode` package implements
@ -1170,7 +1172,7 @@ type QueryCoord interface {
GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error)
GetReplicas(ctx context.Context, req *querypb.GetReplicasRequest) (*querypb.GetReplicasResponse, error) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error)
GetShardLeaders(ctx context.Context, req *querypb.GetShardLeadersRequest) (*querypb.GetShardLeadersResponse, error) GetShardLeaders(ctx context.Context, req *querypb.GetShardLeadersRequest) (*querypb.GetShardLeadersResponse, error)
} }

View File

@ -90,8 +90,8 @@ func (m *QueryCoordClient) GetMetrics(ctx context.Context, in *milvuspb.GetMetri
return &milvuspb.GetMetricsResponse{}, m.Err return &milvuspb.GetMetricsResponse{}, m.Err
} }
func (m *QueryCoordClient) GetReplicas(ctx context.Context, in *querypb.GetReplicasRequest, opts ...grpc.CallOption) (*querypb.GetReplicasResponse, error) { func (m *QueryCoordClient) GetReplicas(ctx context.Context, in *milvuspb.GetReplicasRequest, opts ...grpc.CallOption) (*milvuspb.GetReplicasResponse, error) {
return &querypb.GetReplicasResponse{}, m.Err return &milvuspb.GetReplicasResponse{}, m.Err
} }
func (m *QueryCoordClient) GetShardLeaders(ctx context.Context, in *querypb.GetShardLeadersRequest, opts ...grpc.CallOption) (*querypb.GetShardLeadersResponse, error) { func (m *QueryCoordClient) GetShardLeaders(ctx context.Context, in *querypb.GetShardLeadersRequest, opts ...grpc.CallOption) (*querypb.GetShardLeadersResponse, error) {