Change MsgPosition Logic

Signed-off-by: XuanYang-cn <xuan.yang@zilliz.com>
pull/4973/head^2
XuanYang-cn 2021-02-04 11:19:48 +08:00 committed by yefu.chen
parent b92ff69cea
commit 1aafe86ffe
17 changed files with 325 additions and 412 deletions

View File

@ -21,8 +21,7 @@ type collectionReplica interface {
hasCollection(collectionID UniqueID) bool hasCollection(collectionID UniqueID) bool
// segment // segment
addSegment(segmentID UniqueID, collID UniqueID, partitionID UniqueID, addSegment(segmentID UniqueID, collID UniqueID, partitionID UniqueID, channelName string) error
positions []*internalpb2.MsgPosition) error
removeSegment(segmentID UniqueID) error removeSegment(segmentID UniqueID) error
hasSegment(segmentID UniqueID) bool hasSegment(segmentID UniqueID) bool
updateStatistics(segmentID UniqueID, numRows int64) error updateStatistics(segmentID UniqueID, numRows int64) error
@ -32,16 +31,16 @@ type collectionReplica interface {
type ( type (
Segment struct { Segment struct {
segmentID UniqueID segmentID UniqueID
collectionID UniqueID collectionID UniqueID
partitionID UniqueID partitionID UniqueID
numRows int64 numRows int64
memorySize int64 memorySize int64
isNew bool isNew bool
createTime Timestamp // not using createTime Timestamp // not using
endTime Timestamp // not using endTime Timestamp // not using
startPositions []*internalpb2.MsgPosition startPosition *internalpb2.MsgPosition
endPositions []*internalpb2.MsgPosition // not using endPosition *internalpb2.MsgPosition // not using
} }
collectionReplicaImpl struct { collectionReplicaImpl struct {
@ -74,21 +73,28 @@ func (colReplica *collectionReplicaImpl) getSegmentByID(segmentID UniqueID) (*Se
return nil, errors.Errorf("Cannot find segment, id = %v", segmentID) return nil, errors.Errorf("Cannot find segment, id = %v", segmentID)
} }
func (colReplica *collectionReplicaImpl) addSegment(segmentID UniqueID, collID UniqueID, func (colReplica *collectionReplicaImpl) addSegment(
partitionID UniqueID, positions []*internalpb2.MsgPosition) error { segmentID UniqueID,
collID UniqueID,
partitionID UniqueID,
channelName string) error {
colReplica.mu.Lock() colReplica.mu.Lock()
defer colReplica.mu.Unlock() defer colReplica.mu.Unlock()
log.Println("Add Segment", segmentID) log.Println("Add Segment", segmentID)
position := &internalpb2.MsgPosition{
ChannelName: channelName,
}
seg := &Segment{ seg := &Segment{
segmentID: segmentID, segmentID: segmentID,
collectionID: collID, collectionID: collID,
partitionID: partitionID, partitionID: partitionID,
isNew: true, isNew: true,
createTime: 0, createTime: 0,
startPositions: positions, startPosition: position,
endPositions: make([]*internalpb2.MsgPosition, 0), endPosition: new(internalpb2.MsgPosition),
} }
colReplica.segments = append(colReplica.segments, seg) colReplica.segments = append(colReplica.segments, seg)
return nil return nil
@ -151,7 +157,7 @@ func (colReplica *collectionReplicaImpl) getSegmentStatisticsUpdates(segmentID U
} }
if ele.isNew { if ele.isNew {
updates.StartPositions = ele.startPositions updates.StartPosition = ele.startPosition
ele.isNew = false ele.isNew = false
} }
return updates, nil return updates, nil

View File

@ -5,7 +5,6 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/zilliztech/milvus-distributed/internal/proto/internalpb2"
) )
func initTestReplicaMeta(t *testing.T, replica collectionReplica, collectionName string, collectionID UniqueID, segmentID UniqueID) { func initTestReplicaMeta(t *testing.T, replica collectionReplica, collectionName string, collectionID UniqueID, segmentID UniqueID) {
@ -112,7 +111,7 @@ func TestReplica_Segment(t *testing.T) {
replica := newReplica() replica := newReplica()
assert.False(t, replica.hasSegment(0)) assert.False(t, replica.hasSegment(0))
err := replica.addSegment(0, 1, 2, make([]*internalpb2.MsgPosition, 0)) err := replica.addSegment(0, 1, 2, "insert-01")
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, replica.hasSegment(0)) assert.True(t, replica.hasSegment(0))

View File

@ -139,7 +139,7 @@ func TestFlowGraphDDNode_Operate(t *testing.T) {
DropPartitionRequest: dropPartitionReq, DropPartitionRequest: dropPartitionReq,
} }
replica.addSegment(1, collID, partitionID, make([]*internalpb2.MsgPosition, 0)) replica.addSegment(1, collID, partitionID, "insert-01")
inFlushCh <- &flushMsg{ inFlushCh <- &flushMsg{
msgID: 5, msgID: 5,
timestamp: 5, timestamp: 5,

View File

@ -112,7 +112,7 @@ func (ibNode *insertBufferNode) Operate(in []*Msg) []*Msg {
partitionID := msg.GetPartitionID() partitionID := msg.GetPartitionID()
if !ibNode.replica.hasSegment(currentSegID) { if !ibNode.replica.hasSegment(currentSegID) {
err := ibNode.replica.addSegment(currentSegID, collID, partitionID, iMsg.startPositions) err := ibNode.replica.addSegment(currentSegID, collID, partitionID, msg.GetChannelID())
if err != nil { if err != nil {
log.Println("Error: add segment error", err) log.Println("Error: add segment error", err)
} }
@ -134,13 +134,22 @@ func (ibNode *insertBufferNode) Operate(in []*Msg) []*Msg {
uniqueSeg[currentSegID] = true uniqueSeg[currentSegID] = true
} }
} }
segIDs := make([]UniqueID, 0, len(uniqueSeg)) segIDs := make([]UniqueID, 0, len(uniqueSeg))
for id := range uniqueSeg { for id := range uniqueSeg {
segIDs = append(segIDs, id) segIDs = append(segIDs, id)
} }
err := ibNode.updateSegStatistics(segIDs)
if err != nil { if len(segIDs) > 0 {
log.Println("Error: update segment statistics error, ", err) switch {
case iMsg.startPositions == nil || len(iMsg.startPositions) <= 0:
log.Println("Warning: insert Msg StartPosition empty")
default:
err := ibNode.updateSegStatistics(segIDs, iMsg.startPositions[0])
if err != nil {
log.Println("Error: update segment statistics error, ", err)
}
}
} }
// iMsg is insertMsg // iMsg is insertMsg
@ -579,7 +588,7 @@ func (ibNode *insertBufferNode) writeHardTimeTick(ts Timestamp) error {
return ibNode.timeTickStream.Produce(&msgPack) return ibNode.timeTickStream.Produce(&msgPack)
} }
func (ibNode *insertBufferNode) updateSegStatistics(segIDs []UniqueID) error { func (ibNode *insertBufferNode) updateSegStatistics(segIDs []UniqueID, currentPosition *internalpb2.MsgPosition) error {
log.Println("Updating segments statistics...") log.Println("Updating segments statistics...")
statsUpdates := make([]*internalpb2.SegmentStatisticsUpdates, 0, len(segIDs)) statsUpdates := make([]*internalpb2.SegmentStatisticsUpdates, 0, len(segIDs))
for _, segID := range segIDs { for _, segID := range segIDs {
@ -588,6 +597,8 @@ func (ibNode *insertBufferNode) updateSegStatistics(segIDs []UniqueID) error {
log.Println("Error get segment", segID, "statistics updates", err) log.Println("Error get segment", segID, "statistics updates", err)
continue continue
} }
updates.StartPosition.Timestamp = currentPosition.GetTimestamp()
updates.StartPosition.MsgID = currentPosition.GetMsgID()
statsUpdates = append(statsUpdates, updates) statsUpdates = append(statsUpdates, updates)
} }
@ -603,7 +614,7 @@ func (ibNode *insertBufferNode) updateSegStatistics(segIDs []UniqueID) error {
var msg msgstream.TsMsg = &msgstream.SegmentStatisticsMsg{ var msg msgstream.TsMsg = &msgstream.SegmentStatisticsMsg{
BaseMsg: msgstream.BaseMsg{ BaseMsg: msgstream.BaseMsg{
HashValues: []uint32{0}, HashValues: []uint32{0}, // GOOSE TODO
}, },
SegmentStatistics: segStats, SegmentStatistics: segStats,
} }

View File

@ -648,8 +648,8 @@ func (s *Server) GetSegmentStates(req *datapb.SegmentStatesRequest) (*datapb.Seg
state.CreateTime = segmentInfo.OpenTime state.CreateTime = segmentInfo.OpenTime
state.SealedTime = segmentInfo.SealedTime state.SealedTime = segmentInfo.SealedTime
state.FlushedTime = segmentInfo.FlushedTime state.FlushedTime = segmentInfo.FlushedTime
state.StartPositions = segmentInfo.StartPosition state.StartPosition = segmentInfo.StartPosition
state.EndPositions = segmentInfo.EndPosition state.EndPosition = segmentInfo.EndPosition
} }
resp.States = append(resp.States, state) resp.States = append(resp.States, state)
} }

View File

@ -22,23 +22,9 @@ func (handler *statsHandler) HandleSegmentStat(segStats *internalpb2.SegmentStat
if segStats.IsNewSegment { if segStats.IsNewSegment {
segMeta.OpenTime = segStats.CreateTime segMeta.OpenTime = segStats.CreateTime
segMeta.StartPosition = append(segMeta.StartPosition, segStats.StartPositions...) segMeta.StartPosition = segStats.StartPosition
} }
segMeta.SealedTime = segStats.EndTime segMeta.SealedTime = segStats.EndTime
for _, pos := range segStats.EndPositions {
isNew := true
for _, epos := range segMeta.EndPosition {
if epos.ChannelName == pos.ChannelName {
epos.Timestamp = pos.Timestamp
epos.MsgID = pos.MsgID
isNew = false
break
}
}
if isNew {
segMeta.EndPosition = append(segMeta.EndPosition, pos)
}
}
segMeta.NumRows = segStats.NumRows segMeta.NumRows = segStats.NumRows
segMeta.MemSize = segStats.MemorySize segMeta.MemSize = segStats.MemorySize

View File

@ -82,8 +82,8 @@ message SegmentStateInfo {
uint64 create_time = 3; uint64 create_time = 3;
uint64 sealed_time = 4; uint64 sealed_time = 4;
uint64 flushed_time = 5; uint64 flushed_time = 5;
repeated internal.MsgPosition start_positions = 6; internal.MsgPosition start_position = 6;
repeated internal.MsgPosition end_positions = 7; internal.MsgPosition end_position = 7;
common.Status status = 8; common.Status status = 8;
} }
@ -145,8 +145,8 @@ message SegmentInfo {
int64 num_rows = 8; int64 num_rows = 8;
int64 mem_size = 9; int64 mem_size = 9;
common.SegmentState state = 10; common.SegmentState state = 10;
repeated internal.MsgPosition start_position = 11; internal.MsgPosition start_position = 11;
repeated internal.MsgPosition end_position = 12; internal.MsgPosition end_position = 12;
} }
message SegmentMsg{ message SegmentMsg{

View File

@ -618,17 +618,17 @@ func (m *SegmentStatesRequest) GetSegmentIDs() []int64 {
} }
type SegmentStateInfo struct { type SegmentStateInfo struct {
SegmentID int64 `protobuf:"varint,1,opt,name=segmentID,proto3" json:"segmentID,omitempty"` SegmentID int64 `protobuf:"varint,1,opt,name=segmentID,proto3" json:"segmentID,omitempty"`
State commonpb.SegmentState `protobuf:"varint,2,opt,name=state,proto3,enum=milvus.proto.common.SegmentState" json:"state,omitempty"` State commonpb.SegmentState `protobuf:"varint,2,opt,name=state,proto3,enum=milvus.proto.common.SegmentState" json:"state,omitempty"`
CreateTime uint64 `protobuf:"varint,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` CreateTime uint64 `protobuf:"varint,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
SealedTime uint64 `protobuf:"varint,4,opt,name=sealed_time,json=sealedTime,proto3" json:"sealed_time,omitempty"` SealedTime uint64 `protobuf:"varint,4,opt,name=sealed_time,json=sealedTime,proto3" json:"sealed_time,omitempty"`
FlushedTime uint64 `protobuf:"varint,5,opt,name=flushed_time,json=flushedTime,proto3" json:"flushed_time,omitempty"` FlushedTime uint64 `protobuf:"varint,5,opt,name=flushed_time,json=flushedTime,proto3" json:"flushed_time,omitempty"`
StartPositions []*internalpb2.MsgPosition `protobuf:"bytes,6,rep,name=start_positions,json=startPositions,proto3" json:"start_positions,omitempty"` StartPosition *internalpb2.MsgPosition `protobuf:"bytes,6,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
EndPositions []*internalpb2.MsgPosition `protobuf:"bytes,7,rep,name=end_positions,json=endPositions,proto3" json:"end_positions,omitempty"` EndPosition *internalpb2.MsgPosition `protobuf:"bytes,7,opt,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"`
Status *commonpb.Status `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` Status *commonpb.Status `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *SegmentStateInfo) Reset() { *m = SegmentStateInfo{} } func (m *SegmentStateInfo) Reset() { *m = SegmentStateInfo{} }
@ -691,16 +691,16 @@ func (m *SegmentStateInfo) GetFlushedTime() uint64 {
return 0 return 0
} }
func (m *SegmentStateInfo) GetStartPositions() []*internalpb2.MsgPosition { func (m *SegmentStateInfo) GetStartPosition() *internalpb2.MsgPosition {
if m != nil { if m != nil {
return m.StartPositions return m.StartPosition
} }
return nil return nil
} }
func (m *SegmentStateInfo) GetEndPositions() []*internalpb2.MsgPosition { func (m *SegmentStateInfo) GetEndPosition() *internalpb2.MsgPosition {
if m != nil { if m != nil {
return m.EndPositions return m.EndPosition
} }
return nil return nil
} }
@ -1121,21 +1121,21 @@ func (m *FlushSegRequest) GetSegmentIDs() []int64 {
} }
type SegmentInfo struct { type SegmentInfo struct {
SegmentID int64 `protobuf:"varint,1,opt,name=segmentID,proto3" json:"segmentID,omitempty"` SegmentID int64 `protobuf:"varint,1,opt,name=segmentID,proto3" json:"segmentID,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"`
PartitionID int64 `protobuf:"varint,3,opt,name=partitionID,proto3" json:"partitionID,omitempty"` PartitionID int64 `protobuf:"varint,3,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
InsertChannel string `protobuf:"bytes,4,opt,name=insert_channel,json=insertChannel,proto3" json:"insert_channel,omitempty"` InsertChannel string `protobuf:"bytes,4,opt,name=insert_channel,json=insertChannel,proto3" json:"insert_channel,omitempty"`
OpenTime uint64 `protobuf:"varint,5,opt,name=open_time,json=openTime,proto3" json:"open_time,omitempty"` OpenTime uint64 `protobuf:"varint,5,opt,name=open_time,json=openTime,proto3" json:"open_time,omitempty"`
SealedTime uint64 `protobuf:"varint,6,opt,name=sealed_time,json=sealedTime,proto3" json:"sealed_time,omitempty"` SealedTime uint64 `protobuf:"varint,6,opt,name=sealed_time,json=sealedTime,proto3" json:"sealed_time,omitempty"`
FlushedTime uint64 `protobuf:"varint,7,opt,name=flushed_time,json=flushedTime,proto3" json:"flushed_time,omitempty"` FlushedTime uint64 `protobuf:"varint,7,opt,name=flushed_time,json=flushedTime,proto3" json:"flushed_time,omitempty"`
NumRows int64 `protobuf:"varint,8,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"` NumRows int64 `protobuf:"varint,8,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"`
MemSize int64 `protobuf:"varint,9,opt,name=mem_size,json=memSize,proto3" json:"mem_size,omitempty"` MemSize int64 `protobuf:"varint,9,opt,name=mem_size,json=memSize,proto3" json:"mem_size,omitempty"`
State commonpb.SegmentState `protobuf:"varint,10,opt,name=state,proto3,enum=milvus.proto.common.SegmentState" json:"state,omitempty"` State commonpb.SegmentState `protobuf:"varint,10,opt,name=state,proto3,enum=milvus.proto.common.SegmentState" json:"state,omitempty"`
StartPosition []*internalpb2.MsgPosition `protobuf:"bytes,11,rep,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"` StartPosition *internalpb2.MsgPosition `protobuf:"bytes,11,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
EndPosition []*internalpb2.MsgPosition `protobuf:"bytes,12,rep,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"` EndPosition *internalpb2.MsgPosition `protobuf:"bytes,12,opt,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *SegmentInfo) Reset() { *m = SegmentInfo{} } func (m *SegmentInfo) Reset() { *m = SegmentInfo{} }
@ -1233,14 +1233,14 @@ func (m *SegmentInfo) GetState() commonpb.SegmentState {
return commonpb.SegmentState_SegmentNone return commonpb.SegmentState_SegmentNone
} }
func (m *SegmentInfo) GetStartPosition() []*internalpb2.MsgPosition { func (m *SegmentInfo) GetStartPosition() *internalpb2.MsgPosition {
if m != nil { if m != nil {
return m.StartPosition return m.StartPosition
} }
return nil return nil
} }
func (m *SegmentInfo) GetEndPosition() []*internalpb2.MsgPosition { func (m *SegmentInfo) GetEndPosition() *internalpb2.MsgPosition {
if m != nil { if m != nil {
return m.EndPosition return m.EndPosition
} }
@ -1793,109 +1793,107 @@ func init() {
func init() { proto.RegisterFile("data_service.proto", fileDescriptor_3385cd32ad6cfe64) } func init() { proto.RegisterFile("data_service.proto", fileDescriptor_3385cd32ad6cfe64) }
var fileDescriptor_3385cd32ad6cfe64 = []byte{ var fileDescriptor_3385cd32ad6cfe64 = []byte{
// 1618 bytes of a gzipped FileDescriptorProto // 1599 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5b, 0x6f, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcb, 0x6f, 0x1b, 0xc5,
0x1e, 0xcf, 0x66, 0xed, 0xd8, 0xfe, 0xdb, 0x71, 0xda, 0xc9, 0xa5, 0xae, 0xdb, 0xd3, 0xa6, 0x7b, 0x1f, 0xcf, 0x66, 0xed, 0xd8, 0xfe, 0xda, 0x49, 0xda, 0xc9, 0xa3, 0xa9, 0xdb, 0x5f, 0x9b, 0xee,
0x94, 0x36, 0xad, 0xce, 0x49, 0x8e, 0xd2, 0xa3, 0x73, 0x40, 0x48, 0x88, 0xa6, 0x6e, 0x23, 0xab, 0x4f, 0x69, 0xd3, 0x0a, 0x12, 0x94, 0x22, 0x1e, 0x42, 0x42, 0x34, 0x75, 0x1b, 0x59, 0x34, 0x55,
0x4d, 0x15, 0x8d, 0x0b, 0x15, 0x79, 0xb1, 0xd6, 0xf6, 0xc4, 0x19, 0xf0, 0xee, 0x9a, 0x9d, 0x71, 0x34, 0x2e, 0x54, 0xe4, 0x62, 0xad, 0xed, 0x89, 0x33, 0xe0, 0xdd, 0x35, 0x3b, 0xe3, 0x3e, 0x72,
0x2f, 0x79, 0xa1, 0xe2, 0x01, 0x04, 0x2f, 0xf0, 0x84, 0x04, 0xbc, 0x20, 0x21, 0x3e, 0x07, 0x5f, 0xa1, 0xe2, 0x00, 0x82, 0x0b, 0x5c, 0xe0, 0x00, 0x17, 0x24, 0xc4, 0xdf, 0xc1, 0xbf, 0xc0, 0x8d,
0x81, 0x37, 0xbe, 0x0b, 0x4f, 0x68, 0x2e, 0x7b, 0xb3, 0x37, 0x59, 0x93, 0xf4, 0xf2, 0xe6, 0xf9, 0xff, 0x85, 0x13, 0x9a, 0xc7, 0xbe, 0xec, 0x4d, 0xd6, 0x38, 0x69, 0x7b, 0xf3, 0x7c, 0xfd, 0x99,
0xfb, 0x37, 0xff, 0xfb, 0x6d, 0x16, 0x50, 0xcf, 0xe6, 0x76, 0x9b, 0x11, 0xff, 0x29, 0xed, 0x92, 0xef, 0xfb, 0x35, 0x0b, 0xa8, 0x63, 0x73, 0xbb, 0xc9, 0x88, 0xff, 0x84, 0xb6, 0xc9, 0x46, 0xdf,
0x8d, 0xa1, 0xef, 0x71, 0x0f, 0x9d, 0x77, 0xe8, 0xe0, 0xe9, 0x88, 0xa9, 0xd3, 0x86, 0x00, 0xd4, 0xf7, 0xb8, 0x87, 0xce, 0x3b, 0xb4, 0xf7, 0x64, 0xc0, 0xd4, 0x69, 0x43, 0x00, 0xaa, 0x95, 0xb6,
0x2b, 0x5d, 0xcf, 0x71, 0x3c, 0x57, 0x91, 0xea, 0x55, 0xea, 0x72, 0xe2, 0xbb, 0xf6, 0x40, 0x9f, 0xe7, 0x38, 0x9e, 0xab, 0x48, 0xd5, 0x39, 0xea, 0x72, 0xe2, 0xbb, 0x76, 0x4f, 0x9f, 0x2b, 0xf1,
0x2b, 0xf1, 0x0b, 0xd6, 0xe7, 0xb0, 0x88, 0x49, 0x9f, 0x32, 0x4e, 0xfc, 0x47, 0x5e, 0x8f, 0x60, 0x0b, 0xd6, 0x57, 0xb0, 0x80, 0x49, 0x97, 0x32, 0x4e, 0xfc, 0x87, 0x5e, 0x87, 0x60, 0xf2, 0xe5,
0xf2, 0xd9, 0x88, 0x30, 0x8e, 0xfe, 0x03, 0xb9, 0x8e, 0xcd, 0x48, 0xcd, 0x58, 0x35, 0xd6, 0xcb, 0x80, 0x30, 0x8e, 0xde, 0x82, 0x5c, 0xcb, 0x66, 0x64, 0xc5, 0x58, 0x35, 0xd6, 0xcb, 0x5b, 0x97,
0x5b, 0x97, 0x37, 0x12, 0x42, 0x34, 0xfb, 0x5d, 0xd6, 0xdf, 0xb6, 0x19, 0xc1, 0x12, 0x89, 0xfe, 0x37, 0x12, 0x42, 0x34, 0xfb, 0x5d, 0xd6, 0xdd, 0xb6, 0x19, 0xc1, 0x12, 0x89, 0xde, 0x81, 0x82,
0x07, 0x05, 0xbb, 0xd7, 0xf3, 0x09, 0x63, 0xb5, 0xd9, 0x13, 0x2e, 0xdd, 0x51, 0x18, 0x1c, 0x80, 0xdd, 0xe9, 0xf8, 0x84, 0xb1, 0x95, 0xe9, 0x13, 0x2e, 0xdd, 0x51, 0x18, 0x1c, 0x80, 0xad, 0x1f,
0xad, 0x6f, 0x0d, 0x58, 0x4a, 0x6a, 0xc0, 0x86, 0x9e, 0xcb, 0x08, 0xda, 0x86, 0x32, 0x75, 0x29, 0x0c, 0x58, 0x4c, 0x6a, 0xc0, 0xfa, 0x9e, 0xcb, 0x08, 0xda, 0x86, 0x32, 0x75, 0x29, 0x6f, 0xf6,
0x6f, 0x0f, 0x6d, 0xdf, 0x76, 0x98, 0xd6, 0xe4, 0x5a, 0x92, 0x69, 0x68, 0x5a, 0xd3, 0xa5, 0x7c, 0x6d, 0xdf, 0x76, 0x98, 0xd6, 0xe4, 0x5a, 0x92, 0x69, 0x68, 0x5a, 0xdd, 0xa5, 0x7c, 0x4f, 0x02,
0x4f, 0x02, 0x31, 0xd0, 0xf0, 0x37, 0xba, 0x0d, 0x73, 0x8c, 0xdb, 0x7c, 0x14, 0xe8, 0x74, 0x29, 0x31, 0xd0, 0xf0, 0x37, 0xba, 0x0d, 0x33, 0x8c, 0xdb, 0x7c, 0x10, 0xe8, 0x74, 0x29, 0x55, 0xa7,
0x55, 0xa7, 0x96, 0x84, 0x60, 0x0d, 0xb5, 0x7e, 0x37, 0xa0, 0xd2, 0x22, 0xfd, 0x66, 0x23, 0x70, 0x86, 0x84, 0x60, 0x0d, 0xb5, 0xfe, 0x32, 0xa0, 0xd2, 0x20, 0xdd, 0x7a, 0x2d, 0x70, 0xc6, 0x22,
0xc6, 0x12, 0xe4, 0xbb, 0xde, 0xc8, 0xe5, 0x52, 0x87, 0x79, 0xac, 0x0e, 0x68, 0x15, 0xca, 0xdd, 0xe4, 0xdb, 0xde, 0xc0, 0xe5, 0x52, 0x87, 0x59, 0xac, 0x0e, 0x68, 0x15, 0xca, 0xed, 0x43, 0xdb,
0x43, 0xdb, 0x75, 0xc9, 0xe0, 0x91, 0xed, 0x10, 0x29, 0xa0, 0x84, 0xe3, 0x24, 0x64, 0x41, 0xa5, 0x75, 0x49, 0xef, 0xa1, 0xed, 0x10, 0x29, 0xa0, 0x84, 0xe3, 0x24, 0x64, 0x41, 0xa5, 0xed, 0xf5,
0xeb, 0x0d, 0x06, 0xa4, 0xcb, 0xa9, 0xe7, 0x36, 0x1b, 0x35, 0x73, 0xd5, 0x58, 0x37, 0x71, 0x82, 0x7a, 0xa4, 0xcd, 0xa9, 0xe7, 0xd6, 0x6b, 0x2b, 0xe6, 0xaa, 0xb1, 0x6e, 0xe2, 0x04, 0x4d, 0x70,
0x26, 0xb8, 0x0c, 0x6d, 0x9f, 0x53, 0x0d, 0xc9, 0x49, 0x48, 0x9c, 0x84, 0x2e, 0x41, 0x49, 0xdc, 0xe9, 0xdb, 0x3e, 0xa7, 0x1a, 0x92, 0x93, 0x90, 0x38, 0x09, 0x5d, 0x82, 0x92, 0xb8, 0xd1, 0x74,
0x68, 0xbb, 0x42, 0x4a, 0x5e, 0x4a, 0x29, 0x0a, 0x82, 0x14, 0xb1, 0x06, 0xd5, 0x10, 0xab, 0x10, 0x85, 0x94, 0xbc, 0x94, 0x52, 0x14, 0x04, 0x29, 0x62, 0x0d, 0xe6, 0x42, 0xac, 0x42, 0xcc, 0x48,
0x73, 0x12, 0x31, 0x1f, 0x52, 0x05, 0xcc, 0xfa, 0xce, 0x00, 0x74, 0x87, 0x31, 0xda, 0x77, 0x13, 0xc4, 0x6c, 0x48, 0x15, 0x30, 0xeb, 0x47, 0x03, 0xd0, 0x1d, 0xc6, 0x68, 0xd7, 0x4d, 0x18, 0xb6,
0x86, 0xad, 0xc0, 0x9c, 0xeb, 0xf5, 0x48, 0xb3, 0x21, 0x2d, 0x33, 0xb1, 0x3e, 0x09, 0x91, 0x43, 0x0c, 0x33, 0xae, 0xd7, 0x21, 0xf5, 0x9a, 0xb4, 0xcc, 0xc4, 0xfa, 0x24, 0x44, 0xf6, 0x09, 0xf1,
0x42, 0xfc, 0xb6, 0xef, 0x0d, 0x02, 0xc3, 0x8a, 0x82, 0x80, 0xbd, 0x01, 0x41, 0xf7, 0x60, 0x9e, 0x9b, 0xbe, 0xd7, 0x0b, 0x0c, 0x2b, 0x0a, 0x02, 0xf6, 0x7a, 0x04, 0xdd, 0x83, 0x59, 0x16, 0x63,
0xc5, 0x98, 0xb0, 0x9a, 0xb9, 0x6a, 0xae, 0x97, 0xb7, 0xae, 0x6e, 0x4c, 0x24, 0xe2, 0x46, 0x5c, 0xc2, 0x56, 0xcc, 0x55, 0x73, 0xbd, 0xbc, 0x75, 0x75, 0x63, 0x24, 0x11, 0x37, 0xe2, 0xc2, 0x70,
0x18, 0x4e, 0xde, 0xb2, 0x7e, 0x9b, 0x85, 0x05, 0xf9, 0xbf, 0xd2, 0xcb, 0x21, 0xae, 0x74, 0xb4, 0xf2, 0x96, 0xf5, 0xe7, 0x34, 0xcc, 0xcb, 0xff, 0x95, 0x5e, 0x0e, 0x71, 0xa5, 0xa3, 0x25, 0x48,
0x04, 0x69, 0x75, 0xd4, 0x61, 0x0a, 0x47, 0x87, 0x01, 0x32, 0xe3, 0x01, 0x1a, 0x77, 0x7f, 0x2e, 0xab, 0xa3, 0x0e, 0x63, 0x38, 0x3a, 0x0c, 0x90, 0x19, 0x0f, 0xd0, 0xb0, 0xfb, 0x73, 0xd9, 0xee,
0xdb, 0xfd, 0xf9, 0x49, 0xf7, 0x5f, 0x85, 0x32, 0x79, 0x3e, 0xa4, 0x3e, 0x69, 0x73, 0xaa, 0xdd, 0xcf, 0x8f, 0xba, 0xff, 0x2a, 0x94, 0xc9, 0xb3, 0x3e, 0xf5, 0x49, 0x93, 0x53, 0xed, 0xde, 0x1c,
0x9b, 0xc3, 0xa0, 0x48, 0x8f, 0xa9, 0x43, 0x62, 0x39, 0x56, 0x98, 0x3a, 0xc7, 0x92, 0x41, 0x2d, 0x06, 0x45, 0x7a, 0x44, 0x1d, 0x12, 0xcb, 0xb1, 0xc2, 0xd8, 0x39, 0x96, 0x0c, 0x6a, 0x31, 0x33,
0x66, 0x06, 0xb5, 0x94, 0x16, 0xd4, 0x1f, 0x0d, 0x58, 0x4c, 0x04, 0x55, 0x17, 0xce, 0x23, 0x38, 0xa8, 0xa5, 0xb4, 0xa0, 0xfe, 0x62, 0xc0, 0x42, 0x22, 0xa8, 0xba, 0x70, 0x1e, 0xc2, 0x39, 0x96,
0xc7, 0x92, 0x8e, 0x15, 0xd5, 0x23, 0x62, 0x64, 0x1d, 0x17, 0xa3, 0x08, 0x8a, 0x27, 0xee, 0x9e, 0x74, 0xac, 0xa8, 0x1e, 0x11, 0x23, 0xeb, 0xb8, 0x18, 0x45, 0x50, 0x3c, 0x72, 0x77, 0xb2, 0x22,
0xae, 0x88, 0x9e, 0x43, 0xe5, 0xfe, 0x60, 0xc4, 0x0e, 0x4f, 0xdf, 0x50, 0x10, 0xe4, 0x7a, 0x9d, 0x7a, 0x06, 0x95, 0xfb, 0xbd, 0x01, 0x3b, 0x9c, 0xbc, 0xa1, 0x20, 0xc8, 0x75, 0x5a, 0xf5, 0x9a,
0x66, 0x43, 0x0a, 0x35, 0xb1, 0xfc, 0x3d, 0x4d, 0x48, 0xad, 0x9f, 0x0d, 0x40, 0xad, 0x43, 0xef, 0x14, 0x6a, 0x62, 0xf9, 0x7b, 0x9c, 0x90, 0x5a, 0xbf, 0x19, 0x80, 0x1a, 0x87, 0xde, 0xd3, 0x06,
0x59, 0x8b, 0xf4, 0xa5, 0x41, 0xa7, 0x56, 0x60, 0x5c, 0xd8, 0x6c, 0x76, 0xfe, 0x98, 0x93, 0xf9, 0xe9, 0x4a, 0x83, 0x26, 0x56, 0x60, 0x58, 0xd8, 0x74, 0x76, 0xfe, 0x98, 0xa3, 0xf9, 0x13, 0x98,
0x13, 0x98, 0x91, 0x8b, 0xcc, 0xb0, 0x3e, 0x81, 0xc5, 0x84, 0x86, 0x3a, 0x70, 0x57, 0x00, 0x98, 0x91, 0x8b, 0xcc, 0xb0, 0x3e, 0x87, 0x85, 0x84, 0x86, 0x3a, 0x70, 0x57, 0x00, 0x98, 0x22, 0xd5,
0x22, 0x35, 0x1b, 0x2a, 0x64, 0x26, 0x8e, 0x51, 0x4e, 0x17, 0x88, 0x43, 0x58, 0xd2, 0x72, 0xc4, 0x6b, 0x2a, 0x64, 0x26, 0x8e, 0x51, 0x26, 0x0b, 0xc4, 0x21, 0x2c, 0x6a, 0x39, 0xe2, 0x0f, 0xc2,
0x1f, 0x84, 0x9d, 0xde, 0x1f, 0x49, 0xf5, 0x66, 0xc7, 0xd5, 0xb3, 0x7e, 0x30, 0xe1, 0x5c, 0x5c, 0x26, 0xf7, 0x47, 0x52, 0xbd, 0xe9, 0x61, 0xf5, 0xac, 0x9f, 0x4c, 0x38, 0x17, 0x17, 0x55, 0x77,
0x54, 0xd3, 0x3d, 0xf0, 0xd0, 0x65, 0x28, 0x85, 0x10, 0x5d, 0xd6, 0x11, 0x01, 0xfd, 0x1f, 0xf2, 0x0f, 0x3c, 0x74, 0x19, 0x4a, 0x21, 0x44, 0x97, 0x75, 0x44, 0x40, 0xef, 0x42, 0x5e, 0xa8, 0xa9,
0x42, 0x4d, 0x55, 0xd4, 0xd5, 0xf1, 0xee, 0x1e, 0x18, 0x14, 0xe3, 0x89, 0x15, 0x5e, 0x54, 0x65, 0x8a, 0x7a, 0x6e, 0xb8, 0xbb, 0x07, 0x06, 0xc5, 0x78, 0x62, 0x85, 0x17, 0x55, 0xd9, 0xf6, 0x89,
0xd7, 0x27, 0x36, 0xd7, 0x55, 0x69, 0xaa, 0xaa, 0x54, 0x24, 0x59, 0x95, 0x57, 0xa1, 0xcc, 0x88, 0xcd, 0x75, 0x55, 0x9a, 0xaa, 0x2a, 0x15, 0x49, 0x56, 0xe5, 0x55, 0x28, 0x33, 0x62, 0xf7, 0x48,
0x3d, 0x20, 0x3d, 0x05, 0xc8, 0x29, 0x80, 0x22, 0x49, 0xc0, 0x35, 0xa8, 0x1c, 0x88, 0x04, 0x0d, 0x47, 0x01, 0x72, 0x0a, 0xa0, 0x48, 0x12, 0x70, 0x0d, 0x2a, 0x07, 0x22, 0x41, 0x03, 0x44, 0x5e,
0x10, 0x79, 0x89, 0x28, 0x6b, 0x9a, 0x84, 0x3c, 0x80, 0x05, 0xc6, 0x6d, 0x9f, 0xb7, 0x87, 0x1e, 0x22, 0xca, 0x9a, 0x26, 0x21, 0x75, 0x98, 0x63, 0xdc, 0xf6, 0x79, 0xb3, 0xef, 0x31, 0x19, 0x4e,
0x93, 0xe1, 0x64, 0xb5, 0xb9, 0xb4, 0x3a, 0x0a, 0xa7, 0xd0, 0x2e, 0xeb, 0xef, 0x69, 0x28, 0xae, 0x59, 0xfd, 0x23, 0x65, 0x14, 0x0e, 0xa1, 0x5d, 0xd6, 0xdd, 0xd3, 0x48, 0x3c, 0x2b, 0x6f, 0x06,
0xca, 0xab, 0xc1, 0x91, 0xa1, 0x1d, 0x98, 0x27, 0x6e, 0x2f, 0xc6, 0xaa, 0x30, 0x35, 0xab, 0x0a, 0x47, 0x74, 0x0f, 0x2a, 0xc4, 0xed, 0x44, 0x8c, 0x0a, 0x63, 0x33, 0x2a, 0x13, 0xb7, 0x13, 0xb2,
0x71, 0x7b, 0x11, 0xa3, 0x28, 0x0b, 0x8a, 0xd3, 0x67, 0xc1, 0x01, 0x20, 0xed, 0x46, 0x11, 0x95, 0x89, 0x32, 0xa0, 0x38, 0x7e, 0x06, 0x1c, 0x00, 0xd2, 0x2e, 0x14, 0x11, 0x79, 0x79, 0xf1, 0x7f,
0xd7, 0x97, 0x03, 0x2f, 0x0d, 0x58, 0x4c, 0x08, 0xd2, 0xa9, 0x1d, 0x29, 0x6d, 0x4c, 0xdf, 0x24, 0x61, 0xc0, 0x42, 0x42, 0x90, 0x4e, 0xeb, 0x48, 0x69, 0x63, 0xfc, 0x06, 0xf9, 0x36, 0xe4, 0xa9,
0xff, 0x0b, 0x79, 0xea, 0x1e, 0x78, 0x4a, 0x4e, 0x79, 0xeb, 0x4a, 0x7a, 0xf7, 0x0a, 0x65, 0x29, 0x7b, 0xe0, 0x29, 0x39, 0xe5, 0xad, 0x2b, 0xe9, 0x9d, 0x2b, 0x94, 0xa5, 0xc0, 0xd6, 0x77, 0x06,
0xb0, 0xf5, 0xb5, 0x01, 0xcb, 0x63, 0x19, 0x7f, 0x16, 0x25, 0xde, 0x53, 0x97, 0x48, 0xa0, 0xc5, 0x2c, 0x0d, 0x65, 0xfb, 0x69, 0x94, 0xf8, 0x40, 0x5d, 0x22, 0x81, 0x16, 0xff, 0x3f, 0x5e, 0x8b,
0x3f, 0x8f, 0xd7, 0x22, 0xcc, 0x7a, 0xac, 0xaf, 0x58, 0x14, 0x2e, 0x34, 0x5d, 0x46, 0x7c, 0xbe, 0x30, 0xe3, 0xb1, 0xbe, 0x62, 0x51, 0xb8, 0x50, 0x77, 0x19, 0xf1, 0xf9, 0x36, 0x75, 0x7b, 0x5e,
0x4d, 0xdd, 0x81, 0xd7, 0xdf, 0xb3, 0xf9, 0x19, 0x1a, 0x62, 0xa2, 0x94, 0x66, 0xc7, 0x4a, 0xc9, 0x77, 0xcf, 0xe6, 0xa7, 0x68, 0x86, 0x89, 0x32, 0x9a, 0x1e, 0x2a, 0x23, 0xeb, 0x0f, 0x03, 0x2e,
0xfa, 0xd5, 0x80, 0x8b, 0xe3, 0xb2, 0x22, 0xd3, 0xeb, 0x50, 0x3c, 0xa0, 0x64, 0xd0, 0x8b, 0x1a, 0x0e, 0xcb, 0x8a, 0x4c, 0xaf, 0x42, 0xf1, 0x80, 0x92, 0x5e, 0x27, 0x6a, 0x2a, 0xe1, 0x59, 0x14,
0x4b, 0x78, 0x16, 0x45, 0x38, 0x14, 0x60, 0x6d, 0xe0, 0x71, 0x2b, 0x56, 0x8b, 0xfb, 0xd4, 0xed, 0x60, 0x5f, 0x80, 0xb5, 0x81, 0xc7, 0xad, 0x57, 0x0d, 0xee, 0x53, 0xb7, 0xfb, 0x80, 0x32, 0x8e,
0x3f, 0xa4, 0x8c, 0x63, 0x85, 0x8f, 0xf9, 0xd3, 0x9c, 0x3e, 0x13, 0x5f, 0x1a, 0xb0, 0xa4, 0xf4, 0x15, 0x3e, 0xe6, 0x4f, 0x73, 0xfc, 0x4c, 0x7c, 0x61, 0xc0, 0xa2, 0xd2, 0xf3, 0xae, 0x9a, 0xde,
0xbc, 0xab, 0x26, 0xf8, 0xeb, 0x9d, 0x10, 0x29, 0x3b, 0x97, 0xe5, 0xc0, 0xf2, 0x13, 0x9b, 0x77, 0x2f, 0x77, 0x3a, 0xa4, 0xec, 0x5b, 0x96, 0x03, 0x4b, 0x8f, 0x6d, 0xde, 0x3e, 0xac, 0x39, 0xa7,
0x0f, 0x1b, 0xce, 0x99, 0x55, 0x10, 0xe2, 0xa2, 0x45, 0x44, 0xb9, 0xb0, 0x84, 0x13, 0x34, 0xeb, 0x56, 0x41, 0x88, 0x8b, 0x96, 0x10, 0xe5, 0xc2, 0x12, 0x4e, 0xd0, 0xac, 0x5f, 0x0d, 0x98, 0x97,
0x27, 0x03, 0x16, 0xe4, 0x2c, 0x6c, 0x91, 0xfe, 0x1b, 0x37, 0x76, 0xac, 0x62, 0x73, 0x13, 0x15, 0x73, 0xb0, 0x41, 0xba, 0xaf, 0xdc, 0xd8, 0xa1, 0x8a, 0xcd, 0x8d, 0x54, 0xec, 0x3f, 0x26, 0x94,
0xfb, 0xa7, 0x09, 0xe5, 0x58, 0x15, 0x65, 0x34, 0xec, 0x57, 0x33, 0x13, 0xd7, 0xa0, 0x4a, 0x65, 0x63, 0x55, 0x94, 0xd1, 0xac, 0xcf, 0x66, 0x1e, 0xae, 0xc1, 0x1c, 0x95, 0x29, 0xd0, 0xd4, 0x8e,
0x0a, 0xb4, 0xb5, 0xa3, 0x64, 0x7f, 0x2e, 0xe1, 0x79, 0x1a, 0x4f, 0x0c, 0xb1, 0x24, 0x79, 0x43, 0x92, 0xbd, 0xb9, 0x84, 0x67, 0x69, 0x3c, 0x31, 0xc4, 0x82, 0xe4, 0xf5, 0x89, 0x1b, 0xef, 0xcd,
0xe2, 0xc6, 0xfb, 0x73, 0x51, 0x10, 0xd2, 0x1a, 0xfc, 0x5c, 0x66, 0x83, 0x2f, 0x4c, 0x36, 0xf8, 0x45, 0x41, 0x48, 0x6b, 0xee, 0x33, 0x99, 0xcd, 0xbd, 0x30, 0xda, 0xdc, 0x2f, 0x42, 0xd1, 0x1d,
0x8b, 0x50, 0x74, 0x47, 0x4e, 0xdb, 0xf7, 0x9e, 0xa9, 0x66, 0x6a, 0xe2, 0x82, 0x3b, 0x72, 0xb0, 0x38, 0x4d, 0xdf, 0x7b, 0xaa, 0x9a, 0xa9, 0x89, 0x0b, 0xee, 0xc0, 0xc1, 0xde, 0x53, 0x26, 0xfe,
0xf7, 0x8c, 0x89, 0xbf, 0x1c, 0xe2, 0xb4, 0x19, 0x3d, 0x52, 0xdb, 0x97, 0x89, 0x0b, 0x0e, 0x71, 0x72, 0x88, 0xd3, 0x64, 0xf4, 0x48, 0x6d, 0x5e, 0x26, 0x2e, 0x38, 0xc4, 0x69, 0xd0, 0x23, 0x12,
0x5a, 0xf4, 0x88, 0x44, 0x43, 0x0b, 0xfe, 0xe6, 0xd0, 0x6a, 0x42, 0x35, 0x39, 0x4f, 0x6a, 0xe5, 0x0d, 0x2c, 0xf8, 0x8f, 0x03, 0x6b, 0x74, 0x96, 0x94, 0xcf, 0x6a, 0x96, 0x54, 0x26, 0x9a, 0x25,
0xa9, 0x67, 0xc0, 0x7c, 0x62, 0x9c, 0xa0, 0x7b, 0x50, 0x89, 0x4f, 0x93, 0x5a, 0x65, 0x6a, 0x46, 0xd6, 0x33, 0x00, 0xad, 0xe8, 0x2e, 0xeb, 0x4e, 0x90, 0x94, 0xef, 0x41, 0x41, 0xe7, 0x86, 0x5e,
0xe5, 0xd8, 0x30, 0xb1, 0x9e, 0x03, 0x68, 0x45, 0x77, 0x59, 0xff, 0x14, 0x49, 0xf9, 0x0e, 0x14, 0x47, 0xb2, 0x7a, 0x74, 0x00, 0xb7, 0xbe, 0x36, 0x60, 0xf9, 0x6e, 0x98, 0x35, 0xc2, 0x4d, 0xec,
0x74, 0x6e, 0xe8, 0x95, 0x24, 0xab, 0x47, 0x07, 0x70, 0xeb, 0x0b, 0x03, 0x56, 0xee, 0x86, 0x59, 0xd5, 0x37, 0x82, 0x6f, 0x0d, 0xb8, 0x30, 0xa2, 0x84, 0xee, 0x98, 0x3a, 0xca, 0xc1, 0xda, 0x9c,
0x23, 0xdc, 0xc4, 0xde, 0x7c, 0x23, 0xf8, 0xca, 0x80, 0x0b, 0x13, 0x4a, 0xe8, 0x8e, 0xa9, 0xa3, 0x1e, 0xe5, 0x8f, 0xc9, 0xf3, 0x4f, 0xed, 0xde, 0x80, 0xec, 0xd9, 0xd4, 0x57, 0x51, 0x9e, 0x70,
0x1c, 0xac, 0xce, 0xe9, 0x51, 0x7e, 0x40, 0x5e, 0x7c, 0x64, 0x0f, 0x46, 0x64, 0xcf, 0xa6, 0xbe, 0x43, 0xfb, 0xdd, 0x80, 0xa5, 0xbd, 0xa0, 0x42, 0x5e, 0x8f, 0x37, 0xb2, 0x9f, 0xa1, 0xd6, 0x37,
0x8a, 0xf2, 0x29, 0xb7, 0xb4, 0x5f, 0x0c, 0x58, 0xde, 0x0b, 0x2a, 0xe4, 0xed, 0x78, 0x23, 0xfb, 0x06, 0x2c, 0x0f, 0x6b, 0xf9, 0x5a, 0xdc, 0xb5, 0x0b, 0x73, 0xf7, 0xc5, 0xf8, 0x92, 0x6d, 0x75,
0x29, 0x6a, 0x7d, 0x69, 0xc0, 0xca, 0xb8, 0x96, 0x6f, 0xc5, 0x5d, 0xbb, 0x50, 0xbd, 0x2f, 0xc6, 0x97, 0x70, 0x1b, 0xad, 0x40, 0x41, 0x0f, 0x34, 0xdd, 0xb4, 0x82, 0xa3, 0xe8, 0x03, 0x2d, 0x39,
0x97, 0x6c, 0xab, 0xbb, 0x84, 0xdb, 0xa8, 0x06, 0x05, 0x3d, 0xd0, 0x74, 0xd3, 0x0a, 0x8e, 0xa2, 0x11, 0x9b, 0xd1, 0x94, 0x2b, 0xe1, 0x72, 0x2b, 0x9a, 0x92, 0xd6, 0xf7, 0x46, 0xb8, 0xb5, 0x46,
0x0f, 0x74, 0xe4, 0x44, 0x6c, 0x47, 0x53, 0xae, 0x84, 0xcb, 0x9d, 0x68, 0x4a, 0x5a, 0xdf, 0x18, 0x1c, 0x4f, 0x6e, 0x84, 0xff, 0x03, 0xa0, 0xac, 0xa9, 0x9b, 0x89, 0x54, 0xbd, 0x88, 0x4b, 0x94,
0xe1, 0xe6, 0x1a, 0x71, 0x3c, 0xb9, 0x11, 0xfe, 0x03, 0x80, 0xb2, 0xb6, 0x6e, 0x26, 0x52, 0xf5, 0xdd, 0x57, 0x04, 0xf4, 0x3e, 0xcc, 0x48, 0xf9, 0x6c, 0x25, 0x9f, 0xe6, 0x0f, 0x59, 0x17, 0x49,
0x22, 0x2e, 0x51, 0x76, 0x5f, 0x11, 0xd0, 0xbb, 0x30, 0x27, 0xe5, 0xb3, 0x5a, 0x3e, 0xcd, 0x1f, 0x0b, 0xb0, 0xbe, 0x60, 0x7d, 0x02, 0x95, 0x5a, 0xed, 0x41, 0xa4, 0xc7, 0x70, 0xe8, 0x8c, 0x94,
0xb2, 0x2e, 0x92, 0x16, 0x60, 0x7d, 0xc1, 0xfa, 0x10, 0x2a, 0x8d, 0xc6, 0xc3, 0x48, 0x8f, 0xf1, 0xd0, 0x8d, 0x61, 0x63, 0xb2, 0xe0, 0xee, 0x8a, 0xd7, 0xf1, 0xab, 0x2f, 0xb8, 0x4e, 0xbc, 0xde,
0xd0, 0x19, 0x29, 0xa1, 0x9b, 0xc2, 0xc6, 0x64, 0xc1, 0xdd, 0x15, 0x2f, 0xe4, 0x37, 0x5f, 0x70, 0xb4, 0x0e, 0xa7, 0x59, 0xce, 0xc2, 0x47, 0xbf, 0x52, 0x44, 0x1d, 0xb6, 0xfe, 0x2e, 0x43, 0xb9,
0xbd, 0x78, 0xbd, 0x69, 0x1d, 0xce, 0xb2, 0x9c, 0x85, 0x0f, 0x7f, 0xa5, 0x88, 0x3a, 0x6c, 0xfd, 0x66, 0x73, 0xbb, 0xa1, 0x3e, 0x92, 0x21, 0x1b, 0x2a, 0xf1, 0xaf, 0x4b, 0xe8, 0x7a, 0x4a, 0x30,
0x51, 0x86, 0x72, 0xc3, 0xe6, 0x76, 0x4b, 0x7d, 0x28, 0x43, 0x36, 0x54, 0xe2, 0x5f, 0x98, 0xd0, 0x52, 0x3e, 0x80, 0x55, 0x6f, 0x64, 0xe2, 0x94, 0xee, 0xd6, 0x14, 0xda, 0x81, 0xbc, 0x8c, 0x18,
0xf5, 0x94, 0x60, 0xa4, 0x7c, 0x04, 0xab, 0xdf, 0xc8, 0xc4, 0x29, 0xdd, 0xad, 0x19, 0xb4, 0x03, 0x4a, 0xfb, 0x04, 0x12, 0x7f, 0x04, 0x57, 0x4f, 0xb2, 0xcb, 0x9a, 0x42, 0x2d, 0x98, 0x0f, 0xdf,
0x79, 0x19, 0x31, 0x94, 0xf6, 0x19, 0x24, 0xfe, 0x10, 0xae, 0x9f, 0x64, 0x97, 0x35, 0x83, 0x3a, 0xf3, 0x3a, 0xd5, 0xd6, 0x52, 0x58, 0x8e, 0x7e, 0xc8, 0xa9, 0x5e, 0xcf, 0x82, 0x85, 0xca, 0x36,
0xb0, 0x10, 0xbe, 0xe9, 0x75, 0xaa, 0xad, 0xa5, 0xb0, 0x9c, 0xfc, 0x98, 0x53, 0xbf, 0x9e, 0x05, 0xa1, 0x12, 0x7b, 0x7a, 0xb2, 0x54, 0x01, 0xa3, 0xaf, 0xe7, 0x54, 0x01, 0x29, 0x4f, 0x58, 0x6b,
0x0b, 0x95, 0x6d, 0x43, 0x25, 0xf6, 0xfc, 0x64, 0xa9, 0x02, 0x26, 0x5f, 0xd0, 0xa9, 0x02, 0x52, 0x0a, 0xd9, 0x30, 0xb7, 0x43, 0x78, 0x7c, 0xab, 0x58, 0xcb, 0x98, 0x0b, 0x27, 0x89, 0x18, 0x7d,
0x9e, 0xb1, 0xd6, 0x0c, 0xb2, 0xa1, 0xba, 0x43, 0x78, 0x7c, 0xab, 0x58, 0xcb, 0x98, 0x0b, 0x27, 0x4e, 0x58, 0x53, 0xa8, 0x0b, 0xe7, 0x22, 0x11, 0x6a, 0xcf, 0x47, 0x37, 0x32, 0x56, 0xf3, 0xa0,
0x89, 0x98, 0x7c, 0x4e, 0x58, 0x33, 0xa8, 0x0f, 0xe7, 0x22, 0x11, 0x6a, 0xcf, 0x47, 0x37, 0x32, 0xa7, 0x56, 0xd7, 0xb3, 0x81, 0xa1, 0x20, 0x1f, 0x16, 0x77, 0x08, 0x1f, 0xd9, 0xac, 0xd1, 0xad,
0x56, 0xf3, 0xa0, 0xa7, 0xd6, 0xd7, 0xb3, 0x81, 0xa1, 0x20, 0x1f, 0x96, 0x76, 0x08, 0x9f, 0xd8, 0x14, 0x1e, 0xc7, 0xec, 0xfa, 0xd5, 0x37, 0xc6, 0xc0, 0xb2, 0x84, 0xff, 0xce, 0x87, 0x32, 0xf5,
0xac, 0xd1, 0xad, 0x14, 0x1e, 0xc7, 0xec, 0xfa, 0xf5, 0x7f, 0x4d, 0x81, 0x65, 0x09, 0xff, 0x9d, 0x32, 0x94, 0x6e, 0x5d, 0xda, 0x22, 0x5d, 0xcd, 0x5e, 0xe0, 0xa5, 0x59, 0x17, 0x76, 0x08, 0x4f,
0x0f, 0x65, 0xea, 0x65, 0x28, 0xdd, 0xba, 0xb4, 0x45, 0xba, 0x9e, 0xbd, 0xc0, 0x4b, 0xb3, 0x2e, 0x0e, 0x3f, 0xca, 0x38, 0x6d, 0x33, 0x74, 0x33, 0x45, 0x50, 0xfa, 0xa8, 0xae, 0xde, 0x1a, 0x07,
0xec, 0x10, 0x9e, 0x1c, 0x7e, 0x94, 0x71, 0xda, 0x65, 0xe8, 0x66, 0x8a, 0xa0, 0xf4, 0x51, 0x5d, 0x1a, 0x9a, 0xe5, 0xc1, 0xf2, 0x0e, 0xe1, 0x89, 0x01, 0xa2, 0x45, 0xa6, 0x05, 0x24, 0x75, 0x1c,
0xbf, 0x35, 0x0d, 0x34, 0x34, 0xcb, 0x83, 0x95, 0x1d, 0xc2, 0x13, 0x03, 0x44, 0x8b, 0x4c, 0x0b, 0x56, 0x6f, 0x8e, 0x81, 0x0c, 0x05, 0xee, 0x03, 0x92, 0x46, 0x3a, 0x7d, 0xcf, 0x8d, 0xd2, 0xa4,
0x48, 0xea, 0x38, 0xac, 0xdf, 0x9c, 0x02, 0x19, 0x0a, 0xdc, 0x07, 0x24, 0x8d, 0x74, 0x86, 0x9e, 0x9a, 0x5a, 0x81, 0xf7, 0x9c, 0x3e, 0x7f, 0x3e, 0x9c, 0x80, 0xa1, 0xef, 0x86, 0x78, 0x58, 0x53,
0x1b, 0xa5, 0x49, 0x3d, 0xb5, 0x02, 0xef, 0x39, 0x43, 0xfe, 0x62, 0x3c, 0x01, 0x43, 0xdf, 0x8d, 0xe8, 0xb1, 0xe4, 0x2d, 0xd6, 0xc8, 0x47, 0xb4, 0xfd, 0x45, 0xb0, 0xb2, 0x9e, 0xc4, 0x7b, 0xe8,
0xf1, 0xb0, 0x66, 0xd0, 0x13, 0xc9, 0x5b, 0xac, 0x91, 0x8f, 0x69, 0xf7, 0xd3, 0x60, 0x65, 0x3d, 0xe5, 0xa8, 0x0f, 0x2a, 0x2a, 0x31, 0xa5, 0x3f, 0x93, 0x09, 0x17, 0x39, 0xe7, 0x0c, 0x59, 0xef,
0x89, 0xf7, 0xd8, 0xcb, 0x51, 0x1f, 0x54, 0x54, 0x62, 0x4a, 0x7f, 0x2c, 0x13, 0x2e, 0x72, 0xce, 0xc3, 0x52, 0xb2, 0x2e, 0xcf, 0x90, 0x77, 0x1b, 0x8a, 0xd2, 0xd7, 0x03, 0x97, 0x67, 0x64, 0x50,
0x2b, 0x64, 0xbd, 0x0f, 0xcb, 0xc9, 0xba, 0x7c, 0x85, 0xbc, 0xbb, 0x50, 0x94, 0xbe, 0x1e, 0xb9, 0x7c, 0xf6, 0x64, 0x64, 0x50, 0x62, 0x44, 0x58, 0x53, 0x5b, 0x3f, 0x4f, 0x43, 0x51, 0x74, 0x76,
0x3c, 0x23, 0x83, 0xe2, 0xb3, 0x27, 0x23, 0x83, 0x12, 0x23, 0xc2, 0x9a, 0xd9, 0xfa, 0x7e, 0x16, 0xd9, 0xc6, 0x5f, 0x66, 0x74, 0xf7, 0x61, 0x3e, 0xf9, 0x44, 0x4c, 0xcf, 0xd1, 0xd4, 0x67, 0x64,
0x8a, 0xa2, 0xb3, 0xcb, 0x36, 0xfe, 0x3a, 0xa3, 0xbb, 0x0f, 0x0b, 0xc9, 0x27, 0x62, 0x7a, 0x8e, 0x56, 0x8b, 0xc7, 0x30, 0x1b, 0x3c, 0x07, 0x55, 0xff, 0xb5, 0x8e, 0x9b, 0x19, 0xd1, 0x83, 0x31,
0xa6, 0x3e, 0x23, 0xb3, 0x5a, 0x3c, 0x86, 0xf9, 0xe0, 0x39, 0xa8, 0xfa, 0xaf, 0x75, 0xdc, 0xcc, 0x83, 0xe7, 0xf6, 0x47, 0xfb, 0x1f, 0x76, 0x29, 0x3f, 0x1c, 0xb4, 0xc4, 0x3f, 0x9b, 0x47, 0xb4,
0x88, 0x1e, 0x8c, 0x19, 0x3c, 0xb7, 0x3f, 0xd8, 0x7f, 0xbf, 0x4f, 0xf9, 0xe1, 0xa8, 0x23, 0xfe, 0xd7, 0xa3, 0x47, 0x9c, 0xb4, 0x0f, 0x37, 0xd5, 0xad, 0x37, 0x3b, 0x94, 0x71, 0x9f, 0xb6, 0x06,
0xd9, 0x3c, 0xa2, 0x83, 0x01, 0x3d, 0xe2, 0xa4, 0x7b, 0xb8, 0xa9, 0x6e, 0xfd, 0xbb, 0x47, 0x19, 0x9c, 0x74, 0x36, 0x03, 0xb3, 0x37, 0x25, 0xab, 0x4d, 0x21, 0xae, 0xdf, 0x6a, 0xcd, 0xc8, 0xd3,
0xf7, 0x69, 0x67, 0xc4, 0x49, 0x6f, 0x33, 0x30, 0x7b, 0x53, 0xb2, 0xda, 0x14, 0xe2, 0x86, 0x9d, 0xed, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xac, 0x37, 0x0d, 0xbc, 0x60, 0x1a, 0x00, 0x00,
0xce, 0x9c, 0x3c, 0xdd, 0xfe, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xac, 0x3c, 0x2b, 0xea, 0x64, 0x1a,
0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

View File

@ -179,8 +179,8 @@ message SegmentStatisticsUpdates {
int64 NumRows = 3; int64 NumRows = 3;
uint64 create_time = 4; uint64 create_time = 4;
uint64 end_time = 5; uint64 end_time = 5;
repeated internal.MsgPosition start_positions = 6; internal.MsgPosition start_position = 6;
repeated internal.MsgPosition end_positions = 7; internal.MsgPosition end_position = 7;
bool isNewSegment = 8; bool isNewSegment = 8;
} }

View File

@ -1275,17 +1275,17 @@ func (m *LoadIndex) GetIndexParams() []*commonpb.KeyValuePair {
} }
type SegmentStatisticsUpdates struct { type SegmentStatisticsUpdates struct {
SegmentID int64 `protobuf:"varint,1,opt,name=SegmentID,proto3" json:"SegmentID,omitempty"` SegmentID int64 `protobuf:"varint,1,opt,name=SegmentID,proto3" json:"SegmentID,omitempty"`
MemorySize int64 `protobuf:"varint,2,opt,name=MemorySize,proto3" json:"MemorySize,omitempty"` MemorySize int64 `protobuf:"varint,2,opt,name=MemorySize,proto3" json:"MemorySize,omitempty"`
NumRows int64 `protobuf:"varint,3,opt,name=NumRows,proto3" json:"NumRows,omitempty"` NumRows int64 `protobuf:"varint,3,opt,name=NumRows,proto3" json:"NumRows,omitempty"`
CreateTime uint64 `protobuf:"varint,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` CreateTime uint64 `protobuf:"varint,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
EndTime uint64 `protobuf:"varint,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` EndTime uint64 `protobuf:"varint,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
StartPositions []*MsgPosition `protobuf:"bytes,6,rep,name=start_positions,json=startPositions,proto3" json:"start_positions,omitempty"` StartPosition *MsgPosition `protobuf:"bytes,6,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
EndPositions []*MsgPosition `protobuf:"bytes,7,rep,name=end_positions,json=endPositions,proto3" json:"end_positions,omitempty"` EndPosition *MsgPosition `protobuf:"bytes,7,opt,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"`
IsNewSegment bool `protobuf:"varint,8,opt,name=isNewSegment,proto3" json:"isNewSegment,omitempty"` IsNewSegment bool `protobuf:"varint,8,opt,name=isNewSegment,proto3" json:"isNewSegment,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
} }
func (m *SegmentStatisticsUpdates) Reset() { *m = SegmentStatisticsUpdates{} } func (m *SegmentStatisticsUpdates) Reset() { *m = SegmentStatisticsUpdates{} }
@ -1348,16 +1348,16 @@ func (m *SegmentStatisticsUpdates) GetEndTime() uint64 {
return 0 return 0
} }
func (m *SegmentStatisticsUpdates) GetStartPositions() []*MsgPosition { func (m *SegmentStatisticsUpdates) GetStartPosition() *MsgPosition {
if m != nil { if m != nil {
return m.StartPositions return m.StartPosition
} }
return nil return nil
} }
func (m *SegmentStatisticsUpdates) GetEndPositions() []*MsgPosition { func (m *SegmentStatisticsUpdates) GetEndPosition() *MsgPosition {
if m != nil { if m != nil {
return m.EndPositions return m.EndPosition
} }
return nil return nil
} }
@ -1771,99 +1771,99 @@ func init() { proto.RegisterFile("internal.proto", fileDescriptor_41f4a519b878ee
var fileDescriptor_41f4a519b878ee3b = []byte{ var fileDescriptor_41f4a519b878ee3b = []byte{
// 1510 bytes of a gzipped FileDescriptorProto // 1510 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x5b, 0x6f, 0x1b, 0x45, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcd, 0x6f, 0x1b, 0x45,
0x14, 0x66, 0x6d, 0x27, 0xb6, 0x8f, 0x9d, 0xc4, 0x5d, 0x7a, 0xd9, 0x42, 0xa0, 0xee, 0x72, 0x0b, 0x14, 0x67, 0x6d, 0x27, 0xb6, 0xdf, 0x3a, 0xa9, 0xbb, 0xf4, 0x63, 0x0b, 0x81, 0xba, 0xcb, 0x57,
0x54, 0x24, 0x55, 0x8a, 0x10, 0xe2, 0xa5, 0x4d, 0xe2, 0x5e, 0x56, 0x49, 0x4c, 0x18, 0xa7, 0x95, 0xa0, 0x22, 0xa9, 0x52, 0x84, 0x10, 0x97, 0x36, 0x89, 0xfb, 0xb1, 0x6a, 0x62, 0xc2, 0x38, 0xad,
0xda, 0x97, 0xd5, 0x7a, 0x77, 0x62, 0x4f, 0xbb, 0x17, 0x77, 0x66, 0xdc, 0xd4, 0x7d, 0xe6, 0x0d, 0xd4, 0x5e, 0x56, 0xeb, 0xdd, 0x89, 0x3d, 0xed, 0x7e, 0xb8, 0x33, 0xe3, 0xa6, 0xee, 0x99, 0x1b,
0xc1, 0x03, 0x12, 0x7f, 0x80, 0x1f, 0xc0, 0x33, 0x4f, 0x20, 0xf1, 0x84, 0xc4, 0x3b, 0x12, 0x12, 0x82, 0x03, 0x12, 0xff, 0x00, 0x7f, 0x00, 0x67, 0x4e, 0x20, 0x71, 0x42, 0xe2, 0x8e, 0x84, 0xc4,
0x3f, 0x80, 0xdf, 0xc0, 0x13, 0x9a, 0xcb, 0xee, 0xda, 0xa9, 0x93, 0xa6, 0x81, 0x0a, 0x21, 0x78, 0x91, 0xbf, 0x82, 0x13, 0x9a, 0x8f, 0x5d, 0xdb, 0xa9, 0x93, 0xa6, 0x86, 0x0a, 0x21, 0xb8, 0xed,
0xf3, 0x9c, 0x39, 0x7b, 0x66, 0xbe, 0xef, 0x3b, 0x67, 0xce, 0x8c, 0x61, 0x9e, 0xc4, 0x1c, 0xd3, 0xbc, 0x79, 0x7e, 0x33, 0xbf, 0xdf, 0xef, 0xbd, 0x79, 0x33, 0x86, 0x45, 0x92, 0x70, 0x4c, 0x13,
0xd8, 0x0b, 0x97, 0x07, 0x34, 0xe1, 0x89, 0x79, 0x26, 0x22, 0xe1, 0xa3, 0x21, 0x53, 0xa3, 0xe5, 0x3f, 0x5a, 0xe9, 0xd3, 0x94, 0xa7, 0xd6, 0xe9, 0x98, 0x44, 0x8f, 0x06, 0x4c, 0x8d, 0x56, 0xb2,
0x74, 0xf2, 0x95, 0xba, 0x9f, 0x44, 0x51, 0x12, 0x2b, 0xb3, 0xfd, 0xbd, 0x01, 0x73, 0x1b, 0x49, 0xc9, 0x57, 0x6a, 0x41, 0x1a, 0xc7, 0x69, 0xa2, 0xcc, 0xce, 0xf7, 0x06, 0x2c, 0x6c, 0xa6, 0x71,
0x34, 0x48, 0x62, 0x1c, 0x73, 0x27, 0xde, 0x4b, 0xcc, 0xb3, 0x30, 0x1b, 0x27, 0x01, 0x76, 0x5a, 0x3f, 0x4d, 0x70, 0xc2, 0xdd, 0x64, 0x2f, 0xb5, 0xce, 0xc0, 0x7c, 0x92, 0x86, 0xd8, 0x6d, 0xda,
0x96, 0xd1, 0x34, 0x96, 0x8a, 0x48, 0x8f, 0x4c, 0x13, 0x4a, 0x34, 0x09, 0xb1, 0x55, 0x68, 0x1a, 0x46, 0xc3, 0x58, 0x2e, 0x22, 0x3d, 0xb2, 0x2c, 0x28, 0xd1, 0x34, 0xc2, 0x76, 0xa1, 0x61, 0x2c,
0x4b, 0x55, 0x24, 0x7f, 0x9b, 0x57, 0x01, 0x18, 0xf7, 0x38, 0x76, 0xfd, 0x24, 0xc0, 0x56, 0xb1, 0x57, 0x91, 0xfc, 0xb6, 0xae, 0x00, 0x30, 0xee, 0x73, 0xec, 0x05, 0x69, 0x88, 0xed, 0x62, 0xc3,
0x69, 0x2c, 0xcd, 0xaf, 0x36, 0x97, 0xa7, 0xae, 0xbb, 0xdc, 0x11, 0x8e, 0x1b, 0x49, 0x80, 0x51, 0x58, 0x5e, 0x5c, 0x6b, 0xac, 0x4c, 0x5d, 0x77, 0xa5, 0x2d, 0x1c, 0x37, 0xd3, 0x10, 0xa3, 0x2a,
0x95, 0xa5, 0x3f, 0xcd, 0x6b, 0x00, 0xf8, 0x31, 0xa7, 0x9e, 0x4b, 0xe2, 0xbd, 0xc4, 0x2a, 0x35, 0xcb, 0x3e, 0xad, 0xab, 0x00, 0xf8, 0x31, 0xa7, 0xbe, 0x47, 0x92, 0xbd, 0xd4, 0x2e, 0x35, 0x8a,
0x8b, 0x4b, 0xb5, 0xd5, 0x8b, 0x93, 0x01, 0xf4, 0x76, 0x37, 0xf1, 0xe8, 0x8e, 0x17, 0x0e, 0xf1, 0xcb, 0xe6, 0xda, 0x85, 0xc9, 0x00, 0x7a, 0xbb, 0xb7, 0xf0, 0xf0, 0x8e, 0x1f, 0x0d, 0xf0, 0x8e,
0x8e, 0x47, 0x28, 0xaa, 0xca, 0x8f, 0xc4, 0x76, 0xed, 0x5f, 0x0d, 0x58, 0xc8, 0x00, 0xc8, 0x35, 0x4f, 0x28, 0xaa, 0xca, 0x1f, 0x89, 0xed, 0x3a, 0xbf, 0x1a, 0x70, 0x22, 0x07, 0x20, 0xd7, 0x60,
0x98, 0xf9, 0x31, 0xcc, 0xc8, 0x25, 0x24, 0x82, 0xda, 0xea, 0x9b, 0x87, 0xec, 0x68, 0x02, 0x37, 0xd6, 0xc7, 0x30, 0x27, 0x97, 0x90, 0x08, 0xcc, 0xb5, 0x37, 0x0f, 0xd9, 0xd1, 0x04, 0x6e, 0xa4,
0x52, 0x9f, 0x98, 0xb7, 0xe1, 0x65, 0x36, 0xec, 0xfa, 0xe9, 0x94, 0x2b, 0xad, 0xcc, 0x2a, 0xc8, 0x7e, 0x62, 0xdd, 0x86, 0x97, 0xd9, 0xa0, 0x13, 0x64, 0x53, 0x9e, 0xb4, 0x32, 0xbb, 0x20, 0xb7,
0xad, 0x1d, 0x2f, 0x92, 0x39, 0x1e, 0x40, 0x6f, 0xe9, 0x0a, 0xcc, 0x8a, 0x48, 0x43, 0x26, 0x59, 0x76, 0xbc, 0x48, 0xd6, 0x78, 0x00, 0xbd, 0xa5, 0xcb, 0x30, 0x2f, 0x22, 0x0d, 0x98, 0x64, 0xc9,
0xaa, 0xad, 0xbe, 0x3a, 0x15, 0x64, 0x47, 0xba, 0x20, 0xed, 0x6a, 0xdf, 0x81, 0x4a, 0x5b, 0x90, 0x5c, 0x7b, 0x75, 0x2a, 0xc8, 0xb6, 0x74, 0x41, 0xda, 0xd5, 0xb9, 0x03, 0x95, 0x96, 0x20, 0x5f,
0x2f, 0x64, 0xf9, 0x10, 0xca, 0x5e, 0x10, 0x50, 0xcc, 0x98, 0x46, 0xb5, 0x38, 0x35, 0xc2, 0x9a, 0xc8, 0xf2, 0x21, 0x94, 0xfd, 0x30, 0xa4, 0x98, 0x31, 0x8d, 0x6a, 0x69, 0x6a, 0x84, 0x75, 0xe5,
0xf2, 0x41, 0xa9, 0xf3, 0x34, 0xd9, 0xec, 0xfb, 0x00, 0x4e, 0x4c, 0xf8, 0x8e, 0x47, 0xbd, 0x88, 0x83, 0x32, 0xe7, 0x69, 0xb2, 0x39, 0xf7, 0x01, 0xdc, 0x84, 0xf0, 0x1d, 0x9f, 0xfa, 0x31, 0x3b,
0x1d, 0x2a, 0x78, 0x0b, 0xea, 0x8c, 0x7b, 0x94, 0xbb, 0x03, 0xe9, 0xa7, 0x29, 0x38, 0x86, 0x3a, 0x54, 0xf0, 0x26, 0xd4, 0x18, 0xf7, 0x29, 0xf7, 0xfa, 0xd2, 0x4f, 0x53, 0x70, 0x0c, 0x75, 0x4c,
0x35, 0xf9, 0x99, 0x8a, 0x6e, 0xdf, 0x05, 0xe8, 0x70, 0x4a, 0xe2, 0xde, 0x16, 0x61, 0x5c, 0xac, 0xf9, 0x33, 0x15, 0xdd, 0xb9, 0x0b, 0xd0, 0xe6, 0x94, 0x24, 0xdd, 0x2d, 0xc2, 0xb8, 0x58, 0xeb,
0xf5, 0x48, 0xf8, 0x09, 0x10, 0xc5, 0xa5, 0x2a, 0xd2, 0xa3, 0x31, 0x7a, 0x0a, 0xc7, 0xa7, 0xe7, 0x91, 0xf0, 0x13, 0x20, 0x8a, 0xcb, 0x55, 0xa4, 0x47, 0x63, 0xf4, 0x14, 0x8e, 0x4f, 0xcf, 0x15,
0x2a, 0xd4, 0x76, 0x49, 0x84, 0x77, 0x89, 0xff, 0x60, 0x9b, 0xf5, 0xcc, 0xcb, 0x50, 0xea, 0x7a, 0x30, 0x77, 0x49, 0x8c, 0x77, 0x49, 0xf0, 0x60, 0x9b, 0x75, 0xad, 0x4b, 0x50, 0xea, 0xf8, 0x0c,
0x0c, 0x1f, 0x49, 0xcf, 0x36, 0xeb, 0xad, 0x7b, 0x0c, 0x23, 0xe9, 0x69, 0xff, 0x66, 0xc0, 0xb9, 0x1f, 0x49, 0xcf, 0x36, 0xeb, 0x6e, 0xf8, 0x0c, 0x23, 0xe9, 0xe9, 0xfc, 0x66, 0xc0, 0xd9, 0x4d,
0x0d, 0x8a, 0x65, 0x32, 0x86, 0x21, 0xf6, 0x39, 0x49, 0x62, 0x84, 0x1f, 0x0e, 0x31, 0xe3, 0xcf, 0x8a, 0x65, 0x32, 0x46, 0x11, 0x0e, 0x38, 0x49, 0x13, 0x84, 0x1f, 0x0e, 0x30, 0xe3, 0xcf, 0x1f,
0x1f, 0xcd, 0x3c, 0x07, 0xe5, 0xa0, 0xeb, 0xc6, 0x5e, 0x94, 0x92, 0x3d, 0x1b, 0x74, 0xdb, 0x5e, 0xcd, 0x3a, 0x0b, 0xe5, 0xb0, 0xe3, 0x25, 0x7e, 0x9c, 0x91, 0x3d, 0x1f, 0x76, 0x5a, 0x7e, 0x8c,
0x84, 0xcd, 0xb7, 0x61, 0xde, 0xcf, 0xe2, 0x0b, 0x8b, 0xcc, 0x81, 0x2a, 0x3a, 0x60, 0x15, 0x52, 0xad, 0xb7, 0x61, 0x31, 0xc8, 0xe3, 0x0b, 0x8b, 0xcc, 0x81, 0x2a, 0x3a, 0x60, 0x15, 0x52, 0x85,
0x05, 0x5d, 0xa7, 0x65, 0x95, 0xa4, 0x0c, 0xf2, 0xb7, 0x69, 0x43, 0x3d, 0xf7, 0x72, 0x5a, 0xd6, 0x1d, 0xb7, 0x69, 0x97, 0xa4, 0x0c, 0xf2, 0xdb, 0x72, 0xa0, 0x36, 0xf2, 0x72, 0x9b, 0xf6, 0x9c,
0x8c, 0x9c, 0x9b, 0xb0, 0x09, 0x52, 0x99, 0xdf, 0xc7, 0x91, 0x67, 0xcd, 0x36, 0x8d, 0xa5, 0x3a, 0x9c, 0x9b, 0xb0, 0x09, 0x52, 0x59, 0xd0, 0xc3, 0xb1, 0x6f, 0xcf, 0x37, 0x8c, 0xe5, 0x1a, 0xd2,
0xd2, 0x23, 0xfb, 0x47, 0x03, 0xce, 0xb4, 0x68, 0x32, 0xf8, 0x37, 0x83, 0xb3, 0xbf, 0x28, 0xc0, 0x23, 0xe7, 0x47, 0x03, 0x4e, 0x37, 0x69, 0xda, 0xff, 0x37, 0x83, 0x73, 0xbe, 0x28, 0xc0, 0x19,
0x59, 0xa5, 0xd1, 0x8e, 0x47, 0x39, 0x79, 0x41, 0x28, 0xde, 0x81, 0x85, 0x7c, 0x55, 0xe5, 0x30, 0xa5, 0xd1, 0x8e, 0x4f, 0x39, 0x79, 0x41, 0x28, 0xde, 0x81, 0x13, 0xa3, 0x55, 0x95, 0xc3, 0x74,
0x1d, 0xc6, 0x5b, 0x30, 0x3f, 0x48, 0xf7, 0xa1, 0xfc, 0x4a, 0xd2, 0x6f, 0x2e, 0xb3, 0x4e, 0xa0, 0x18, 0x6f, 0xc1, 0x62, 0x3f, 0xdb, 0x87, 0xf2, 0x2b, 0x49, 0xbf, 0x85, 0xdc, 0x3a, 0x81, 0x76,
0x9d, 0x39, 0x02, 0xed, 0xec, 0x14, 0x29, 0x9b, 0x50, 0xcb, 0x02, 0x39, 0x2d, 0xab, 0x2c, 0x5d, 0xee, 0x08, 0xb4, 0xf3, 0x53, 0xa4, 0x6c, 0x80, 0x99, 0x07, 0x72, 0x9b, 0x76, 0x59, 0xba, 0x8c,
0xc6, 0x4d, 0xf6, 0xe7, 0x05, 0x38, 0x2d, 0x44, 0xfd, 0x9f, 0x0d, 0xc1, 0xc6, 0x0f, 0x05, 0x30, 0x9b, 0x9c, 0xcf, 0x0b, 0x70, 0x4a, 0x88, 0xfa, 0x3f, 0x1b, 0x82, 0x8d, 0x1f, 0x0a, 0x60, 0xa9,
0x55, 0x76, 0x38, 0x71, 0x80, 0x1f, 0xff, 0x93, 0x5c, 0xbc, 0x06, 0xb0, 0x47, 0x70, 0x18, 0x8c, 0xec, 0x70, 0x93, 0x10, 0x3f, 0xfe, 0x27, 0xb9, 0x78, 0x0d, 0x60, 0x8f, 0xe0, 0x28, 0x1c, 0xe7,
0xf3, 0x50, 0x95, 0x96, 0xbf, 0xc4, 0x81, 0x05, 0x65, 0x19, 0x24, 0xc3, 0x9f, 0x0e, 0xc5, 0xf9, 0xa1, 0x2a, 0x2d, 0x7f, 0x89, 0x03, 0x1b, 0xca, 0x32, 0x48, 0x8e, 0x3f, 0x1b, 0x8a, 0xf3, 0x59,
0xac, 0x7a, 0xa7, 0x3e, 0x9f, 0x2b, 0xc7, 0x3e, 0x9f, 0xe5, 0x67, 0xfa, 0x7c, 0xfe, 0xb6, 0x08, 0xf5, 0x4e, 0x7d, 0x3e, 0x57, 0x8e, 0x7d, 0x3e, 0xcb, 0x9f, 0xe9, 0xf3, 0xf9, 0xdb, 0x22, 0x2c,
0x73, 0x4e, 0xcc, 0x30, 0xe5, 0xff, 0xe5, 0x44, 0x32, 0x17, 0xa1, 0xca, 0x70, 0x2f, 0x12, 0x2d, 0xb8, 0x09, 0xc3, 0x94, 0xff, 0x97, 0x13, 0xc9, 0x5a, 0x82, 0x2a, 0xc3, 0xdd, 0x58, 0xb4, 0xf0,
0xbc, 0x65, 0x55, 0xe4, 0x7c, 0x6e, 0x10, 0xb3, 0x7e, 0xdf, 0x8b, 0x63, 0x1c, 0x3a, 0x2d, 0xab, 0xa6, 0x5d, 0x91, 0xf3, 0x23, 0x83, 0x98, 0x0d, 0x7a, 0x7e, 0x92, 0xe0, 0xc8, 0x6d, 0xda, 0x55,
0xaa, 0xa4, 0xcd, 0x0c, 0xe6, 0xeb, 0x00, 0x9c, 0x44, 0x98, 0x71, 0x2f, 0x1a, 0x30, 0x0b, 0x9a, 0x25, 0x6d, 0x6e, 0xb0, 0x5e, 0x07, 0xe0, 0x24, 0xc6, 0x8c, 0xfb, 0x71, 0x9f, 0xd9, 0xd0, 0x28,
0xc5, 0xa5, 0x12, 0x1a, 0xb3, 0x88, 0xf3, 0x99, 0x26, 0xfb, 0x4e, 0x8b, 0x59, 0xb5, 0x66, 0x51, 0x2e, 0x97, 0xd0, 0x98, 0x45, 0x9c, 0xcf, 0x34, 0xdd, 0x77, 0x9b, 0xcc, 0x36, 0x1b, 0x45, 0xd1,
0x34, 0x58, 0x35, 0x32, 0x3f, 0x80, 0x0a, 0x4d, 0xf6, 0xdd, 0xc0, 0xe3, 0x9e, 0x55, 0x97, 0xe2, 0x60, 0xd5, 0xc8, 0xfa, 0x00, 0x2a, 0x34, 0xdd, 0xf7, 0x42, 0x9f, 0xfb, 0x76, 0x4d, 0x8a, 0x77,
0x9d, 0x9f, 0x4a, 0xf6, 0x7a, 0x98, 0x74, 0x51, 0x99, 0x26, 0xfb, 0x2d, 0x8f, 0x7b, 0xf6, 0x77, 0x6e, 0x2a, 0xd9, 0x1b, 0x51, 0xda, 0x41, 0x65, 0x9a, 0xee, 0x37, 0x7d, 0xee, 0x3b, 0xdf, 0x15,
0x05, 0x98, 0xeb, 0x60, 0x8f, 0xfa, 0xfd, 0x93, 0x0b, 0xf6, 0x2e, 0x34, 0x28, 0x66, 0xc3, 0x90, 0x60, 0xa1, 0x8d, 0x7d, 0x1a, 0xf4, 0x66, 0x17, 0xec, 0x5d, 0xa8, 0x53, 0xcc, 0x06, 0x11, 0xf7,
0xbb, 0x39, 0x2c, 0xa5, 0xdc, 0x82, 0xb2, 0x6f, 0x64, 0xe0, 0x52, 0xca, 0x8b, 0x47, 0x50, 0x5e, 0x46, 0xb0, 0x94, 0x72, 0x27, 0x94, 0x7d, 0x33, 0x07, 0x97, 0x51, 0x5e, 0x3c, 0x82, 0xf2, 0xd2,
0x9a, 0x42, 0xb9, 0x0d, 0xf5, 0x31, 0x7e, 0x99, 0x35, 0x23, 0xa1, 0x4f, 0xd8, 0xcc, 0x06, 0x14, 0x14, 0xca, 0x1d, 0xa8, 0x8d, 0xf1, 0xcb, 0xec, 0x39, 0x09, 0x7d, 0xc2, 0x66, 0xd5, 0xa1, 0x18,
0x03, 0x16, 0x4a, 0xc5, 0xaa, 0x48, 0xfc, 0x34, 0x2f, 0xc1, 0xa9, 0x41, 0xe8, 0xf9, 0xb8, 0x9f, 0xb2, 0x48, 0x2a, 0x56, 0x45, 0xe2, 0xd3, 0xba, 0x08, 0x27, 0xfb, 0x91, 0x1f, 0xe0, 0x5e, 0x1a,
0x84, 0x01, 0xa6, 0x6e, 0x8f, 0x26, 0xc3, 0x81, 0x94, 0xab, 0x8e, 0x1a, 0x63, 0x13, 0x37, 0x85, 0x85, 0x98, 0x7a, 0x5d, 0x9a, 0x0e, 0xfa, 0x52, 0xae, 0x1a, 0xaa, 0x8f, 0x4d, 0xdc, 0x10, 0x76,
0xdd, 0x5c, 0x81, 0x99, 0x87, 0x43, 0x4c, 0x47, 0x52, 0xaf, 0x23, 0xc9, 0x53, 0x7e, 0xf6, 0x2f, 0x6b, 0x15, 0xe6, 0x1e, 0x0e, 0x30, 0x1d, 0x4a, 0xbd, 0x8e, 0x24, 0x4f, 0xf9, 0x39, 0xbf, 0x18,
0x46, 0x4e, 0x9d, 0x40, 0xc9, 0x4e, 0x40, 0xdd, 0x49, 0x6e, 0x2a, 0x53, 0xf9, 0x2e, 0x4e, 0xe7, 0x23, 0xea, 0x04, 0x4a, 0x36, 0x03, 0x75, 0xb3, 0xdc, 0x54, 0xa6, 0xf2, 0x5d, 0x9c, 0xce, 0xf7,
0xfb, 0x02, 0xd4, 0x22, 0xcc, 0x29, 0xf1, 0x5d, 0x3e, 0x1a, 0xa4, 0x65, 0x00, 0xca, 0xb4, 0x3b, 0x79, 0x30, 0x63, 0xcc, 0x29, 0x09, 0x3c, 0x3e, 0xec, 0x67, 0x65, 0x00, 0xca, 0xb4, 0x3b, 0xec,
0x1a, 0xc8, 0x1a, 0xe8, 0x13, 0xae, 0x08, 0xad, 0x23, 0xf9, 0xdb, 0xfe, 0xd9, 0x80, 0xb9, 0x16, 0xcb, 0x1a, 0xe8, 0x11, 0xae, 0x08, 0xad, 0x21, 0xf9, 0xed, 0xfc, 0x6c, 0xc0, 0x42, 0x13, 0x47,
0x0e, 0x31, 0xc7, 0x27, 0xcf, 0x89, 0x29, 0xb5, 0x5a, 0x98, 0x5a, 0xab, 0x13, 0xc5, 0x50, 0x3c, 0x98, 0xe3, 0xd9, 0x73, 0x62, 0x4a, 0xad, 0x16, 0xa6, 0xd6, 0xea, 0x44, 0x31, 0x14, 0x8f, 0x2e,
0xba, 0x18, 0x4a, 0x4f, 0x15, 0xc3, 0x45, 0xa8, 0x0f, 0x28, 0x89, 0x3c, 0x3a, 0x72, 0x1f, 0xe0, 0x86, 0xd2, 0x53, 0xc5, 0x70, 0x01, 0x6a, 0x7d, 0x4a, 0x62, 0x9f, 0x0e, 0xbd, 0x07, 0x78, 0x98,
0x51, 0x9a, 0x17, 0x35, 0x6d, 0xdb, 0xc4, 0x23, 0x66, 0x7f, 0x63, 0x40, 0xe5, 0x46, 0x38, 0x64, 0xe5, 0x85, 0xa9, 0x6d, 0xb7, 0xf0, 0x90, 0x39, 0xdf, 0x18, 0x50, 0xb9, 0x1e, 0x0d, 0x58, 0x6f,
0xfd, 0x13, 0xdd, 0xea, 0x26, 0x4b, 0xb9, 0x70, 0xb0, 0x94, 0x0f, 0xe6, 0x6e, 0xf1, 0x19, 0xb9, 0xa6, 0x5b, 0xdd, 0x64, 0x29, 0x17, 0x0e, 0x96, 0xf2, 0xc1, 0xdc, 0x2d, 0x3e, 0x23, 0x77, 0x77,
0xbb, 0xeb, 0xf5, 0xb4, 0x08, 0x13, 0x36, 0xfb, 0x0f, 0x03, 0xaa, 0x5b, 0x89, 0x17, 0xc8, 0xbe, 0xfd, 0xae, 0x16, 0x61, 0xc2, 0xe6, 0xfc, 0x61, 0x40, 0x75, 0x2b, 0xf5, 0x43, 0xd9, 0x77, 0xfe,
0xf3, 0xb7, 0xef, 0x72, 0x11, 0xf2, 0xd6, 0x91, 0x72, 0x9c, 0xf7, 0x92, 0xb1, 0x9e, 0x50, 0x9a, 0xf6, 0x5d, 0x2e, 0xc1, 0xa8, 0x75, 0x64, 0x1c, 0x8f, 0x7a, 0xc9, 0x58, 0x4f, 0x28, 0x4d, 0xf6,
0xec, 0x09, 0x17, 0xa0, 0x46, 0xc4, 0x86, 0xdc, 0x81, 0xc7, 0xfb, 0x8a, 0xdc, 0x2a, 0x02, 0x69, 0x84, 0xf3, 0x60, 0x12, 0xb1, 0x21, 0xaf, 0xef, 0xf3, 0x9e, 0x22, 0xb7, 0x8a, 0x40, 0x9a, 0x76,
0xda, 0x11, 0x16, 0xd1, 0x34, 0x52, 0x07, 0xd9, 0x34, 0x66, 0x8f, 0xdd, 0x34, 0x74, 0x10, 0xd9, 0x84, 0x45, 0x34, 0x8d, 0xcc, 0x41, 0x36, 0x8d, 0xf9, 0x63, 0x37, 0x0d, 0x1d, 0x44, 0x36, 0x8d,
0x34, 0x7e, 0x2f, 0x80, 0xd5, 0x51, 0x9b, 0x15, 0x99, 0x4e, 0x18, 0x27, 0x3e, 0xbb, 0x3d, 0x08, 0xdf, 0x0b, 0x60, 0xb7, 0xd5, 0x66, 0x45, 0xa6, 0x13, 0xc6, 0x49, 0xc0, 0x6e, 0xf7, 0x43, 0xf9,
0xe4, 0x53, 0x67, 0x11, 0xaa, 0x9d, 0x0c, 0x99, 0x7a, 0x52, 0xe4, 0x06, 0x91, 0x1f, 0xdb, 0x38, 0xd4, 0x59, 0x82, 0x6a, 0x3b, 0x47, 0xa6, 0x9e, 0x14, 0x23, 0x83, 0xc8, 0x8f, 0x6d, 0x1c, 0xa7,
0x4a, 0xe8, 0xa8, 0x43, 0x9e, 0x60, 0x0d, 0x7c, 0xcc, 0x22, 0xb0, 0xb5, 0x87, 0x11, 0x4a, 0xf6, 0x74, 0xd8, 0x26, 0x4f, 0xb0, 0x06, 0x3e, 0x66, 0x11, 0xd8, 0x5a, 0x83, 0x18, 0xa5, 0xfb, 0x4c,
0x99, 0x96, 0x26, 0x1d, 0x0a, 0x6c, 0xbe, 0x6c, 0xf5, 0xae, 0x48, 0x27, 0x89, 0xbc, 0x84, 0x40, 0x4b, 0x93, 0x0d, 0x05, 0xb6, 0x40, 0xb6, 0x7a, 0x4f, 0xa4, 0x93, 0x44, 0x5e, 0x42, 0xa0, 0x4c,
0x99, 0xc4, 0x3b, 0xc0, 0x3c, 0x0f, 0x15, 0x1c, 0x07, 0x6a, 0x76, 0x46, 0xce, 0x96, 0x71, 0x1c, 0xe2, 0x1d, 0x60, 0x9d, 0x83, 0x0a, 0x4e, 0x42, 0x35, 0x3b, 0x27, 0x67, 0xcb, 0x38, 0x09, 0xe5,
0xc8, 0xa9, 0x4d, 0x58, 0xd0, 0x6f, 0x99, 0x84, 0x49, 0x09, 0x53, 0xe4, 0xf6, 0x21, 0x2f, 0xba, 0x94, 0x0b, 0x8b, 0xfa, 0x2d, 0x93, 0x32, 0x29, 0xa1, 0x3c, 0x74, 0xcc, 0x35, 0xe7, 0x90, 0x07,
0x6d, 0xd6, 0xdb, 0xd1, 0xae, 0x68, 0x5e, 0xbd, 0x67, 0xd2, 0x2f, 0xcd, 0x9b, 0x30, 0x27, 0xd6, 0xdd, 0x36, 0xeb, 0xee, 0x68, 0x4f, 0xb4, 0xa0, 0x9e, 0x33, 0x7a, 0x68, 0x5d, 0x83, 0x9a, 0x58,
0xc9, 0x43, 0x95, 0x8f, 0x1d, 0xaa, 0x8e, 0xe3, 0x20, 0x0f, 0x64, 0x43, 0x9d, 0xb0, 0x36, 0xde, 0x25, 0x0f, 0x54, 0x3e, 0x76, 0x20, 0x13, 0x27, 0x61, 0x1e, 0xc6, 0x81, 0x1a, 0x61, 0x2d, 0xbc,
0xd7, 0xec, 0xc8, 0x73, 0xac, 0x82, 0x26, 0x6c, 0xf6, 0x57, 0x06, 0x9c, 0x7a, 0x8a, 0xea, 0x13, 0xaf, 0x99, 0x91, 0x67, 0x58, 0x05, 0x4d, 0xd8, 0x9c, 0xaf, 0x0c, 0x38, 0xf9, 0x14, 0xcd, 0x33,
0xe4, 0xdb, 0x26, 0x54, 0x3a, 0xb8, 0x27, 0x42, 0xa4, 0x2f, 0xb9, 0x95, 0xc3, 0x1e, 0xea, 0x87, 0xe4, 0xda, 0x2d, 0xa8, 0xb4, 0x71, 0x57, 0x84, 0xc8, 0x5e, 0x71, 0xab, 0x87, 0x3d, 0xd2, 0x0f,
0x08, 0x8b, 0xb2, 0x00, 0xf6, 0xfd, 0x4c, 0x7e, 0x59, 0xa7, 0xe2, 0xf9, 0x2b, 0x0e, 0x9f, 0xe0, 0x11, 0x15, 0xe5, 0x01, 0x9c, 0xfb, 0xb9, 0xf4, 0xb2, 0x46, 0xc5, 0xd3, 0x57, 0x1c, 0x3c, 0xe1,
0x05, 0x14, 0xac, 0xfd, 0x99, 0x21, 0x5e, 0xab, 0x01, 0x7e, 0x2c, 0x97, 0x7e, 0x2a, 0x81, 0x8d, 0x0b, 0x28, 0x56, 0xe7, 0x33, 0x43, 0xbc, 0x54, 0x43, 0xfc, 0x58, 0x2e, 0xfd, 0x54, 0xf2, 0x1a,
0x93, 0x24, 0xb0, 0x79, 0x19, 0x4e, 0xc7, 0xc3, 0xc8, 0xa5, 0x38, 0xf4, 0x38, 0x0e, 0x5c, 0xbd, 0xb3, 0x24, 0xaf, 0x75, 0x09, 0x4e, 0x25, 0x83, 0xd8, 0xa3, 0x38, 0xf2, 0x39, 0x0e, 0x3d, 0xbd,
0x1a, 0xd3, 0xab, 0x9b, 0xf1, 0x30, 0x42, 0x6a, 0x4a, 0xc3, 0x64, 0xf6, 0x97, 0x06, 0xc0, 0x0d, 0x1a, 0xd3, 0xab, 0x5b, 0xc9, 0x20, 0x46, 0x6a, 0x4a, 0xc3, 0x64, 0xce, 0x97, 0x06, 0xc0, 0x75,
0x51, 0x65, 0x6a, 0x1b, 0x07, 0x8f, 0x11, 0xe3, 0xe8, 0xab, 0x5b, 0x61, 0xb2, 0x4c, 0xd7, 0xd3, 0x51, 0x61, 0x6a, 0x1b, 0x07, 0x8f, 0x10, 0xe3, 0xe8, 0x6b, 0x5b, 0x61, 0xb2, 0x44, 0x37, 0xb2,
0x32, 0x65, 0x52, 0x8f, 0xe2, 0x34, 0x0c, 0x99, 0x1e, 0x39, 0x78, 0x5d, 0xc9, 0x4a, 0x83, 0xaf, 0x12, 0x65, 0x52, 0x8f, 0xe2, 0x34, 0x0c, 0xb9, 0x1e, 0x23, 0xf0, 0xba, 0x8a, 0x95, 0x06, 0x5f,
0x0d, 0xa8, 0x8f, 0x49, 0xc5, 0x26, 0x69, 0x34, 0x0e, 0x9e, 0x28, 0xb2, 0xaf, 0x88, 0x2a, 0x73, 0x1b, 0x50, 0x1b, 0x93, 0x8a, 0x4d, 0xd2, 0x68, 0x1c, 0x3c, 0x4d, 0x64, 0x4f, 0x11, 0x15, 0xe6,
0xd9, 0x58, 0xe1, 0x45, 0x79, 0xe1, 0x9d, 0x87, 0x8a, 0xa4, 0x64, 0xac, 0xf2, 0x62, 0x5d, 0x79, 0xb1, 0xb1, 0xa2, 0x8b, 0x47, 0x45, 0x77, 0x0e, 0x2a, 0x92, 0x92, 0xb1, 0xaa, 0x4b, 0x74, 0xd5,
0x97, 0xe0, 0x14, 0xc5, 0x3e, 0x8e, 0x79, 0x38, 0x72, 0xa3, 0x24, 0x20, 0x7b, 0x04, 0x07, 0xb2, 0x5d, 0x84, 0x93, 0x14, 0x07, 0x38, 0xe1, 0xd1, 0xd0, 0x8b, 0xd3, 0x90, 0xec, 0x11, 0x1c, 0xca,
0xfe, 0x2a, 0xa8, 0x91, 0x4e, 0x6c, 0x6b, 0xbb, 0xfd, 0x93, 0x01, 0xf3, 0x9f, 0x8a, 0x76, 0xdb, 0xda, 0xab, 0xa0, 0x7a, 0x36, 0xb1, 0xad, 0xed, 0xce, 0x4f, 0x06, 0x2c, 0x7e, 0x2a, 0x5a, 0x6d,
0x4e, 0x02, 0xac, 0x76, 0xf6, 0xfc, 0x29, 0x71, 0x4d, 0x62, 0xd1, 0xf4, 0xa8, 0x74, 0x7d, 0xe3, 0x2b, 0x0d, 0xb1, 0xda, 0xd9, 0xf3, 0xa7, 0xc4, 0x55, 0x89, 0x45, 0xd3, 0xa3, 0xd2, 0xf5, 0x8d,
0xd9, 0xe9, 0xca, 0x50, 0x85, 0xe9, 0x14, 0x15, 0x14, 0xab, 0xeb, 0xf8, 0x71, 0x28, 0xce, 0x85, 0x67, 0xa7, 0x2b, 0x43, 0x15, 0xa6, 0x53, 0x54, 0x50, 0xac, 0xae, 0xe2, 0xc7, 0xa1, 0x78, 0x24,
0x45, 0xea, 0x12, 0xaf, 0x28, 0x0e, 0xa0, 0x36, 0x56, 0xbc, 0xa2, 0x75, 0xe9, 0x3e, 0xa7, 0xda, 0x2c, 0x52, 0x17, 0x78, 0x45, 0x71, 0x08, 0xe6, 0x58, 0xed, 0x8a, 0xb6, 0xa5, 0x7b, 0x9c, 0x6a,
0xa3, 0x21, 0xcf, 0xe5, 0x9a, 0xb6, 0xc9, 0x93, 0xf9, 0x34, 0xcc, 0x44, 0xac, 0x97, 0xdd, 0xa6, 0x8d, 0x86, 0x3c, 0x93, 0x4d, 0x6d, 0x93, 0xa7, 0xf2, 0x29, 0x98, 0x8b, 0x59, 0x37, 0xbf, 0x49,
0xd4, 0x40, 0x28, 0x93, 0x75, 0x40, 0xc9, 0x6d, 0x09, 0xe5, 0x86, 0xf7, 0x3e, 0x82, 0x6a, 0xf6, 0xa9, 0x81, 0x50, 0x26, 0xef, 0x7e, 0x92, 0xdb, 0x12, 0x1a, 0x19, 0xde, 0xfb, 0x08, 0xaa, 0xf9,
0xdf, 0x98, 0xd9, 0x80, 0xba, 0xd3, 0x76, 0x76, 0x9d, 0xb5, 0x2d, 0xe7, 0x9e, 0xd3, 0xbe, 0xd9, 0xff, 0x62, 0x56, 0x1d, 0x6a, 0x6e, 0xcb, 0xdd, 0x75, 0xd7, 0xb7, 0xdc, 0x7b, 0x6e, 0xeb, 0x46,
0x78, 0xc9, 0xac, 0x41, 0xf9, 0xd6, 0xf5, 0xb5, 0xad, 0xdd, 0x5b, 0x77, 0x1b, 0x86, 0x59, 0x87, 0xfd, 0x25, 0xcb, 0x84, 0xf2, 0xcd, 0x6b, 0xeb, 0x5b, 0xbb, 0x37, 0xef, 0xd6, 0x0d, 0xab, 0x06,
0xca, 0xda, 0x7a, 0xfb, 0x13, 0xb4, 0xbd, 0xb6, 0xd5, 0x28, 0xac, 0x5f, 0xbf, 0xb7, 0xd1, 0x23, 0x95, 0xf5, 0x8d, 0xd6, 0x27, 0x68, 0x7b, 0x7d, 0xab, 0x5e, 0xd8, 0xb8, 0x76, 0x6f, 0xb3, 0x4b,
0xbc, 0x3f, 0xec, 0x0a, 0x12, 0x57, 0x9e, 0x90, 0x30, 0x24, 0x4f, 0x38, 0xf6, 0xfb, 0x2b, 0x0a, 0x78, 0x6f, 0xd0, 0x11, 0x24, 0xae, 0x3e, 0x21, 0x51, 0x44, 0x9e, 0x70, 0x1c, 0xf4, 0x56, 0x15,
0xe5, 0xfb, 0x01, 0x61, 0x9c, 0x92, 0xee, 0x90, 0xe3, 0x60, 0x25, 0xc5, 0xba, 0x22, 0xa1, 0x67, 0xca, 0xf7, 0x43, 0xc2, 0x38, 0x25, 0x9d, 0x01, 0xc7, 0xe1, 0x6a, 0x86, 0x75, 0x55, 0x42, 0xcf,
0xc3, 0x41, 0x77, 0xb5, 0x3b, 0x2b, 0x4d, 0x57, 0xfe, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xac, 0xb7, 0x87, 0xfd, 0xce, 0x5a, 0x67, 0x5e, 0x9a, 0x2e, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0x23, 0xe9,
0x6c, 0x03, 0x41, 0x14, 0x00, 0x00, 0x2e, 0x4b, 0x3d, 0x14, 0x00, 0x00,
} }

View File

@ -442,10 +442,8 @@ func (node *NodeImpl) GetIndexState(request *milvuspb.IndexStateRequest) (*milvu
ctx, cancel := context.WithTimeout(context.Background(), reqTimeoutInterval) ctx, cancel := context.WithTimeout(context.Background(), reqTimeoutInterval)
defer cancel() defer cancel()
dipt := &GetIndexStateTask{ dipt := &GetIndexStateTask{
Condition: NewTaskCondition(ctx), Condition: NewTaskCondition(ctx),
IndexStateRequest: request, IndexStateRequest: request,
indexServiceClient: node.indexServiceClient,
masterClientInterface: node.masterClient,
} }
err := node.sched.DdQueue.Enqueue(dipt) err := node.sched.DdQueue.Enqueue(dipt)

View File

@ -23,7 +23,6 @@ type MasterClient interface {
CreateIndex(in *milvuspb.CreateIndexRequest) (*commonpb.Status, error) CreateIndex(in *milvuspb.CreateIndexRequest) (*commonpb.Status, error)
DescribeIndex(in *milvuspb.DescribeIndexRequest) (*milvuspb.DescribeIndexResponse, error) DescribeIndex(in *milvuspb.DescribeIndexRequest) (*milvuspb.DescribeIndexResponse, error)
ShowSegments(in *milvuspb.ShowSegmentRequest) (*milvuspb.ShowSegmentResponse, error) ShowSegments(in *milvuspb.ShowSegmentRequest) (*milvuspb.ShowSegmentResponse, error)
DescribeSegment(in *milvuspb.DescribeSegmentRequest) (*milvuspb.DescribeSegmentResponse, error)
} }
type IndexServiceClient interface { type IndexServiceClient interface {

View File

@ -6,8 +6,6 @@ import (
"math" "math"
"strconv" "strconv"
"github.com/zilliztech/milvus-distributed/internal/proto/indexpb"
"github.com/zilliztech/milvus-distributed/internal/proto/datapb" "github.com/zilliztech/milvus-distributed/internal/proto/datapb"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
@ -1287,9 +1285,8 @@ func (dit *DescribeIndexTask) PostExecute() error {
type GetIndexStateTask struct { type GetIndexStateTask struct {
Condition Condition
*milvuspb.IndexStateRequest *milvuspb.IndexStateRequest
indexServiceClient IndexServiceClient indexServiceClient IndexServiceClient
masterClientInterface MasterClient result *milvuspb.IndexStateResponse
result *milvuspb.IndexStateResponse
} }
func (dipt *GetIndexStateTask) OnEnqueue() error { func (dipt *GetIndexStateTask) OnEnqueue() error {
@ -1339,98 +1336,17 @@ func (dipt *GetIndexStateTask) PreExecute() error {
} }
func (dipt *GetIndexStateTask) Execute() error { func (dipt *GetIndexStateTask) Execute() error {
collectionName := dipt.CollectionName // TODO: use index service client
collectionID, err := globalMetaCache.GetCollectionID(collectionName) //var err error
if err != nil { // err is not nil if collection not exists //dipt.result, err = dipt.masterClient.GetIndexState(dipt.IndexStateRequest)
return err //return err
}
showPartitionRequest := &milvuspb.ShowPartitionRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_kShowPartitions,
MsgID: dipt.Base.MsgID,
Timestamp: dipt.Base.Timestamp,
SourceID: Params.ProxyID,
},
DbName: dipt.DbName,
CollectionName: collectionName,
CollectionID: collectionID,
}
partitions, err := dipt.masterClientInterface.ShowPartitions(showPartitionRequest)
if err != nil {
return err
}
for _, partitionID := range partitions.PartitionIDs {
showSegmentsRequest := &milvuspb.ShowSegmentRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_kShowSegment,
MsgID: dipt.Base.MsgID,
Timestamp: dipt.Base.Timestamp,
SourceID: Params.ProxyID,
},
CollectionID: collectionID,
PartitionID: partitionID,
}
segments, err := dipt.masterClientInterface.ShowSegments(showSegmentsRequest)
if err != nil {
return err
}
getIndexStatesRequest := &indexpb.IndexStatesRequest{
IndexBuildIDs: make([]UniqueID, 0),
}
for _, segmentID := range segments.SegmentIDs {
describeSegmentRequest := &milvuspb.DescribeSegmentRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_kDescribeSegment,
MsgID: dipt.Base.MsgID,
Timestamp: dipt.Base.Timestamp,
SourceID: Params.ProxyID,
},
CollectionID: collectionID,
SegmentID: segmentID,
}
segmentDesc, err := dipt.masterClientInterface.DescribeSegment(describeSegmentRequest)
if err != nil {
return err
}
getIndexStatesRequest.IndexBuildIDs = append(getIndexStatesRequest.IndexBuildIDs, segmentDesc.BuildID)
}
states, err := dipt.indexServiceClient.GetIndexStates(getIndexStatesRequest)
if err != nil {
return err
}
if states.Status.ErrorCode != commonpb.ErrorCode_SUCCESS {
dipt.result = &milvuspb.IndexStateResponse{
Status: states.Status,
State: commonpb.IndexState_FAILED,
}
return nil
}
for _, state := range states.States {
if state.State != commonpb.IndexState_FINISHED {
dipt.result = &milvuspb.IndexStateResponse{
Status: states.Status,
State: state.State,
}
return nil
}
}
}
dipt.result = &milvuspb.IndexStateResponse{ dipt.result = &milvuspb.IndexStateResponse{
Status: &commonpb.Status{ Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_SUCCESS, ErrorCode: 0,
Reason: "", Reason: "",
}, },
State: commonpb.IndexState_FINISHED, State: commonpb.IndexState_FINISHED,
} }
return nil return nil
} }

View File

@ -383,7 +383,7 @@ func (s *loadService) releaseSegment(segmentID UniqueID) error {
return err return err
} }
func (s *loadService) seekSegment(positions []*internalpb2.MsgPosition) error { func (s *loadService) seekSegment(position *internalpb2.MsgPosition) error {
// TODO: open seek // TODO: open seek
//for _, position := range positions { //for _, position := range positions {
// err := s.dmStream.Seek(position) // err := s.dmStream.Seek(position)

View File

@ -446,8 +446,8 @@ func (node *QueryNode) LoadSegments(in *queryPb.LoadSegmentRequest) (*commonpb.S
// segments are ordered before LoadSegments calling // segments are ordered before LoadSegments calling
if in.LastSegmentState.State == commonpb.SegmentState_SegmentGrowing { if in.LastSegmentState.State == commonpb.SegmentState_SegmentGrowing {
segmentNum := len(segmentIDs) segmentNum := len(segmentIDs)
positions := in.LastSegmentState.StartPositions position := in.LastSegmentState.StartPosition
err = node.loadService.seekSegment(positions) err = node.loadService.seekSegment(position)
if err != nil { if err != nil {
status := &commonpb.Status{ status := &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR, ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,

View File

@ -318,14 +318,14 @@ func (qs *QueryService) LoadPartitions(req *querypb.LoadPartitionRequest) (*comm
segmentID := state.SegmentID segmentID := state.SegmentID
segmentStates[segmentID] = state segmentStates[segmentID] = state
var flatChannelName string var flatChannelName string
channelNames := make([]string, 0) // channelNames := make([]string, 0)
for i, str := range state.StartPositions { // for i, str := range state.StartPositions {
flatChannelName += str.ChannelName // flatChannelName += str.ChannelName
channelNames = append(channelNames, str.ChannelName) // channelNames = append(channelNames, str.ChannelName)
if i+1 < len(state.StartPositions) { // if i+1 < len(state.StartPositions) {
flatChannelName += "/" // flatChannelName += "/"
} // }
} // }
if flatChannelName == "" { if flatChannelName == "" {
log.Fatal("segmentState's channel name is empty") log.Fatal("segmentState's channel name is empty")
} }
@ -365,8 +365,8 @@ func (qs *QueryService) LoadPartitions(req *querypb.LoadPartitionRequest) (*comm
if channels == node.insertChannels { if channels == node.insertChannels {
statesID := id2segs[i][len(id2segs[i])-1] statesID := id2segs[i][len(id2segs[i])-1]
//TODO :: should be start position //TODO :: should be start position
position := segmentStates[statesID-1].StartPositions // position := segmentStates[statesID-1].StartPositions
segmentStates[statesID].StartPositions = position // segmentStates[statesID].StartPositions = position
loadSegmentRequest := &querypb.LoadSegmentRequest{ loadSegmentRequest := &querypb.LoadSegmentRequest{
CollectionID: collectionID, CollectionID: collectionID,
PartitionID: partitionID, PartitionID: partitionID,

View File

@ -115,10 +115,10 @@ func newDataMock() *dataMock {
Status: &commonpb.Status{ Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_SUCCESS, ErrorCode: commonpb.ErrorCode_SUCCESS,
}, },
SegmentID: segmentID, SegmentID: segmentID,
State: state, State: state,
CreateTime: time, CreateTime: time,
StartPositions: position, // StartPositions: position,
} }
} }
segmentStates := make(map[UniqueID]*datapb.SegmentStateInfo) segmentStates := make(map[UniqueID]*datapb.SegmentStateInfo)