Repository: matrixorigin/matrixone
Pull request #10524 (2023-07-08 12:04:19)

[feature] hakeeper: support snapshot for HAKeeper.
## What type of PR is this?

- [ ] API-change
- [ ] BUG
- [ ] Improvement
- [ ] Documentation
- [x] Feature
- [ ] Test and CI
- [ ] Code Refactoring

## Which issue(s) this PR fixes:

issue #10336 

## What this PR does / why we need it:


Patch:
diff --git a/pkg/hakeeper/rsm.go b/pkg/hakeeper/rsm.go
index 30b8cdd80..fd23032db 100644
--- a/pkg/hakeeper/rsm.go
+++ b/pkg/hakeeper/rsm.go
@@ -57,6 +57,7 @@ const (
 	headerSize                    = pb.HeaderSize
 )
 
+type IndexQuery struct{}
 type StateQuery struct{}
 type ScheduleCommandQuery struct{ UUID string }
 type ClusterDetailsQuery struct{ Cfg Config }
@@ -513,6 +514,7 @@ func (s *stateMachine) Update(e sm.Entry) (sm.Result, error) {
 	// TODO: we need to make sure InitialClusterRequestCmd is the
 	// first user cmd added to the Raft log
 	cmd := e.Cmd
+	s.state.Index = e.Index
 	switch parseCmdTag(cmd) {
 	case pb.DNHeartbeatUpdate:
 		return s.handleDNHeartbeat(cmd), nil
@@ -641,6 +643,8 @@ func (s *stateMachine) Lookup(query interface{}) (interface{}, error) {
 		return s.handleScheduleCommandQuery(q.UUID), nil
 	} else if q, ok := query.(*ClusterDetailsQuery); ok {
 		return s.handleClusterDetailsQuery(q.Cfg), nil
+	} else if _, ok := query.(*IndexQuery); ok {
+		return s.state.Index, nil
 	}
 	panic("unknown query type")
 }
diff --git a/pkg/logservice/config.go b/pkg/logservice/config.go
index ff9ada357..d756e206f 100644
--- a/pkg/logservice/config.go
+++ b/pkg/logservice/config.go
@@ -42,6 +42,8 @@ const (
 	defaultTruncateInterval    = 10 * time.Second
 	defaultMaxExportedSnapshot = 20
 	defaultMaxMessageSize      = 1024 * 1024 * 100
+	// The default value for HAKeeper truncate interval.
+	defaultHAKeeperTruncateInterval = 24 * time.Hour
 )
 
 // Config defines the Configurations supported by the Log Service.
@@ -107,8 +109,11 @@ type Config struct {
 	// cluster health checks.
 	HAKeeperCheckInterval toml.Duration `toml:"hakeeper-check-interval"`
 	// TruncateInterval is the interval of how often log service should
-	// process truncate.
+	// process truncate for regular shards.
 	TruncateInterval toml.Duration `toml:"truncate-interval"`
+	// HAKeeperTruncateInterval is the interval of how often log service should
+	// process truncate for HAKeeper shard.
+	HAKeeperTruncateInterval toml.Duration `toml:"hakeeper-truncate-interval"`
 
 	RPC struct {
 		// MaxMessageSize is the max size for RPC message. The default value is 10MiB.
@@ -290,6 +295,9 @@ func (c *Config) Validate() error {
 	if c.TruncateInterval.Duration == 0 {
 		return moerr.NewBadConfigNoCtx("TruncateInterval not set")
 	}
+	if c.HAKeeperTruncateInterval.Duration == 0 {
+		return moerr.NewBadConfigNoCtx("HAKeeperTruncateInterval not set")
+	}
 	if c.RPC.MaxMessageSize == 0 {
 		return moerr.NewBadConfigNoCtx("MaxMessageSize not set")
 	}
@@ -391,6 +399,9 @@ func (c *Config) Fill() {
 	if c.TruncateInterval.Duration == 0 {
 		c.TruncateInterval.Duration = defaultTruncateInterval
 	}
+	if c.HAKeeperTruncateInterval.Duration == 0 {
+		c.HAKeeperTruncateInterval.Duration = defaultHAKeeperTruncateInterval
+	}
 	if c.RPC.MaxMessageSize == 0 {
 		c.RPC.MaxMessageSize = toml.ByteSize(defaultMaxMessageSize)
 	}
diff --git a/pkg/logservice/truncation.go b/pkg/logservice/truncation.go
index 7ef331ce7..61102f514 100644
--- a/pkg/logservice/truncation.go
+++ b/pkg/logservice/truncation.go
@@ -84,12 +84,15 @@ func (l *store) truncationWorker(ctx context.Context) {
 		l.runtime.Logger().Info("truncation worker stopped")
 	}()
 
-	if l.cfg.TruncateInterval.Duration == 0 {
+	if l.cfg.TruncateInterval.Duration == 0 || l.cfg.HAKeeperTruncateInterval.Duration == 0 {
 		panic("TruncateInterval is 0")
 	}
 	ticker := time.NewTicker(l.cfg.TruncateInterval.Duration)
 	defer ticker.Stop()
 
+	haTicker := time.NewTicker(l.cfg.HAKeeperTruncateInterval.Duration)
+	defer haTicker.Stop()
+
 	for {
 		select {
 		case <-ctx.Done():
@@ -98,10 +101,9 @@ func (l *store) truncationWorker(ctx context.Context) {
 			if err := l.processTruncateLog(ctx); err != nil {
 				l.runtime.Logger().Error("truncate failed", zap.Error(err))
 			}
-			select {
-			case <-ctx.Done():
-				return
-			default:
+		case <-haTicker.C:
+			if err := l.processHAKeeperTruncation(ctx); err != nil {
+				l.runtime.Logger().Error("HAKeeper truncate failed", zap.Error(err))
 			}
 		}
 	}
@@ -253,3 +255,28 @@ func (l *store) processShardTruncateLog(ctx context.Context, shardID uint64) err
 	}
 	return nil
 }
+
+// processHAKeeperTruncation processes the truncation for HAKeeper shard.
+// It is different from the other shards. For HAKeeper shard, we just send
+// snapshot request to dragonboat directly and nothing else needs to do.
+func (l *store) processHAKeeperTruncation(ctx context.Context) error {
+	ctx, cancel := context.WithTimeout(ctx, time.Second*5)
+	defer cancel()
+	v, err := l.read(ctx, hakeeper.DefaultHAKeeperShardID, &hakeeper.IndexQuery{})
+	if err != nil {
+		return err
+	}
+	lsn := v.(uint64)
+	if lsn > 1 {
+		opts := dragonboat.SnapshotOption{
+			OverrideCompactionOverhead: true,
+			CompactionIndex:            lsn - 1,
+		}
+		if _, err := l.nh.SyncRequestSnapshot(ctx, hakeeper.DefaultHAKeeperShardID, opts); err != nil {
+			l.runtime.Logger().Error("SyncRequestSnapshot failed", zap.Error(err))
+			return err
+		}
+		l.runtime.Logger().Info("HAKeeper shard truncated", zap.Uint64("LSN", lsn))
+	}
+	return nil
+}
diff --git a/pkg/pb/logservice/logservice.pb.go b/pkg/pb/logservice/logservice.pb.go
index 304ea2e36..041562608 100644
--- a/pkg/pb/logservice/logservice.pb.go
+++ b/pkg/pb/logservice/logservice.pb.go
@@ -3305,21 +3305,22 @@ func (m *CheckerState) GetNextId() uint64 {
 
 // HAKeeperRSMState contains state maintained by HAKeeper's RSM.
 type HAKeeperRSMState struct {
-	Tick uint64 `protobuf:"varint,1,opt,name=Tick,proto3" json:"Tick,omitempty"`
+	Index uint64 `protobuf:"varint,1,opt,name=Index,proto3" json:"Index,omitempty"`
+	Tick  uint64 `protobuf:"varint,2,opt,name=Tick,proto3" json:"Tick,omitempty"`
 	// NextID is a shared, global ID.
-	NextID uint64 `protobuf:"varint,2,opt,name=NextID,proto3" json:"NextID,omitempty"`
+	NextID uint64 `protobuf:"varint,3,opt,name=NextID,proto3" json:"NextID,omitempty"`
 	// NextIDByKey is IDs isolated by keys.
-	NextIDByKey          map[string]uint64       `protobuf:"bytes,3,rep,name=NextIDByKey,proto3" json:"NextIDByKey,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
-	Term                 uint64                  `protobuf:"varint,4,opt,name=Term,proto3" json:"Term,omitempty"`
-	State                HAKeeperState           `protobuf:"varint,5,opt,name=State,proto3,enum=logservice.HAKeeperState" json:"State,omitempty"`
-	TaskSchedulerState   TaskSchedulerState      `protobuf:"varint,6,opt,name=TaskSchedulerState,proto3,enum=logservice.TaskSchedulerState" json:"TaskSchedulerState,omitempty"`
-	ScheduleCommands     map[string]CommandBatch `protobuf:"bytes,7,rep,name=ScheduleCommands,proto3" json:"ScheduleCommands" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	LogShards            map[string]uint64       `protobuf:"bytes,8,rep,name=LogShards,proto3" json:"LogShards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
-	CNState              CNState                 `protobuf:"bytes,9,opt,name=CNState,proto3" json:"CNState"`
-	DNState              DNState                 `protobuf:"bytes,10,opt,name=DNState,proto3" json:"DNState"`
-	LogState             LogState                `protobuf:"bytes,11,opt,name=LogState,proto3" json:"LogState"`
-	ClusterInfo          ClusterInfo             `protobuf:"bytes,12,opt,name=ClusterInfo,proto3" json:"ClusterInfo"`
-	TaskTableUser        TaskTableUser           `protobuf:"bytes,13,opt,name=TaskTableUser,proto3" json:"TaskTableUser"`
+	NextIDByKey          map[string]uint64       `protobuf:"bytes,4,rep,name=NextIDByKey,proto3" json:"NextIDByKey,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+	Term                 uint64                  `protobuf:"varint,5,opt,name=Term,proto3" json:"Term,omitempty"`
+	State                HAKeeperState           `protobuf:"varint,6,opt,name=State,proto3,enum=logservice.HAKeeperState" json:"State,omitempty"`
+	TaskSchedulerState   TaskSchedulerState      `protobuf:"varint,7,opt,name=TaskSchedulerState,proto3,enum=logservice.TaskSchedulerState" json:"TaskSchedulerState,omitempty"`
+	ScheduleCommands     map[string]CommandBatch `protobuf:"bytes,8,rep,name=ScheduleCommands,proto3" json:"ScheduleCommands" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	LogShards            map[string]uint64       `protobuf:"bytes,9,rep,name=LogShards,proto3" json:"LogShards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+	CNState              CNState                 `protobuf:"bytes,10,opt,name=CNState,proto3" json:"CNState"`
+	DNState              DNState                 `protobuf:"bytes,11,opt,name=DNState,proto3" json:"DNState"`
+	LogState             LogState                `protobuf:"bytes,12,opt,name=LogState,proto3" json:"LogState"`
+	ClusterInfo          ClusterInfo             `protobuf:"bytes,13,opt,name=ClusterInfo,proto3" json:"ClusterInfo"`
+	TaskTableUser        TaskTableUser           `protobuf:"bytes,14,opt,name=TaskTableUser,proto3" json:"TaskTableUser"`
 	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
 	XXX_unrecognized     []byte                  `json:"-"`
 	XXX_sizecache        int32                   `json:"-"`
@@ -3358,6 +3359,13 @@ func (m *HAKeeperRSMState) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_HAKeeperRSMState proto.InternalMessageInfo
 
+func (m *HAKeeperRSMState) GetIndex() uint64 {
+	if m != nil {
+		return m.Index
+	}
+	return 0
+}
+
 func (m *HAKeeperRSMState) GetTick() uint64 {
 	if m != nil {
 		return m.Tick
@@ -3657,195 +3665,195 @@ func init() {
 func init() { proto.RegisterFile("logservice.proto", fileDescriptor_fd1040c5381ab5a7) }
 
 var fileDescriptor_fd1040c5381ab5a7 = []byte{
-	// 2999 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x1a, 0x4b, 0x6f, 0x1b, 0xc7,
-	0x59, 0x4b, 0x52, 0x7c, 0x7c, 0x94, 0xe4, 0xd5, 0x48, 0xb2, 0x19, 0x25, 0x95, 0xd5, 0x8d, 0x1b,
-	0x38, 0x4c, 0x43, 0x03, 0x12, 0x12, 0x24, 0x8d, 0x62, 0x83, 0xe2, 0xd2, 0x16, 0x63, 0x9a, 0x72,
-	0x86, 0x54, 0x0f, 0x01, 0x02, 0x75, 0x45, 0x8e, 0x29, 0x56, 0x24, 0x97, 0xdd, 0x5d, 0x3a, 0x56,
-	0x4f, 0xbd, 0xb4, 0x40, 0xd1, 0x5e, 0x8a, 0xe6, 0x10, 0x14, 0x45, 0x0f, 0xbd, 0xf4, 0xd0, 0x6b,
-	0x0e, 0xed, 0xb1, 0x87, 0x02, 0x39, 0xe6, 0x07, 0x14, 0x41, 0x1b, 0xa0, 0xa7, 0x1e, 0x7a, 0xeb,
-	0xb9, 0x98, 0xd7, 0xee, 0xcc, 0x72, 0x29, 0xdb, 0x89, 0x1b, 0x14, 0xc9, 0x89, 0x3b, 0xdf, 0x6b,
-	0xbf, 0xf9, 0xde, 0x33, 0x4b, 0x30, 0x87, 0x6e, 0xdf, 0x27, 0xde, 0xc3, 0x41, 0x97, 0x54, 0x26,
-	0x9e, 0x1b, 0xb8, 0x08, 0x22, 0xc8, 0xe6, 0xab, 0xfd, 0x41, 0x70, 0x3a, 0x3d, 0xa9, 0x74, 0xdd,
-	0xd1, 0x8d, 0xbe, 0xdb, 0x77, 0x6f, 0x30, 0x92, 0x93, 0xe9, 0x03, 0xb6, 0x62, 0x0b, 0xf6, 0xc4,
-	0x59, 0x37, 0x57, 0x46, 0x24, 0x70, 0x7a, 0x4e, 0xe0, 0xf0, 0xb5, 0xf5, 0xc7, 0x34, 0xe4, 0x6a,
-	0xad, 0x76, 0xe0, 0x7a, 0x04, 0x21, 0xc8, 0x1c, 0x1d, 0x35, 0xec, 0x92, 0xb1, 0x6d, 0x5c, 0x2f,
-	0x60, 0xf6, 0x8c, 0x5e, 0x82, 0x95, 0x36, 0x7f, 0x53, 0xb5, 0xd7, 0xf3, 0x88, 0xef, 0x97, 0x52,
-	0x0c, 0x1b, 0x83, 0xa2, 0x2d, 0x80, 0xf6, 0xbb, 0x4d, 0x49, 0x93, 0x66, 0x34, 0x0a, 0x04, 0x55,
-	0x00, 0x35, 0xdd, 0xee, 0x59, 0x4c, 0x56, 0x86, 0xd1, 0x25, 0x60, 0xa8, 0xbc, 0x5a, 0x30, 0x94,
-	0x74, 0x8b, 0x5c, 0x5e, 0x04, 0x41, 0xd7, 0x20, 0x83, 0xdd, 0x21, 0x29, 0x65, 0xb7, 0x8d, 0xeb,
-	0x2b, 0x3b, 0x66, 0x25, 0xdc, 0x56, 0xad, 0x45, 0xe1, 0x98, 0x61, 0xe9, 0x8e, 0x3a, 0x83, 0xee,
-	0x59, 0x29, 0xb7, 0x6d, 0x5c, 0xcf, 0x60, 0xf6, 0x8c, 0x5e, 0x81, 0xc5, 0x76, 0xe0, 0x04, 0xa4,
-	0x94, 0x67, 0xac, 0x1b, 0x15, 0xc5, 0xbc, 0x2d, 0xb7, 0x47, 0x18, 0x12, 0x73, 0x1a, 0xf4, 0x36,
-	0x64, 0x9b, 0xce, 0x09, 0x19, 0xfa, 0xa5, 0xc2, 0x76, 0xfa, 0x7a, 0x71, 0xe7, 0xaa, 0x4a, 0x2d,
-	0xec, 0x56, 0xe1, 0x14, 0xf5, 0x71, 0xe0, 0x9d, 0xef, 0x67, 0x3e, 0xf9, 0xec, 0xea, 0x02, 0x16,
-	0x4c, 0x9b, 0x2d, 0x28, 0x2a, 0x48, 0x64, 0x42, 0xfa, 0x8c, 0x9c, 0x0b, 0xfb, 0xd2, 0x47, 0xf4,
-	0x32, 0x2c, 0x3e, 0x74, 0x86, 0x53, 0xc2, 0xac, 0x5a, 0xdc, 0x59, 0x8b, 0xf6, 0xc1, 0xf8, 0x9a,
-	0x03, 0x3f, 0xc0, 0x9c, 0xe2, 0x7b, 0xa9, 0x37, 0x0c, 0xeb, 0x2f, 0x29, 0xc8, 0xd9, 0xcf, 0xc0,
-	0x5b, 0xd2, 0x2e, 0xe9, 0x24, 0xbb, 0x64, 0x9e, 0xc0, 0x2e, 0xaf, 0x41, 0xb6, 0x7d, 0xea, 0x78,
-	0x3d, 0xea, 0x1a, 0x6a, 0x97, 0x2b, 0x2a, 0xb5, 0xdd, 0x62, 0xb8, 0xc6, 0xf8, 0x81, 0x2b, 0xed,
-	0xc1, 0x89, 0xd1, 0x0e, 0xac, 0x37, 0xdd, 0x7e, 0xe0, 0x0c, 0x86, 0x54, 0x21, 0xe2, 0x49, 0x2d,
-	0xb3, 0x4c, 0xcb, 0x44, 0xdc, 0x9c, 0xc8, 0xc9, 0x3d, 0x61, 0xe4, 0xe4, 0xe3, 0x91, 0x63, 0xfd,
-	0xd5, 0x80, 0x7c, 0xd3, 0xed, 0xff, 0x1f, 0x18, 0x71, 0x0f, 0xf2, 0x98, 0x4c, 0x86, 0x83, 0xae,
-	0x23, 0xcd, 0xb8, 0xa9, 0xd2, 0x37, 0xdd, 0xbe, 0x40, 0x2b, 0x96, 0x0c, 0x39, 0xac, 0x7f, 0x1b,
-	0xb0, 0x44, 0xf7, 0x21, 0x4d, 0x8d, 0x4a, 0x90, 0xe3, 0x0b, 0xbe, 0x9d, 0x0c, 0x96, 0x4b, 0xb4,
-	0xaf, 0xbc, 0x28, 0xc5, 0x5e, 0xf4, 0x52, 0xec, 0x45, 0xa1, 0x94, 0x8a, 0x24, 0x64, 0x11, 0x1b,
-	0xbd, 0x0e, 0xad, 0xc3, 0x62, 0x7d, 0xe2, 0x76, 0x4f, 0xc5, 0x76, 0xf9, 0x02, 0x6d, 0x42, 0xbe,
-	0x49, 0x9c, 0x1e, 0xf1, 0x1a, 0x36, 0xdb, 0x72, 0x06, 0x87, 0x6b, 0x66, 0x1f, 0xe2, 0x8d, 0x58,
-	0xf2, 0x52, 0xfb, 0x10, 0x6f, 0xb4, 0xf9, 0x16, 0x2c, 0x6b, 0x2f, 0x50, 0x53, 0x22, 0xc3, 0x53,
-	0x62, 0x5d, 0x4d, 0x89, 0x82, 0x1a, 0xfd, 0x0f, 0x61, 0x45, 0xb7, 0x09, 0xba, 0xad, 0x9b, 0x80,
-	0x89, 0x29, 0xee, 0x94, 0xe6, 0x6d, 0x6e, 0x3f, 0x4f, 0x6d, 0xf8, 0xe9, 0x67, 0x57, 0x0d, 0xac,
-	0x9b, 0xee, 0x05, 0x28, 0x48, 0xb1, 0x36, 0x7b, 0x6f, 0x06, 0x47, 0x00, 0xeb, 0xc3, 0x14, 0x98,
-	0x22, 0xd7, 0x0f, 0x88, 0xe3, 0x05, 0x27, 0xc4, 0x09, 0xbe, 0x86, 0xc5, 0xb2, 0x02, 0xa8, 0xe3,
-	0xf8, 0x52, 0x76, 0xcd, 0x23, 0x4e, 0x40, 0x7a, 0x2c, 0xd1, 0xf2, 0x38, 0x01, 0x63, 0xbd, 0x0e,
-	0x4b, 0xb5, 0x56, 0x75, 0x38, 0x74, 0xbb, 0x4e, 0x40, 0x1a, 0x76, 0x42, 0x75, 0x5b, 0x87, 0xc5,
-	0x7d, 0x27, 0xe8, 0x9e, 0x0a, 0x93, 0xf2, 0x85, 0xf5, 0xd3, 0x14, 0xac, 0xca, 0x04, 0xbc, 0xd8,
-	0x9e, 0xdb, 0x50, 0xc4, 0xce, 0x83, 0x40, 0x37, 0xa6, 0x0a, 0x4a, 0xb0, 0x78, 0x3a, 0xd1, 0xe2,
-	0xd7, 0x60, 0xf9, 0x8e, 0xeb, 0xfb, 0x83, 0x89, 0x6e, 0x4c, 0x1d, 0xf8, 0xe5, 0x12, 0x72, 0x8e,
-	0xfd, 0xb2, 0x73, 0xed, 0x57, 0x87, 0xa2, 0x52, 0x29, 0x2f, 0x48, 0xdf, 0x8b, 0xa3, 0xf3, 0xcf,
-	0x29, 0x30, 0xed, 0x67, 0x19, 0x9d, 0x51, 0x6d, 0x4f, 0x3f, 0x4d, 0x6d, 0x4f, 0xde, 0x7e, 0x66,
-	0xde, 0xf6, 0xe7, 0xf6, 0x82, 0xc5, 0xa7, 0xee, 0x05, 0xd9, 0x27, 0x4c, 0x8c, 0xdc, 0x4c, 0x2f,
-	0xf8, 0x79, 0x0a, 0xf2, 0xb8, 0x7d, 0x8f, 0x97, 0x63, 0x13, 0xd2, 0x1d, 0xdf, 0x95, 0xa5, 0xa8,
-	0xe3, 0xbb, 0x34, 0x7e, 0x1b, 0xe3, 0x1e, 0x79, 0x24, 0xe3, 0x97, 0x2d, 0x68, 0x2c, 0x35, 0x89,
-	0xe3, 0x93, 0x03, 0x77, 0xc8, 0x0b, 0x1f, 0xaf, 0x88, 0x3a, 0x10, 0x59, 0xb0, 0xd4, 0xf1, 0xa6,
-	0x63, 0x9a, 0x1b, 0xbd, 0xa6, 0x3f, 0x16, 0xd5, 0x51, 0x83, 0xa1, 0x77, 0x60, 0x89, 0x33, 0x0d,
-	0xfc, 0xc0, 0xf5, 0xce, 0x45, 0xcc, 0x69, 0xb5, 0x59, 0x6a, 0x57, 0x51, 0x09, 0x79, 0x6d, 0xd6,
-	0x78, 0x37, 0x6f, 0xc1, 0xea, 0x0c, 0xc9, 0xe3, 0xaa, 0x6b, 0x46, 0xad, 0xae, 0xef, 0x43, 0x81,
-	0x05, 0x78, 0xd7, 0xf5, 0x7a, 0x94, 0x91, 0x2a, 0x2d, 0x18, 0xa9, 0xae, 0x65, 0xc8, 0x74, 0xce,
-	0x27, 0x9c, 0x6f, 0x65, 0xe7, 0xb2, 0xa6, 0x23, 0xe3, 0xa1, 0x58, 0xcc, 0x68, 0x68, 0xf4, 0xd9,
-	0x4e, 0xe0, 0x30, 0xc3, 0x2c, 0x61, 0xf6, 0x6c, 0x7d, 0x64, 0x00, 0x30, 0xf9, 0x3f, 0x9a, 0x12,
-	0x9f, 0x05, 0x68, 0xcb, 0x19, 0x11, 0x19, 0xa0, 0xf4, 0x59, 0xcd, 0x80, 0x94, 0x9e, 0x01, 0x42,
-	0x9d, 0x74, 0xa4, 0x4e, 0x09, 0x72, 0xf7, 0x9c, 0x47, 0xed, 0xc1, 0x8f, 0x89, 0xb0, 0xac, 0x5c,
-	0xd2, 0x6c, 0x91, 0x41, 0x6a, 0x8b, 0xde, 0x13, 0x01, 0x98, 0x6a, 0xad, 0x86, 0xcd, 0x62, 0x26,
-	0x83, 0xd9, 0xb3, 0x65, 0x01, 0x74, 0x7c, 0x57, 0x6a, 0xb6, 0x0e, 0x8b, 0x35, 0x77, 0x3a, 0x0e,
-	0xc4, 0xe6, 0xf9, 0xc2, 0xfa, 0x97, 0x41, 0xab, 0x1d, 0xcb, 0x32, 0x36, 0x99, 0x25, 0x66, 0xd8,
-	0x2e, 0x14, 0x0e, 0x27, 0xc4, 0x73, 0x82, 0x81, 0x3b, 0x16, 0x86, 0xda, 0xd0, 0x07, 0x46, 0xc6,
-	0x7b, 0x38, 0xc1, 0x11, 0x1d, 0xda, 0x0f, 0x47, 0x4c, 0x9e, 0x6e, 0xd7, 0x12, 0x46, 0x4c, 0x46,
-	0xf0, 0x15, 0xce, 0x99, 0xbf, 0xcc, 0x40, 0x4e, 0xda, 0x83, 0x55, 0x1f, 0xf6, 0x18, 0x56, 0xa6,
-	0x08, 0x80, 0x2a, 0x90, 0xbd, 0x47, 0x82, 0x53, 0xb7, 0x97, 0x14, 0x18, 0x1c, 0xc3, 0x02, 0x43,
-	0x50, 0xa1, 0x3d, 0x35, 0x0a, 0x98, 0x43, 0x8b, 0x3a, 0x4f, 0x84, 0x15, 0x7b, 0x54, 0xa3, 0xa6,
-	0xca, 0xfa, 0x7d, 0x58, 0xe6, 0x98, 0xeb, 0x8b, 0x3b, 0xdf, 0x8a, 0xf7, 0x7b, 0xad, 0x16, 0x62,
-	0x8d, 0x05, 0xdd, 0x84, 0x62, 0xad, 0x15, 0x49, 0x58, 0x64, 0x12, 0x5e, 0x48, 0xb0, 0x79, 0x24,
-	0x40, 0x65, 0xa0, 0xfc, 0xb6, 0xc2, 0x9f, 0x9d, 0xe5, 0xb7, 0x67, 0xf8, 0x15, 0x06, 0xf4, 0xba,
-	0x1a, 0x6c, 0xac, 0x24, 0xc5, 0x0c, 0x10, 0x61, 0xb1, 0x1a, 0x96, 0x7b, 0x7a, 0xb7, 0x65, 0x83,
-	0x6d, 0x6c, 0xd4, 0x51, 0xf1, 0x58, 0xef, 0xcd, 0x7b, 0x7a, 0xf4, 0x96, 0x0a, 0x49, 0xdc, 0x11,
-	0x1e, 0x6b, 0xd4, 0x56, 0x1b, 0x8a, 0xcc, 0x09, 0xfe, 0xc4, 0x1d, 0xfb, 0xe4, 0x82, 0x4e, 0x25,
-	0xf2, 0x34, 0xa5, 0xe5, 0x69, 0xd3, 0xf1, 0x83, 0x28, 0x7b, 0xe5, 0xd2, 0xaa, 0x00, 0x52, 0xd4,
-	0x55, 0x64, 0xdf, 0x1e, 0x78, 0x4a, 0xac, 0xc9, 0xa5, 0xf5, 0x9f, 0x0c, 0xed, 0xce, 0x82, 0xec,
-	0xd9, 0x06, 0xe5, 0x0b, 0x50, 0xa8, 0x7b, 0x9e, 0xeb, 0xd5, 0xdc, 0x1e, 0x61, 0x6a, 0x2e, 0xe3,
-	0x08, 0x40, 0x2b, 0x39, 0x5b, 0xdc, 0x23, 0xbe, 0xef, 0xf4, 0x89, 0x18, 0x1d, 0x34, 0x18, 0x6d,
-	0x34, 0x0d, 0xff, 0xa0, 0x7a, 0x97, 0x90, 0x09, 0xf1, 0x58, 0x50, 0xe5, 0xb1, 0x02, 0x41, 0xb7,
-	0x34, 0x0b, 0x8a, 0xa8, 0xb9, 0x32, 0x13, 0xf7, 0x1c, 0x2d, 0x02, 0x5f, 0xb3, 0x39, 0x75, 0xa0,
-	0x3b, 0x1a, 0x39, 0xe3, 0x1e, 0x9f, 0xa8, 0x72, 0x09, 0x0e, 0x54, 0xf0, 0x58, 0xa3, 0x46, 0x6f,
-	0x42, 0x91, 0x85, 0x92, 0x78, 0x7d, 0x7e, 0xf6, 0xf5, 0x0a, 0x1a, 0xab, 0xb4, 0x68, 0x1f, 0x56,
-	0x6a, 0xc3, 0xa9, 0x1f, 0x10, 0xcf, 0x26, 0xb4, 0x21, 0xfb, 0x22, 0x76, 0xb4, 0xc9, 0x48, 0xa7,
-	0xc0, 0x31, 0x0e, 0x74, 0x13, 0x0a, 0xd1, 0x8c, 0x0e, 0x8c, 0x7d, 0x5b, 0x65, 0x0f, 0x91, 0xef,
-	0x4e, 0x89, 0x77, 0x8e, 0x89, 0x3f, 0x1d, 0x06, 0x38, 0x62, 0x41, 0x37, 0x01, 0x94, 0xc8, 0x2f,
-	0x32, 0x01, 0x5b, 0xaa, 0x80, 0xd9, 0x40, 0xc2, 0x10, 0x8b, 0xfe, 0x53, 0xd2, 0x3d, 0x23, 0x1e,
-	0x3f, 0x9c, 0x2d, 0x25, 0x18, 0x4f, 0xc1, 0x63, 0x8d, 0xda, 0x7a, 0x87, 0x8d, 0xab, 0xbc, 0xc9,
-	0x85, 0x66, 0x79, 0x8d, 0x16, 0x48, 0x0a, 0xf1, 0x4b, 0x06, 0x2b, 0xdb, 0x1b, 0x33, 0xce, 0xa4,
-	0x58, 0xe1, 0x4a, 0x49, 0x6b, 0xbd, 0xa8, 0x39, 0x82, 0xf6, 0x9a, 0xef, 0xb3, 0xb2, 0x2c, 0x7a,
-	0x0d, 0x5b, 0x58, 0x77, 0x60, 0x99, 0xce, 0x4b, 0x1d, 0xe7, 0x64, 0x48, 0x8e, 0x7c, 0xe2, 0xd1,
-	0x53, 0x16, 0xfd, 0x1d, 0x47, 0x0d, 0x33, 0x5c, 0x53, 0xdc, 0x7d, 0xc7, 0xf7, 0x3f, 0x70, 0xbd,
-	0x9e, 0x98, 0xe7, 0xc2, 0xb5, 0xf5, 0x0b, 0x83, 0x6a, 0xc9, 0x06, 0xc5, 0xc4, 0x7e, 0x35, 0xbf,
-	0xe1, 0x6a, 0x23, 0x67, 0x3a, 0x36, 0x72, 0x46, 0x67, 0xc1, 0x8c, 0x7a, 0x16, 0xdc, 0x62, 0xa5,
-	0x5d, 0xef, 0xbc, 0x0a, 0xc4, 0xfa, 0x4d, 0x8a, 0xc6, 0xf0, 0xf8, 0xc1, 0xa0, 0x5f, 0x3b, 0x75,
-	0xc6, 0x7d, 0x82, 0x76, 0x43, 0xed, 0xc4, 0xc1, 0x6d, 0x4d, 0x9f, 0x2a, 0x18, 0x2a, 0xb2, 0x20,
-	0xdf, 0xc7, 0x1e, 0x00, 0x67, 0x57, 0xa6, 0x11, 0xbd, 0x7c, 0x2b, 0xaf, 0x60, 0x59, 0xae, 0xd0,
-	0xa3, 0x0e, 0xac, 0x34, 0xc6, 0x83, 0x60, 0xe0, 0x0c, 0xef, 0x91, 0xd1, 0x09, 0xf1, 0x64, 0xd3,
-	0xfd, 0xee, 0x3c, 0x09, 0x15, 0x9d, 0x9c, 0x4f, 0x5e, 0x31, 0x19, 0x9b, 0x55, 0x58, 0x4b, 0x20,
-	0x7b, 0xaa, 0xb3, 0xed, 0xcb, 0xb0, 0xdc, 0x3e, 0x9d, 0x06, 0x3d, 0xf7, 0x83, 0x31, 0xbf, 0x99,
-	0xa0, 0xbe, 0xa1, 0x0f, 0xa1, 0xcb, 0xe4, 0xd2, 0xfa, 0x75, 0x1a, 0x2e, 0xb5, 0xbb, 0xa7, 0xa4,
-	0x37, 0x1d, 0x12, 0x91, 0xe5, 0x89, 0xde, 0xbd, 0x06, 0xcb, 0xfb, 0xae, 0x1b, 0xf8, 0x81, 0xe7,
-	0x4c, 0x26, 0x83, 0x71, 0x9f, 0xbd, 0x34, 0x8f, 0x75, 0x20, 0x2d, 0x0d, 0x62, 0x68, 0x66, 0x06,
-	0x4d, 0x33, 0x83, 0x6a, 0xa5, 0x41, 0x41, 0x63, 0x95, 0x96, 0xd7, 0xa4, 0xc8, 0x54, 0xa2, 0x1b,
-	0x97, 0xe6, 0x99, 0x12, 0xeb, 0xde, 0xbf, 0x15, 0xdb, 0xb1, 0x68, 0xc5, 0xcf, 0xe9, 0x85, 0x41,
-	0x21, 0xc0, 0x31, 0x0b, 0xdd, 0x85, 0x55, 0x7e, 0x96, 0x50, 0x0e, 0x17, 0xa2, 0xb2, 0x6a, 0x13,
-	0xc1, 0x0c, 0x11, 0x9e, 0xe5, 0xa3, 0xda, 0xd8, 0x64, 0x48, 0x02, 0x22, 0x1a, 0x9f, 0x28, 0xb0,
-	0x9a, 0x36, 0x1a, 0x01, 0xd6, 0xe9, 0xad, 0x61, 0x82, 0x36, 0x68, 0x17, 0x32, 0x34, 0x51, 0x45,
-	0x78, 0x6b, 0xc2, 0xb4, 0x0c, 0x17, 0x41, 0xce, 0x88, 0xd9, 0xc9, 0xc1, 0xf1, 0xcf, 0xe8, 0xd4,
-	0x7c, 0xe2, 0xf8, 0x32, 0x56, 0x34, 0x18, 0x0d, 0x17, 0xed, 0xf5, 0x17, 0x84, 0x8b, 0xa3, 0x77,
-	0x8e, 0xf0, 0x5a, 0xc6, 0x88, 0xae, 0x65, 0xd0, 0xdb, 0x90, 0x17, 0x34, 0xf2, 0x82, 0xe8, 0x79,
-	0xcd, 0x0d, 0x7a, 0xb4, 0xc9, 0x93, 0xaf, 0x64, 0xb1, 0x7e, 0x9f, 0xa6, 0x43, 0x15, 0x7f, 0x21,
-	0xad, 0xd7, 0xf2, 0x66, 0xcc, 0x50, 0x6e, 0xc6, 0xbe, 0x51, 0x77, 0x23, 0xa8, 0x1a, 0x0e, 0xf5,
-	0x79, 0x66, 0xce, 0x17, 0x13, 0x26, 0x2d, 0x76, 0xdd, 0xf6, 0xd5, 0xcd, 0xf4, 0xbf, 0x35, 0xf8,
-	0x4d, 0xbf, 0xb8, 0xd6, 0x66, 0x2a, 0xc8, 0xe6, 0x35, 0x73, 0xad, 0x4d, 0x4f, 0x9c, 0x9c, 0x42,
-	0x53, 0x8d, 0x83, 0x36, 0x31, 0x14, 0x15, 0x64, 0x82, 0x6a, 0xaf, 0xea, 0xaa, 0x5d, 0x99, 0xb3,
-	0x7b, 0x55, 0xbd, 0x8f, 0x53, 0xec, 0x3a, 0xe4, 0x99, 0xc4, 0xd0, 0x37, 0xe8, 0x06, 0x83, 0x7a,
-	0xd5, 0x7e, 0x12, 0xaf, 0xda, 0xff, 0x5b, 0xaf, 0xda, 0xc9, 0x5e, 0xfd, 0x93, 0x11, 0x1f, 0x1f,
-	0xd1, 0x6b, 0x90, 0x17, 0xc4, 0x52, 0xcf, 0xb5, 0x04, 0x41, 0xb2, 0xc6, 0x48, 0x52, 0xca, 0x56,
-	0x93, 0x6c, 0xa9, 0x59, 0xb6, 0x9a, 0xce, 0x26, 0x49, 0xd1, 0x1b, 0xec, 0x56, 0x43, 0xf0, 0xf1,
-	0x68, 0x58, 0x4f, 0x3a, 0x2e, 0x0a, 0xc6, 0x88, 0xd8, 0xfa, 0x99, 0x01, 0x45, 0xa1, 0x3a, 0x0b,
-	0xc8, 0x37, 0x99, 0xde, 0x3c, 0xac, 0x0c, 0x11, 0x56, 0x61, 0xc6, 0x09, 0x8c, 0x36, 0xf4, 0x85,
-	0xe4, 0x68, 0x8f, 0x2b, 0xc1, 0x79, 0xb9, 0xf2, 0x25, 0x25, 0x5b, 0x05, 0x4a, 0x63, 0x8e, 0x18,
-	0xac, 0x5f, 0x19, 0xb0, 0x21, 0xc6, 0x0b, 0xa1, 0x8f, 0x3c, 0x13, 0xbe, 0x04, 0x2b, 0xad, 0xe9,
-	0xe8, 0xf0, 0x41, 0x24, 0x9c, 0x67, 0x4b, 0x0c, 0x4a, 0x27, 0x01, 0x06, 0x09, 0xf5, 0xe7, 0xd3,
-	0x9e, 0x0e, 0x44, 0x65, 0x30, 0x25, 0x5f, 0x78, 0x0b, 0xca, 0x47, 0xbf, 0x19, 0xb8, 0xf5, 0x93,
-	0x14, 0xbf, 0x79, 0xbf, 0x30, 0x5d, 0xbf, 0xde, 0xd7, 0xb7, 0x1f, 0xa7, 0xc4, 0x77, 0x24, 0x9a,
-	0x7a, 0x37, 0xc3, 0x8a, 0xc3, 0x43, 0x63, 0x7b, 0x26, 0xc6, 0x58, 0xee, 0x31, 0x12, 0x3d, 0xf7,
-	0xb8, 0xed, 0x6f, 0x86, 0xa9, 0x9b, 0xba, 0x88, 0x7f, 0x6e, 0xee, 0xb6, 0xa1, 0xa8, 0x08, 0x4f,
-	0x98, 0x3c, 0x2b, 0x7a, 0xee, 0xce, 0xfd, 0x44, 0xa2, 0x24, 0x2f, 0x13, 0x7a, 0x61, 0x41, 0x78,
-	0x9c, 0xd0, 0xa4, 0x8a, 0xf0, 0xcf, 0xb4, 0x7e, 0x18, 0x4b, 0x8c, 0x9c, 0x5b, 0x5a, 0xea, 0x25,
-	0x76, 0x91, 0x08, 0x2d, 0x8f, 0xcb, 0x6a, 0xb2, 0xee, 0x86, 0x55, 0x51, 0xdc, 0x31, 0xad, 0x25,
-	0xd4, 0x42, 0x79, 0xb4, 0x90, 0xf5, 0xf3, 0xf5, 0xc8, 0xa1, 0x62, 0x96, 0x5d, 0x4f, 0x72, 0x83,
-	0x8c, 0x9c, 0xd0, 0xf9, 0xbb, 0x61, 0x63, 0x15, 0x33, 0xec, 0x5a, 0x42, 0x3b, 0x95, 0x2f, 0x93,
-	0x2d, 0xf8, 0x86, 0xfc, 0x52, 0xc8, 0x07, 0x0f, 0x6d, 0x36, 0x94, 0xd7, 0x06, 0xda, 0xd7, 0xc2,
-	0x96, 0x88, 0x4f, 0x31, 0x8b, 0x89, 0xa3, 0x6c, 0x8e, 0x71, 0x6f, 0xc5, 0x27, 0x4b, 0x9d, 0x0a,
-	0x27, 0x70, 0xa2, 0x7a, 0xec, 0x94, 0x29, 0x6e, 0x05, 0x1e, 0x3b, 0xa4, 0xc6, 0xce, 0xa6, 0x97,
-	0x21, 0xdb, 0x22, 0x8f, 0x82, 0x46, 0x8f, 0xdd, 0x0b, 0x64, 0xb0, 0x58, 0x59, 0x7f, 0xcb, 0x81,
-	0x29, 0xf7, 0x11, 0x5e, 0xb1, 0x27, 0xf9, 0x5a, 0x0a, 0x90, 0x67, 0x50, 0xb1, 0x42, 0x87, 0x50,
-	0xe4, 0x4f, 0xfb, 0xe7, 0x77, 0xc9, 0xb9, 0xa8, 0xdd, 0xaf, 0x26, 0x99, 0x29, 0xbc, 0x23, 0x57,
-	0xe8, 0xf9, 0x41, 0x4d, 0x95, 0x10, 0x0e, 0xbe, 0x19, 0x65, 0xf0, 0x0d, 0xbd, 0xb0, 0xf8, 0xa5,
-	0xbc, 0x90, 0xfd, 0xc2, 0x5e, 0xe8, 0x81, 0x19, 0x9b, 0xae, 0x69, 0x97, 0xa7, 0x5b, 0xdd, 0xb9,
-	0x70, 0xab, 0x71, 0x26, 0xb5, 0x28, 0xcc, 0x48, 0x44, 0x0d, 0xb5, 0x01, 0xf1, 0x89, 0xf4, 0x95,
-	0x0b, 0xc5, 0x87, 0xd4, 0xdc, 0x8e, 0x11, 0xb7, 0x1a, 0xec, 0x85, 0x27, 0x0e, 0x76, 0x25, 0x1d,
-	0xe1, 0x0b, 0xa5, 0x63, 0xf1, 0x29, 0xd2, 0x31, 0x56, 0x3c, 0x96, 0x9e, 0xba, 0x78, 0xcc, 0x64,
-	0xc6, 0xf2, 0x17, 0xc9, 0x8c, 0xcd, 0x9b, 0x60, 0xc6, 0x03, 0x32, 0xf9, 0x1b, 0x69, 0xf2, 0x07,
-	0x99, 0xcd, 0xf7, 0x61, 0x23, 0xd1, 0xcb, 0x4f, 0x59, 0x88, 0xb5, 0x6b, 0x41, 0x45, 0xfc, 0x1e,
-	0xfb, 0x9a, 0x3e, 0xa7, 0x6b, 0x3c, 0x4e, 0x39, 0xab, 0x01, 0x45, 0xf5, 0x43, 0xfc, 0x97, 0xf8,
-	0xde, 0x68, 0xfd, 0x2e, 0x05, 0xeb, 0x49, 0x37, 0x80, 0x17, 0xdc, 0x33, 0xdf, 0x9f, 0xf9, 0x43,
-	0x43, 0xe5, 0x71, 0xf7, 0x89, 0xfa, 0x1f, 0x1b, 0x66, 0xba, 0xff, 0xb3, 0xf9, 0x7b, 0x43, 0xe7,
-	0xf1, 0x7f, 0x6f, 0xb8, 0x68, 0x88, 0x56, 0x2c, 0xaa, 0xd8, 0xba, 0xfc, 0x03, 0x80, 0xa3, 0x49,
-	0xcf, 0x09, 0xf8, 0xad, 0xcb, 0x15, 0x58, 0xd3, 0xbe, 0x34, 0x72, 0x94, 0xb9, 0x80, 0x36, 0x60,
-	0x55, 0x7e, 0x5d, 0x6c, 0xb6, 0x5b, 0x02, 0x6c, 0xa0, 0x35, 0xb8, 0x44, 0xc3, 0x91, 0xe9, 0x23,
-	0x80, 0x29, 0xb4, 0x0c, 0x85, 0x4e, 0xfb, 0x50, 0x2c, 0xd3, 0xe5, 0x0a, 0x14, 0xc2, 0x7f, 0xa7,
-	0xa0, 0x4b, 0x50, 0x6c, 0xb9, 0xde, 0xc8, 0x19, 0xb2, 0xa5, 0xb9, 0x80, 0x4c, 0x58, 0xea, 0x0c,
-	0x46, 0xc4, 0x9d, 0x06, 0x1c, 0x62, 0x94, 0xff, 0x90, 0x02, 0x88, 0xee, 0xd1, 0xd1, 0x0a, 0x40,
-	0xa7, 0x7d, 0x78, 0x7c, 0x74, 0xdf, 0xae, 0x76, 0xea, 0xe6, 0x02, 0x02, 0xc8, 0x56, 0xef, 0xdf,
-	0xaf, 0xb7, 0x6c, 0xd3, 0x40, 0x79, 0xc8, 0xe0, 0x7a, 0xd5, 0x36, 0x53, 0x68, 0x09, 0xf2, 0x1d,
-	0x7c, 0xd4, 0xaa, 0x51, 0x9a, 0x34, 0x15, 0x7a, 0xa7, 0xde, 0x39, 0x0e, 0x21, 0x19, 0x54, 0x84,
-	0x5c, 0xed, 0xb0, 0xd5, 0xaa, 0xd7, 0x3a, 0xe6, 0x22, 0x15, 0x29, 0x16, 0xc7, 0xf8, 0xd0, 0xcc,
-	0xa2, 0x55, 0x58, 0x6e, 0x1e, 0xde, 0x39, 0x3e, 0xa8, 0x57, 0x71, 0x67, 0xbf, 0x5e, 0xed, 0x98,
-	0x39, 0x2a, 0xa1, 0xd6, 0x52, 0x20, 0x79, 0x0a, 0xb1, 0x55, 0x48, 0x01, 0x21, 0x58, 0xa9, 0x1d,
-	0xd4, 0x6b, 0x77, 0x8f, 0x0f, 0xaa, 0x77, 0xeb, 0xf5, 0xfb, 0x75, 0x6c, 0x02, 0x35, 0x20, 0x7d,
-	0x73, 0xad, 0x79, 0xd4, 0xee, 0xd4, 0xf1, 0xb1, 0x5d, 0xef, 0x54, 0x1b, 0xcd, 0xb6, 0x59, 0xa4,
-	0xc4, 0x14, 0xd1, 0x3e, 0xa8, 0x62, 0xfb, 0xb8, 0xd1, 0xba, 0x7d, 0x68, 0x2e, 0x31, 0x01, 0xad,
-	0xe3, 0x6a, 0xb3, 0x79, 0x48, 0xb5, 0x3c, 0x6e, 0xd8, 0xe6, 0x32, 0x35, 0xb4, 0x2a, 0xa0, 0xdd,
-	0xa1, 0xfa, 0xaf, 0x30, 0x43, 0x33, 0x0b, 0x1c, 0xd7, 0x5a, 0xc7, 0xcd, 0xea, 0x7e, 0xbd, 0x69,
-	0x5e, 0x2a, 0xb7, 0x00, 0xa2, 0xcf, 0xa3, 0x74, 0x57, 0xd4, 0x17, 0x1c, 0x62, 0x2e, 0x50, 0x93,
-	0x34, 0xc6, 0x01, 0xf1, 0xc6, 0xce, 0xd0, 0x34, 0xa8, 0xe1, 0x99, 0x67, 0x43, 0x2f, 0xad, 0x8a,
-	0x2f, 0xcd, 0x98, 0xfc, 0x90, 0x74, 0x03, 0xd2, 0x33, 0xd3, 0xe5, 0x32, 0x14, 0xc2, 0xaf, 0x88,
-	0x94, 0xbd, 0x4d, 0x02, 0xb6, 0x32, 0x17, 0x28, 0x3b, 0xbf, 0x13, 0xe2, 0x00, 0xa3, 0xfc, 0x61,
-	0x0a, 0x90, 0xac, 0xec, 0x4a, 0x00, 0x51, 0x6f, 0x0d, 0xba, 0x67, 0x6a, 0xdc, 0x28, 0x1f, 0xb8,
-	0xc2, 0xb8, 0xd9, 0x80, 0x55, 0x7b, 0x06, 0x9c, 0x42, 0x97, 0xe9, 0x01, 0xb6, 0x1f, 0x87, 0xa7,
-	0xe9, 0xdb, 0xef, 0x90, 0x20, 0x0c, 0xc7, 0x0c, 0x7a, 0x6e, 0xa6, 0x7c, 0x09, 0xd4, 0x22, 0x35,
-	0x6a, 0x9b, 0xf0, 0x60, 0x12, 0xb0, 0x2c, 0x2a, 0xc1, 0xba, 0x7e, 0xc8, 0x11, 0x98, 0x1c, 0xba,
-	0x0a, 0xcf, 0xb7, 0x49, 0x30, 0xdb, 0x3b, 0x05, 0x41, 0x1e, 0x6d, 0xc2, 0x65, 0x41, 0x10, 0x16,
-	0x5f, 0x81, 0x2b, 0x50, 0x13, 0xf2, 0x67, 0x61, 0x35, 0x13, 0xca, 0x1f, 0x19, 0xb0, 0xac, 0xf5,
-	0x76, 0xea, 0x39, 0x09, 0x10, 0xd3, 0xbd, 0xb9, 0x40, 0xf5, 0x97, 0x40, 0xed, 0xc6, 0xd4, 0x34,
-	0xd0, 0x77, 0xe0, 0xdb, 0x33, 0x28, 0x59, 0xa2, 0x31, 0xe9, 0x92, 0xc1, 0x43, 0xd2, 0x33, 0x53,
-	0xe8, 0x79, 0xb8, 0x32, 0x43, 0x76, 0xdb, 0x19, 0x0c, 0xa9, 0x23, 0xd5, 0x77, 0xe2, 0xe9, 0x78,
-	0x4c, 0x05, 0x67, 0xca, 0x27, 0x49, 0xd3, 0x05, 0x35, 0x8d, 0x06, 0x8d, 0x74, 0x8c, 0x63, 0xa4,
-	0x24, 0x63, 0x06, 0xd3, 0x0e, 0xdc, 0xc9, 0x84, 0x6a, 0x55, 0x3e, 0x05, 0x33, 0x7e, 0x45, 0x4e,
-	0x43, 0xa2, 0xda, 0xeb, 0x89, 0xf2, 0x63, 0x2e, 0x50, 0xab, 0x61, 0x32, 0x72, 0x1f, 0x12, 0x09,
-	0x32, 0x68, 0x6e, 0xb5, 0x03, 0xc7, 0x0b, 0x24, 0x24, 0x45, 0x3d, 0x4e, 0xa5, 0x4a, 0x40, 0x9a,
-	0x4a, 0xb9, 0x3b, 0x18, 0x0e, 0xdf, 0x73, 0x47, 0x27, 0x03, 0x62, 0x66, 0xca, 0x6f, 0x69, 0x57,
-	0xcb, 0x14, 0x4d, 0x1b, 0x0e, 0x87, 0x98, 0x0b, 0xb4, 0x06, 0xd9, 0x2d, 0xb9, 0x34, 0xe8, 0xb2,
-	0x16, 0x2e, 0x53, 0xfb, 0xf5, 0x4f, 0xff, 0xb1, 0xb5, 0xf0, 0xc9, 0xe7, 0x5b, 0xc6, 0xa7, 0x9f,
-	0x6f, 0x19, 0x7f, 0xff, 0x7c, 0xcb, 0x78, 0x6f, 0x57, 0xf9, 0xa7, 0xeb, 0xc8, 0x09, 0xbc, 0xc1,
-	0x23, 0xd7, 0x1b, 0xf4, 0x07, 0x63, 0xb9, 0x18, 0x93, 0x1b, 0x93, 0xb3, 0xfe, 0x8d, 0xc9, 0xc9,
-	0x8d, 0xa8, 0xa4, 0x9e, 0x64, 0xd9, 0xdf, 0x5c, 0x77, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xff,
-	0x45, 0x8e, 0x06, 0x45, 0x2b, 0x00, 0x00,
+	// 3002 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0xcd, 0x6f, 0x1b, 0xc7,
+	0xf5, 0xda, 0x25, 0xc5, 0x8f, 0x47, 0x49, 0x5e, 0x8d, 0x24, 0x9b, 0x51, 0xf2, 0x93, 0xf5, 0xdb,
+	0xb8, 0x81, 0xc3, 0x34, 0x34, 0x20, 0x21, 0x41, 0xd2, 0x28, 0x36, 0x28, 0x2e, 0x6d, 0x31, 0xa6,
+	0x29, 0x67, 0x48, 0xf5, 0x10, 0x20, 0x50, 0x57, 0xe4, 0x98, 0x62, 0x45, 0x72, 0xd9, 0xdd, 0xa5,
+	0x63, 0xf5, 0xd4, 0x4b, 0x0b, 0x14, 0xed, 0xa5, 0x68, 0x0e, 0x41, 0x51, 0xf4, 0xd0, 0x4b, 0x0f,
+	0xbd, 0xe6, 0xd0, 0x1e, 0x7b, 0x28, 0x90, 0x63, 0xfe, 0x82, 0xa0, 0x0d, 0xd0, 0x53, 0x0f, 0x05,
+	0x7a, 0xe8, 0xb9, 0x98, 0xaf, 0xdd, 0x19, 0x72, 0x29, 0xdb, 0x89, 0x9b, 0x16, 0xc9, 0x89, 0x3b,
+	0xef, 0x6b, 0xdf, 0xbc, 0x79, 0x5f, 0xf3, 0x96, 0x60, 0x0d, 0xbc, 0x5e, 0x40, 0xfc, 0x87, 0xfd,
+	0x0e, 0x29, 0x8f, 0x7d, 0x2f, 0xf4, 0x10, 0xc4, 0x90, 0xcd, 0x57, 0x7b, 0xfd, 0xf0, 0x74, 0x72,
+	0x52, 0xee, 0x78, 0xc3, 0x1b, 0x3d, 0xaf, 0xe7, 0xdd, 0x60, 0x24, 0x27, 0x93, 0x07, 0x6c, 0xc5,
+	0x16, 0xec, 0x89, 0xb3, 0x6e, 0xae, 0x0c, 0x49, 0xe8, 0x76, 0xdd, 0xd0, 0xe5, 0x6b, 0xfb, 0xf7,
+	0x29, 0xc8, 0x56, 0x9b, 0xad, 0xd0, 0xf3, 0x09, 0x42, 0x90, 0x3e, 0x3a, 0xaa, 0x3b, 0x45, 0x63,
+	0xdb, 0xb8, 0x9e, 0xc7, 0xec, 0x19, 0xbd, 0x04, 0x2b, 0x2d, 0xfe, 0xa6, 0x4a, 0xb7, 0xeb, 0x93,
+	0x20, 0x28, 0x9a, 0x0c, 0x3b, 0x05, 0x45, 0x5b, 0x00, 0xad, 0x77, 0x1b, 0x92, 0x26, 0xc5, 0x68,
+	0x14, 0x08, 0x2a, 0x03, 0x6a, 0x78, 0x9d, 0xb3, 0x29, 0x59, 0x69, 0x46, 0x97, 0x80, 0xa1, 0xf2,
+	0xaa, 0xe1, 0x40, 0xd2, 0x2d, 0x72, 0x79, 0x31, 0x04, 0x5d, 0x83, 0x34, 0xf6, 0x06, 0xa4, 0x98,
+	0xd9, 0x36, 0xae, 0xaf, 0xec, 0x58, 0xe5, 0x68, 0x5b, 0xd5, 0x26, 0x85, 0x63, 0x86, 0xa5, 0x3b,
+	0x6a, 0xf7, 0x3b, 0x67, 0xc5, 0xec, 0xb6, 0x71, 0x3d, 0x8d, 0xd9, 0x33, 0x7a, 0x05, 0x16, 0x5b,
+	0xa1, 0x1b, 0x92, 0x62, 0x8e, 0xb1, 0x6e, 0x94, 0x15, 0xf3, 0x36, 0xbd, 0x2e, 0x61, 0x48, 0xcc,
+	0x69, 0xd0, 0xdb, 0x90, 0x69, 0xb8, 0x27, 0x64, 0x10, 0x14, 0xf3, 0xdb, 0xa9, 0xeb, 0x85, 0x9d,
+	0xab, 0x2a, 0xb5, 0xb0, 0x5b, 0x99, 0x53, 0xd4, 0x46, 0xa1, 0x7f, 0xbe, 0x9f, 0xfe, 0xe4, 0xb3,
+	0xab, 0x0b, 0x58, 0x30, 0x6d, 0x36, 0xa1, 0xa0, 0x20, 0x91, 0x05, 0xa9, 0x33, 0x72, 0x2e, 0xec,
+	0x4b, 0x1f, 0xd1, 0xcb, 0xb0, 0xf8, 0xd0, 0x1d, 0x4c, 0x08, 0xb3, 0x6a, 0x61, 0x67, 0x2d, 0xde,
+	0x07, 0xe3, 0x6b, 0xf4, 0x83, 0x10, 0x73, 0x8a, 0xef, 0x98, 0x6f, 0x18, 0xf6, 0x9f, 0x4c, 0xc8,
+	0x3a, 0xcf, 0xe0, 0xb4, 0xa4, 0x5d, 0x52, 0x49, 0x76, 0x49, 0x3f, 0x81, 0x5d, 0x5e, 0x83, 0x4c,
+	0xeb, 0xd4, 0xf5, 0xbb, 0xf4, 0x68, 0xa8, 0x5d, 0xae, 0xa8, 0xd4, 0x4e, 0x93, 0xe1, 0xea, 0xa3,
+	0x07, 0x9e, 0xb4, 0x07, 0x27, 0x46, 0x3b, 0xb0, 0xde, 0xf0, 0x7a, 0xa1, 0xdb, 0x1f, 0x50, 0x85,
+	0x88, 0x2f, 0xb5, 0xcc, 0x30, 0x2d, 0x13, 0x71, 0x73, 0x3c, 0x27, 0xfb, 0x84, 0x9e, 0x93, 0x9b,
+	0xf6, 0x1c, 0xfb, 0xcf, 0x06, 0xe4, 0x1a, 0x5e, 0xef, 0x7f, 0xc0, 0x88, 0x7b, 0x90, 0xc3, 0x64,
+	0x3c, 0xe8, 0x77, 0x5c, 0x69, 0xc6, 0x4d, 0x95, 0xbe, 0xe1, 0xf5, 0x04, 0x5a, 0xb1, 0x64, 0xc4,
+	0x61, 0xff, 0xc3, 0x80, 0x25, 0xba, 0x0f, 0x69, 0x6a, 0x54, 0x84, 0x2c, 0x5f, 0xf0, 0xed, 0xa4,
+	0xb1, 0x5c, 0xa2, 0x7d, 0xe5, 0x45, 0x26, 0x7b, 0xd1, 0x4b, 0x53, 0x2f, 0x8a, 0xa4, 0x94, 0x25,
+	0x21, 0xf3, 0xd8, 0xf8, 0x75, 0x68, 0x1d, 0x16, 0x6b, 0x63, 0xaf, 0x73, 0x2a, 0xb6, 0xcb, 0x17,
+	0x68, 0x13, 0x72, 0x0d, 0xe2, 0x76, 0x89, 0x5f, 0x77, 0xd8, 0x96, 0xd3, 0x38, 0x5a, 0x33, 0xfb,
+	0x10, 0x7f, 0xc8, 0x82, 0x97, 0xda, 0x87, 0xf8, 0xc3, 0xcd, 0xb7, 0x60, 0x59, 0x7b, 0x81, 0x1a,
+	0x12, 0x69, 0x1e, 0x12, 0xeb, 0x6a, 0x48, 0xe4, 0x55, 0xef, 0x7f, 0x08, 0x2b, 0xba, 0x4d, 0xd0,
+	0x6d, 0xdd, 0x04, 0x4c, 0x4c, 0x61, 0xa7, 0x38, 0x6f, 0x73, 0xfb, 0x39, 0x6a, 0xc3, 0x4f, 0x3f,
+	0xbb, 0x6a, 0x60, 0xdd, 0x74, 0x2f, 0x40, 0x5e, 0x8a, 0x75, 0xd8, 0x7b, 0xd3, 0x38, 0x06, 0xd8,
+	0x1f, 0x9a, 0x60, 0x89, 0x58, 0x3f, 0x20, 0xae, 0x1f, 0x9e, 0x10, 0x37, 0xfc, 0x1a, 0x26, 0xcb,
+	0x32, 0xa0, 0xb6, 0x1b, 0x48, 0xd9, 0x55, 0x9f, 0xb8, 0x21, 0xe9, 0xb2, 0x40, 0xcb, 0xe1, 0x04,
+	0x8c, 0xfd, 0x3a, 0x2c, 0x55, 0x9b, 0x95, 0xc1, 0xc0, 0xeb, 0xb8, 0x21, 0xa9, 0x3b, 0x09, 0xd9,
+	0x6d, 0x1d, 0x16, 0xf7, 0xdd, 0xb0, 0x73, 0x2a, 0x4c, 0xca, 0x17, 0xf6, 0x8f, 0x4d, 0x58, 0x95,
+	0x01, 0x78, 0xb1, 0x3d, 0xb7, 0xa1, 0x80, 0xdd, 0x07, 0xa1, 0x6e, 0x4c, 0x15, 0x94, 0x60, 0xf1,
+	0x54, 0xa2, 0xc5, 0xaf, 0xc1, 0xf2, 0x1d, 0x2f, 0x08, 0xfa, 0x63, 0xdd, 0x98, 0x3a, 0xf0, 0xcb,
+	0x05, 0xe4, 0x1c, 0xfb, 0x65, 0xe6, 0xda, 0xaf, 0x06, 0x05, 0x25, 0x53, 0x5e, 0x10, 0xbe, 0x17,
+	0x7b, 0xe7, 0x1f, 0x4d, 0xb0, 0x9c, 0x67, 0xe9, 0x9d, 0x71, 0x6e, 0x4f, 0x3d, 0x4d, 0x6e, 0x4f,
+	0xde, 0x7e, 0x7a, 0xde, 0xf6, 0xe7, 0xd6, 0x82, 0xc5, 0xa7, 0xae, 0x05, 0x99, 0x27, 0x0c, 0x8c,
+	0xec, 0x4c, 0x2d, 0xf8, 0xa9, 0x09, 0x39, 0xdc, 0xba, 0xc7, 0xd3, 0xb1, 0x05, 0xa9, 0x76, 0xe0,
+	0xc9, 0x54, 0xd4, 0x0e, 0x3c, 0xea, 0xbf, 0xf5, 0x51, 0x97, 0x3c, 0x92, 0xfe, 0xcb, 0x16, 0xd4,
+	0x97, 0x1a, 0xc4, 0x0d, 0xc8, 0x81, 0x37, 0xe0, 0x89, 0x8f, 0x67, 0x44, 0x1d, 0x88, 0x6c, 0x58,
+	0x6a, 0xfb, 0x93, 0x11, 0x8d, 0x8d, 0x6e, 0x23, 0x18, 0x89, 0xec, 0xa8, 0xc1, 0xd0, 0x3b, 0xb0,
+	0xc4, 0x99, 0xfa, 0x41, 0xe8, 0xf9, 0xe7, 0xc2, 0xe7, 0xb4, 0xdc, 0x2c, 0xb5, 0x2b, 0xab, 0x84,
+	0x3c, 0x37, 0x6b, 0xbc, 0x9b, 0xb7, 0x60, 0x75, 0x86, 0xe4, 0x71, 0xd9, 0x35, 0xad, 0x66, 0xd7,
+	0xf7, 0x21, 0xcf, 0x1c, 0xbc, 0xe3, 0xf9, 0x5d, 0xca, 0x48, 0x95, 0x16, 0x8c, 0x54, 0xd7, 0x12,
+	0xa4, 0xdb, 0xe7, 0x63, 0xce, 0xb7, 0xb2, 0x73, 0x59, 0xd3, 0x91, 0xf1, 0x50, 0x2c, 0x66, 0x34,
+	0xd4, 0xfb, 0x1c, 0x37, 0x74, 0x99, 0x61, 0x96, 0x30, 0x7b, 0xb6, 0x3f, 0x32, 0x00, 0x98, 0xfc,
+	0x1f, 0x4c, 0x48, 0xc0, 0x1c, 0xb4, 0xe9, 0x0e, 0x89, 0x74, 0x50, 0xfa, 0xac, 0x46, 0x80, 0xa9,
+	0x47, 0x80, 0x50, 0x27, 0x15, 0xab, 0x53, 0x84, 0xec, 0x3d, 0xf7, 0x51, 0xab, 0xff, 0x43, 0x22,
+	0x2c, 0x2b, 0x97, 0x34, 0x5a, 0xa4, 0x93, 0x3a, 0xa2, 0xf6, 0xc4, 0x00, 0xa6, 0x5a, 0xb3, 0xee,
+	0x30, 0x9f, 0x49, 0x63, 0xf6, 0x6c, 0xdb, 0x00, 0xed, 0xc0, 0x93, 0x9a, 0xad, 0xc3, 0x62, 0xd5,
+	0x9b, 0x8c, 0x42, 0xb1, 0x79, 0xbe, 0xb0, 0xff, 0x6e, 0xd0, 0x6c, 0xc7, 0xa2, 0x8c, 0x75, 0x66,
+	0x89, 0x11, 0xb6, 0x0b, 0xf9, 0xc3, 0x31, 0xf1, 0xdd, 0xb0, 0xef, 0x8d, 0x84, 0xa1, 0x36, 0xf4,
+	0x86, 0x91, 0xf1, 0x1e, 0x8e, 0x71, 0x4c, 0x87, 0xf6, 0xa3, 0x16, 0x93, 0x87, 0xdb, 0xb5, 0x84,
+	0x16, 0x93, 0x11, 0x7c, 0x85, 0x7d, 0xe6, 0xcf, 0xd3, 0x90, 0x95, 0xf6, 0x60, 0xd9, 0x87, 0x3d,
+	0x46, 0x99, 0x29, 0x06, 0xa0, 0x32, 0x64, 0xee, 0x91, 0xf0, 0xd4, 0xeb, 0x26, 0x39, 0x06, 0xc7,
+	0x30, 0xc7, 0x10, 0x54, 0x68, 0x4f, 0xf5, 0x02, 0x76, 0xa0, 0x05, 0x9d, 0x27, 0xc6, 0x8a, 0x3d,
+	0xaa, 0x5e, 0x53, 0x61, 0xf5, 0x3e, 0x4a, 0x73, 0xec, 0xe8, 0x0b, 0x3b, 0xff, 0x37, 0x5d, 0xef,
+	0xb5, 0x5c, 0x88, 0x35, 0x16, 0x74, 0x13, 0x0a, 0xd5, 0x66, 0x2c, 0x61, 0x91, 0x49, 0x78, 0x21,
+	0xc1, 0xe6, 0xb1, 0x00, 0x95, 0x81, 0xf2, 0x3b, 0x0a, 0x7f, 0x66, 0x96, 0xdf, 0x99, 0xe1, 0x57,
+	0x18, 0xd0, 0xeb, 0xaa, 0xb3, 0xb1, 0x94, 0x34, 0x65, 0x80, 0x18, 0x8b, 0x55, 0xb7, 0xdc, 0xd3,
+	0xab, 0x2d, 0x6b, 0x6c, 0xa7, 0x5a, 0x1d, 0x15, 0x8f, 0xf5, 0xda, 0xbc, 0xa7, 0x7b, 0x6f, 0x31,
+	0x9f, 0xc4, 0x1d, 0xe3, 0xb1, 0x46, 0x6d, 0xb7, 0xa0, 0xc0, 0x0e, 0x21, 0x18, 0x7b, 0xa3, 0x80,
+	0x5c, 0x50, 0xa9, 0x44, 0x9c, 0x9a, 0x5a, 0x9c, 0x36, 0xdc, 0x20, 0x8c, 0xa3, 0x57, 0x2e, 0xed,
+	0x32, 0x20, 0x45, 0x5d, 0x45, 0xf6, 0xed, 0xbe, 0xaf, 0xf8, 0x9a, 0x5c, 0xda, 0xff, 0x4a, 0xd3,
+	0xea, 0x2c, 0xc8, 0x9e, 0xad, 0x53, 0xbe, 0x00, 0xf9, 0x9a, 0xef, 0x7b, 0x7e, 0xd5, 0xeb, 0x12,
+	0xa6, 0xe6, 0x32, 0x8e, 0x01, 0x34, 0x93, 0xb3, 0xc5, 0x3d, 0x12, 0x04, 0x6e, 0x8f, 0x88, 0xd6,
+	0x41, 0x83, 0xd1, 0x42, 0x53, 0x0f, 0x0e, 0x2a, 0x77, 0x09, 0x19, 0x13, 0x9f, 0x39, 0x55, 0x0e,
+	0x2b, 0x10, 0x74, 0x4b, 0xb3, 0xa0, 0xf0, 0x9a, 0x2b, 0x33, 0x7e, 0xcf, 0xd1, 0xc2, 0xf1, 0x35,
+	0x9b, 0xd3, 0x03, 0xf4, 0x86, 0x43, 0x77, 0xd4, 0xe5, 0x1d, 0x55, 0x36, 0xe1, 0x00, 0x15, 0x3c,
+	0xd6, 0xa8, 0xd1, 0x9b, 0x50, 0x60, 0xae, 0x24, 0x5e, 0x9f, 0x9b, 0x7d, 0xbd, 0x82, 0xc6, 0x2a,
+	0x2d, 0xda, 0x87, 0x95, 0xea, 0x60, 0x12, 0x84, 0xc4, 0x77, 0x08, 0x2d, 0xc8, 0x81, 0xf0, 0x1d,
+	0xad, 0x33, 0xd2, 0x29, 0xf0, 0x14, 0x07, 0xba, 0x09, 0xf9, 0xb8, 0x47, 0x07, 0xc6, 0xbe, 0xad,
+	0xb2, 0x47, 0xc8, 0x77, 0x27, 0xc4, 0x3f, 0xc7, 0x24, 0x98, 0x0c, 0x42, 0x1c, 0xb3, 0xa0, 0x9b,
+	0x00, 0x8a, 0xe7, 0x17, 0x98, 0x80, 0x2d, 0x55, 0xc0, 0xac, 0x23, 0x61, 0x98, 0xf2, 0xfe, 0x53,
+	0xd2, 0x39, 0x23, 0x3e, 0xbf, 0x9c, 0x2d, 0x25, 0x18, 0x4f, 0xc1, 0x63, 0x8d, 0xda, 0x7e, 0x87,
+	0xb5, 0xab, 0xbc, 0xc8, 0x45, 0x66, 0x79, 0x8d, 0x26, 0x48, 0x0a, 0x09, 0x8a, 0x06, 0x4b, 0xdb,
+	0x1b, 0x33, 0x87, 0x49, 0xb1, 0xe2, 0x28, 0x25, 0xad, 0xfd, 0xa2, 0x76, 0x10, 0xb4, 0xd6, 0x7c,
+	0x97, 0xa5, 0x65, 0x51, 0x6b, 0xd8, 0xc2, 0xbe, 0x03, 0xcb, 0xb4, 0x5f, 0x6a, 0xbb, 0x27, 0x03,
+	0x72, 0x14, 0x10, 0x9f, 0xde, 0xb2, 0xe8, 0xef, 0x28, 0x2e, 0x98, 0xd1, 0x9a, 0xe2, 0xee, 0xbb,
+	0x41, 0xf0, 0x81, 0xe7, 0x77, 0x45, 0x3f, 0x17, 0xad, 0xed, 0x9f, 0x19, 0x54, 0x4b, 0xd6, 0x28,
+	0x26, 0xd6, 0xab, 0xf9, 0x05, 0x57, 0x6b, 0x39, 0x53, 0x53, 0x2d, 0x67, 0x7c, 0x17, 0x4c, 0xab,
+	0x77, 0xc1, 0x2d, 0x96, 0xda, 0xf5, 0xca, 0xab, 0x40, 0xec, 0x5f, 0x99, 0xd4, 0x87, 0x47, 0x0f,
+	0xfa, 0xbd, 0xea, 0xa9, 0x3b, 0xea, 0x11, 0xb4, 0x1b, 0x69, 0x27, 0x2e, 0x6e, 0x6b, 0x7a, 0x57,
+	0xc1, 0x50, 0xb1, 0x05, 0xf9, 0x3e, 0xf6, 0x00, 0x38, 0xbb, 0xd2, 0x8d, 0xe8, 0xe9, 0x5b, 0x79,
+	0x05, 0x8b, 0x72, 0x85, 0x1e, 0xb5, 0x61, 0xa5, 0x3e, 0xea, 0x87, 0x7d, 0x77, 0x70, 0x8f, 0x0c,
+	0x4f, 0x88, 0x2f, 0x8b, 0xee, 0xb7, 0xe7, 0x49, 0x28, 0xeb, 0xe4, 0xbc, 0xf3, 0x9a, 0x92, 0xb1,
+	0x59, 0x81, 0xb5, 0x04, 0xb2, 0xa7, 0xba, 0xdb, 0xbe, 0x0c, 0xcb, 0xad, 0xd3, 0x49, 0xd8, 0xf5,
+	0x3e, 0x18, 0xf1, 0xc9, 0x04, 0x3d, 0x1b, 0xfa, 0x10, 0x1d, 0x99, 0x5c, 0xda, 0xbf, 0x4c, 0xc1,
+	0xa5, 0x56, 0xe7, 0x94, 0x74, 0x27, 0x03, 0x22, 0xa2, 0x3c, 0xf1, 0x74, 0xaf, 0xc1, 0xf2, 0xbe,
+	0xe7, 0x85, 0x41, 0xe8, 0xbb, 0xe3, 0x71, 0x7f, 0xd4, 0x63, 0x2f, 0xcd, 0x61, 0x1d, 0x48, 0x53,
+	0x83, 0x68, 0x9a, 0x99, 0x41, 0x53, 0xcc, 0xa0, 0x5a, 0x6a, 0x50, 0xd0, 0x58, 0xa5, 0xe5, 0x39,
+	0x29, 0x36, 0x95, 0xa8, 0xc6, 0xc5, 0x79, 0xa6, 0xc4, 0xfa, 0xe9, 0xdf, 0x9a, 0xda, 0xb1, 0x28,
+	0xc5, 0xcf, 0xe9, 0x89, 0x41, 0x21, 0xc0, 0x53, 0x16, 0xba, 0x0b, 0xab, 0xfc, 0x2e, 0xa1, 0x5c,
+	0x2e, 0x44, 0x66, 0xd5, 0x3a, 0x82, 0x19, 0x22, 0x3c, 0xcb, 0x47, 0xb5, 0x71, 0xc8, 0x80, 0x84,
+	0x44, 0x14, 0x3e, 0x91, 0x60, 0x35, 0x6d, 0x34, 0x02, 0xac, 0xd3, 0xdb, 0x83, 0x04, 0x6d, 0xd0,
+	0x2e, 0xa4, 0x69, 0xa0, 0x0a, 0xf7, 0xd6, 0x84, 0x69, 0x11, 0x2e, 0x9c, 0x9c, 0x11, 0xb3, 0x9b,
+	0x83, 0x1b, 0x9c, 0xd1, 0xae, 0xf9, 0xc4, 0x0d, 0xa4, 0xaf, 0x68, 0x30, 0xea, 0x2e, 0xda, 0xeb,
+	0x2f, 0x70, 0x17, 0x57, 0xaf, 0x1c, 0xd1, 0x58, 0xc6, 0x88, 0xc7, 0x32, 0xe8, 0x6d, 0xc8, 0x09,
+	0x1a, 0x39, 0x20, 0x7a, 0x5e, 0x3b, 0x06, 0xdd, 0xdb, 0xe4, 0xcd, 0x57, 0xb2, 0xd8, 0xbf, 0x4d,
+	0xd1, 0xa6, 0x8a, 0xbf, 0x90, 0xe6, 0x6b, 0x39, 0x19, 0x33, 0x94, 0xc9, 0xd8, 0x37, 0x6a, 0x36,
+	0x82, 0x2a, 0x51, 0x53, 0x9f, 0x63, 0xe6, 0x7c, 0x31, 0xa1, 0xd3, 0x62, 0xe3, 0xb6, 0xaf, 0xae,
+	0xa7, 0xff, 0xb5, 0xc1, 0x27, 0xfd, 0x62, 0xac, 0xcd, 0x54, 0x90, 0xc5, 0x6b, 0x66, 0xac, 0x4d,
+	0x6f, 0x9c, 0x9c, 0x42, 0x53, 0x8d, 0x83, 0x36, 0x31, 0x14, 0x14, 0x64, 0x82, 0x6a, 0xaf, 0xea,
+	0xaa, 0x5d, 0x99, 0xb3, 0x7b, 0x55, 0xbd, 0x8f, 0x4d, 0x36, 0x0e, 0x79, 0x26, 0x3e, 0xf4, 0x0d,
+	0x9a, 0x60, 0xd0, 0x53, 0x75, 0x9e, 0xe4, 0x54, 0x9d, 0xff, 0xec, 0xa9, 0x3a, 0xc9, 0xa7, 0xfa,
+	0x07, 0x63, 0xba, 0x7d, 0x44, 0xaf, 0x41, 0x4e, 0x10, 0x4b, 0x3d, 0xd7, 0x12, 0x04, 0xc9, 0x1c,
+	0x23, 0x49, 0x29, 0x5b, 0x55, 0xb2, 0x99, 0xb3, 0x6c, 0x55, 0x9d, 0x4d, 0x92, 0xa2, 0x37, 0xd8,
+	0x54, 0x43, 0xf0, 0x71, 0x6f, 0x58, 0x4f, 0xba, 0x2e, 0x0a, 0xc6, 0x98, 0xd8, 0xfe, 0x89, 0x01,
+	0x05, 0xa1, 0x3a, 0x73, 0xc8, 0x37, 0x99, 0xde, 0xdc, 0xad, 0x0c, 0xe1, 0x56, 0x51, 0xc4, 0x09,
+	0x8c, 0xd6, 0xf4, 0x45, 0xe4, 0x68, 0x8f, 0x2b, 0xc1, 0x79, 0xb9, 0xf2, 0x45, 0x25, 0x5a, 0x05,
+	0x4a, 0x63, 0x8e, 0x19, 0xec, 0x5f, 0x18, 0xb0, 0x21, 0xda, 0x0b, 0xa1, 0x8f, 0xbc, 0x13, 0xbe,
+	0x04, 0x2b, 0xcd, 0xc9, 0xf0, 0xf0, 0x41, 0x2c, 0x9c, 0x47, 0xcb, 0x14, 0x94, 0x76, 0x02, 0x0c,
+	0x12, 0xe9, 0xcf, 0xbb, 0x3d, 0x1d, 0x88, 0x4a, 0x60, 0x49, 0xbe, 0x68, 0x0a, 0xca, 0x5b, 0xbf,
+	0x19, 0xb8, 0xfd, 0x23, 0x93, 0x4f, 0xde, 0x2f, 0x0c, 0xd7, 0xaf, 0xf7, 0xf8, 0xf6, 0x63, 0x53,
+	0x7c, 0x47, 0xa2, 0xa1, 0x77, 0x33, 0xca, 0x38, 0xdc, 0x35, 0xb6, 0x67, 0x7c, 0x8c, 0xc5, 0x1e,
+	0x23, 0xd1, 0x63, 0x8f, 0xdb, 0xfe, 0x66, 0x14, 0xba, 0xe6, 0x45, 0xfc, 0x73, 0x63, 0xb7, 0x05,
+	0x05, 0x45, 0x78, 0x42, 0xe7, 0x59, 0xd6, 0x63, 0x77, 0xee, 0x27, 0x12, 0x25, 0x78, 0x99, 0xd0,
+	0x0b, 0x13, 0xc2, 0xe3, 0x84, 0x26, 0x65, 0x84, 0xbf, 0xa5, 0xf4, 0xcb, 0x58, 0xa2, 0xe7, 0xdc,
+	0xd2, 0x42, 0x2f, 0xb1, 0x8a, 0xc4, 0x68, 0x79, 0x5d, 0x56, 0x83, 0x75, 0x37, 0xca, 0x8a, 0x62,
+	0xc6, 0xb4, 0x96, 0x90, 0x0b, 0xe5, 0xd5, 0x42, 0xe6, 0xcf, 0xd7, 0xe3, 0x03, 0x15, 0xbd, 0xec,
+	0x7a, 0xd2, 0x31, 0x48, 0xcf, 0x89, 0x0e, 0x7f, 0x37, 0x2a, 0xac, 0xa2, 0x87, 0x5d, 0x4b, 0x28,
+	0xa7, 0xf2, 0x65, 0xb2, 0x04, 0xdf, 0x90, 0x5f, 0x0a, 0x79, 0xe3, 0xa1, 0xf5, 0x86, 0x72, 0x6c,
+	0xa0, 0x7d, 0x2d, 0x6c, 0x0a, 0xff, 0x14, 0xbd, 0x98, 0xb8, 0xca, 0x66, 0x19, 0xf7, 0xd6, 0x74,
+	0x67, 0xa9, 0x53, 0xe1, 0x04, 0x4e, 0x54, 0x9b, 0xba, 0x65, 0x8a, 0xa9, 0xc0, 0x63, 0x9b, 0xd4,
+	0xa9, 0xbb, 0xe9, 0x65, 0xc8, 0x34, 0xc9, 0xa3, 0xb0, 0xde, 0x65, 0x73, 0x81, 0x34, 0x16, 0x2b,
+	0xfb, 0x9f, 0x59, 0xb0, 0xe4, 0x3e, 0xa2, 0x11, 0x7b, 0x34, 0x50, 0x37, 0xd4, 0x81, 0xba, 0xf4,
+	0x00, 0x53, 0xf1, 0x00, 0x29, 0x56, 0xde, 0x3e, 0xc5, 0x0a, 0x1d, 0x42, 0x81, 0x3f, 0xed, 0x9f,
+	0xdf, 0x25, 0xe7, 0xc5, 0x34, 0x8b, 0x96, 0x57, 0x93, 0x8c, 0x17, 0x4d, 0xce, 0x15, 0x7a, 0x7e,
+	0x7d, 0x53, 0x25, 0x24, 0x7d, 0xa5, 0xfc, 0xef, 0x9f, 0x4d, 0x17, 0xac, 0xa9, 0x9e, 0x5b, 0x36,
+	0x92, 0x3b, 0x17, 0x6e, 0x75, 0x9a, 0x49, 0x4d, 0x15, 0x33, 0x12, 0x51, 0x5d, 0x2d, 0x4b, 0xfc,
+	0xff, 0x0d, 0xaf, 0x5c, 0x28, 0x3e, 0xa2, 0xe6, 0x76, 0x8c, 0xb9, 0xd5, 0x10, 0x80, 0x27, 0x0e,
+	0x01, 0x25, 0x48, 0x0b, 0x5f, 0x28, 0x48, 0x97, 0x9e, 0x22, 0x48, 0xa7, 0x52, 0xca, 0xf2, 0x53,
+	0xa7, 0x94, 0x99, 0x78, 0x59, 0xf9, 0x22, 0xf1, 0xb2, 0x79, 0x13, 0xac, 0x69, 0x87, 0x4c, 0xfe,
+	0x72, 0x9a, 0xfc, 0x99, 0x66, 0xf3, 0x7d, 0xd8, 0x48, 0x3c, 0xe5, 0xa7, 0x4c, 0xcf, 0xda, 0xb0,
+	0x50, 0x11, 0xbf, 0xc7, 0xbe, 0xb1, 0xcf, 0xa9, 0x25, 0x8f, 0x53, 0xce, 0xae, 0x43, 0x41, 0xfd,
+	0x3c, 0xff, 0x25, 0xbe, 0x42, 0xda, 0xbf, 0x31, 0x61, 0x3d, 0x69, 0x2e, 0x78, 0xc1, 0xf4, 0xf9,
+	0xfe, 0xcc, 0xdf, 0x1c, 0xca, 0x8f, 0x9b, 0x32, 0xea, 0x7f, 0x77, 0x98, 0xe9, 0x09, 0x9e, 0xcd,
+	0x9f, 0x1e, 0xda, 0x8f, 0xff, 0xd3, 0xc3, 0x45, 0xad, 0xb5, 0x62, 0x51, 0xc5, 0xd6, 0xa5, 0xef,
+	0x01, 0x1c, 0x8d, 0xbb, 0x6e, 0xc8, 0x67, 0x31, 0x57, 0x60, 0x4d, 0xfb, 0xfe, 0xc8, 0x51, 0xd6,
+	0x02, 0xda, 0x80, 0x55, 0xf9, 0xcd, 0xb1, 0xd1, 0x6a, 0x0a, 0xb0, 0x81, 0xd6, 0xe0, 0x12, 0x75,
+	0x47, 0xa6, 0x8f, 0x00, 0x9a, 0x68, 0x19, 0xf2, 0xed, 0xd6, 0xa1, 0x58, 0xa6, 0x4a, 0x65, 0xc8,
+	0x47, 0xff, 0x59, 0x41, 0x97, 0xa0, 0xd0, 0xf4, 0xfc, 0xa1, 0x3b, 0x60, 0x4b, 0x6b, 0x01, 0x59,
+	0xb0, 0xd4, 0xee, 0x0f, 0x89, 0x37, 0x09, 0x39, 0xc4, 0x28, 0xfd, 0xce, 0x04, 0x88, 0xa7, 0xeb,
+	0x68, 0x05, 0xa0, 0xdd, 0x3a, 0x3c, 0x3e, 0xba, 0xef, 0x54, 0xda, 0x35, 0x6b, 0x01, 0x01, 0x64,
+	0x2a, 0xf7, 0xef, 0xd7, 0x9a, 0x8e, 0x65, 0xa0, 0x1c, 0xa4, 0x71, 0xad, 0xe2, 0x58, 0x26, 0x5a,
+	0x82, 0x5c, 0x1b, 0x1f, 0x35, 0xab, 0x94, 0x26, 0x45, 0x85, 0xde, 0xa9, 0xb5, 0x8f, 0x23, 0x48,
+	0x1a, 0x15, 0x20, 0x5b, 0x3d, 0x6c, 0x36, 0x6b, 0xd5, 0xb6, 0xb5, 0x48, 0x45, 0x8a, 0xc5, 0x31,
+	0x3e, 0xb4, 0x32, 0x68, 0x15, 0x96, 0x1b, 0x87, 0x77, 0x8e, 0x0f, 0x6a, 0x15, 0xdc, 0xde, 0xaf,
+	0x55, 0xda, 0x56, 0x96, 0x4a, 0xa8, 0x36, 0x15, 0x48, 0x8e, 0x42, 0x1c, 0x15, 0x92, 0x47, 0x08,
+	0x56, 0xaa, 0x07, 0xb5, 0xea, 0xdd, 0xe3, 0x83, 0xca, 0xdd, 0x5a, 0xed, 0x7e, 0x0d, 0x5b, 0x40,
+	0x0d, 0x48, 0xdf, 0x5c, 0x6d, 0x1c, 0xb5, 0xda, 0x35, 0x7c, 0xec, 0xd4, 0xda, 0x95, 0x7a, 0xa3,
+	0x65, 0x15, 0x28, 0x31, 0x45, 0xb4, 0x0e, 0x2a, 0xd8, 0x39, 0xae, 0x37, 0x6f, 0x1f, 0x5a, 0x4b,
+	0x4c, 0x40, 0xf3, 0xb8, 0xd2, 0x68, 0x1c, 0x52, 0x2d, 0x8f, 0xeb, 0x8e, 0xb5, 0x4c, 0x0d, 0xad,
+	0x0a, 0x68, 0xb5, 0xa9, 0xfe, 0x2b, 0xcc, 0xd0, 0xcc, 0x02, 0xc7, 0xd5, 0xe6, 0x71, 0xa3, 0xb2,
+	0x5f, 0x6b, 0x58, 0x97, 0x4a, 0x4d, 0x80, 0xf8, 0xa3, 0x29, 0xdd, 0x15, 0x3d, 0x0b, 0x0e, 0xb1,
+	0x16, 0xa8, 0x49, 0xea, 0xa3, 0x90, 0xf8, 0x23, 0x77, 0x60, 0x19, 0xd4, 0xf0, 0xec, 0x64, 0xa3,
+	0x53, 0x5a, 0x15, 0xdf, 0x9f, 0x31, 0xf9, 0x3e, 0xe9, 0x84, 0xa4, 0x6b, 0xa5, 0x4a, 0x25, 0xc8,
+	0x47, 0xdf, 0x16, 0x29, 0x7b, 0x8b, 0x84, 0x6c, 0x65, 0x2d, 0x50, 0x76, 0x3e, 0x29, 0xe2, 0x00,
+	0xa3, 0xf4, 0xa1, 0x09, 0x48, 0x66, 0x76, 0xc5, 0x81, 0xe8, 0x69, 0xf5, 0x3b, 0x67, 0xaa, 0xdf,
+	0x28, 0x9f, 0xbd, 0x22, 0xbf, 0xd9, 0x80, 0x55, 0x67, 0x06, 0x6c, 0xa2, 0xcb, 0xf4, 0x5a, 0xdb,
+	0x9b, 0x86, 0xa7, 0xe8, 0xdb, 0xef, 0x90, 0x30, 0x72, 0xc7, 0x34, 0x7a, 0x6e, 0x26, 0x7d, 0x09,
+	0xd4, 0x22, 0x35, 0x6a, 0x8b, 0x70, 0x67, 0x12, 0xb0, 0x0c, 0x2a, 0xc2, 0xba, 0x7e, 0xf5, 0x11,
+	0x98, 0x2c, 0xba, 0x0a, 0xcf, 0xb7, 0x48, 0x38, 0x5b, 0x3b, 0x05, 0x41, 0x0e, 0x6d, 0xc2, 0x65,
+	0x41, 0x10, 0x25, 0x5f, 0x81, 0xcb, 0x53, 0x13, 0xf2, 0x67, 0x61, 0x35, 0x0b, 0x4a, 0x1f, 0x19,
+	0xb0, 0xac, 0xd5, 0x76, 0x7a, 0x72, 0x12, 0x20, 0x7a, 0x7e, 0x6b, 0x81, 0xea, 0x2f, 0x81, 0xda,
+	0x1c, 0xd5, 0x32, 0xd0, 0xb7, 0xe0, 0xff, 0x67, 0x50, 0x32, 0x45, 0x63, 0xd2, 0x21, 0xfd, 0x87,
+	0xa4, 0x6b, 0x99, 0xe8, 0x79, 0xb8, 0x32, 0x43, 0x76, 0xdb, 0xed, 0x0f, 0xe8, 0x41, 0xaa, 0xef,
+	0xc4, 0x93, 0xd1, 0x88, 0x0a, 0x4e, 0x97, 0x4e, 0x92, 0xba, 0x0b, 0x6a, 0x1a, 0x0d, 0x1a, 0xeb,
+	0x38, 0x8d, 0x91, 0x92, 0x8c, 0x19, 0x4c, 0x2b, 0xf4, 0xc6, 0x63, 0xaa, 0x55, 0xe9, 0x14, 0xac,
+	0xe9, 0xc1, 0x39, 0x75, 0x89, 0x4a, 0xb7, 0x2b, 0xd2, 0x8f, 0xb5, 0x40, 0xad, 0x86, 0xc9, 0xd0,
+	0x7b, 0x48, 0x24, 0xc8, 0xa0, 0xb1, 0xd5, 0x0a, 0x5d, 0x3f, 0x94, 0x10, 0x93, 0x9e, 0x38, 0x95,
+	0x2a, 0x01, 0x29, 0x2a, 0xe5, 0x6e, 0x7f, 0x30, 0x78, 0xcf, 0x1b, 0x9e, 0xf4, 0x89, 0x95, 0x2e,
+	0xbd, 0xa5, 0x0d, 0x9c, 0x29, 0x9a, 0x16, 0x1c, 0x0e, 0xb1, 0x16, 0x68, 0x0e, 0x72, 0x9a, 0x72,
+	0x69, 0xd0, 0x65, 0x35, 0x5a, 0x9a, 0xfb, 0xb5, 0x4f, 0xff, 0xba, 0xb5, 0xf0, 0xc9, 0xe7, 0x5b,
+	0xc6, 0xa7, 0x9f, 0x6f, 0x19, 0x7f, 0xf9, 0x7c, 0xcb, 0x78, 0x6f, 0x57, 0xf9, 0xff, 0xeb, 0xd0,
+	0x0d, 0xfd, 0xfe, 0x23, 0xcf, 0xef, 0xf7, 0xfa, 0x23, 0xb9, 0x18, 0x91, 0x1b, 0xe3, 0xb3, 0xde,
+	0x8d, 0xf1, 0xc9, 0x8d, 0x38, 0xa5, 0x9e, 0x64, 0xd8, 0x9f, 0x5f, 0x77, 0xff, 0x1d, 0x00, 0x00,
+	0xff, 0xff, 0x94, 0x36, 0x4a, 0x8d, 0x5b, 0x2b, 0x00, 0x00,
 }
 
 func (m *CNStore) Marshal() (dAtA []byte, err error) {
@@ -6331,7 +6339,7 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i = encodeVarintLogservice(dAtA, i, uint64(size))
 	}
 	i--
-	dAtA[i] = 0x6a
+	dAtA[i] = 0x72
 	{
 		size, err := m.ClusterInfo.MarshalToSizedBuffer(dAtA[:i])
 		if err != nil {
@@ -6341,7 +6349,7 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i = encodeVarintLogservice(dAtA, i, uint64(size))
 	}
 	i--
-	dAtA[i] = 0x62
+	dAtA[i] = 0x6a
 	{
 		size, err := m.LogState.MarshalToSizedBuffer(dAtA[:i])
 		if err != nil {
@@ -6351,7 +6359,7 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i = encodeVarintLogservice(dAtA, i, uint64(size))
 	}
 	i--
-	dAtA[i] = 0x5a
+	dAtA[i] = 0x62
 	{
 		size, err := m.DNState.MarshalToSizedBuffer(dAtA[:i])
 		if err != nil {
@@ -6361,7 +6369,7 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i = encodeVarintLogservice(dAtA, i, uint64(size))
 	}
 	i--
-	dAtA[i] = 0x52
+	dAtA[i] = 0x5a
 	{
 		size, err := m.CNState.MarshalToSizedBuffer(dAtA[:i])
 		if err != nil {
@@ -6371,7 +6379,7 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i = encodeVarintLogservice(dAtA, i, uint64(size))
 	}
 	i--
-	dAtA[i] = 0x4a
+	dAtA[i] = 0x52
 	if len(m.LogShards) > 0 {
 		for k := range m.LogShards {
 			v := m.LogShards[k]
@@ -6386,7 +6394,7 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 			dAtA[i] = 0xa
 			i = encodeVarintLogservice(dAtA, i, uint64(baseI-i))
 			i--
-			dAtA[i] = 0x42
+			dAtA[i] = 0x4a
 		}
 	}
 	if len(m.ScheduleCommands) > 0 {
@@ -6410,23 +6418,23 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 			dAtA[i] = 0xa
 			i = encodeVarintLogservice(dAtA, i, uint64(baseI-i))
 			i--
-			dAtA[i] = 0x3a
+			dAtA[i] = 0x42
 		}
 	}
 	if m.TaskSchedulerState != 0 {
 		i = encodeVarintLogservice(dAtA, i, uint64(m.TaskSchedulerState))
 		i--
-		dAtA[i] = 0x30
+		dAtA[i] = 0x38
 	}
 	if m.State != 0 {
 		i = encodeVarintLogservice(dAtA, i, uint64(m.State))
 		i--
-		dAtA[i] = 0x28
+		dAtA[i] = 0x30
 	}
 	if m.Term != 0 {
 		i = encodeVarintLogservice(dAtA, i, uint64(m.Term))
 		i--
-		dAtA[i] = 0x20
+		dAtA[i] = 0x28
 	}
 	if len(m.NextIDByKey) > 0 {
 		for k := range m.NextIDByKey {
@@ -6442,17 +6450,22 @@ func (m *HAKeeperRSMState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 			dAtA[i] = 0xa
 			i = encodeVarintLogservice(dAtA, i, uint64(baseI-i))
 			i--
-			dAtA[i] = 0x1a
+			dAtA[i] = 0x22
 		}
 	}
 	if m.NextID != 0 {
 		i = encodeVarintLogservice(dAtA, i, uint64(m.NextID))
 		i--
-		dAtA[i] = 0x10
+		dAtA[i] = 0x18
 	}
 	if m.Tick != 0 {
 		i = encodeVarintLogservice(dAtA, i, uint64(m.Tick))
 		i--
+		dAtA[i] = 0x10
+	}
+	if m.Index != 0 {
+		i = encodeVarintLogservice(dAtA, i, uint64(m.Index))
+		i--
 		dAtA[i] = 0x8
 	}
 	return len(dAtA) - i, nil
@@ -7693,6 +7706,9 @@ func (m *HAKeeperRSMState) Size() (n int) {
 	}
 	var l int
 	_ = l
+	if m.Index != 0 {
+		n += 1 + sovLogservice(uint64(m.Index))
+	}
 	if m.Tick != 0 {
 		n += 1 + sovLogservice(uint64(m.Tick))
 	}
@@ -15202,6 +15218,25 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 		}
 		switch fieldNum {
 		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType)
+			}
+			m.Index = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowLogservice
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Index |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		case 2:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field Tick", wireType)
 			}
@@ -15220,7 +15255,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
-		case 2:
+		case 3:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field NextID", wireType)
 			}
@@ -15239,7 +15274,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
-		case 3:
+		case 4:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field NextIDByKey", wireType)
 			}
@@ -15352,7 +15387,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 			}
 			m.NextIDByKey[mapkey] = mapvalue
 			iNdEx = postIndex
-		case 4:
+		case 5:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field Term", wireType)
 			}
@@ -15371,7 +15406,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
-		case 5:
+		case 6:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field State", wireType)
 			}
@@ -15390,7 +15425,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
-		case 6:
+		case 7:
 			if wireType != 0 {
 				return fmt.Errorf("proto: wrong wireType = %d for field TaskSchedulerState", wireType)
 			}
@@ -15409,7 +15444,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 					break
 				}
 			}
-		case 7:
+		case 8:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field ScheduleCommands", wireType)
 			}
@@ -15538,7 +15573,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 			}
 			m.ScheduleCommands[mapkey] = *mapvalue
 			iNdEx = postIndex
-		case 8:
+		case 9:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field LogShards", wireType)
 			}
@@ -15651,7 +15686,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 			}
 			m.LogShards[mapkey] = mapvalue
 			iNdEx = postIndex
-		case 9:
+		case 10:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field CNState", wireType)
 			}
@@ -15684,7 +15719,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 				return err
 			}
 			iNdEx = postIndex
-		case 10:
+		case 11:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field DNState", wireType)
 			}
@@ -15717,7 +15752,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 				return err
 			}
 			iNdEx = postIndex
-		case 11:
+		case 12:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field LogState", wireType)
 			}
@@ -15750,7 +15785,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 				return err
 			}
 			iNdEx = postIndex
-		case 12:
+		case 13:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field ClusterInfo", wireType)
 			}
@@ -15783,7 +15818,7 @@ func (m *HAKeeperRSMState) Unmarshal(dAtA []byte) error {
 				return err
 			}
 			iNdEx = postIndex
-		case 13:
+		case 14:
 			if wireType != 2 {
 				return fmt.Errorf("proto: wrong wireType = %d for field TaskTableUser", wireType)
 			}
diff --git a/proto/logservice.proto b/proto/logservice.proto
index ba806a98a..f75341cc2 100644
--- a/proto/logservice.proto
+++ b/proto/logservice.proto
@@ -515,21 +515,22 @@ message CheckerState {
 
 // HAKeeperRSMState contains state maintained by HAKeeper's RSM.
 message HAKeeperRSMState {
-  uint64 Tick                                = 1;
+  uint64 Index                               = 1;
+  uint64 Tick                                = 2;
   // NextID is a shared, global ID.
-  uint64 NextID                              = 2;
+  uint64 NextID                              = 3;
   // NextIDByKey is IDs isolated by keys.
-  map<string, uint64> NextIDByKey            = 3;
-  uint64 Term                                = 4;
-  HAKeeperState State                        = 5;
-  TaskSchedulerState TaskSchedulerState      = 6;
-  map<string, CommandBatch> ScheduleCommands = 7 [(gogoproto.nullable) = false];
-  map<string, uint64> LogShards = 8;
-  CNState CNState               = 9  [(gogoproto.nullable) = false];
-  DNState DNState               = 10 [(gogoproto.nullable) = false];
-  LogState LogState             = 11 [(gogoproto.nullable) = false];
-  ClusterInfo ClusterInfo       = 12 [(gogoproto.nullable) = false];
-  TaskTableUser TaskTableUser   = 13 [(gogoproto.nullable) = false];
+  map<string, uint64> NextIDByKey            = 4;
+  uint64 Term                                = 5;
+  HAKeeperState State                        = 6;
+  TaskSchedulerState TaskSchedulerState      = 7;
+  map<string, CommandBatch> ScheduleCommands = 8 [(gogoproto.nullable) = false];
+  map<string, uint64> LogShards = 9;
+  CNState CNState               = 10  [(gogoproto.nullable) = false];
+  DNState DNState               = 11 [(gogoproto.nullable) = false];
+  LogState LogState             = 12 [(gogoproto.nullable) = false];
+  ClusterInfo ClusterInfo       = 13 [(gogoproto.nullable) = false];
+  TaskTableUser TaskTableUser   = 14 [(gogoproto.nullable) = false];
 }
 
 // ReplicaInfo contains details of a replica


Test patch:
diff --git a/pkg/logservice/truncation_test.go b/pkg/logservice/truncation_test.go
index f9bd12a3c..334e01f7f 100644
--- a/pkg/logservice/truncation_test.go
+++ b/pkg/logservice/truncation_test.go
@@ -19,7 +19,9 @@ import (
 	"testing"
 	"time"
 
+	"github.com/lni/goutils/leaktest"
 	"github.com/matrixorigin/matrixone/pkg/common/moerr"
+	"github.com/matrixorigin/matrixone/pkg/hakeeper"
 	pb "github.com/matrixorigin/matrixone/pkg/pb/logservice"
 	"github.com/stretchr/testify/assert"
 )
@@ -200,3 +202,52 @@ func TestTruncationImportSnapshot(t *testing.T) {
 	}
 	runServiceTest(t, false, true, fn)
 }
+
+func TestHAKeeperTruncation(t *testing.T) {
+	defer leaktest.AfterTest(t)()
+
+	fn := func(t *testing.T, s *Service) {
+		ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
+		defer cancel()
+		req := pb.Request{
+			Method: pb.LOG_HEARTBEAT,
+			LogHeartbeat: &pb.LogStoreHeartbeat{
+				UUID: "uuid1",
+			},
+		}
+		for i := 0; i < 10; i++ {
+			resp := s.handleLogHeartbeat(ctx, req)
+			assert.Equal(t, uint32(moerr.Ok), resp.ErrorCode)
+		}
+		v, err := s.store.read(ctx, hakeeper.DefaultHAKeeperShardID, &hakeeper.IndexQuery{})
+		assert.NoError(t, err)
+		assert.Equal(t, uint64(12), v.(uint64))
+
+		err = s.store.processHAKeeperTruncation(ctx)
+		assert.NoError(t, err)
+
+		checkTick := time.NewTicker(time.Millisecond * 100)
+		defer checkTick.Stop()
+		for {
+			select {
+			case <-ctx.Done():
+				panic("failed to truncate logs")
+			case <-checkTick.C:
+				rs, err := s.store.nh.QueryRaftLog(hakeeper.DefaultHAKeeperShardID,
+					1, 100, 1024*100)
+				assert.NoError(t, err)
+				select {
+				case v := <-rs.ResultC():
+					// We cannot fetch the logs because they are truncated.
+					if v.RequestOutOfRange() {
+						return
+					}
+				case <-ctx.Done():
+					panic("failed to truncate logs")
+				}
+
+			}
+		}
+	}
+	runServiceTest(t, true, true, fn)
+}