From 633d8f5d3ca38964cdb245bf8e9cf42d1ae9ad4b Mon Sep 17 00:00:00 2001 From: Tobias Schottdorf Date: Tue, 9 Jan 2018 11:28:37 -0500 Subject: [PATCH] storage: recompute and adjust stats via consistency checker A number of bugs in our MVCCStats logic has been fixed recently (see for example \#20996) and others are still present (#20554). For both, and also potentially for future bugs or deliberate adjustments of the computations, we need a mechanism to recompute the stats in order to purge incorrect numbers from the system over time. Such a mechanism is introduced here. It consists of two main components: - A new RPC `AdjustStats`, which applies to a single Range and computes the difference between the persisted stats and the recomputed ones; it can "inject" a suitable delta into the stats (thus fixing the divergence) or do a "dry run". - A trigger in the consistency checker that runs on the coordinating node (the lease holder). The consistency checker already recomputes the stats, and it can compare them against the persisted stats and judge whether there is a divergence. If there is one, naively one may hope to just insert the newly computed diff into the range, but this is not ideal due to concerns about double application and racing consistency checks. Instead, use `AdjustStats` (which, of course, was introduced for this purpose) which strikes a balance between efficiency and correctness. Updates #20554. Release note (general change): added a mechanism to recompute range stats on demand. --- pkg/cli/debug.go | 2 +- pkg/roachpb/api.go | 10 + pkg/roachpb/api.pb.go | 2168 +++++++++++++-------- pkg/roachpb/api.proto | 31 + pkg/roachpb/batch_generated.go | 12 +- pkg/roachpb/method.go | 2 + pkg/roachpb/method_string.go | 4 +- pkg/storage/api.pb.go | 109 +- pkg/storage/api.proto | 3 + pkg/storage/batcheval/cmd_adjust_stats.go | 109 ++ pkg/storage/client_test.go | 3 +- pkg/storage/consistency_queue_test.go | 161 ++ pkg/storage/helpers_test.go | 3 +- pkg/storage/{ => rditer}/stats.go | 5 +- pkg/storage/replica_command.go | 5 +- pkg/storage/replica_consistency.go | 35 +- pkg/storage/replica_test.go | 86 + pkg/storage/spanset/batch.go | 14 + pkg/storage/store_test.go | 3 +- 19 files changed, 1903 insertions(+), 862 deletions(-) create mode 100644 pkg/storage/batcheval/cmd_adjust_stats.go rename pkg/storage/{ => rditer}/stats.go (90%) diff --git a/pkg/cli/debug.go b/pkg/cli/debug.go index f0ee3df8cf3b..5ca3c8027b4e 100644 --- a/pkg/cli/debug.go +++ b/pkg/cli/debug.go @@ -661,7 +661,7 @@ func runDebugCheckStoreDescriptors(ctx context.Context, db *engine.RocksDB) erro if err != nil { return false, err } - ms, err := storage.ComputeStatsForRange(&desc, db, claimedMS.LastUpdateNanos) + ms, err := rditer.ComputeStatsForRange(&desc, db, claimedMS.LastUpdateNanos) if err != nil { return false, err } diff --git a/pkg/roachpb/api.go b/pkg/roachpb/api.go index c8a2603c4f35..15453a45d8da 100644 --- a/pkg/roachpb/api.go +++ b/pkg/roachpb/api.go @@ -512,6 +512,9 @@ func (*AdminScatterRequest) Method() Method { return AdminScatter } // Method implements the Request interface. func (*AddSSTableRequest) Method() Method { return AddSSTable } +// Method implements the Request interface. +func (*AdjustStatsRequest) Method() Method { return AdjustStats } + // ShallowCopy implements the Request interface. func (gr *GetRequest) ShallowCopy() Request { shallowCopy := *gr @@ -734,6 +737,12 @@ func (r *AddSSTableRequest) ShallowCopy() Request { return &shallowCopy } +// ShallowCopy implements the Request interface. +func (r *AdjustStatsRequest) ShallowCopy() Request { + shallowCopy := *r + return &shallowCopy +} + // NewGet returns a Request initialized to get the value at key. func NewGet(key Key) Request { return &GetRequest{ @@ -954,6 +963,7 @@ func (*TransferLeaseRequest) flags() int { // lease holder. return isWrite | isAlone | skipLeaseCheck } +func (*AdjustStatsRequest) flags() int { return isWrite | isAlone } func (*ComputeChecksumRequest) flags() int { return isWrite | isRange } func (*DeprecatedVerifyChecksumRequest) flags() int { return isWrite } func (*CheckConsistencyRequest) flags() int { return isAdmin | isRange } diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index 7acfd5b8e06d..2a92fcb75382 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -40,6 +40,8 @@ ReverseScanResponse CheckConsistencyRequest CheckConsistencyResponse + AdjustStatsRequest + AdjustStatsResponse BeginTransactionRequest BeginTransactionResponse EndTransactionRequest @@ -764,6 +766,42 @@ func (m *CheckConsistencyResponse) String() string { return proto.Com func (*CheckConsistencyResponse) ProtoMessage() {} func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{24} } +// An AdjustStatsRequest triggers a stats recomputation on the Range addressed by +// the request. +// +// Since this request targets a specific Range, the start key must equal the +// start key of the target Range. +// +// The stats recomputation touches essentially the whole range, but the command +// avoids having to block other commands by taking care to not interleave +// with splits, and by using the commutativity of stats updates. As a result, +// it is safe to invoke at any time, including repeatedly, though it should be +// used conservatively due to performing a full scan of the Range. +type AdjustStatsRequest struct { + Span `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + ComputationEndKey Key `protobuf:"bytes,2,opt,name=computation_end_key,json=computationEndKey,proto3,casttype=Key" json:"computation_end_key,omitempty"` + // When dry_run is true, the stats delta is computed, but no stats adjustment + // is performed. + DryRun bool `protobuf:"varint,3,opt,name=dry_run,json=dryRun,proto3" json:"dry_run,omitempty"` +} + +func (m *AdjustStatsRequest) Reset() { *m = AdjustStatsRequest{} } +func (m *AdjustStatsRequest) String() string { return proto.CompactTextString(m) } +func (*AdjustStatsRequest) ProtoMessage() {} +func (*AdjustStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{25} } + +// An AdjustStatsResponse is the response to an AdjustStatsRequest. +type AdjustStatsResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // added_delta is the adjustment made to the range's stats, i.e. `new_stats = old_stats + added_delta`. + AddedDelta cockroach_storage_engine_enginepb.MVCCNetworkStats `protobuf:"bytes,2,opt,name=added_delta,json=addedDelta" json:"added_delta"` +} + +func (m *AdjustStatsResponse) Reset() { *m = AdjustStatsResponse{} } +func (m *AdjustStatsResponse) String() string { return proto.CompactTextString(m) } +func (*AdjustStatsResponse) ProtoMessage() {} +func (*AdjustStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{26} } + // A BeginTransactionRequest is the argument to the BeginTransaction() method. type BeginTransactionRequest struct { Span `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -772,7 +810,7 @@ type BeginTransactionRequest struct { func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BeginTransactionRequest) ProtoMessage() {} -func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{25} } +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{27} } // A BeginTransactionResponse is the return value from the BeginTransaction() method. type BeginTransactionResponse struct { @@ -782,7 +820,7 @@ type BeginTransactionResponse struct { func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} } func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } func (*BeginTransactionResponse) ProtoMessage() {} -func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{26} } +func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{28} } // An EndTransactionRequest is the argument to the EndTransaction() method. It // specifies whether to commit or roll back an extant transaction. @@ -816,7 +854,7 @@ type EndTransactionRequest struct { func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } func (m *EndTransactionRequest) String() string { return proto.CompactTextString(m) } func (*EndTransactionRequest) ProtoMessage() {} -func (*EndTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{27} } +func (*EndTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{29} } // An EndTransactionResponse is the return value from the // EndTransaction() method. The final transaction record is returned @@ -836,7 +874,7 @@ type EndTransactionResponse struct { func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} } func (m *EndTransactionResponse) String() string { return proto.CompactTextString(m) } func (*EndTransactionResponse) ProtoMessage() {} -func (*EndTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{28} } +func (*EndTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{30} } // An AdminSplitRequest is the argument to the AdminSplit() method. The // existing range which contains header.key is split by @@ -866,7 +904,7 @@ type AdminSplitRequest struct { func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } func (m *AdminSplitRequest) String() string { return proto.CompactTextString(m) } func (*AdminSplitRequest) ProtoMessage() {} -func (*AdminSplitRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{29} } +func (*AdminSplitRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } // An AdminSplitResponse is the return value from the AdminSplit() // method. @@ -877,7 +915,7 @@ type AdminSplitResponse struct { func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } func (m *AdminSplitResponse) String() string { return proto.CompactTextString(m) } func (*AdminSplitResponse) ProtoMessage() {} -func (*AdminSplitResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{30} } +func (*AdminSplitResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } // An AdminMergeRequest is the argument to the AdminMerge() method. A // merge is performed by calling AdminMerge on the left-hand range of @@ -895,7 +933,7 @@ type AdminMergeRequest struct { func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } func (m *AdminMergeRequest) String() string { return proto.CompactTextString(m) } func (*AdminMergeRequest) ProtoMessage() {} -func (*AdminMergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } +func (*AdminMergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{33} } // An AdminMergeResponse is the return value from the AdminMerge() // method. @@ -906,7 +944,7 @@ type AdminMergeResponse struct { func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } func (m *AdminMergeResponse) String() string { return proto.CompactTextString(m) } func (*AdminMergeResponse) ProtoMessage() {} -func (*AdminMergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } +func (*AdminMergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } // An AdminTransferLeaseRequest is the argument to the AdminTransferLease() // method. A lease transfer allows an external entity to control the lease @@ -920,7 +958,7 @@ type AdminTransferLeaseRequest struct { func (m *AdminTransferLeaseRequest) Reset() { *m = AdminTransferLeaseRequest{} } func (m *AdminTransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseRequest) ProtoMessage() {} -func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{33} } +func (*AdminTransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } type AdminTransferLeaseResponse struct { ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -929,7 +967,7 @@ type AdminTransferLeaseResponse struct { func (m *AdminTransferLeaseResponse) Reset() { *m = AdminTransferLeaseResponse{} } func (m *AdminTransferLeaseResponse) String() string { return proto.CompactTextString(m) } func (*AdminTransferLeaseResponse) ProtoMessage() {} -func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } +func (*AdminTransferLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{36} } // An AdminChangeReplicasRequest is the argument to the AdminChangeReplicas() // method. A change replicas operation allows adding or removing a set of @@ -943,7 +981,7 @@ type AdminChangeReplicasRequest struct { func (m *AdminChangeReplicasRequest) Reset() { *m = AdminChangeReplicasRequest{} } func (m *AdminChangeReplicasRequest) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasRequest) ProtoMessage() {} -func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } +func (*AdminChangeReplicasRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } type AdminChangeReplicasResponse struct { ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -952,7 +990,7 @@ type AdminChangeReplicasResponse struct { func (m *AdminChangeReplicasResponse) Reset() { *m = AdminChangeReplicasResponse{} } func (m *AdminChangeReplicasResponse) String() string { return proto.CompactTextString(m) } func (*AdminChangeReplicasResponse) ProtoMessage() {} -func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{36} } +func (*AdminChangeReplicasResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } // A RangeLookupRequest is arguments to the RangeLookup() method. A // forward lookup request returns a range containing the requested @@ -976,7 +1014,7 @@ type RangeLookupRequest struct { func (m *RangeLookupRequest) Reset() { *m = RangeLookupRequest{} } func (m *RangeLookupRequest) String() string { return proto.CompactTextString(m) } func (*RangeLookupRequest) ProtoMessage() {} -func (*RangeLookupRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } +func (*RangeLookupRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } // A RangeLookupResponse is the return value from the RangeLookup() // method. It returns metadata for the range containing the requested @@ -992,7 +1030,7 @@ type RangeLookupResponse struct { func (m *RangeLookupResponse) Reset() { *m = RangeLookupResponse{} } func (m *RangeLookupResponse) String() string { return proto.CompactTextString(m) } func (*RangeLookupResponse) ProtoMessage() {} -func (*RangeLookupResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } +func (*RangeLookupResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } // A HeartbeatTxnRequest is arguments to the HeartbeatTxn() // method. It's sent by transaction coordinators to let the system @@ -1007,7 +1045,7 @@ type HeartbeatTxnRequest struct { func (m *HeartbeatTxnRequest) Reset() { *m = HeartbeatTxnRequest{} } func (m *HeartbeatTxnRequest) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnRequest) ProtoMessage() {} -func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } +func (*HeartbeatTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } // A HeartbeatTxnResponse is the return value from the HeartbeatTxn() // method. It returns the transaction info in the response header. The @@ -1020,7 +1058,7 @@ type HeartbeatTxnResponse struct { func (m *HeartbeatTxnResponse) Reset() { *m = HeartbeatTxnResponse{} } func (m *HeartbeatTxnResponse) String() string { return proto.CompactTextString(m) } func (*HeartbeatTxnResponse) ProtoMessage() {} -func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } +func (*HeartbeatTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } // A GCRequest is arguments to the GC() method. It's sent by range // lease holders after scanning range data to find expired MVCC values. @@ -1037,7 +1075,7 @@ type GCRequest struct { func (m *GCRequest) Reset() { *m = GCRequest{} } func (m *GCRequest) String() string { return proto.CompactTextString(m) } func (*GCRequest) ProtoMessage() {} -func (*GCRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } +func (*GCRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } type GCRequest_GCKey struct { Key Key `protobuf:"bytes,1,opt,name=key,proto3,casttype=Key" json:"key,omitempty"` @@ -1047,7 +1085,7 @@ type GCRequest_GCKey struct { func (m *GCRequest_GCKey) Reset() { *m = GCRequest_GCKey{} } func (m *GCRequest_GCKey) String() string { return proto.CompactTextString(m) } func (*GCRequest_GCKey) ProtoMessage() {} -func (*GCRequest_GCKey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41, 0} } +func (*GCRequest_GCKey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43, 0} } // A GCResponse is the return value from the GC() method. type GCResponse struct { @@ -1057,7 +1095,7 @@ type GCResponse struct { func (m *GCResponse) Reset() { *m = GCResponse{} } func (m *GCResponse) String() string { return proto.CompactTextString(m) } func (*GCResponse) ProtoMessage() {} -func (*GCResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } +func (*GCResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } // A PushTxnRequest is arguments to the PushTxn() method. It's sent by // readers or writers which have encountered an "intent" laid down by @@ -1107,7 +1145,7 @@ type PushTxnRequest struct { func (m *PushTxnRequest) Reset() { *m = PushTxnRequest{} } func (m *PushTxnRequest) String() string { return proto.CompactTextString(m) } func (*PushTxnRequest) ProtoMessage() {} -func (*PushTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } +func (*PushTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } // A PushTxnResponse is the return value from the PushTxn() method. It // returns success and the resulting state of PusheeTxn if the @@ -1126,7 +1164,7 @@ type PushTxnResponse struct { func (m *PushTxnResponse) Reset() { *m = PushTxnResponse{} } func (m *PushTxnResponse) String() string { return proto.CompactTextString(m) } func (*PushTxnResponse) ProtoMessage() {} -func (*PushTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } +func (*PushTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } // A QueryTxnResponse is arguments to the QueryTxn() method. It's sent // by transactions which are waiting to push another transaction because @@ -1146,7 +1184,7 @@ type QueryTxnRequest struct { func (m *QueryTxnRequest) Reset() { *m = QueryTxnRequest{} } func (m *QueryTxnRequest) String() string { return proto.CompactTextString(m) } func (*QueryTxnRequest) ProtoMessage() {} -func (*QueryTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } +func (*QueryTxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } // A QueryTxnResponse is the return value from the QueryTxn() method. type QueryTxnResponse struct { @@ -1161,7 +1199,7 @@ type QueryTxnResponse struct { func (m *QueryTxnResponse) Reset() { *m = QueryTxnResponse{} } func (m *QueryTxnResponse) String() string { return proto.CompactTextString(m) } func (*QueryTxnResponse) ProtoMessage() {} -func (*QueryTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } +func (*QueryTxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } // A ResolveIntentRequest is arguments to the ResolveIntent() // method. It is sent by transaction coordinators after success @@ -1181,7 +1219,7 @@ type ResolveIntentRequest struct { func (m *ResolveIntentRequest) Reset() { *m = ResolveIntentRequest{} } func (m *ResolveIntentRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRequest) ProtoMessage() {} -func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } +func (*ResolveIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } // A ResolveIntentResponse is the return value from the // ResolveIntent() method. @@ -1192,7 +1230,7 @@ type ResolveIntentResponse struct { func (m *ResolveIntentResponse) Reset() { *m = ResolveIntentResponse{} } func (m *ResolveIntentResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentResponse) ProtoMessage() {} -func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } +func (*ResolveIntentResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } // A ResolveIntentRangeRequest is arguments to the ResolveIntentRange() method. // It is sent by transaction coordinators after success calling PushTxn to @@ -1212,7 +1250,7 @@ type ResolveIntentRangeRequest struct { func (m *ResolveIntentRangeRequest) Reset() { *m = ResolveIntentRangeRequest{} } func (m *ResolveIntentRangeRequest) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeRequest) ProtoMessage() {} -func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } +func (*ResolveIntentRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } // A NoopResponse is the return value from a no-op operation. type NoopResponse struct { @@ -1221,7 +1259,7 @@ type NoopResponse struct { func (m *NoopResponse) Reset() { *m = NoopResponse{} } func (m *NoopResponse) String() string { return proto.CompactTextString(m) } func (*NoopResponse) ProtoMessage() {} -func (*NoopResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } +func (*NoopResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } // A NoopRequest is a no-op. type NoopRequest struct { @@ -1230,7 +1268,7 @@ type NoopRequest struct { func (m *NoopRequest) Reset() { *m = NoopRequest{} } func (m *NoopRequest) String() string { return proto.CompactTextString(m) } func (*NoopRequest) ProtoMessage() {} -func (*NoopRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } +func (*NoopRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } // A ResolveIntentRangeResponse is the return value from the // ResolveIntent() method. @@ -1241,7 +1279,7 @@ type ResolveIntentRangeResponse struct { func (m *ResolveIntentRangeResponse) Reset() { *m = ResolveIntentRangeResponse{} } func (m *ResolveIntentRangeResponse) String() string { return proto.CompactTextString(m) } func (*ResolveIntentRangeResponse) ProtoMessage() {} -func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } +func (*ResolveIntentRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } // A MergeRequest contains arguments to the Merge() method. It // specifies a key and a value which should be merged into the @@ -1254,7 +1292,7 @@ type MergeRequest struct { func (m *MergeRequest) Reset() { *m = MergeRequest{} } func (m *MergeRequest) String() string { return proto.CompactTextString(m) } func (*MergeRequest) ProtoMessage() {} -func (*MergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } +func (*MergeRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } // MergeResponse is the response to a Merge() operation. type MergeResponse struct { @@ -1264,7 +1302,7 @@ type MergeResponse struct { func (m *MergeResponse) Reset() { *m = MergeResponse{} } func (m *MergeResponse) String() string { return proto.CompactTextString(m) } func (*MergeResponse) ProtoMessage() {} -func (*MergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } +func (*MergeResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } // TruncateLogRequest is used to remove a prefix of the raft log. While there // is no requirement for correctness that the raft log truncation be synchronized across @@ -1285,7 +1323,7 @@ type TruncateLogRequest struct { func (m *TruncateLogRequest) Reset() { *m = TruncateLogRequest{} } func (m *TruncateLogRequest) String() string { return proto.CompactTextString(m) } func (*TruncateLogRequest) ProtoMessage() {} -func (*TruncateLogRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } +func (*TruncateLogRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } // TruncateLogResponse is the response to a TruncateLog() operation. type TruncateLogResponse struct { @@ -1295,7 +1333,7 @@ type TruncateLogResponse struct { func (m *TruncateLogResponse) Reset() { *m = TruncateLogResponse{} } func (m *TruncateLogResponse) String() string { return proto.CompactTextString(m) } func (*TruncateLogResponse) ProtoMessage() {} -func (*TruncateLogResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } +func (*TruncateLogResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } // A RequestLeaseRequest is arguments to the RequestLease() // method. It is sent by the store on behalf of one of its ranges upon receipt @@ -1311,7 +1349,7 @@ type RequestLeaseRequest struct { func (m *RequestLeaseRequest) Reset() { *m = RequestLeaseRequest{} } func (m *RequestLeaseRequest) String() string { return proto.CompactTextString(m) } func (*RequestLeaseRequest) ProtoMessage() {} -func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } +func (*RequestLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } // A TransferLeaseRequest represents the arguments to the TransferLease() // method. It is sent by a replica that currently holds the range lease and @@ -1336,7 +1374,7 @@ type TransferLeaseRequest struct { func (m *TransferLeaseRequest) Reset() { *m = TransferLeaseRequest{} } func (m *TransferLeaseRequest) String() string { return proto.CompactTextString(m) } func (*TransferLeaseRequest) ProtoMessage() {} -func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } +func (*TransferLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } // LeaseInfoRequest is the argument to the LeaseInfo() method, for getting // information about a range's lease. @@ -1349,7 +1387,7 @@ type LeaseInfoRequest struct { func (m *LeaseInfoRequest) Reset() { *m = LeaseInfoRequest{} } func (m *LeaseInfoRequest) String() string { return proto.CompactTextString(m) } func (*LeaseInfoRequest) ProtoMessage() {} -func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } +func (*LeaseInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } // LeaseInfoResponse is the response to a LeaseInfo() operation. type LeaseInfoResponse struct { @@ -1362,7 +1400,7 @@ type LeaseInfoResponse struct { func (m *LeaseInfoResponse) Reset() { *m = LeaseInfoResponse{} } func (m *LeaseInfoResponse) String() string { return proto.CompactTextString(m) } func (*LeaseInfoResponse) ProtoMessage() {} -func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } +func (*LeaseInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } // A RequestLeaseResponse is the response to a RequestLease() or TransferLease() // operation. @@ -1373,7 +1411,7 @@ type RequestLeaseResponse struct { func (m *RequestLeaseResponse) Reset() { *m = RequestLeaseResponse{} } func (m *RequestLeaseResponse) String() string { return proto.CompactTextString(m) } func (*RequestLeaseResponse) ProtoMessage() {} -func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } +func (*RequestLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } // A ComputeChecksumRequest is arguments to the ComputeChecksum() method, to // start computing the checksum for the specified range at the snapshot for this @@ -1395,7 +1433,7 @@ type ComputeChecksumRequest struct { func (m *ComputeChecksumRequest) Reset() { *m = ComputeChecksumRequest{} } func (m *ComputeChecksumRequest) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumRequest) ProtoMessage() {} -func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } +func (*ComputeChecksumRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{64} } // A ComputeChecksumResponse is the response to a ComputeChecksum() operation. type ComputeChecksumResponse struct { @@ -1405,7 +1443,7 @@ type ComputeChecksumResponse struct { func (m *ComputeChecksumResponse) Reset() { *m = ComputeChecksumResponse{} } func (m *ComputeChecksumResponse) String() string { return proto.CompactTextString(m) } func (*ComputeChecksumResponse) ProtoMessage() {} -func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } +func (*ComputeChecksumResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{65} } type DeprecatedVerifyChecksumRequest struct { Span `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` @@ -1415,7 +1453,7 @@ func (m *DeprecatedVerifyChecksumRequest) Reset() { *m = DeprecatedVerif func (m *DeprecatedVerifyChecksumRequest) String() string { return proto.CompactTextString(m) } func (*DeprecatedVerifyChecksumRequest) ProtoMessage() {} func (*DeprecatedVerifyChecksumRequest) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{64} + return fileDescriptorApi, []int{66} } type DeprecatedVerifyChecksumResponse struct { @@ -1426,7 +1464,7 @@ func (m *DeprecatedVerifyChecksumResponse) Reset() { *m = DeprecatedVeri func (m *DeprecatedVerifyChecksumResponse) String() string { return proto.CompactTextString(m) } func (*DeprecatedVerifyChecksumResponse) ProtoMessage() {} func (*DeprecatedVerifyChecksumResponse) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{65} + return fileDescriptorApi, []int{67} } type ExportStorage struct { @@ -1441,7 +1479,7 @@ type ExportStorage struct { func (m *ExportStorage) Reset() { *m = ExportStorage{} } func (m *ExportStorage) String() string { return proto.CompactTextString(m) } func (*ExportStorage) ProtoMessage() {} -func (*ExportStorage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66} } +func (*ExportStorage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } type ExportStorage_LocalFilePath struct { Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` @@ -1451,7 +1489,7 @@ func (m *ExportStorage_LocalFilePath) Reset() { *m = ExportStorage_Local func (m *ExportStorage_LocalFilePath) String() string { return proto.CompactTextString(m) } func (*ExportStorage_LocalFilePath) ProtoMessage() {} func (*ExportStorage_LocalFilePath) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{66, 0} + return fileDescriptorApi, []int{68, 0} } type ExportStorage_Http struct { @@ -1461,7 +1499,7 @@ type ExportStorage_Http struct { func (m *ExportStorage_Http) Reset() { *m = ExportStorage_Http{} } func (m *ExportStorage_Http) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Http) ProtoMessage() {} -func (*ExportStorage_Http) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 1} } +func (*ExportStorage_Http) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 1} } type ExportStorage_S3 struct { Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` @@ -1476,7 +1514,7 @@ type ExportStorage_S3 struct { func (m *ExportStorage_S3) Reset() { *m = ExportStorage_S3{} } func (m *ExportStorage_S3) String() string { return proto.CompactTextString(m) } func (*ExportStorage_S3) ProtoMessage() {} -func (*ExportStorage_S3) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 2} } +func (*ExportStorage_S3) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 2} } type ExportStorage_GCS struct { Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` @@ -1487,7 +1525,7 @@ type ExportStorage_GCS struct { func (m *ExportStorage_GCS) Reset() { *m = ExportStorage_GCS{} } func (m *ExportStorage_GCS) String() string { return proto.CompactTextString(m) } func (*ExportStorage_GCS) ProtoMessage() {} -func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 3} } +func (*ExportStorage_GCS) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 3} } type ExportStorage_Azure struct { Container string `protobuf:"bytes,1,opt,name=container,proto3" json:"container,omitempty"` @@ -1499,7 +1537,7 @@ type ExportStorage_Azure struct { func (m *ExportStorage_Azure) Reset() { *m = ExportStorage_Azure{} } func (m *ExportStorage_Azure) String() string { return proto.CompactTextString(m) } func (*ExportStorage_Azure) ProtoMessage() {} -func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66, 4} } +func (*ExportStorage_Azure) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68, 4} } // WriteBatchRequest is arguments to the WriteBatch() method, to apply the // operations encoded in a BatchRepr. @@ -1515,7 +1553,7 @@ type WriteBatchRequest struct { func (m *WriteBatchRequest) Reset() { *m = WriteBatchRequest{} } func (m *WriteBatchRequest) String() string { return proto.CompactTextString(m) } func (*WriteBatchRequest) ProtoMessage() {} -func (*WriteBatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{67} } +func (*WriteBatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } // WriteBatchResponse is the response to a WriteBatch() operation. type WriteBatchResponse struct { @@ -1525,7 +1563,7 @@ type WriteBatchResponse struct { func (m *WriteBatchResponse) Reset() { *m = WriteBatchResponse{} } func (m *WriteBatchResponse) String() string { return proto.CompactTextString(m) } func (*WriteBatchResponse) ProtoMessage() {} -func (*WriteBatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } +func (*WriteBatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } // ExportRequest is the argument to the Export() method, to dump a keyrange into // files under a basepath. @@ -1541,7 +1579,7 @@ type ExportRequest struct { func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} -func (*ExportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } +func (*ExportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } type BulkOpSummary struct { DataSize int64 `protobuf:"varint,1,opt,name=data_size,json=dataSize,proto3" json:"data_size,omitempty"` @@ -1553,7 +1591,7 @@ type BulkOpSummary struct { func (m *BulkOpSummary) Reset() { *m = BulkOpSummary{} } func (m *BulkOpSummary) String() string { return proto.CompactTextString(m) } func (*BulkOpSummary) ProtoMessage() {} -func (*BulkOpSummary) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } +func (*BulkOpSummary) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } // ExportResponse is the response to an Export() operation. type ExportResponse struct { @@ -1564,7 +1602,7 @@ type ExportResponse struct { func (m *ExportResponse) Reset() { *m = ExportResponse{} } func (m *ExportResponse) String() string { return proto.CompactTextString(m) } func (*ExportResponse) ProtoMessage() {} -func (*ExportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } +func (*ExportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } // File describes a keyrange that has been dumped to a file at the given // path. @@ -1579,7 +1617,7 @@ type ExportResponse_File struct { func (m *ExportResponse_File) Reset() { *m = ExportResponse_File{} } func (m *ExportResponse_File) String() string { return proto.CompactTextString(m) } func (*ExportResponse_File) ProtoMessage() {} -func (*ExportResponse_File) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71, 0} } +func (*ExportResponse_File) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73, 0} } // ImportRequest is the argument to the Import() method, to bulk load key/value // entries. @@ -1605,7 +1643,7 @@ type ImportRequest struct { func (m *ImportRequest) Reset() { *m = ImportRequest{} } func (m *ImportRequest) String() string { return proto.CompactTextString(m) } func (*ImportRequest) ProtoMessage() {} -func (*ImportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } +func (*ImportRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } type ImportRequest_File struct { Dir ExportStorage `protobuf:"bytes,1,opt,name=dir" json:"dir"` @@ -1616,7 +1654,7 @@ type ImportRequest_File struct { func (m *ImportRequest_File) Reset() { *m = ImportRequest_File{} } func (m *ImportRequest_File) String() string { return proto.CompactTextString(m) } func (*ImportRequest_File) ProtoMessage() {} -func (*ImportRequest_File) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72, 0} } +func (*ImportRequest_File) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74, 0} } type ImportRequest_TableRekey struct { // OldID is the previous ID of `new_desc`. @@ -1628,7 +1666,7 @@ type ImportRequest_TableRekey struct { func (m *ImportRequest_TableRekey) Reset() { *m = ImportRequest_TableRekey{} } func (m *ImportRequest_TableRekey) String() string { return proto.CompactTextString(m) } func (*ImportRequest_TableRekey) ProtoMessage() {} -func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72, 1} } +func (*ImportRequest_TableRekey) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74, 1} } // ImportResponse is the response to a Import() operation. type ImportResponse struct { @@ -1639,7 +1677,7 @@ type ImportResponse struct { func (m *ImportResponse) Reset() { *m = ImportResponse{} } func (m *ImportResponse) String() string { return proto.CompactTextString(m) } func (*ImportResponse) ProtoMessage() {} -func (*ImportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } +func (*ImportResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } // AdminScatterRequest is the argument to the AdminScatter() method, which moves // replicas and leaseholders for a selection of ranges. Scatter is best-effort; @@ -1652,7 +1690,7 @@ type AdminScatterRequest struct { func (m *AdminScatterRequest) Reset() { *m = AdminScatterRequest{} } func (m *AdminScatterRequest) String() string { return proto.CompactTextString(m) } func (*AdminScatterRequest) ProtoMessage() {} -func (*AdminScatterRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } +func (*AdminScatterRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } // ScatterResponse is the response to a Scatter() operation. type AdminScatterResponse struct { @@ -1663,7 +1701,7 @@ type AdminScatterResponse struct { func (m *AdminScatterResponse) Reset() { *m = AdminScatterResponse{} } func (m *AdminScatterResponse) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse) ProtoMessage() {} -func (*AdminScatterResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } +func (*AdminScatterResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } type AdminScatterResponse_Range struct { Span Span `protobuf:"bytes,1,opt,name=span" json:"span"` @@ -1673,7 +1711,7 @@ func (m *AdminScatterResponse_Range) Reset() { *m = AdminScatterResponse func (m *AdminScatterResponse_Range) String() string { return proto.CompactTextString(m) } func (*AdminScatterResponse_Range) ProtoMessage() {} func (*AdminScatterResponse_Range) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{75, 0} + return fileDescriptorApi, []int{77, 0} } // AddSSTableRequest is arguments to the AddSSTable() method, to link a file @@ -1686,7 +1724,7 @@ type AddSSTableRequest struct { func (m *AddSSTableRequest) Reset() { *m = AddSSTableRequest{} } func (m *AddSSTableRequest) String() string { return proto.CompactTextString(m) } func (*AddSSTableRequest) ProtoMessage() {} -func (*AddSSTableRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } +func (*AddSSTableRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } // AddSSTableResponse is the response to a AddSSTable() operation. type AddSSTableResponse struct { @@ -1696,7 +1734,7 @@ type AddSSTableResponse struct { func (m *AddSSTableResponse) Reset() { *m = AddSSTableResponse{} } func (m *AddSSTableResponse) String() string { return proto.CompactTextString(m) } func (*AddSSTableResponse) ProtoMessage() {} -func (*AddSSTableResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } +func (*AddSSTableResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } // A RequestUnion contains exactly one of the requests. // The values added here must match those in ResponseUnion. @@ -1746,12 +1784,13 @@ type RequestUnion struct { QueryTxn *QueryTxnRequest `protobuf:"bytes,33,opt,name=query_txn,json=queryTxn" json:"query_txn,omitempty"` AdminScatter *AdminScatterRequest `protobuf:"bytes,36,opt,name=admin_scatter,json=adminScatter" json:"admin_scatter,omitempty"` AddSstable *AddSSTableRequest `protobuf:"bytes,37,opt,name=add_sstable,json=addSstable" json:"add_sstable,omitempty"` + AdjustStats *AdjustStatsRequest `protobuf:"bytes,39,opt,name=adjust_stats,json=adjustStats" json:"adjust_stats,omitempty"` } func (m *RequestUnion) Reset() { *m = RequestUnion{} } func (m *RequestUnion) String() string { return proto.CompactTextString(m) } func (*RequestUnion) ProtoMessage() {} -func (*RequestUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } +func (*RequestUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } // A ResponseUnion contains exactly one of the responses. // The values added here must match those in RequestUnion. @@ -1797,12 +1836,13 @@ type ResponseUnion struct { QueryTxn *QueryTxnResponse `protobuf:"bytes,33,opt,name=query_txn,json=queryTxn" json:"query_txn,omitempty"` AdminScatter *AdminScatterResponse `protobuf:"bytes,36,opt,name=admin_scatter,json=adminScatter" json:"admin_scatter,omitempty"` AddSstable *AddSSTableResponse `protobuf:"bytes,37,opt,name=add_sstable,json=addSstable" json:"add_sstable,omitempty"` + AdjustStats *AdjustStatsResponse `protobuf:"bytes,39,opt,name=adjust_stats,json=adjustStats" json:"adjust_stats,omitempty"` } func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } func (m *ResponseUnion) String() string { return proto.CompactTextString(m) } func (*ResponseUnion) ProtoMessage() {} -func (*ResponseUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } +func (*ResponseUnion) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } // A Header is attached to a BatchRequest, encapsulating routing and auxiliary // information required for executing it. @@ -1864,7 +1904,7 @@ type Header struct { func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } +func (*Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } // A BatchRequest contains one or more requests to be executed in // parallel, or if applicable (based on write-only commands and @@ -1876,7 +1916,7 @@ type BatchRequest struct { func (m *BatchRequest) Reset() { *m = BatchRequest{} } func (*BatchRequest) ProtoMessage() {} -func (*BatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } +func (*BatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } // A BatchResponse contains one or more responses, one per request // corresponding to the requests in the matching BatchRequest. The @@ -1889,7 +1929,7 @@ type BatchResponse struct { func (m *BatchResponse) Reset() { *m = BatchResponse{} } func (*BatchResponse) ProtoMessage() {} -func (*BatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } +func (*BatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } type BatchResponse_Header struct { // error is non-nil if an error occurred. @@ -1913,7 +1953,7 @@ type BatchResponse_Header struct { func (m *BatchResponse_Header) Reset() { *m = BatchResponse_Header{} } func (m *BatchResponse_Header) String() string { return proto.CompactTextString(m) } func (*BatchResponse_Header) ProtoMessage() {} -func (*BatchResponse_Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82, 0} } +func (*BatchResponse_Header) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84, 0} } func init() { proto.RegisterType((*RangeInfo)(nil), "cockroach.roachpb.RangeInfo") @@ -1941,6 +1981,8 @@ func init() { proto.RegisterType((*ReverseScanResponse)(nil), "cockroach.roachpb.ReverseScanResponse") proto.RegisterType((*CheckConsistencyRequest)(nil), "cockroach.roachpb.CheckConsistencyRequest") proto.RegisterType((*CheckConsistencyResponse)(nil), "cockroach.roachpb.CheckConsistencyResponse") + proto.RegisterType((*AdjustStatsRequest)(nil), "cockroach.roachpb.AdjustStatsRequest") + proto.RegisterType((*AdjustStatsResponse)(nil), "cockroach.roachpb.AdjustStatsResponse") proto.RegisterType((*BeginTransactionRequest)(nil), "cockroach.roachpb.BeginTransactionRequest") proto.RegisterType((*BeginTransactionResponse)(nil), "cockroach.roachpb.BeginTransactionResponse") proto.RegisterType((*EndTransactionRequest)(nil), "cockroach.roachpb.EndTransactionRequest") @@ -2424,6 +2466,42 @@ func (this *CheckConsistencyRequest) Equal(that interface{}) bool { } return true } +func (this *AdjustStatsRequest) Equal(that interface{}) bool { + if that == nil { + if this == nil { + return true + } + return false + } + + that1, ok := that.(*AdjustStatsRequest) + if !ok { + that2, ok := that.(AdjustStatsRequest) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + if this == nil { + return true + } + return false + } else if this == nil { + return false + } + if !this.Span.Equal(&that1.Span) { + return false + } + if !bytes.Equal(this.ComputationEndKey, that1.ComputationEndKey) { + return false + } + if this.DryRun != that1.DryRun { + return false + } + return true +} func (this *BeginTransactionRequest) Equal(that interface{}) bool { if that == nil { if this == nil { @@ -4733,7 +4811,7 @@ func (m *CheckConsistencyResponse) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *BeginTransactionRequest) Marshal() (dAtA []byte, err error) { +func (m *AdjustStatsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -4743,7 +4821,7 @@ func (m *BeginTransactionRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BeginTransactionRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *AdjustStatsRequest) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -4756,10 +4834,26 @@ func (m *BeginTransactionRequest) MarshalTo(dAtA []byte) (int, error) { return 0, err } i += n32 + if len(m.ComputationEndKey) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.ComputationEndKey))) + i += copy(dAtA[i:], m.ComputationEndKey) + } + if m.DryRun { + dAtA[i] = 0x18 + i++ + if m.DryRun { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } -func (m *BeginTransactionResponse) Marshal() (dAtA []byte, err error) { +func (m *AdjustStatsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -4769,7 +4863,7 @@ func (m *BeginTransactionResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BeginTransactionResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *AdjustStatsResponse) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -4782,6 +4876,66 @@ func (m *BeginTransactionResponse) MarshalTo(dAtA []byte) (int, error) { return 0, err } i += n33 + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.AddedDelta.Size())) + n34, err := m.AddedDelta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 + return i, nil +} + +func (m *BeginTransactionRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BeginTransactionRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) + n35, err := m.Span.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + return i, nil +} + +func (m *BeginTransactionResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BeginTransactionResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) + n36, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n36 return i, nil } @@ -4803,11 +4957,11 @@ func (m *EndTransactionRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n34, err := m.Span.MarshalTo(dAtA[i:]) + n37, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n37 if m.Commit { dAtA[i] = 0x10 i++ @@ -4822,21 +4976,21 @@ func (m *EndTransactionRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Deadline.Size())) - n35, err := m.Deadline.MarshalTo(dAtA[i:]) + n38, err := m.Deadline.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n38 } if m.InternalCommitTrigger != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.InternalCommitTrigger.Size())) - n36, err := m.InternalCommitTrigger.MarshalTo(dAtA[i:]) + n39, err := m.InternalCommitTrigger.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n39 } if len(m.IntentSpans) > 0 { for _, msg := range m.IntentSpans { @@ -4881,11 +5035,11 @@ func (m *EndTransactionResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n37, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n40, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n37 + i += n40 if m.OnePhaseCommit { dAtA[i] = 0x20 i++ @@ -4917,11 +5071,11 @@ func (m *AdminSplitRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n38, err := m.Span.MarshalTo(dAtA[i:]) + n41, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n41 if len(m.SplitKey) > 0 { dAtA[i] = 0x12 i++ @@ -4949,11 +5103,11 @@ func (m *AdminSplitResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n39, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n42, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n42 return i, nil } @@ -4975,11 +5129,11 @@ func (m *AdminMergeRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n40, err := m.Span.MarshalTo(dAtA[i:]) + n43, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n43 return i, nil } @@ -5001,11 +5155,11 @@ func (m *AdminMergeResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n41, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n44, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n44 return i, nil } @@ -5027,11 +5181,11 @@ func (m *AdminTransferLeaseRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n42, err := m.Span.MarshalTo(dAtA[i:]) + n45, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n45 if m.Target != 0 { dAtA[i] = 0x10 i++ @@ -5058,11 +5212,11 @@ func (m *AdminTransferLeaseResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n43, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n46, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n43 + i += n46 return i, nil } @@ -5084,11 +5238,11 @@ func (m *AdminChangeReplicasRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n44, err := m.Span.MarshalTo(dAtA[i:]) + n47, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n44 + i += n47 if m.ChangeType != 0 { dAtA[i] = 0x10 i++ @@ -5127,11 +5281,11 @@ func (m *AdminChangeReplicasResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n45, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n48, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n45 + i += n48 return i, nil } @@ -5153,11 +5307,11 @@ func (m *RangeLookupRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n46, err := m.Span.MarshalTo(dAtA[i:]) + n49, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n46 + i += n49 if m.MaxRanges != 0 { dAtA[i] = 0x10 i++ @@ -5194,11 +5348,11 @@ func (m *RangeLookupResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n47, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n50, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n47 + i += n50 if len(m.Ranges) > 0 { for _, msg := range m.Ranges { dAtA[i] = 0x12 @@ -5244,19 +5398,19 @@ func (m *HeartbeatTxnRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n48, err := m.Span.MarshalTo(dAtA[i:]) + n51, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n48 + i += n51 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n49, err := m.Now.MarshalTo(dAtA[i:]) + n52, err := m.Now.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n49 + i += n52 return i, nil } @@ -5278,11 +5432,11 @@ func (m *HeartbeatTxnResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n50, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n53, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n53 return i, nil } @@ -5304,11 +5458,11 @@ func (m *GCRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n51, err := m.Span.MarshalTo(dAtA[i:]) + n54, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n54 if len(m.Keys) > 0 { for _, msg := range m.Keys { dAtA[i] = 0x1a @@ -5324,19 +5478,19 @@ func (m *GCRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Threshold.Size())) - n52, err := m.Threshold.MarshalTo(dAtA[i:]) + n55, err := m.Threshold.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n55 dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.TxnSpanGCThreshold.Size())) - n53, err := m.TxnSpanGCThreshold.MarshalTo(dAtA[i:]) + n56, err := m.TxnSpanGCThreshold.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n56 return i, nil } @@ -5364,11 +5518,11 @@ func (m *GCRequest_GCKey) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size())) - n54, err := m.Timestamp.MarshalTo(dAtA[i:]) + n57, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n57 return i, nil } @@ -5390,11 +5544,11 @@ func (m *GCResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n55, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n58, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n58 return i, nil } @@ -5416,43 +5570,43 @@ func (m *PushTxnRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n56, err := m.Span.MarshalTo(dAtA[i:]) + n59, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n59 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.PusherTxn.Size())) - n57, err := m.PusherTxn.MarshalTo(dAtA[i:]) + n60, err := m.PusherTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n60 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.PusheeTxn.Size())) - n58, err := m.PusheeTxn.MarshalTo(dAtA[i:]) + n61, err := m.PusheeTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n61 dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.PushTo.Size())) - n59, err := m.PushTo.MarshalTo(dAtA[i:]) + n62, err := m.PushTo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n62 dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n60, err := m.Now.MarshalTo(dAtA[i:]) + n63, err := m.Now.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n63 if m.PushType != 0 { dAtA[i] = 0x30 i++ @@ -5489,19 +5643,19 @@ func (m *PushTxnResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n61, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n64, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n64 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.PusheeTxn.Size())) - n62, err := m.PusheeTxn.MarshalTo(dAtA[i:]) + n65, err := m.PusheeTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n65 return i, nil } @@ -5523,19 +5677,19 @@ func (m *QueryTxnRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n63, err := m.Span.MarshalTo(dAtA[i:]) + n66, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n66 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size())) - n64, err := m.Txn.MarshalTo(dAtA[i:]) + n67, err := m.Txn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n67 if m.WaitForUpdate { dAtA[i] = 0x18 i++ @@ -5579,19 +5733,19 @@ func (m *QueryTxnResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n65, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n68, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n68 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.QueriedTxn.Size())) - n66, err := m.QueriedTxn.MarshalTo(dAtA[i:]) + n69, err := m.QueriedTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n66 + i += n69 if len(m.WaitingTxns) > 0 { for _, msg := range m.WaitingTxns { dAtA[i] = 0x1a @@ -5625,19 +5779,19 @@ func (m *ResolveIntentRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n67, err := m.Span.MarshalTo(dAtA[i:]) + n70, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n67 + i += n70 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.IntentTxn.Size())) - n68, err := m.IntentTxn.MarshalTo(dAtA[i:]) + n71, err := m.IntentTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n68 + i += n71 if m.Status != 0 { dAtA[i] = 0x18 i++ @@ -5674,11 +5828,11 @@ func (m *ResolveIntentResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n69, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n72, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n69 + i += n72 return i, nil } @@ -5700,19 +5854,19 @@ func (m *ResolveIntentRangeRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n70, err := m.Span.MarshalTo(dAtA[i:]) + n73, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n70 + i += n73 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.IntentTxn.Size())) - n71, err := m.IntentTxn.MarshalTo(dAtA[i:]) + n74, err := m.IntentTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n71 + i += n74 if m.Status != 0 { dAtA[i] = 0x18 i++ @@ -5785,11 +5939,11 @@ func (m *ResolveIntentRangeResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n72, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n75, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n72 + i += n75 return i, nil } @@ -5811,19 +5965,19 @@ func (m *MergeRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n73, err := m.Span.MarshalTo(dAtA[i:]) + n76, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n73 + i += n76 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Value.Size())) - n74, err := m.Value.MarshalTo(dAtA[i:]) + n77, err := m.Value.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n74 + i += n77 return i, nil } @@ -5845,11 +5999,11 @@ func (m *MergeResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n75, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n78, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n75 + i += n78 return i, nil } @@ -5871,11 +6025,11 @@ func (m *TruncateLogRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n76, err := m.Span.MarshalTo(dAtA[i:]) + n79, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n76 + i += n79 if m.Index != 0 { dAtA[i] = 0x10 i++ @@ -5907,11 +6061,11 @@ func (m *TruncateLogResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n77, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n80, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n77 + i += n80 return i, nil } @@ -5933,27 +6087,27 @@ func (m *RequestLeaseRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n78, err := m.Span.MarshalTo(dAtA[i:]) + n81, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n78 + i += n81 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Lease.Size())) - n79, err := m.Lease.MarshalTo(dAtA[i:]) + n82, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n79 + i += n82 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.PrevLease.Size())) - n80, err := m.PrevLease.MarshalTo(dAtA[i:]) + n83, err := m.PrevLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n80 + i += n83 return i, nil } @@ -5975,27 +6129,27 @@ func (m *TransferLeaseRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n81, err := m.Span.MarshalTo(dAtA[i:]) + n84, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n81 + i += n84 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Lease.Size())) - n82, err := m.Lease.MarshalTo(dAtA[i:]) + n85, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n82 + i += n85 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.PrevLease.Size())) - n83, err := m.PrevLease.MarshalTo(dAtA[i:]) + n86, err := m.PrevLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n83 + i += n86 return i, nil } @@ -6017,11 +6171,11 @@ func (m *LeaseInfoRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n84, err := m.Span.MarshalTo(dAtA[i:]) + n87, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n84 + i += n87 return i, nil } @@ -6043,19 +6197,19 @@ func (m *LeaseInfoResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n85, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n88, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n85 + i += n88 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Lease.Size())) - n86, err := m.Lease.MarshalTo(dAtA[i:]) + n89, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n86 + i += n89 return i, nil } @@ -6077,11 +6231,11 @@ func (m *RequestLeaseResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n87, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n90, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n87 + i += n90 return i, nil } @@ -6103,11 +6257,11 @@ func (m *ComputeChecksumRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n88, err := m.Span.MarshalTo(dAtA[i:]) + n91, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n88 + i += n91 if m.Version != 0 { dAtA[i] = 0x10 i++ @@ -6116,11 +6270,11 @@ func (m *ComputeChecksumRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.ChecksumID.Size())) - n89, err := m.ChecksumID.MarshalTo(dAtA[i:]) + n92, err := m.ChecksumID.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n89 + i += n92 if m.Snapshot { dAtA[i] = 0x20 i++ @@ -6152,11 +6306,11 @@ func (m *ComputeChecksumResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n90, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n93, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n90 + i += n93 return i, nil } @@ -6178,11 +6332,11 @@ func (m *DeprecatedVerifyChecksumRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n91, err := m.Span.MarshalTo(dAtA[i:]) + n94, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n91 + i += n94 return i, nil } @@ -6204,11 +6358,11 @@ func (m *DeprecatedVerifyChecksumResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n92, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n95, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n92 + i += n95 return i, nil } @@ -6235,48 +6389,48 @@ func (m *ExportStorage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.LocalFile.Size())) - n93, err := m.LocalFile.MarshalTo(dAtA[i:]) + n96, err := m.LocalFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n93 + i += n96 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.HttpPath.Size())) - n94, err := m.HttpPath.MarshalTo(dAtA[i:]) + n97, err := m.HttpPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n94 + i += n97 if m.GoogleCloudConfig != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.GoogleCloudConfig.Size())) - n95, err := m.GoogleCloudConfig.MarshalTo(dAtA[i:]) + n98, err := m.GoogleCloudConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n95 + i += n98 } if m.S3Config != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.S3Config.Size())) - n96, err := m.S3Config.MarshalTo(dAtA[i:]) + n99, err := m.S3Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n96 + i += n99 } if m.AzureConfig != nil { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.AzureConfig.Size())) - n97, err := m.AzureConfig.MarshalTo(dAtA[i:]) + n100, err := m.AzureConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n97 + i += n100 } return i, nil } @@ -6485,19 +6639,19 @@ func (m *WriteBatchRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n98, err := m.Span.MarshalTo(dAtA[i:]) + n101, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n98 + i += n101 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.DataSpan.Size())) - n99, err := m.DataSpan.MarshalTo(dAtA[i:]) + n102, err := m.DataSpan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n99 + i += n102 if len(m.Data) > 0 { dAtA[i] = 0x1a i++ @@ -6525,11 +6679,11 @@ func (m *WriteBatchResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n100, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n103, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n100 + i += n103 return i, nil } @@ -6551,27 +6705,27 @@ func (m *ExportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n101, err := m.Span.MarshalTo(dAtA[i:]) + n104, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n101 + i += n104 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Storage.Size())) - n102, err := m.Storage.MarshalTo(dAtA[i:]) + n105, err := m.Storage.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n102 + i += n105 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.StartTime.Size())) - n103, err := m.StartTime.MarshalTo(dAtA[i:]) + n106, err := m.StartTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n103 + i += n106 if m.MVCCFilter != 0 { dAtA[i] = 0x20 i++ @@ -6646,11 +6800,11 @@ func (m *ExportResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n104, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n107, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n104 + i += n107 if len(m.Files) > 0 { for _, msg := range m.Files { dAtA[i] = 0x12 @@ -6684,11 +6838,11 @@ func (m *ExportResponse_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n105, err := m.Span.MarshalTo(dAtA[i:]) + n108, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n105 + i += n108 if len(m.Path) > 0 { dAtA[i] = 0x12 i++ @@ -6704,11 +6858,11 @@ func (m *ExportResponse_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.Exported.Size())) - n106, err := m.Exported.MarshalTo(dAtA[i:]) + n109, err := m.Exported.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n106 + i += n109 if len(m.SST) > 0 { dAtA[i] = 0x3a i++ @@ -6736,11 +6890,11 @@ func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n107, err := m.Span.MarshalTo(dAtA[i:]) + n110, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n107 + i += n110 if len(m.Files) > 0 { for _, msg := range m.Files { dAtA[i] = 0x12 @@ -6756,11 +6910,11 @@ func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.DataSpan.Size())) - n108, err := m.DataSpan.MarshalTo(dAtA[i:]) + n111, err := m.DataSpan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n108 + i += n111 if len(m.Rekeys) > 0 { for _, msg := range m.Rekeys { dAtA[i] = 0x2a @@ -6776,11 +6930,11 @@ func (m *ImportRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.EndTime.Size())) - n109, err := m.EndTime.MarshalTo(dAtA[i:]) + n112, err := m.EndTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n109 + i += n112 return i, nil } @@ -6802,11 +6956,11 @@ func (m *ImportRequest_File) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Dir.Size())) - n110, err := m.Dir.MarshalTo(dAtA[i:]) + n113, err := m.Dir.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n110 + i += n113 if len(m.Path) > 0 { dAtA[i] = 0x12 i++ @@ -6869,19 +7023,19 @@ func (m *ImportResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n111, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n114, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n111 + i += n114 dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Imported.Size())) - n112, err := m.Imported.MarshalTo(dAtA[i:]) + n115, err := m.Imported.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n112 + i += n115 return i, nil } @@ -6903,11 +7057,11 @@ func (m *AdminScatterRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n113, err := m.Span.MarshalTo(dAtA[i:]) + n116, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n113 + i += n116 return i, nil } @@ -6929,11 +7083,11 @@ func (m *AdminScatterResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n114, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n117, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n114 + i += n117 if len(m.Ranges) > 0 { for _, msg := range m.Ranges { dAtA[i] = 0x12 @@ -6967,11 +7121,11 @@ func (m *AdminScatterResponse_Range) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n115, err := m.Span.MarshalTo(dAtA[i:]) + n118, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n115 + i += n118 return i, nil } @@ -6993,11 +7147,11 @@ func (m *AddSSTableRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Span.Size())) - n116, err := m.Span.MarshalTo(dAtA[i:]) + n119, err := m.Span.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n116 + i += n119 if len(m.Data) > 0 { dAtA[i] = 0x12 i++ @@ -7025,11 +7179,11 @@ func (m *AddSSTableResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.ResponseHeader.Size())) - n117, err := m.ResponseHeader.MarshalTo(dAtA[i:]) + n120, err := m.ResponseHeader.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n117 + i += n120 return i, nil } @@ -7052,151 +7206,151 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Get.Size())) - n118, err := m.Get.MarshalTo(dAtA[i:]) + n121, err := m.Get.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n118 + i += n121 } if m.Put != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Put.Size())) - n119, err := m.Put.MarshalTo(dAtA[i:]) + n122, err := m.Put.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n119 + i += n122 } if m.ConditionalPut != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.ConditionalPut.Size())) - n120, err := m.ConditionalPut.MarshalTo(dAtA[i:]) + n123, err := m.ConditionalPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n120 + i += n123 } if m.Increment != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Increment.Size())) - n121, err := m.Increment.MarshalTo(dAtA[i:]) + n124, err := m.Increment.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n121 + i += n124 } if m.Delete != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Delete.Size())) - n122, err := m.Delete.MarshalTo(dAtA[i:]) + n125, err := m.Delete.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n122 + i += n125 } if m.DeleteRange != nil { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeleteRange.Size())) - n123, err := m.DeleteRange.MarshalTo(dAtA[i:]) + n126, err := m.DeleteRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n123 + i += n126 } if m.Scan != nil { dAtA[i] = 0x3a i++ i = encodeVarintApi(dAtA, i, uint64(m.Scan.Size())) - n124, err := m.Scan.MarshalTo(dAtA[i:]) + n127, err := m.Scan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n124 + i += n127 } if m.BeginTransaction != nil { dAtA[i] = 0x42 i++ i = encodeVarintApi(dAtA, i, uint64(m.BeginTransaction.Size())) - n125, err := m.BeginTransaction.MarshalTo(dAtA[i:]) + n128, err := m.BeginTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n125 + i += n128 } if m.EndTransaction != nil { dAtA[i] = 0x4a i++ i = encodeVarintApi(dAtA, i, uint64(m.EndTransaction.Size())) - n126, err := m.EndTransaction.MarshalTo(dAtA[i:]) + n129, err := m.EndTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n126 + i += n129 } if m.AdminSplit != nil { dAtA[i] = 0x52 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminSplit.Size())) - n127, err := m.AdminSplit.MarshalTo(dAtA[i:]) + n130, err := m.AdminSplit.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n127 + i += n130 } if m.AdminMerge != nil { dAtA[i] = 0x5a i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminMerge.Size())) - n128, err := m.AdminMerge.MarshalTo(dAtA[i:]) + n131, err := m.AdminMerge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n128 + i += n131 } if m.HeartbeatTxn != nil { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.HeartbeatTxn.Size())) - n129, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) + n132, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n129 + i += n132 } if m.Gc != nil { dAtA[i] = 0x6a i++ i = encodeVarintApi(dAtA, i, uint64(m.Gc.Size())) - n130, err := m.Gc.MarshalTo(dAtA[i:]) + n133, err := m.Gc.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n130 + i += n133 } if m.PushTxn != nil { dAtA[i] = 0x72 i++ i = encodeVarintApi(dAtA, i, uint64(m.PushTxn.Size())) - n131, err := m.PushTxn.MarshalTo(dAtA[i:]) + n134, err := m.PushTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n131 + i += n134 } if m.RangeLookup != nil { dAtA[i] = 0x7a i++ i = encodeVarintApi(dAtA, i, uint64(m.RangeLookup.Size())) - n132, err := m.RangeLookup.MarshalTo(dAtA[i:]) + n135, err := m.RangeLookup.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n132 + i += n135 } if m.ResolveIntent != nil { dAtA[i] = 0x82 @@ -7204,11 +7358,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntent.Size())) - n133, err := m.ResolveIntent.MarshalTo(dAtA[i:]) + n136, err := m.ResolveIntent.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n133 + i += n136 } if m.ResolveIntentRange != nil { dAtA[i] = 0x8a @@ -7216,11 +7370,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntentRange.Size())) - n134, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) + n137, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n134 + i += n137 } if m.Merge != nil { dAtA[i] = 0x92 @@ -7228,11 +7382,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Merge.Size())) - n135, err := m.Merge.MarshalTo(dAtA[i:]) + n138, err := m.Merge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n135 + i += n138 } if m.TruncateLog != nil { dAtA[i] = 0x9a @@ -7240,11 +7394,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.TruncateLog.Size())) - n136, err := m.TruncateLog.MarshalTo(dAtA[i:]) + n139, err := m.TruncateLog.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n136 + i += n139 } if m.RequestLease != nil { dAtA[i] = 0xa2 @@ -7252,11 +7406,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.RequestLease.Size())) - n137, err := m.RequestLease.MarshalTo(dAtA[i:]) + n140, err := m.RequestLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n137 + i += n140 } if m.ReverseScan != nil { dAtA[i] = 0xaa @@ -7264,11 +7418,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ReverseScan.Size())) - n138, err := m.ReverseScan.MarshalTo(dAtA[i:]) + n141, err := m.ReverseScan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n138 + i += n141 } if m.ComputeChecksum != nil { dAtA[i] = 0xb2 @@ -7276,11 +7430,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ComputeChecksum.Size())) - n139, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) + n142, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n139 + i += n142 } if m.DeprecatedVerifyChecksum != nil { dAtA[i] = 0xba @@ -7288,11 +7442,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeprecatedVerifyChecksum.Size())) - n140, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) + n143, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n140 + i += n143 } if m.CheckConsistency != nil { dAtA[i] = 0xc2 @@ -7300,11 +7454,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.CheckConsistency.Size())) - n141, err := m.CheckConsistency.MarshalTo(dAtA[i:]) + n144, err := m.CheckConsistency.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n141 + i += n144 } if m.Noop != nil { dAtA[i] = 0xca @@ -7312,11 +7466,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Noop.Size())) - n142, err := m.Noop.MarshalTo(dAtA[i:]) + n145, err := m.Noop.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n142 + i += n145 } if m.InitPut != nil { dAtA[i] = 0xd2 @@ -7324,11 +7478,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.InitPut.Size())) - n143, err := m.InitPut.MarshalTo(dAtA[i:]) + n146, err := m.InitPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n143 + i += n146 } if m.TransferLease != nil { dAtA[i] = 0xe2 @@ -7336,11 +7490,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.TransferLease.Size())) - n144, err := m.TransferLease.MarshalTo(dAtA[i:]) + n147, err := m.TransferLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n144 + i += n147 } if m.AdminTransferLease != nil { dAtA[i] = 0xea @@ -7348,11 +7502,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminTransferLease.Size())) - n145, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) + n148, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n145 + i += n148 } if m.LeaseInfo != nil { dAtA[i] = 0xf2 @@ -7360,11 +7514,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.LeaseInfo.Size())) - n146, err := m.LeaseInfo.MarshalTo(dAtA[i:]) + n149, err := m.LeaseInfo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n146 + i += n149 } if m.WriteBatch != nil { dAtA[i] = 0xfa @@ -7372,11 +7526,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.WriteBatch.Size())) - n147, err := m.WriteBatch.MarshalTo(dAtA[i:]) + n150, err := m.WriteBatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n147 + i += n150 } if m.Export != nil { dAtA[i] = 0x82 @@ -7384,11 +7538,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Export.Size())) - n148, err := m.Export.MarshalTo(dAtA[i:]) + n151, err := m.Export.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n148 + i += n151 } if m.QueryTxn != nil { dAtA[i] = 0x8a @@ -7396,11 +7550,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.QueryTxn.Size())) - n149, err := m.QueryTxn.MarshalTo(dAtA[i:]) + n152, err := m.QueryTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n149 + i += n152 } if m.Import != nil { dAtA[i] = 0x92 @@ -7408,11 +7562,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Import.Size())) - n150, err := m.Import.MarshalTo(dAtA[i:]) + n153, err := m.Import.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n150 + i += n153 } if m.AdminChangeReplicas != nil { dAtA[i] = 0x9a @@ -7420,11 +7574,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminChangeReplicas.Size())) - n151, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) + n154, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n151 + i += n154 } if m.AdminScatter != nil { dAtA[i] = 0xa2 @@ -7432,11 +7586,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminScatter.Size())) - n152, err := m.AdminScatter.MarshalTo(dAtA[i:]) + n155, err := m.AdminScatter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n152 + i += n155 } if m.AddSstable != nil { dAtA[i] = 0xaa @@ -7444,11 +7598,11 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AddSstable.Size())) - n153, err := m.AddSstable.MarshalTo(dAtA[i:]) + n156, err := m.AddSstable.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n153 + i += n156 } if m.ClearRange != nil { dAtA[i] = 0xb2 @@ -7456,11 +7610,23 @@ func (m *RequestUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.ClearRange.Size())) - n154, err := m.ClearRange.MarshalTo(dAtA[i:]) + n157, err := m.ClearRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n154 + i += n157 + } + if m.AdjustStats != nil { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.AdjustStats.Size())) + n158, err := m.AdjustStats.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n158 } return i, nil } @@ -7484,151 +7650,151 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Get.Size())) - n155, err := m.Get.MarshalTo(dAtA[i:]) + n159, err := m.Get.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n155 + i += n159 } if m.Put != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Put.Size())) - n156, err := m.Put.MarshalTo(dAtA[i:]) + n160, err := m.Put.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n156 + i += n160 } if m.ConditionalPut != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.ConditionalPut.Size())) - n157, err := m.ConditionalPut.MarshalTo(dAtA[i:]) + n161, err := m.ConditionalPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n157 + i += n161 } if m.Increment != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Increment.Size())) - n158, err := m.Increment.MarshalTo(dAtA[i:]) + n162, err := m.Increment.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n158 + i += n162 } if m.Delete != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Delete.Size())) - n159, err := m.Delete.MarshalTo(dAtA[i:]) + n163, err := m.Delete.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n159 + i += n163 } if m.DeleteRange != nil { dAtA[i] = 0x32 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeleteRange.Size())) - n160, err := m.DeleteRange.MarshalTo(dAtA[i:]) + n164, err := m.DeleteRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n160 + i += n164 } if m.Scan != nil { dAtA[i] = 0x3a i++ i = encodeVarintApi(dAtA, i, uint64(m.Scan.Size())) - n161, err := m.Scan.MarshalTo(dAtA[i:]) + n165, err := m.Scan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n161 + i += n165 } if m.BeginTransaction != nil { dAtA[i] = 0x42 i++ i = encodeVarintApi(dAtA, i, uint64(m.BeginTransaction.Size())) - n162, err := m.BeginTransaction.MarshalTo(dAtA[i:]) + n166, err := m.BeginTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n162 + i += n166 } if m.EndTransaction != nil { dAtA[i] = 0x4a i++ i = encodeVarintApi(dAtA, i, uint64(m.EndTransaction.Size())) - n163, err := m.EndTransaction.MarshalTo(dAtA[i:]) + n167, err := m.EndTransaction.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n163 + i += n167 } if m.AdminSplit != nil { dAtA[i] = 0x52 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminSplit.Size())) - n164, err := m.AdminSplit.MarshalTo(dAtA[i:]) + n168, err := m.AdminSplit.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n164 + i += n168 } if m.AdminMerge != nil { dAtA[i] = 0x5a i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminMerge.Size())) - n165, err := m.AdminMerge.MarshalTo(dAtA[i:]) + n169, err := m.AdminMerge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n165 + i += n169 } if m.HeartbeatTxn != nil { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.HeartbeatTxn.Size())) - n166, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) + n170, err := m.HeartbeatTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n166 + i += n170 } if m.Gc != nil { dAtA[i] = 0x6a i++ i = encodeVarintApi(dAtA, i, uint64(m.Gc.Size())) - n167, err := m.Gc.MarshalTo(dAtA[i:]) + n171, err := m.Gc.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n167 + i += n171 } if m.PushTxn != nil { dAtA[i] = 0x72 i++ i = encodeVarintApi(dAtA, i, uint64(m.PushTxn.Size())) - n168, err := m.PushTxn.MarshalTo(dAtA[i:]) + n172, err := m.PushTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n168 + i += n172 } if m.RangeLookup != nil { dAtA[i] = 0x7a i++ i = encodeVarintApi(dAtA, i, uint64(m.RangeLookup.Size())) - n169, err := m.RangeLookup.MarshalTo(dAtA[i:]) + n173, err := m.RangeLookup.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n169 + i += n173 } if m.ResolveIntent != nil { dAtA[i] = 0x82 @@ -7636,11 +7802,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntent.Size())) - n170, err := m.ResolveIntent.MarshalTo(dAtA[i:]) + n174, err := m.ResolveIntent.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n170 + i += n174 } if m.ResolveIntentRange != nil { dAtA[i] = 0x8a @@ -7648,11 +7814,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ResolveIntentRange.Size())) - n171, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) + n175, err := m.ResolveIntentRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n171 + i += n175 } if m.Merge != nil { dAtA[i] = 0x92 @@ -7660,11 +7826,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Merge.Size())) - n172, err := m.Merge.MarshalTo(dAtA[i:]) + n176, err := m.Merge.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n172 + i += n176 } if m.TruncateLog != nil { dAtA[i] = 0x9a @@ -7672,11 +7838,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.TruncateLog.Size())) - n173, err := m.TruncateLog.MarshalTo(dAtA[i:]) + n177, err := m.TruncateLog.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n173 + i += n177 } if m.RequestLease != nil { dAtA[i] = 0xa2 @@ -7684,11 +7850,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.RequestLease.Size())) - n174, err := m.RequestLease.MarshalTo(dAtA[i:]) + n178, err := m.RequestLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n174 + i += n178 } if m.ReverseScan != nil { dAtA[i] = 0xaa @@ -7696,11 +7862,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ReverseScan.Size())) - n175, err := m.ReverseScan.MarshalTo(dAtA[i:]) + n179, err := m.ReverseScan.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n175 + i += n179 } if m.ComputeChecksum != nil { dAtA[i] = 0xb2 @@ -7708,11 +7874,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.ComputeChecksum.Size())) - n176, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) + n180, err := m.ComputeChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n176 + i += n180 } if m.DeprecatedVerifyChecksum != nil { dAtA[i] = 0xba @@ -7720,11 +7886,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.DeprecatedVerifyChecksum.Size())) - n177, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) + n181, err := m.DeprecatedVerifyChecksum.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n177 + i += n181 } if m.CheckConsistency != nil { dAtA[i] = 0xc2 @@ -7732,11 +7898,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.CheckConsistency.Size())) - n178, err := m.CheckConsistency.MarshalTo(dAtA[i:]) + n182, err := m.CheckConsistency.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n178 + i += n182 } if m.Noop != nil { dAtA[i] = 0xca @@ -7744,11 +7910,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Noop.Size())) - n179, err := m.Noop.MarshalTo(dAtA[i:]) + n183, err := m.Noop.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n179 + i += n183 } if m.InitPut != nil { dAtA[i] = 0xd2 @@ -7756,11 +7922,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.InitPut.Size())) - n180, err := m.InitPut.MarshalTo(dAtA[i:]) + n184, err := m.InitPut.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n180 + i += n184 } if m.AdminTransferLease != nil { dAtA[i] = 0xea @@ -7768,11 +7934,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminTransferLease.Size())) - n181, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) + n185, err := m.AdminTransferLease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n181 + i += n185 } if m.LeaseInfo != nil { dAtA[i] = 0xf2 @@ -7780,11 +7946,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.LeaseInfo.Size())) - n182, err := m.LeaseInfo.MarshalTo(dAtA[i:]) + n186, err := m.LeaseInfo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n182 + i += n186 } if m.WriteBatch != nil { dAtA[i] = 0xfa @@ -7792,11 +7958,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.WriteBatch.Size())) - n183, err := m.WriteBatch.MarshalTo(dAtA[i:]) + n187, err := m.WriteBatch.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n183 + i += n187 } if m.Export != nil { dAtA[i] = 0x82 @@ -7804,11 +7970,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Export.Size())) - n184, err := m.Export.MarshalTo(dAtA[i:]) + n188, err := m.Export.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n184 + i += n188 } if m.QueryTxn != nil { dAtA[i] = 0x8a @@ -7816,11 +7982,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.QueryTxn.Size())) - n185, err := m.QueryTxn.MarshalTo(dAtA[i:]) + n189, err := m.QueryTxn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n185 + i += n189 } if m.Import != nil { dAtA[i] = 0x92 @@ -7828,11 +7994,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.Import.Size())) - n186, err := m.Import.MarshalTo(dAtA[i:]) + n190, err := m.Import.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n186 + i += n190 } if m.AdminChangeReplicas != nil { dAtA[i] = 0x9a @@ -7840,11 +8006,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminChangeReplicas.Size())) - n187, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) + n191, err := m.AdminChangeReplicas.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n187 + i += n191 } if m.AdminScatter != nil { dAtA[i] = 0xa2 @@ -7852,11 +8018,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AdminScatter.Size())) - n188, err := m.AdminScatter.MarshalTo(dAtA[i:]) + n192, err := m.AdminScatter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n188 + i += n192 } if m.AddSstable != nil { dAtA[i] = 0xaa @@ -7864,11 +8030,11 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.AddSstable.Size())) - n189, err := m.AddSstable.MarshalTo(dAtA[i:]) + n193, err := m.AddSstable.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n189 + i += n193 } if m.ClearRange != nil { dAtA[i] = 0xb2 @@ -7876,11 +8042,23 @@ func (m *ResponseUnion) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintApi(dAtA, i, uint64(m.ClearRange.Size())) - n190, err := m.ClearRange.MarshalTo(dAtA[i:]) + n194, err := m.ClearRange.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n190 + i += n194 + } + if m.AdjustStats != nil { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.AdjustStats.Size())) + n195, err := m.AdjustStats.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n195 } return i, nil } @@ -7903,19 +8081,19 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size())) - n191, err := m.Timestamp.MarshalTo(dAtA[i:]) + n196, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n191 + i += n196 dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Replica.Size())) - n192, err := m.Replica.MarshalTo(dAtA[i:]) + n197, err := m.Replica.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n192 + i += n197 if m.RangeID != 0 { dAtA[i] = 0x18 i++ @@ -7931,11 +8109,11 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size())) - n193, err := m.Txn.MarshalTo(dAtA[i:]) + n198, err := m.Txn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n193 + i += n198 } if m.ReadConsistency != 0 { dAtA[i] = 0x30 @@ -7976,11 +8154,11 @@ func (m *Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.ScanOptions.Size())) - n194, err := m.ScanOptions.MarshalTo(dAtA[i:]) + n199, err := m.ScanOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n194 + i += n199 } return i, nil } @@ -8003,11 +8181,11 @@ func (m *BatchRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Header.Size())) - n195, err := m.Header.MarshalTo(dAtA[i:]) + n200, err := m.Header.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n195 + i += n200 if len(m.Requests) > 0 { for _, msg := range m.Requests { dAtA[i] = 0x12 @@ -8041,11 +8219,11 @@ func (m *BatchResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.BatchResponse_Header.Size())) - n196, err := m.BatchResponse_Header.MarshalTo(dAtA[i:]) + n201, err := m.BatchResponse_Header.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n196 + i += n201 if len(m.Responses) > 0 { for _, msg := range m.Responses { dAtA[i] = 0x12 @@ -8080,38 +8258,38 @@ func (m *BatchResponse_Header) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Error.Size())) - n197, err := m.Error.MarshalTo(dAtA[i:]) + n202, err := m.Error.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n197 + i += n202 } dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Timestamp.Size())) - n198, err := m.Timestamp.MarshalTo(dAtA[i:]) + n203, err := m.Timestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n198 + i += n203 if m.Txn != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Txn.Size())) - n199, err := m.Txn.MarshalTo(dAtA[i:]) + n204, err := m.Txn.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n199 + i += n204 } dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Now.Size())) - n200, err := m.Now.MarshalTo(dAtA[i:]) + n205, err := m.Now.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n200 + i += n205 if len(m.CollectedSpans) > 0 { for _, msg := range m.CollectedSpans { dAtA[i] = 0x32 @@ -8440,6 +8618,31 @@ func (m *CheckConsistencyResponse) Size() (n int) { return n } +func (m *AdjustStatsRequest) Size() (n int) { + var l int + _ = l + l = m.Span.Size() + n += 1 + l + sovApi(uint64(l)) + l = len(m.ComputationEndKey) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.DryRun { + n += 2 + } + return n +} + +func (m *AdjustStatsResponse) Size() (n int) { + var l int + _ = l + l = m.ResponseHeader.Size() + n += 1 + l + sovApi(uint64(l)) + l = m.AddedDelta.Size() + n += 1 + l + sovApi(uint64(l)) + return n +} + func (m *BeginTransactionRequest) Size() (n int) { var l int _ = l @@ -9399,6 +9602,10 @@ func (m *RequestUnion) Size() (n int) { l = m.ClearRange.Size() n += 2 + l + sovApi(uint64(l)) } + if m.AdjustStats != nil { + l = m.AdjustStats.Size() + n += 2 + l + sovApi(uint64(l)) + } return n } @@ -9549,6 +9756,10 @@ func (m *ResponseUnion) Size() (n int) { l = m.ClearRange.Size() n += 2 + l + sovApi(uint64(l)) } + if m.AdjustStats != nil { + l = m.AdjustStats.Size() + n += 2 + l + sovApi(uint64(l)) + } return n } @@ -9768,6 +9979,9 @@ func (this *RequestUnion) GetValue() interface{} { if this.ClearRange != nil { return this.ClearRange } + if this.AdjustStats != nil { + return this.AdjustStats + } return nil } @@ -9847,6 +10061,8 @@ func (this *RequestUnion) SetValue(value interface{}) bool { this.AddSstable = vt case *ClearRangeRequest: this.ClearRange = vt + case *AdjustStatsRequest: + this.AdjustStats = vt default: return false } @@ -9961,6 +10177,9 @@ func (this *ResponseUnion) GetValue() interface{} { if this.ClearRange != nil { return this.ClearRange } + if this.AdjustStats != nil { + return this.AdjustStats + } return nil } @@ -10038,6 +10257,8 @@ func (this *ResponseUnion) SetValue(value interface{}) bool { this.AddSstable = vt case *ClearRangeResponse: this.ClearRange = vt + case *AdjustStatsResponse: + this.AdjustStats = vt default: return false } @@ -12014,7 +12235,226 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field StopAtRangeBoundary", wireType) } - var v int + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.StopAtRangeBoundary = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinResults", wireType) + } + m.MinResults = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinResults |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ScanRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ScanRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Span", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Span.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReturnIntents", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReturnIntents = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ScanResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ScanResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResponseHeader", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResponseHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rows", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -12024,17 +12464,28 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - m.StopAtRangeBoundary = bool(v != 0) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field MinResults", wireType) + if msglen < 0 { + return ErrInvalidLengthApi } - m.MinResults = 0 + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rows = append(m.Rows, KeyValue{}) + if err := m.Rows[len(m.Rows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IntentRows", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -12044,11 +12495,23 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.MinResults |= (int64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IntentRows = append(m.IntentRows, KeyValue{}) + if err := m.IntentRows[len(m.IntentRows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12070,7 +12533,7 @@ func (m *ScanOptions) Unmarshal(dAtA []byte) error { } return nil } -func (m *ScanRequest) Unmarshal(dAtA []byte) error { +func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12093,10 +12556,10 @@ func (m *ScanRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ScanRequest: wiretype end group for non-group") + return fmt.Errorf("proto: ReverseScanRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ReverseScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12170,7 +12633,7 @@ func (m *ScanRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *ScanResponse) Unmarshal(dAtA []byte) error { +func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12193,10 +12656,10 @@ func (m *ScanResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ScanResponse: wiretype end group for non-group") + return fmt.Errorf("proto: ReverseScanResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ReverseScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12312,7 +12775,7 @@ func (m *ScanResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { +func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12335,10 +12798,10 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ReverseScanRequest: wiretype end group for non-group") + return fmt.Errorf("proto: CheckConsistencyRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ReverseScanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CheckConsistencyRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12371,9 +12834,9 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ReturnIntents", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WithDiff", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -12390,7 +12853,7 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { break } } - m.ReturnIntents = bool(v != 0) + m.WithDiff = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12412,7 +12875,7 @@ func (m *ReverseScanRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { +func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12435,10 +12898,10 @@ func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ReverseScanResponse: wiretype end group for non-group") + return fmt.Errorf("proto: CheckConsistencyResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ReverseScanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CheckConsistencyResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12471,68 +12934,6 @@ func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rows", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Rows = append(m.Rows, KeyValue{}) - if err := m.Rows[len(m.Rows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IntentRows", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.IntentRows = append(m.IntentRows, KeyValue{}) - if err := m.IntentRows[len(m.IntentRows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12554,7 +12955,7 @@ func (m *ReverseScanResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { +func (m *AdjustStatsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12577,10 +12978,10 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CheckConsistencyRequest: wiretype end group for non-group") + return fmt.Errorf("proto: AdjustStatsRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CheckConsistencyRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AdjustStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12614,8 +13015,39 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ComputationEndKey", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ComputationEndKey = append(m.ComputationEndKey[:0], dAtA[iNdEx:postIndex]...) + if m.ComputationEndKey == nil { + m.ComputationEndKey = []byte{} + } + iNdEx = postIndex + case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WithDiff", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -12632,7 +13064,7 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { break } } - m.WithDiff = bool(v != 0) + m.DryRun = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -12654,7 +13086,7 @@ func (m *CheckConsistencyRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { +func (m *AdjustStatsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -12677,10 +13109,10 @@ func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CheckConsistencyResponse: wiretype end group for non-group") + return fmt.Errorf("proto: AdjustStatsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CheckConsistencyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AdjustStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -12713,6 +13145,36 @@ func (m *CheckConsistencyResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AddedDelta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AddedDelta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -21346,6 +21808,39 @@ func (m *RequestUnion) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 39: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdjustStats", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AdjustStats == nil { + m.AdjustStats = &AdjustStatsRequest{} + } + if err := m.AdjustStats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -22584,6 +23079,39 @@ func (m *ResponseUnion) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 39: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdjustStats", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AdjustStats == nil { + m.AdjustStats = &AdjustStatsResponse{} + } + if err := m.AdjustStats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -23445,321 +23973,329 @@ var ( func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 5043 bytes of a gzipped FileDescriptorProto + // 5180 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5c, 0x4d, 0x6c, 0x1b, 0x49, - 0x76, 0x76, 0x8b, 0xa4, 0x44, 0x3e, 0xfe, 0x98, 0x2a, 0xcb, 0x36, 0x2d, 0xdb, 0xa2, 0x4c, 0x5b, - 0x1e, 0x8f, 0x77, 0x46, 0x1a, 0x5b, 0x71, 0x32, 0x33, 0x3b, 0x93, 0x1d, 0x91, 0x92, 0x6d, 0x8e, - 0x65, 0xc9, 0x53, 0xa4, 0xe6, 0x6f, 0x93, 0xed, 0xb4, 0xba, 0x4b, 0x64, 0xc7, 0x64, 0x37, 0xdd, - 0x5d, 0xb4, 0xa4, 0xc9, 0x21, 0x7f, 0x08, 0x92, 0xc3, 0x26, 0x58, 0x20, 0x73, 0x08, 0x10, 0x20, - 0x59, 0x20, 0x09, 0x10, 0x20, 0xa7, 0x1c, 0x72, 0xce, 0x25, 0x87, 0x09, 0xb2, 0x08, 0xe6, 0x90, - 0x00, 0x41, 0x02, 0x08, 0x89, 0x72, 0x59, 0x6c, 0x72, 0xcb, 0x6d, 0x02, 0x04, 0x41, 0xfd, 0x34, - 0xd9, 0x24, 0xbb, 0x49, 0x49, 0xd3, 0x8b, 0x41, 0x72, 0x22, 0xeb, 0x75, 0xbd, 0x57, 0x55, 0xaf, - 0x5e, 0xbd, 0xfa, 0xaa, 0xde, 0xeb, 0x86, 0x59, 0xc7, 0xd6, 0xf4, 0x66, 0x67, 0x77, 0x45, 0xeb, - 0x98, 0xcb, 0x1d, 0xc7, 0xa6, 0x36, 0x9a, 0xd5, 0x6d, 0xfd, 0x39, 0x27, 0x2f, 0xcb, 0x87, 0xf3, - 0xc8, 0xab, 0x65, 0x68, 0x54, 0x13, 0xd5, 0xe6, 0xe7, 0x3c, 0x1a, 0x71, 0x1c, 0xdb, 0x71, 0x25, - 0xf5, 0x92, 0x47, 0x6d, 0x13, 0xaa, 0xf9, 0x6a, 0xdf, 0x74, 0xa9, 0xed, 0x68, 0x0d, 0xb2, 0x42, - 0xac, 0x86, 0x69, 0x79, 0x3f, 0xac, 0xde, 0x4b, 0x5d, 0x5f, 0x95, 0x95, 0x0a, 0x5d, 0x6a, 0xb6, - 0x56, 0x9a, 0x2d, 0x7d, 0x85, 0x9a, 0x6d, 0xe2, 0x52, 0xad, 0xdd, 0x91, 0x4f, 0x16, 0xf9, 0x13, - 0xea, 0x68, 0xba, 0x69, 0x35, 0x56, 0x1c, 0xa2, 0xdb, 0x8e, 0x41, 0x0c, 0xd5, 0xed, 0x68, 0x96, - 0xd7, 0x9d, 0x86, 0xdd, 0xb0, 0xf9, 0xdf, 0x15, 0xf6, 0x4f, 0x50, 0x4b, 0xbf, 0x0a, 0x29, 0xac, - 0x59, 0x0d, 0x52, 0xb5, 0xf6, 0x6c, 0xf4, 0x0e, 0xc4, 0x0d, 0xe2, 0xea, 0x05, 0x65, 0x51, 0xb9, - 0x93, 0xbe, 0x5f, 0x5a, 0x1e, 0x19, 0xe7, 0x32, 0xaf, 0xbb, 0x4e, 0x5c, 0xdd, 0x31, 0x3b, 0xd4, - 0x76, 0xca, 0xf1, 0x2f, 0x8e, 0x8a, 0xe7, 0x30, 0xe7, 0x42, 0x3f, 0x03, 0x89, 0x16, 0xd1, 0x5c, - 0x52, 0x98, 0xe2, 0xec, 0x85, 0x00, 0xf6, 0x4d, 0xf6, 0x5c, 0x32, 0x89, 0xca, 0xa5, 0xef, 0xc7, - 0x20, 0x87, 0x89, 0xdb, 0xb1, 0x2d, 0x97, 0x3c, 0x26, 0x9a, 0x41, 0x1c, 0xf4, 0x06, 0xc4, 0xe8, - 0x81, 0x55, 0x88, 0x71, 0x31, 0x0b, 0x01, 0x62, 0xea, 0x8e, 0x66, 0xb9, 0x9a, 0x4e, 0x4d, 0xdb, - 0xc2, 0xac, 0x2a, 0x7a, 0x13, 0xd2, 0x0e, 0x71, 0xbb, 0x6d, 0xc2, 0x07, 0x5c, 0x88, 0x73, 0xce, - 0xcb, 0x01, 0x9c, 0xb5, 0x8e, 0x66, 0x61, 0x10, 0x75, 0xd9, 0x7f, 0x74, 0x05, 0x92, 0x56, 0xb7, - 0xad, 0x3e, 0x27, 0x87, 0x6e, 0x21, 0xb1, 0xa8, 0xdc, 0x89, 0xe1, 0x19, 0xab, 0xdb, 0x7e, 0x42, - 0x0e, 0x5d, 0x54, 0x81, 0xb4, 0xc3, 0x86, 0xab, 0x9a, 0xd6, 0x9e, 0xed, 0x16, 0xa6, 0x17, 0x63, - 0x77, 0xd2, 0xf7, 0xaf, 0x85, 0x29, 0x85, 0x29, 0x50, 0x8e, 0x0c, 0x1c, 0x8f, 0xe0, 0xa2, 0x1a, - 0x64, 0x65, 0xcf, 0x1c, 0xa2, 0xb9, 0xb6, 0x55, 0x98, 0x59, 0x54, 0xee, 0xe4, 0xee, 0x2f, 0x07, - 0x89, 0x19, 0xd0, 0x02, 0x2b, 0x76, 0xdb, 0x04, 0x73, 0x2e, 0x9c, 0x71, 0x7c, 0xa5, 0xd2, 0x27, - 0x90, 0xf1, 0x3f, 0x45, 0x08, 0x72, 0x78, 0xa3, 0xb6, 0xf3, 0x74, 0x43, 0xdd, 0xd9, 0x7a, 0xb2, - 0xb5, 0xfd, 0xd1, 0x56, 0xfe, 0x1c, 0x9a, 0x83, 0xbc, 0xa4, 0x3d, 0xd9, 0xf8, 0x44, 0xdd, 0xac, - 0x3e, 0xad, 0xd6, 0xf3, 0x0a, 0xba, 0x02, 0x17, 0x25, 0x15, 0xaf, 0x6d, 0x3d, 0xda, 0x50, 0xcb, - 0xdb, 0x3b, 0x5b, 0xeb, 0x6b, 0xf8, 0x93, 0xfc, 0xd4, 0x7c, 0xfc, 0x77, 0xfe, 0x64, 0xe1, 0x5c, - 0xe9, 0x29, 0xc0, 0x23, 0x42, 0x31, 0x79, 0xd1, 0x25, 0x2e, 0x45, 0x6f, 0xc1, 0x74, 0x93, 0xf7, - 0x46, 0x9a, 0x44, 0x98, 0x4a, 0xcb, 0x49, 0x36, 0xf0, 0x2f, 0x8f, 0x8a, 0x0a, 0x96, 0x0c, 0x6f, - 0xc7, 0x7f, 0xfc, 0xc3, 0xa2, 0x52, 0xfa, 0x0d, 0x05, 0xd2, 0x5c, 0x9e, 0x18, 0x1a, 0xaa, 0x0c, - 0x09, 0xbc, 0x31, 0x51, 0x0f, 0xa3, 0xa2, 0xd1, 0x32, 0x24, 0x5e, 0x6a, 0xad, 0xee, 0x38, 0x43, - 0xfb, 0x90, 0x3d, 0xc7, 0xa2, 0x5a, 0xe9, 0x2f, 0x15, 0x80, 0x67, 0xdd, 0x08, 0x06, 0xc5, 0x4c, - 0xfc, 0x44, 0x2d, 0x7b, 0x26, 0xce, 0x2b, 0xa3, 0x4b, 0x30, 0x6d, 0x5a, 0x2d, 0xd3, 0x22, 0xdc, - 0xa4, 0x93, 0x58, 0x96, 0xd0, 0x1c, 0x24, 0x76, 0x5b, 0xa6, 0x65, 0x70, 0x7b, 0x4d, 0x62, 0x51, - 0x90, 0x8a, 0xc3, 0x90, 0xe6, 0x5d, 0x8e, 0x50, 0x6f, 0xa5, 0x7f, 0x51, 0xe0, 0x62, 0xc5, 0xb6, - 0x0c, 0x93, 0x2d, 0x1c, 0xad, 0xf5, 0x4d, 0xaa, 0xe4, 0x01, 0xa4, 0xc8, 0x41, 0x47, 0x15, 0x9c, - 0xb1, 0x09, 0xd3, 0x98, 0x24, 0x07, 0x1d, 0xfe, 0x6f, 0xac, 0xc6, 0x7e, 0x11, 0x2e, 0x0d, 0x0f, - 0x2e, 0x4a, 0xe5, 0xfd, 0xad, 0x02, 0xb9, 0xaa, 0x65, 0xd2, 0x6f, 0x52, 0x6b, 0xbd, 0xe1, 0xc7, - 0x7c, 0xc3, 0x47, 0x77, 0x21, 0xbf, 0xa7, 0x99, 0xad, 0x6d, 0xab, 0x6e, 0xb7, 0x77, 0x5d, 0x6a, - 0x5b, 0xc4, 0x95, 0xfa, 0x19, 0xa1, 0x4b, 0x55, 0x7d, 0x08, 0xe7, 0x7b, 0x43, 0x89, 0x52, 0x47, - 0x2f, 0x20, 0x5f, 0xb5, 0x74, 0x87, 0xb4, 0x89, 0x15, 0x85, 0x92, 0xae, 0x41, 0xca, 0xf4, 0xc4, - 0x71, 0x45, 0xc5, 0x70, 0x9f, 0x20, 0x87, 0xd2, 0x85, 0x59, 0x5f, 0x93, 0x51, 0x7a, 0x99, 0xab, - 0x90, 0xb2, 0xc8, 0xbe, 0xda, 0x9f, 0xa6, 0x18, 0x4e, 0x5a, 0x64, 0x9f, 0x4f, 0x4b, 0xe9, 0x19, - 0x64, 0xd7, 0x49, 0x8b, 0x50, 0x12, 0x99, 0xa7, 0xdc, 0x81, 0x9c, 0x27, 0x31, 0xca, 0x29, 0xf9, - 0x5c, 0x01, 0x24, 0xe5, 0xb2, 0x4d, 0x29, 0x82, 0x59, 0x29, 0xb2, 0xbd, 0x96, 0x76, 0x1d, 0x4b, - 0x6c, 0x9a, 0xc2, 0x14, 0x41, 0x90, 0xf8, 0xbe, 0xd9, 0x77, 0x77, 0x71, 0xbf, 0xbb, 0x13, 0xe3, - 0x7c, 0x3f, 0x9e, 0x9c, 0xca, 0xc7, 0x4a, 0xfb, 0x70, 0x61, 0xa0, 0x57, 0xd1, 0x4e, 0x5c, 0x9c, - 0xf7, 0x6c, 0x6a, 0x31, 0x76, 0x27, 0x53, 0x9e, 0xf9, 0xea, 0xa8, 0x18, 0x7b, 0x42, 0x0e, 0x31, - 0x27, 0x96, 0xea, 0x30, 0x5b, 0x69, 0x11, 0xcd, 0x89, 0x48, 0x1b, 0x72, 0xf2, 0x3e, 0x01, 0xe4, - 0x97, 0x1a, 0xe5, 0x04, 0x9a, 0x90, 0xae, 0xe9, 0x9a, 0xb5, 0xdd, 0x61, 0x7e, 0xcd, 0x45, 0xab, - 0x70, 0xc9, 0xa5, 0x76, 0x47, 0xd5, 0xa8, 0x2a, 0xc0, 0xc9, 0xae, 0xdd, 0xb5, 0x0c, 0xcd, 0x39, - 0xe4, 0x6d, 0x24, 0xf1, 0x05, 0xf6, 0x74, 0x8d, 0xf2, 0x8e, 0x94, 0xe5, 0x23, 0x36, 0x65, 0x6d, - 0xd3, 0x52, 0x19, 0x86, 0x68, 0x51, 0x57, 0x1a, 0x33, 0xb4, 0x4d, 0x0b, 0x0b, 0x8a, 0x1c, 0xc5, - 0xaf, 0x88, 0xa6, 0x22, 0xb0, 0x91, 0x25, 0xc8, 0x49, 0x1b, 0x31, 0x2d, 0x4a, 0x2c, 0xea, 0x99, - 0x49, 0x56, 0x50, 0xab, 0x82, 0x38, 0x60, 0x11, 0x7f, 0xaf, 0x40, 0x46, 0xb4, 0x1e, 0xa5, 0x2d, - 0x3c, 0x80, 0xb8, 0x63, 0xef, 0x0b, 0x5b, 0x48, 0xdf, 0xbf, 0x1a, 0x20, 0xe2, 0x09, 0x39, 0xf4, - 0x7b, 0x5a, 0x5e, 0x1d, 0x95, 0x21, 0x2d, 0x3a, 0xae, 0x72, 0xee, 0xd8, 0x49, 0xb9, 0x41, 0x70, - 0x61, 0x7b, 0xdf, 0x65, 0xd0, 0x07, 0x61, 0xf2, 0x92, 0x38, 0x2e, 0xf9, 0xe6, 0xb4, 0xfa, 0x8f, - 0x0a, 0x5c, 0x18, 0xe8, 0xc4, 0xff, 0x13, 0xe5, 0xee, 0xc3, 0xe5, 0x4a, 0x93, 0xe8, 0xcf, 0x2b, - 0xb6, 0xe5, 0x9a, 0x2e, 0x25, 0x96, 0x7e, 0x18, 0x81, 0x82, 0xaf, 0x42, 0x6a, 0xdf, 0xa4, 0x4d, - 0xd5, 0x30, 0xf7, 0xf6, 0xf8, 0x2a, 0x49, 0xe2, 0x24, 0x23, 0xac, 0x9b, 0x7b, 0x7b, 0x72, 0x8d, - 0xa8, 0x50, 0x18, 0x6d, 0x38, 0xca, 0xf5, 0xfe, 0x29, 0x5c, 0x2e, 0x93, 0x86, 0x69, 0xf9, 0xcf, - 0x38, 0x51, 0xb9, 0x29, 0x15, 0x0a, 0xa3, 0xb2, 0xa3, 0xec, 0xfc, 0xaf, 0xc5, 0xe0, 0xe2, 0x86, - 0x65, 0x44, 0xda, 0x77, 0xb6, 0x9f, 0xe8, 0x76, 0xbb, 0x6d, 0x52, 0x39, 0x25, 0xb2, 0x84, 0xde, - 0x82, 0xa4, 0x41, 0x34, 0xa3, 0x07, 0xac, 0xd3, 0xf7, 0xaf, 0xfb, 0x84, 0xb2, 0xf3, 0xf0, 0x72, - 0xb3, 0xa5, 0x2f, 0xd7, 0xbd, 0x93, 0x32, 0xee, 0x55, 0x47, 0xbf, 0x04, 0x97, 0x99, 0x31, 0x39, - 0x96, 0xd6, 0x52, 0x85, 0x34, 0x95, 0x3a, 0x66, 0xa3, 0x41, 0x1c, 0x79, 0x76, 0xbc, 0x13, 0xd0, - 0xbd, 0xaa, 0xe4, 0xa8, 0x70, 0x86, 0xba, 0xa8, 0x8f, 0x2f, 0x9a, 0x41, 0x64, 0xf4, 0x1e, 0x64, - 0xa4, 0x91, 0xb3, 0x13, 0x29, 0x3b, 0x5b, 0xc6, 0xc6, 0x8d, 0x5a, 0x58, 0xb8, 0x5c, 0x17, 0x8c, - 0xe2, 0xa2, 0x15, 0xb6, 0xcf, 0xbe, 0xe8, 0x9a, 0x0e, 0x51, 0xef, 0x75, 0xf4, 0xc2, 0x34, 0x1b, - 0x7b, 0x39, 0x77, 0x7c, 0x54, 0x04, 0x2c, 0xc8, 0xf7, 0x9e, 0x55, 0xd8, 0xbe, 0x2b, 0xfe, 0x77, - 0x74, 0x39, 0xc7, 0xbf, 0xaf, 0xc0, 0xa5, 0xe1, 0x29, 0x88, 0x72, 0xd1, 0xdf, 0x81, 0xbc, 0x6d, - 0x11, 0xb5, 0xd3, 0xd4, 0x5c, 0x22, 0x75, 0x27, 0xf7, 0xf9, 0x9c, 0x6d, 0x91, 0x67, 0x8c, 0x2c, - 0x34, 0x21, 0x3c, 0xd0, 0xfb, 0xf1, 0x64, 0x2c, 0x1f, 0x2f, 0x7d, 0x06, 0xb3, 0x6b, 0x46, 0xdb, - 0xb4, 0x6a, 0x9d, 0x96, 0x19, 0x05, 0x34, 0xbc, 0x05, 0x29, 0x97, 0x89, 0x62, 0x18, 0x84, 0x9b, - 0x85, 0x6f, 0xa3, 0x4f, 0xf2, 0x27, 0x4f, 0xc8, 0x61, 0x7f, 0x73, 0xf6, 0xb7, 0x1d, 0xa5, 0xbd, - 0xd7, 0xe5, 0xb0, 0x9e, 0x12, 0x27, 0x5a, 0x34, 0xe1, 0x97, 0x1a, 0x65, 0x87, 0x7f, 0x5d, 0x81, - 0x2b, 0x5c, 0x36, 0xb7, 0x8f, 0x3d, 0xe2, 0xf0, 0x1b, 0x99, 0x08, 0x26, 0xe4, 0x26, 0x4c, 0x53, - 0xcd, 0x69, 0x10, 0xb1, 0x48, 0x13, 0xe5, 0xf4, 0x57, 0x47, 0xc5, 0x99, 0x1a, 0xb5, 0x1d, 0x52, - 0x5d, 0xc7, 0xf2, 0x91, 0x1c, 0x9e, 0x06, 0xf3, 0x41, 0x5d, 0x88, 0x72, 0x98, 0x3f, 0x51, 0x64, - 0x1b, 0x95, 0xa6, 0x40, 0x64, 0x9d, 0x96, 0xa9, 0x6b, 0x6e, 0x04, 0xe3, 0xdc, 0x80, 0xb4, 0xce, - 0x65, 0xaa, 0xf4, 0xb0, 0x23, 0xce, 0x05, 0xb9, 0xfb, 0xb7, 0x02, 0xfb, 0xc8, 0xdb, 0x14, 0x1d, - 0xa8, 0x1f, 0x76, 0x08, 0x06, 0xbd, 0xf7, 0x1f, 0xad, 0xc3, 0x8c, 0xd0, 0x89, 0xb7, 0xff, 0x8d, - 0x11, 0xc1, 0xd6, 0x70, 0x9d, 0x57, 0x96, 0x6e, 0xc2, 0x63, 0x95, 0xfa, 0xdc, 0x85, 0xab, 0x81, - 0x63, 0x8d, 0xfa, 0x18, 0xc1, 0x31, 0xe5, 0xa6, 0x6d, 0x3f, 0xef, 0x76, 0x22, 0x50, 0xe4, 0x75, - 0x80, 0xb6, 0x76, 0x20, 0x40, 0xac, 0x80, 0xa4, 0x09, 0x9c, 0x6a, 0x6b, 0x07, 0xbc, 0x15, 0x17, - 0x15, 0x60, 0xc6, 0x11, 0xb8, 0x45, 0x7a, 0x17, 0xaf, 0xd8, 0x83, 0x37, 0xcc, 0xad, 0xfc, 0x17, - 0x83, 0x37, 0xfe, 0x6e, 0x45, 0xe9, 0xe9, 0xde, 0x83, 0xe9, 0x5e, 0xef, 0x62, 0xa7, 0xba, 0x0f, - 0x95, 0x7c, 0x68, 0x07, 0x66, 0x3b, 0x0e, 0xd9, 0x23, 0x54, 0x6f, 0x12, 0xc3, 0x1b, 0x6a, 0xec, - 0x94, 0xc2, 0xf2, 0x7d, 0x11, 0x42, 0x37, 0xa5, 0xdf, 0x55, 0xe0, 0xc2, 0x63, 0xa2, 0x39, 0x74, - 0x97, 0x68, 0xb4, 0x7e, 0x10, 0xc5, 0x1e, 0xfb, 0x00, 0x62, 0x96, 0xbd, 0x2f, 0x6f, 0x23, 0xc6, - 0x6f, 0xa3, 0xb2, 0x5b, 0xac, 0xbe, 0x34, 0xc0, 0xef, 0xc2, 0xdc, 0x60, 0x77, 0xa2, 0xb4, 0xbc, - 0x3f, 0x8f, 0x41, 0xea, 0x51, 0x25, 0x82, 0x21, 0xbe, 0x23, 0x8f, 0x85, 0xe1, 0xfa, 0xef, 0x35, - 0xb3, 0xfc, 0xa8, 0xf2, 0x84, 0x1c, 0x7a, 0xa0, 0x95, 0x71, 0xa1, 0x35, 0x48, 0xd1, 0xa6, 0x43, - 0xdc, 0xa6, 0xdd, 0x32, 0x24, 0x46, 0x38, 0x91, 0x9a, 0xfa, 0x5c, 0xa8, 0x05, 0x17, 0xe9, 0x81, - 0xc5, 0xf1, 0x80, 0xda, 0xd0, 0xd5, 0xbe, 0xb8, 0xc4, 0x49, 0xc4, 0xcd, 0x33, 0x71, 0xc7, 0x47, - 0x45, 0x54, 0x3f, 0xb0, 0xd8, 0x08, 0x1f, 0x55, 0xea, 0x9e, 0x00, 0x8c, 0xa8, 0xa4, 0xe9, 0x3d, - 0xda, 0xfc, 0x73, 0x48, 0xf0, 0x51, 0xa0, 0x2b, 0x10, 0x63, 0x9b, 0xa4, 0x32, 0xb8, 0x49, 0x32, - 0x1a, 0x1f, 0x94, 0xd7, 0xc0, 0x69, 0xe6, 0xbe, 0xcf, 0x25, 0x2c, 0x40, 0xda, 0xc1, 0x07, 0x00, - 0x4c, 0x85, 0x51, 0xce, 0xfe, 0x5f, 0xc5, 0x20, 0xf7, 0xac, 0xeb, 0x36, 0xa3, 0xb1, 0xf2, 0x0a, - 0x40, 0xa7, 0xeb, 0x36, 0x89, 0xa3, 0xd2, 0x03, 0x4b, 0x0e, 0x78, 0x42, 0x7c, 0xc1, 0x1b, 0xb1, - 0xe0, 0xab, 0x1f, 0x58, 0x68, 0x5b, 0x0a, 0x21, 0x6a, 0x3f, 0x48, 0x71, 0xd7, 0x27, 0x44, 0xc6, - 0x71, 0x96, 0x45, 0x00, 0x67, 0xd9, 0x8b, 0xe3, 0x2c, 0xd7, 0x0f, 0xac, 0xa7, 0x84, 0x6a, 0x03, - 0x02, 0x09, 0x13, 0xf8, 0x0e, 0xcc, 0xb0, 0x82, 0x4a, 0xed, 0xd3, 0x18, 0xd6, 0x34, 0xe3, 0xa9, - 0xdb, 0xde, 0xca, 0x4d, 0x9c, 0x6e, 0xe5, 0xa2, 0x6f, 0x43, 0x4a, 0x34, 0xca, 0x76, 0xb1, 0x69, - 0xbe, 0x8b, 0x05, 0x69, 0x42, 0xea, 0x9e, 0xef, 0x5f, 0x49, 0xde, 0x22, 0xdb, 0xbd, 0xe6, 0x20, - 0xb1, 0x67, 0x3b, 0x3a, 0xe1, 0xc1, 0x8c, 0x24, 0x16, 0x85, 0x9e, 0x63, 0x4e, 0xe6, 0x53, 0xa5, - 0x3f, 0x54, 0xe0, 0x7c, 0x6f, 0xde, 0xa2, 0x74, 0xca, 0x95, 0x01, 0xed, 0x9f, 0x7e, 0x0a, 0x99, - 0xc6, 0x4b, 0x7f, 0x36, 0x05, 0xe7, 0x3f, 0xe8, 0x12, 0xe7, 0x30, 0x1a, 0xb3, 0x2a, 0x8b, 0x78, - 0xd5, 0xd4, 0x19, 0x4d, 0x81, 0x47, 0xb0, 0x6e, 0xc3, 0xf9, 0x7d, 0xcd, 0xa4, 0xea, 0x9e, 0xed, - 0xa8, 0xdd, 0x8e, 0xa1, 0x51, 0x2f, 0x58, 0x90, 0x65, 0xe4, 0x87, 0xb6, 0xb3, 0xc3, 0x89, 0x88, - 0x00, 0x7a, 0x6e, 0xd9, 0xfb, 0x96, 0xca, 0xc8, 0xa6, 0xd5, 0x60, 0x6a, 0x70, 0x0b, 0x71, 0x7e, - 0xd5, 0xf5, 0x73, 0xff, 0x7c, 0x54, 0x5c, 0x6d, 0x98, 0xb4, 0xd9, 0xdd, 0x5d, 0xd6, 0xed, 0xf6, - 0x4a, 0xaf, 0x23, 0xc6, 0x6e, 0xff, 0xff, 0x4a, 0xe7, 0x79, 0x63, 0x85, 0x07, 0x0b, 0xbb, 0x5d, - 0xd3, 0x58, 0xde, 0xd9, 0xa9, 0xae, 0xe3, 0x3c, 0x17, 0xf9, 0x91, 0x90, 0x58, 0x3f, 0xb0, 0x3c, - 0x64, 0xf1, 0x95, 0x02, 0xf9, 0xbe, 0x9e, 0xa2, 0x9c, 0xc6, 0x0d, 0x48, 0xbf, 0xe8, 0x12, 0xc7, - 0x24, 0xc6, 0xa9, 0xe7, 0x11, 0x24, 0x23, 0x5b, 0x3a, 0x9f, 0x42, 0x66, 0x40, 0x0f, 0xb1, 0xaf, - 0xa7, 0x87, 0xf4, 0x7e, 0x5f, 0x05, 0xa5, 0xff, 0x51, 0x60, 0x0e, 0x13, 0xd7, 0x6e, 0xbd, 0x24, - 0xe2, 0x66, 0x25, 0x02, 0x4b, 0xd9, 0x06, 0x79, 0x89, 0xa1, 0x7e, 0x1d, 0x83, 0x49, 0x09, 0x19, - 0xc2, 0x77, 0x4c, 0xbb, 0x54, 0xa3, 0x5d, 0x71, 0x15, 0x14, 0x8c, 0x44, 0x7d, 0x2a, 0xac, 0xf1, - 0xba, 0x58, 0xf2, 0xb0, 0x93, 0x75, 0xc7, 0x36, 0x5d, 0xdb, 0xf2, 0x6e, 0x6a, 0x45, 0x49, 0xce, - 0xfe, 0x2f, 0xc0, 0xc5, 0xa1, 0xf1, 0x47, 0xe9, 0xd9, 0x7f, 0x73, 0x0a, 0xae, 0x0c, 0x8a, 0x8f, - 0xe8, 0x7e, 0xfa, 0xff, 0x94, 0x8e, 0x73, 0x90, 0xd9, 0xb2, 0xed, 0x1e, 0x70, 0x2d, 0x65, 0x21, - 0x2d, 0xca, 0x5c, 0x0d, 0xec, 0xa8, 0x14, 0xa4, 0xa3, 0x28, 0xe7, 0xe1, 0xb7, 0x14, 0xc8, 0x44, - 0x74, 0x7c, 0x3d, 0x5b, 0x54, 0x4b, 0x6a, 0xa2, 0x0e, 0xd9, 0x9f, 0xc2, 0x79, 0xf7, 0x8f, 0x14, - 0x40, 0x75, 0xa7, 0x6b, 0xe9, 0x1a, 0x25, 0x9b, 0x76, 0x23, 0x82, 0x31, 0xce, 0x41, 0xc2, 0xb4, - 0x0c, 0x72, 0xc0, 0xc7, 0x18, 0xc7, 0xa2, 0x80, 0xee, 0x41, 0x52, 0xe6, 0x0a, 0x88, 0xe0, 0x5c, - 0xac, 0x7c, 0xe9, 0xf8, 0xa8, 0x38, 0x23, 0x32, 0x03, 0xd6, 0xbf, 0xea, 0xff, 0xc5, 0x33, 0x22, - 0x39, 0xc0, 0x8b, 0x5a, 0x7e, 0x0a, 0x17, 0x06, 0xfa, 0x17, 0xe5, 0xe0, 0xff, 0x8e, 0x5f, 0xfe, - 0xf2, 0x11, 0x47, 0x75, 0xcc, 0x3f, 0x53, 0x8e, 0x07, 0x7a, 0x17, 0xa0, 0xe3, 0x90, 0x97, 0xaa, - 0x60, 0x8d, 0x9d, 0x88, 0x35, 0xc5, 0x38, 0x38, 0x41, 0x6a, 0xea, 0x47, 0x0a, 0xcc, 0x45, 0x7d, - 0x6b, 0xf1, 0x0d, 0x0e, 0xa7, 0x06, 0x79, 0x5e, 0xac, 0x5a, 0x7b, 0x76, 0x64, 0x37, 0x47, 0xbf, - 0xa7, 0xc0, 0xac, 0x4f, 0x6a, 0x94, 0x3b, 0xf6, 0xd9, 0xb2, 0x7b, 0xbe, 0xcb, 0xf6, 0x50, 0xbf, - 0x05, 0x46, 0x69, 0xdf, 0xff, 0xad, 0xc0, 0xa5, 0x8a, 0xdd, 0xee, 0x74, 0x29, 0xe1, 0x77, 0xf2, - 0x6e, 0xb7, 0x1d, 0x81, 0x4d, 0x14, 0x60, 0xe6, 0x25, 0x71, 0x5c, 0xd3, 0x16, 0x9b, 0x47, 0x16, - 0x7b, 0x45, 0xf4, 0xcb, 0x90, 0xd6, 0x65, 0x3b, 0xde, 0x3a, 0xcf, 0x94, 0xab, 0x4c, 0xc0, 0x19, - 0x01, 0xc7, 0xf1, 0x51, 0x11, 0xbc, 0x9e, 0x57, 0xd7, 0x31, 0x78, 0xd2, 0xab, 0x06, 0x9a, 0x87, - 0xa4, 0x6b, 0x69, 0x1d, 0xb7, 0x69, 0x7b, 0xd7, 0xab, 0xbd, 0xb2, 0x9c, 0xeb, 0xef, 0xc1, 0xe5, - 0x91, 0xc1, 0x47, 0xa9, 0xdd, 0x5d, 0x28, 0xae, 0x93, 0x8e, 0x43, 0x98, 0x6b, 0x32, 0x3e, 0x24, - 0x8e, 0xb9, 0x77, 0x18, 0x9d, 0x96, 0xe5, 0x18, 0x1a, 0xb0, 0x18, 0xde, 0x46, 0x94, 0x83, 0xf9, - 0xd1, 0x0c, 0x64, 0x37, 0x0e, 0x3a, 0xb6, 0x43, 0x6b, 0x62, 0xfb, 0x47, 0xeb, 0x90, 0xec, 0x38, - 0xf6, 0x4b, 0xd3, 0x13, 0x9c, 0x0b, 0xbc, 0xf3, 0x1f, 0xe0, 0x79, 0x26, 0xeb, 0xe3, 0x1e, 0x27, - 0xc2, 0x90, 0xda, 0xb4, 0x75, 0xad, 0xf5, 0xd0, 0x6c, 0x79, 0x2b, 0x63, 0x79, 0x92, 0x98, 0xe5, - 0x1e, 0xc7, 0x33, 0x8d, 0x36, 0x3d, 0xff, 0xd0, 0x23, 0xa2, 0x47, 0x90, 0x7c, 0x4c, 0x69, 0x87, - 0x3d, 0x94, 0xce, 0x65, 0x69, 0xa2, 0x48, 0xc6, 0x20, 0x25, 0xf5, 0x98, 0x11, 0x86, 0xd9, 0x47, - 0xb6, 0xdd, 0x68, 0x91, 0x4a, 0xcb, 0xee, 0x1a, 0x15, 0xdb, 0xda, 0x33, 0x1b, 0xf2, 0x88, 0x79, - 0x6b, 0xa2, 0xc4, 0x47, 0x95, 0x1a, 0x1e, 0x65, 0x47, 0xdf, 0x81, 0x64, 0x6d, 0x55, 0x8a, 0x12, - 0x67, 0xce, 0x9b, 0x13, 0x45, 0xd5, 0x56, 0x71, 0x8f, 0x09, 0x3d, 0x86, 0xf4, 0xda, 0x67, 0x5d, - 0x87, 0x48, 0x19, 0xd3, 0x5c, 0xc6, 0xed, 0x89, 0x32, 0x38, 0x0f, 0xf6, 0xb3, 0xce, 0xbf, 0x0a, - 0xd9, 0x01, 0x4d, 0x22, 0x04, 0xf1, 0x0e, 0x53, 0x1a, 0x9b, 0xce, 0x14, 0xe6, 0xff, 0x85, 0x9d, - 0xcd, 0xdf, 0x86, 0x38, 0xd3, 0x0a, 0x5b, 0xdb, 0xbb, 0x9a, 0x4b, 0x76, 0x1c, 0x53, 0x56, 0xf2, - 0x8a, 0xb2, 0xde, 0xdf, 0x28, 0x30, 0x55, 0x5b, 0x65, 0x98, 0x6d, 0xb7, 0xab, 0x3f, 0x27, 0x54, - 0xd6, 0x92, 0x25, 0x8e, 0xe5, 0x1c, 0xb2, 0x67, 0x8a, 0xcd, 0x3f, 0x85, 0x65, 0x09, 0x5d, 0x07, - 0xd0, 0x74, 0x9d, 0xb8, 0x2e, 0x0f, 0x47, 0xc4, 0xf8, 0xb3, 0x94, 0xa0, 0x3c, 0x21, 0x87, 0x8c, - 0xcd, 0x25, 0xba, 0x43, 0xc4, 0x4a, 0x4e, 0x61, 0x59, 0x62, 0x6c, 0x94, 0xb4, 0x3b, 0x2a, 0xb5, - 0x9f, 0x13, 0x8b, 0x6b, 0x33, 0x85, 0x53, 0x8c, 0x52, 0x67, 0x04, 0xe6, 0x02, 0x88, 0x65, 0x74, - 0x6c, 0xd3, 0xa2, 0x5c, 0x4d, 0x29, 0xdc, 0x2b, 0x33, 0x91, 0x0e, 0x69, 0x98, 0x32, 0x9f, 0x30, - 0x85, 0x65, 0x49, 0x0e, 0x63, 0x1b, 0x62, 0x8f, 0x2a, 0xb5, 0x53, 0x0f, 0x03, 0x41, 0x5c, 0xeb, - 0x4a, 0xa3, 0x4b, 0x61, 0xfe, 0x5f, 0x0a, 0xfc, 0x6d, 0x05, 0x12, 0x5c, 0xf5, 0xe8, 0x1a, 0xa4, - 0x74, 0xdb, 0xa2, 0x9a, 0x69, 0xc9, 0x75, 0x93, 0xc2, 0x7d, 0x42, 0xa8, 0xe4, 0x1b, 0x90, 0xd1, - 0x74, 0xdd, 0xee, 0x5a, 0x54, 0xb5, 0xb4, 0x36, 0x91, 0x2d, 0xa4, 0x25, 0x6d, 0x4b, 0x6b, 0x13, - 0x54, 0x04, 0xaf, 0xc8, 0x95, 0x28, 0x34, 0x05, 0x92, 0xd4, 0x0b, 0xe6, 0x48, 0xbf, 0xf1, 0xa7, - 0x0a, 0xcc, 0x7e, 0xe4, 0x98, 0x94, 0x94, 0x35, 0xaa, 0x37, 0x23, 0x70, 0xfa, 0x6f, 0x43, 0xca, - 0xd0, 0xa8, 0x26, 0xd2, 0x47, 0xa7, 0xc6, 0x73, 0xcb, 0x65, 0xc6, 0xea, 0xf3, 0x14, 0x52, 0x04, - 0x71, 0xf6, 0x5f, 0xec, 0x07, 0x98, 0xff, 0xef, 0x07, 0x72, 0xfc, 0xbd, 0x8c, 0xd2, 0xa1, 0xfd, - 0xc3, 0x94, 0xe7, 0xd0, 0x22, 0x18, 0xfd, 0x7b, 0x30, 0x23, 0x4f, 0x45, 0x72, 0xec, 0x8b, 0x93, - 0xd6, 0xa3, 0x17, 0x89, 0x90, 0x6c, 0xa8, 0x0c, 0xe0, 0x52, 0xcd, 0xa1, 0x2a, 0x35, 0xdb, 0x27, - 0x8b, 0xc6, 0x7a, 0x7e, 0x8f, 0xb3, 0x31, 0x2a, 0xda, 0x82, 0x74, 0xfb, 0xa5, 0xae, 0xab, 0x7b, - 0x66, 0x8b, 0xca, 0x40, 0x6c, 0x6e, 0x40, 0x88, 0xd7, 0x93, 0xa7, 0x1f, 0x56, 0x2a, 0x0f, 0x79, - 0x25, 0x11, 0x0f, 0xed, 0x97, 0x31, 0x30, 0x09, 0xe2, 0x3f, 0x7a, 0x0d, 0x64, 0x56, 0x92, 0xea, - 0xba, 0x94, 0x2f, 0xaf, 0x64, 0x39, 0x7b, 0x7c, 0x54, 0x4c, 0x61, 0x4e, 0xad, 0xd5, 0xea, 0x38, - 0x25, 0x2a, 0xd4, 0x5c, 0x6f, 0x53, 0xfd, 0xbe, 0x02, 0xd9, 0x72, 0xb7, 0xf5, 0x7c, 0xbb, 0x53, - 0xeb, 0xb6, 0xdb, 0x9a, 0x73, 0x88, 0xae, 0x7a, 0x96, 0x61, 0x7e, 0x46, 0xb8, 0x66, 0x63, 0x72, - 0xea, 0xcd, 0xcf, 0x08, 0x9b, 0x7a, 0x99, 0x01, 0xc1, 0xe8, 0x22, 0xbd, 0xe1, 0x26, 0x64, 0xf9, - 0x99, 0x40, 0x25, 0x16, 0x75, 0x4c, 0x22, 0x4e, 0x8d, 0x31, 0x9c, 0xe1, 0xc4, 0x0d, 0x41, 0x43, - 0x4b, 0x90, 0x73, 0x0f, 0x5d, 0x4a, 0xda, 0xaa, 0x48, 0xd5, 0x16, 0x19, 0x7b, 0x31, 0x9c, 0x15, - 0x54, 0x2c, 0x88, 0xa5, 0xff, 0x9c, 0x82, 0x9c, 0x37, 0xcb, 0x51, 0x82, 0xb9, 0x32, 0x24, 0xf6, - 0xcc, 0x56, 0x2f, 0xb2, 0x11, 0xee, 0x7e, 0x3d, 0x49, 0xcb, 0xcc, 0xc9, 0x7a, 0xd0, 0x8e, 0xb3, - 0xce, 0x7f, 0xa9, 0x40, 0x9c, 0xef, 0x57, 0xf7, 0x20, 0xce, 0x97, 0x8d, 0x72, 0x92, 0x65, 0xc3, - 0xab, 0xf6, 0x3c, 0xf5, 0x54, 0xdf, 0x53, 0x73, 0x2f, 0xd9, 0xd4, 0x1e, 0xdc, 0xbb, 0xcf, 0xa7, - 0x2a, 0x83, 0x65, 0x09, 0x95, 0x21, 0x49, 0x78, 0x5f, 0x88, 0x21, 0x77, 0x8b, 0x20, 0xeb, 0x1c, - 0x98, 0x34, 0x6f, 0x89, 0x7a, 0x7c, 0xe8, 0x0a, 0xc4, 0x98, 0x0d, 0xcc, 0x88, 0x3b, 0xf0, 0xe3, - 0xa3, 0x62, 0x8c, 0xcd, 0x3e, 0xa3, 0x89, 0x40, 0xd2, 0xfb, 0xf1, 0x64, 0x3c, 0x9f, 0x28, 0xfd, - 0x45, 0x1c, 0xb2, 0xd5, 0x76, 0x44, 0x8b, 0x6a, 0x6d, 0x50, 0xc7, 0x41, 0x7b, 0xf8, 0x40, 0x5b, - 0xa3, 0x2a, 0x1e, 0xf4, 0x4a, 0xb1, 0xd3, 0x79, 0xa5, 0x2a, 0xdb, 0x21, 0x64, 0x5a, 0x3b, 0x6b, - 0xff, 0x5b, 0x13, 0xdb, 0xaf, 0x6b, 0xbb, 0x2d, 0x82, 0x19, 0x4f, 0x2f, 0x8c, 0xc5, 0x05, 0xa0, - 0x9f, 0xe7, 0x1b, 0x91, 0x58, 0xda, 0xd3, 0x27, 0x5f, 0xda, 0x33, 0xc4, 0x32, 0x18, 0x6d, 0xfe, - 0x40, 0x1a, 0xca, 0x9b, 0x10, 0x33, 0x4c, 0x4f, 0x93, 0x27, 0x75, 0x31, 0x8c, 0x65, 0x82, 0xbd, - 0xc4, 0xfd, 0xf6, 0xe2, 0x8f, 0x0f, 0xce, 0x6f, 0x03, 0xf4, 0x47, 0x85, 0x16, 0x61, 0xda, 0x6e, - 0x19, 0x0c, 0xba, 0xb3, 0x2e, 0x64, 0xcb, 0xa9, 0xe3, 0xa3, 0x62, 0x62, 0xbb, 0x65, 0x54, 0xd7, - 0x71, 0xc2, 0x6e, 0x19, 0x55, 0x83, 0xbf, 0x0d, 0x40, 0xf6, 0x55, 0xfe, 0x12, 0x04, 0xcf, 0x2a, - 0xc0, 0x33, 0x16, 0xd9, 0x5f, 0x27, 0xae, 0xee, 0xdf, 0x7e, 0xa4, 0xb5, 0xfc, 0xb1, 0x02, 0x39, - 0x4f, 0x83, 0xd1, 0x2e, 0xce, 0xa4, 0xd9, 0x96, 0x06, 0x1f, 0x3b, 0x9d, 0xc1, 0x7b, 0x7c, 0x32, - 0xfb, 0xeb, 0x43, 0xb8, 0x20, 0x32, 0x1f, 0x74, 0x8d, 0x32, 0xef, 0x18, 0x15, 0x6c, 0xff, 0x89, - 0x02, 0x73, 0x83, 0x82, 0xa3, 0x1c, 0xff, 0x93, 0xa1, 0xb8, 0xeb, 0xeb, 0x01, 0x42, 0x82, 0x5a, - 0x17, 0xf1, 0xd3, 0xc1, 0x10, 0xec, 0xfc, 0x7b, 0x90, 0xe0, 0xe4, 0x33, 0x78, 0x29, 0xa9, 0xc4, - 0x26, 0xcc, 0xae, 0x19, 0x46, 0xad, 0x26, 0x0d, 0xe9, 0x6b, 0xfb, 0x05, 0x0f, 0x2e, 0x4c, 0x05, - 0xc1, 0x05, 0x7f, 0x4b, 0x51, 0xc2, 0x85, 0x1f, 0x5c, 0x84, 0x8c, 0xec, 0xfb, 0x8e, 0xc5, 0xce, - 0xb2, 0x2b, 0x10, 0x6b, 0x48, 0x60, 0x98, 0x0e, 0xdc, 0x64, 0xfb, 0x6f, 0x81, 0x60, 0x56, 0x93, - 0x31, 0x74, 0xba, 0x34, 0x20, 0x4a, 0xd8, 0x0f, 0x15, 0xf5, 0x19, 0x3a, 0x5d, 0x8a, 0x3e, 0x80, - 0xf3, 0x7a, 0x3f, 0x1f, 0x5f, 0x65, 0xcc, 0xb1, 0xd0, 0xdc, 0xaa, 0xc0, 0xd7, 0x12, 0x70, 0x4e, - 0x1f, 0x20, 0xa3, 0x35, 0x7f, 0x42, 0x78, 0x3c, 0xf4, 0xf4, 0x31, 0x9c, 0x83, 0xee, 0xcb, 0x1a, - 0x47, 0x6f, 0xc2, 0xb4, 0xc1, 0x13, 0x8f, 0xe5, 0xe9, 0x25, 0x68, 0x69, 0x0d, 0x64, 0x76, 0x63, - 0x59, 0x1f, 0x3d, 0x86, 0x8c, 0xf8, 0x27, 0x02, 0xf9, 0xd2, 0x13, 0x2e, 0x85, 0xf3, 0xfb, 0xee, - 0xb3, 0x71, 0xda, 0xe8, 0xd3, 0xd0, 0x7d, 0x88, 0xbb, 0xba, 0x26, 0xa0, 0x7b, 0x70, 0xd4, 0xc3, - 0x97, 0x30, 0x8a, 0x79, 0x5d, 0xf4, 0x11, 0xcc, 0xee, 0x92, 0x86, 0x69, 0xa9, 0xb4, 0x7f, 0xd3, - 0x5c, 0x48, 0x8e, 0x5c, 0x6e, 0xf7, 0xbc, 0x43, 0x70, 0x0a, 0x21, 0xce, 0xef, 0x0e, 0x3d, 0x60, - 0xd3, 0xc4, 0x9d, 0xbb, 0x4f, 0x6c, 0x2a, 0x74, 0x9a, 0x02, 0x73, 0xfb, 0x70, 0x8e, 0x0c, 0x90, - 0xd1, 0x06, 0xa4, 0x35, 0xb6, 0x3e, 0x55, 0x9e, 0x88, 0x55, 0x80, 0xd0, 0x13, 0xe7, 0x48, 0x4a, - 0x18, 0x06, 0xad, 0x47, 0xea, 0x8b, 0x69, 0x13, 0xa7, 0x41, 0x0a, 0xe9, 0xf1, 0x62, 0xfc, 0x77, - 0xd8, 0x52, 0x0c, 0x27, 0xa1, 0x27, 0x90, 0x6d, 0x7a, 0xd9, 0x09, 0x3c, 0x24, 0x90, 0x09, 0x3d, - 0x72, 0x06, 0x24, 0x55, 0xe0, 0x4c, 0xd3, 0x47, 0x44, 0xaf, 0xc1, 0x54, 0x43, 0x2f, 0x64, 0xb9, - 0x84, 0x6b, 0xe3, 0x52, 0x08, 0xf0, 0x54, 0x43, 0x47, 0xef, 0x40, 0x52, 0x04, 0x59, 0x0f, 0xac, - 0x42, 0x2e, 0x74, 0xf1, 0x0e, 0xc6, 0xb7, 0x31, 0x0f, 0x06, 0xb3, 0xb6, 0x1e, 0x43, 0x46, 0xdc, - 0x29, 0xb7, 0x78, 0x72, 0x4b, 0xe1, 0x7c, 0xa8, 0xc1, 0x8d, 0x66, 0xe6, 0x60, 0xf1, 0xea, 0x9a, - 0xa0, 0xa1, 0x2d, 0xc8, 0x39, 0x22, 0x8c, 0x20, 0x33, 0x87, 0x0b, 0x79, 0x2e, 0xeb, 0x95, 0x60, - 0x57, 0x32, 0x12, 0xf2, 0xc2, 0x59, 0xc7, 0x4f, 0x45, 0xdf, 0x83, 0xb9, 0x41, 0x79, 0x72, 0x49, - 0xcc, 0x72, 0xa9, 0xaf, 0x4d, 0x94, 0xea, 0x5f, 0x19, 0xc8, 0x19, 0x79, 0x84, 0x1e, 0x40, 0x42, - 0xcc, 0x39, 0xe2, 0x02, 0x8b, 0x41, 0x67, 0x00, 0xff, 0x74, 0x8b, 0xda, 0x4c, 0x61, 0x54, 0xde, - 0xa5, 0xab, 0x2d, 0xbb, 0x51, 0xb8, 0x10, 0xaa, 0xb0, 0xd1, 0x90, 0x00, 0x4e, 0xd3, 0x3e, 0x8d, - 0xd9, 0x8c, 0x23, 0xe8, 0xf2, 0x92, 0x77, 0x2e, 0xd4, 0x66, 0x02, 0x2e, 0xd8, 0x71, 0xc6, 0xf1, - 0x11, 0xf9, 0x3c, 0x8a, 0xdc, 0x25, 0x95, 0x2f, 0xfb, 0x8b, 0xe1, 0xf3, 0x38, 0x92, 0x2e, 0x8e, - 0xd3, 0x4e, 0x9f, 0x86, 0xea, 0x90, 0xd7, 0xc5, 0x95, 0x9f, 0xea, 0x5d, 0x15, 0x16, 0x2e, 0x71, - 0x69, 0xaf, 0x06, 0xfa, 0xd4, 0xa0, 0xab, 0x51, 0x7c, 0x5e, 0x1f, 0xa4, 0xa3, 0x0e, 0xcc, 0x1b, - 0xbd, 0x4b, 0x38, 0xf5, 0x25, 0xbf, 0x85, 0xeb, 0xcb, 0xbf, 0xcc, 0xe5, 0xdf, 0x0f, 0x74, 0x73, - 0x63, 0x6f, 0x07, 0x71, 0xc1, 0x08, 0xa9, 0xc0, 0x9c, 0x19, 0x97, 0xaf, 0xea, 0xfd, 0x2c, 0xea, - 0x42, 0x21, 0xd4, 0x99, 0x85, 0x64, 0x7a, 0xe3, 0xbc, 0x3e, 0xf4, 0x80, 0x79, 0x56, 0xcb, 0xb6, - 0x3b, 0x85, 0x2b, 0xa1, 0x9e, 0xd5, 0x17, 0x5d, 0xc3, 0xbc, 0x2e, 0x5b, 0xa4, 0xa6, 0x65, 0x52, - 0xbe, 0x41, 0xcd, 0x87, 0x2e, 0xd2, 0xc1, 0x57, 0xbf, 0xf0, 0x8c, 0x29, 0xca, 0x6c, 0x69, 0x51, - 0x19, 0x94, 0x90, 0xa6, 0x72, 0x2d, 0x74, 0x69, 0x05, 0x45, 0x2f, 0x70, 0x96, 0xfa, 0xa9, 0x6c, - 0x69, 0x09, 0xa7, 0x37, 0x24, 0xf5, 0x7a, 0xe8, 0xd2, 0x0a, 0x4d, 0xe7, 0xc4, 0x48, 0x1b, 0x79, - 0xc4, 0x0e, 0xea, 0x5c, 0x20, 0x7f, 0xa9, 0xb5, 0xb0, 0x10, 0xba, 0x87, 0x0e, 0xc7, 0x26, 0x70, - 0xaa, 0xe5, 0x51, 0x98, 0x63, 0xde, 0x77, 0x4c, 0x4a, 0xd4, 0x5d, 0x8d, 0xea, 0xcd, 0x42, 0x31, - 0xd4, 0x31, 0x8f, 0x5c, 0xd1, 0x60, 0xd8, 0xef, 0x91, 0xd8, 0x56, 0x2c, 0x0e, 0x68, 0x85, 0xc5, - 0x09, 0x27, 0x82, 0xde, 0x56, 0x2c, 0xea, 0xa3, 0xef, 0x40, 0xea, 0x45, 0x97, 0x38, 0x87, 0xdc, - 0xb1, 0xde, 0x08, 0x7d, 0x59, 0x79, 0x28, 0xc5, 0x03, 0x27, 0x5f, 0x48, 0x02, 0x6b, 0x5a, 0x40, - 0xe5, 0x42, 0x29, 0xb4, 0xe9, 0x81, 0xc3, 0x11, 0x96, 0xf5, 0x91, 0x06, 0x17, 0xc5, 0xfc, 0xc8, - 0x2c, 0x50, 0x47, 0xa6, 0x5b, 0x16, 0x6e, 0x72, 0x41, 0xa1, 0x58, 0x35, 0x30, 0x11, 0x15, 0x5f, - 0xd0, 0x46, 0x9f, 0x31, 0xe7, 0x23, 0xb7, 0x4f, 0x81, 0x6f, 0x0b, 0xb7, 0x42, 0x9d, 0x4f, 0x00, - 0xba, 0xc7, 0x19, 0xcd, 0x47, 0x14, 0x9b, 0xa8, 0xa1, 0xba, 0x2e, 0x65, 0xa0, 0xb2, 0xb0, 0x34, - 0x66, 0x13, 0x1d, 0xc2, 0xb8, 0x6c, 0x13, 0x35, 0x6a, 0x82, 0x8f, 0xa7, 0xbd, 0xb6, 0x88, 0xe6, - 0x48, 0x47, 0x7f, 0x3b, 0x54, 0xcc, 0xc8, 0xcb, 0x55, 0x18, 0xf4, 0x1e, 0xe9, 0xed, 0xf8, 0x17, - 0xe2, 0xf8, 0x74, 0x35, 0x7f, 0xad, 0xf4, 0x1f, 0x73, 0x90, 0xf5, 0x70, 0xab, 0xc0, 0xa4, 0x6f, - 0xf8, 0x31, 0xe9, 0x42, 0x18, 0x26, 0x15, 0x1c, 0x02, 0x94, 0xbe, 0xe1, 0x07, 0xa5, 0x0b, 0x61, - 0xa0, 0xd4, 0xe3, 0x60, 0xa8, 0x14, 0x87, 0xa1, 0xd2, 0x57, 0x4f, 0x80, 0x4a, 0xa5, 0xa0, 0x61, - 0x58, 0x5a, 0x1e, 0x85, 0xa5, 0xb7, 0xc6, 0xc3, 0x52, 0x29, 0xc8, 0x87, 0x4b, 0xdf, 0x1a, 0xc2, - 0xa5, 0x37, 0xc6, 0xe0, 0x52, 0xc9, 0xed, 0x01, 0xd3, 0x6a, 0x20, 0x30, 0xbd, 0x3d, 0x09, 0x98, - 0x4a, 0x29, 0x03, 0xc8, 0x74, 0x75, 0x00, 0x99, 0x16, 0x43, 0x91, 0xa9, 0xe4, 0x15, 0xd0, 0xf4, - 0xe3, 0x70, 0x68, 0xfa, 0xad, 0x13, 0x41, 0x53, 0x29, 0x6d, 0x14, 0x9b, 0xe2, 0x30, 0x6c, 0xfa, - 0xea, 0x09, 0xb0, 0xa9, 0x37, 0x59, 0x43, 0xe0, 0xf4, 0x61, 0x10, 0x38, 0x5d, 0x9a, 0x00, 0x4e, - 0xa5, 0x2c, 0x3f, 0x3a, 0x7d, 0x18, 0x84, 0x4e, 0x97, 0x26, 0xa0, 0xd3, 0x01, 0x39, 0x02, 0x9e, - 0x6e, 0x06, 0xc3, 0xd3, 0x57, 0x26, 0xc2, 0x53, 0x29, 0x6b, 0x10, 0x9f, 0xbe, 0xee, 0xc3, 0xa7, - 0xd7, 0x43, 0xf0, 0xa9, 0x64, 0x64, 0x00, 0xf5, 0xdd, 0x11, 0x80, 0x5a, 0x1a, 0x07, 0x50, 0x25, - 0x67, 0x0f, 0xa1, 0x56, 0x03, 0x11, 0xea, 0xed, 0x49, 0x08, 0xd5, 0xb3, 0x3c, 0x3f, 0x44, 0xdd, - 0x0e, 0x81, 0xa8, 0x77, 0x26, 0x43, 0x54, 0x29, 0x6e, 0x08, 0xa3, 0xaa, 0x63, 0x31, 0xea, 0xeb, - 0x27, 0xc4, 0xa8, 0x52, 0x76, 0x10, 0x48, 0xfd, 0xd9, 0x41, 0x90, 0xba, 0x18, 0x0e, 0x52, 0xa5, - 0x10, 0x89, 0x52, 0xab, 0x81, 0x28, 0xf5, 0xf6, 0x24, 0x94, 0xea, 0x29, 0xcd, 0x0f, 0x53, 0x37, - 0x83, 0x61, 0xea, 0x2b, 0x13, 0x61, 0xaa, 0x67, 0x3b, 0x03, 0x38, 0xb5, 0x1a, 0x88, 0x53, 0x6f, - 0x4f, 0xc2, 0xa9, 0xbd, 0xd9, 0xf4, 0x01, 0xd5, 0x9d, 0x50, 0xa0, 0x7a, 0xf7, 0x24, 0x40, 0x55, - 0x8a, 0x1c, 0x41, 0xaa, 0x2f, 0x4e, 0x80, 0x54, 0x57, 0x4f, 0x85, 0x54, 0x65, 0x4b, 0xe1, 0x50, - 0xf5, 0xe3, 0x70, 0xa8, 0xfa, 0xad, 0x13, 0x41, 0x55, 0xcf, 0xb9, 0x8d, 0x60, 0xd5, 0xd5, 0x01, - 0xac, 0x5a, 0x0c, 0xc5, 0xaa, 0x9e, 0xaf, 0xe5, 0x60, 0xf5, 0xdd, 0x11, 0xb0, 0x5a, 0x1a, 0x07, - 0x56, 0xbd, 0x05, 0xeb, 0xa1, 0x55, 0x75, 0x2c, 0xba, 0x7c, 0xfd, 0x84, 0xe8, 0xd2, 0x5b, 0x14, - 0x01, 0xf0, 0xb2, 0x12, 0x00, 0x2f, 0x6f, 0x8d, 0x87, 0x97, 0xde, 0x5e, 0xd8, 0xc7, 0x97, 0x0f, - 0x83, 0xf0, 0xe5, 0xd2, 0x04, 0x7c, 0xe9, 0xb9, 0x56, 0x1f, 0xc0, 0x7c, 0x6b, 0x08, 0x60, 0xde, - 0x98, 0x18, 0xe6, 0xe8, 0x21, 0xcc, 0xf7, 0x46, 0x11, 0xe6, 0xcd, 0xb1, 0x08, 0x53, 0xf2, 0xf7, - 0x21, 0xe6, 0x5b, 0x43, 0x10, 0xf3, 0xc6, 0x18, 0x88, 0xe9, 0x35, 0x2e, 0x31, 0xe6, 0xee, 0x78, - 0x8c, 0xb9, 0x7c, 0x52, 0x8c, 0x29, 0xc5, 0x06, 0x82, 0xcc, 0xcd, 0x60, 0x90, 0xf9, 0xca, 0x09, - 0xef, 0x5a, 0x87, 0x50, 0xe6, 0xc3, 0x20, 0x94, 0xb9, 0x34, 0x01, 0x65, 0xf6, 0x37, 0xc3, 0x1e, - 0xcc, 0x7c, 0x18, 0x04, 0x33, 0x97, 0x26, 0xc0, 0x4c, 0x4f, 0x4e, 0x30, 0xce, 0x7c, 0x3f, 0x9e, - 0xbc, 0x96, 0xbf, 0x5e, 0xfa, 0x3c, 0x01, 0xd3, 0x8f, 0xbd, 0xc0, 0x8c, 0xef, 0xad, 0x07, 0xe5, - 0x2c, 0x6f, 0x3d, 0xa0, 0x75, 0x98, 0x91, 0x93, 0x22, 0xb1, 0xe7, 0x98, 0xd7, 0xb7, 0x46, 0x5e, - 0xe8, 0xf1, 0x58, 0xcf, 0x90, 0x34, 0x88, 0x1e, 0x40, 0xb6, 0xeb, 0x12, 0x47, 0xed, 0x38, 0xa6, - 0xed, 0x98, 0x54, 0xc4, 0xc9, 0x95, 0x72, 0xfe, 0xab, 0xa3, 0x62, 0x66, 0xc7, 0x25, 0xce, 0x33, - 0x49, 0xc7, 0x99, 0xae, 0xaf, 0xe4, 0x7d, 0x51, 0x29, 0x71, 0xf2, 0x2f, 0x2a, 0x7d, 0x00, 0x79, - 0x87, 0x68, 0xc6, 0x80, 0xdb, 0x13, 0xaf, 0x09, 0x04, 0x6f, 0x08, 0x9a, 0xe1, 0xf3, 0x6d, 0xfc, - 0x75, 0x81, 0xf3, 0xce, 0x20, 0x11, 0xdd, 0x83, 0x8b, 0x6d, 0xed, 0x40, 0xbc, 0xff, 0xe2, 0x6d, - 0x5b, 0x3c, 0x40, 0x95, 0xe4, 0xa1, 0x4f, 0xd4, 0xd6, 0x0e, 0xf8, 0xe7, 0x99, 0xc4, 0x23, 0xfe, - 0x29, 0x89, 0x25, 0xc8, 0x19, 0xa6, 0x4b, 0x4d, 0x4b, 0xf7, 0xde, 0xa3, 0x4d, 0x89, 0xa4, 0x78, - 0x8f, 0x2a, 0x5e, 0x95, 0xbd, 0x0b, 0xb3, 0x32, 0xd2, 0xdb, 0xff, 0x60, 0x13, 0x47, 0x76, 0x49, - 0xd6, 0x0b, 0xf6, 0xa0, 0xff, 0x8d, 0xab, 0x0a, 0x9c, 0x6f, 0x68, 0x94, 0xec, 0x6b, 0x87, 0xaa, - 0x65, 0x1b, 0x5c, 0xf7, 0x69, 0xfe, 0xc6, 0xe2, 0xd5, 0xe3, 0xa3, 0x62, 0xf6, 0x91, 0x78, 0xb4, - 0x65, 0x1b, 0x62, 0x06, 0xa6, 0xc5, 0x3f, 0x9c, 0x6d, 0xf8, 0x1e, 0x18, 0x68, 0x0d, 0x32, 0x6c, - 0x8b, 0x54, 0x6d, 0xf1, 0x55, 0x06, 0x89, 0xd9, 0xc2, 0x6e, 0x72, 0xe5, 0xb7, 0x1b, 0x70, 0xda, - 0xed, 0x17, 0xde, 0x8f, 0x27, 0x67, 0xf2, 0xc9, 0xd2, 0xe7, 0x0a, 0x64, 0x06, 0x72, 0x18, 0xbe, - 0x3d, 0x74, 0xdb, 0x7f, 0x25, 0x18, 0x07, 0x06, 0x47, 0x4e, 0xd6, 0x20, 0x29, 0x15, 0xeb, 0xc5, - 0x4e, 0x8a, 0xe1, 0x50, 0x80, 0x9f, 0xb9, 0xbc, 0xc0, 0x91, 0xc7, 0xf6, 0x76, 0xfc, 0x0f, 0x7e, - 0x58, 0x3c, 0x57, 0xfa, 0x71, 0x0c, 0xb2, 0x83, 0x49, 0x0b, 0xd5, 0xa1, 0x7e, 0x05, 0x39, 0x8a, - 0x01, 0x8e, 0xf0, 0x5e, 0xae, 0x43, 0xca, 0x91, 0x95, 0xbc, 0x6e, 0x2e, 0x8e, 0x89, 0x69, 0xf8, - 0xfb, 0xd9, 0x67, 0x9c, 0xff, 0xeb, 0xa9, 0xde, 0x82, 0x5e, 0x86, 0x04, 0xff, 0xc4, 0x9a, 0xec, - 0x5a, 0x50, 0x6a, 0xe2, 0x06, 0x7b, 0x8e, 0x45, 0x35, 0xe6, 0x00, 0xea, 0x67, 0x7a, 0xed, 0xa9, - 0x47, 0x38, 0xc3, 0x27, 0xca, 0xce, 0xf8, 0x9e, 0x4e, 0x8d, 0x9d, 0x57, 0x5b, 0x2d, 0xa2, 0x53, - 0xf9, 0x35, 0x37, 0xef, 0x43, 0x64, 0xb7, 0x86, 0x45, 0xc8, 0x6f, 0xbf, 0x2d, 0x63, 0xf9, 0xed, - 0x37, 0x5f, 0x38, 0x2b, 0xd7, 0x13, 0xc1, 0xd7, 0x8b, 0x88, 0x5f, 0x8a, 0xa9, 0xbe, 0xbb, 0x09, - 0x17, 0x02, 0x56, 0x2f, 0xca, 0x01, 0x54, 0xb6, 0xb7, 0x6a, 0xd5, 0x5a, 0x7d, 0x63, 0xab, 0x9e, - 0x3f, 0x87, 0xb2, 0x90, 0x62, 0xe5, 0x8d, 0xad, 0xda, 0x4e, 0x2d, 0xaf, 0xa0, 0x3c, 0x64, 0xaa, - 0x5b, 0xbe, 0x0a, 0xf2, 0xf3, 0x61, 0x77, 0x3f, 0x82, 0xb4, 0xef, 0x95, 0x21, 0x84, 0x20, 0xf7, - 0x6c, 0xa7, 0xf6, 0x58, 0xad, 0x57, 0x9f, 0x6e, 0xd4, 0xea, 0x6b, 0x4f, 0x9f, 0xe5, 0xcf, 0x31, - 0xc9, 0x9c, 0xb6, 0x56, 0xde, 0xc6, 0xf5, 0xbc, 0xd2, 0x2b, 0xd7, 0xb7, 0x77, 0x2a, 0x8f, 0xf3, - 0x53, 0xbd, 0xf2, 0x07, 0x3b, 0x1b, 0xf8, 0x93, 0x7c, 0x4c, 0x0a, 0xd6, 0xe0, 0x62, 0x60, 0x2e, - 0x1e, 0x4a, 0xc3, 0xcc, 0x8e, 0xc5, 0xdf, 0x5f, 0x11, 0xbd, 0xec, 0xa5, 0x84, 0xe5, 0x15, 0x94, - 0x14, 0x69, 0x5f, 0xf9, 0x29, 0x34, 0x0d, 0x53, 0xb5, 0xd5, 0x7c, 0x0c, 0x9d, 0x87, 0xb4, 0x2f, - 0xa7, 0x2d, 0x1f, 0x47, 0x29, 0x99, 0xd8, 0x94, 0x4f, 0xdc, 0xbd, 0x01, 0xbe, 0x4c, 0x12, 0x04, - 0x30, 0xbd, 0xa9, 0x51, 0xe2, 0xd2, 0xfc, 0x39, 0x34, 0x03, 0xb1, 0xb5, 0x56, 0x2b, 0xaf, 0xdc, - 0xff, 0x18, 0x92, 0xde, 0x57, 0x00, 0xd0, 0x26, 0x24, 0x04, 0xcc, 0x28, 0x86, 0x2f, 0x05, 0xbe, - 0xa8, 0xe6, 0x17, 0x27, 0xad, 0x95, 0xd2, 0x39, 0x26, 0x79, 0xe3, 0xe0, 0xa7, 0x21, 0xb9, 0x7c, - 0xe3, 0x8b, 0x7f, 0x5b, 0x38, 0xf7, 0xc5, 0xf1, 0x82, 0xf2, 0xe5, 0xf1, 0x82, 0xf2, 0x4f, 0xc7, - 0x0b, 0xca, 0xbf, 0x1e, 0x2f, 0x28, 0x3f, 0xf8, 0xf7, 0x85, 0x73, 0x9f, 0xce, 0x48, 0x96, 0xdd, - 0x69, 0xfe, 0x2d, 0xc0, 0xd5, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xb6, 0xdc, 0x82, 0xef, 0xec, - 0x50, 0x00, 0x00, + 0x76, 0x76, 0x8b, 0xa4, 0x48, 0x3e, 0xfe, 0x98, 0x2a, 0x5b, 0x36, 0x2d, 0xff, 0x50, 0xa6, 0x7f, + 0xc6, 0xe3, 0x9d, 0x91, 0xc7, 0x56, 0x9c, 0x9d, 0x99, 0x9d, 0xc9, 0x8e, 0x48, 0xc9, 0x36, 0xc7, + 0xb6, 0xe4, 0x29, 0x52, 0x9e, 0x9f, 0x4d, 0xb6, 0xd3, 0xea, 0x2e, 0x91, 0xbd, 0x22, 0xbb, 0xe9, + 0xee, 0xa2, 0x25, 0x4d, 0x0e, 0xf9, 0x43, 0x90, 0x1c, 0x36, 0x41, 0x80, 0xcc, 0x21, 0x40, 0x80, + 0x64, 0x81, 0x24, 0x48, 0x80, 0x9c, 0x72, 0xc8, 0x5e, 0x73, 0xc9, 0x61, 0x82, 0x2c, 0x82, 0x39, + 0x24, 0x40, 0xb0, 0x01, 0x84, 0x44, 0xb9, 0x2c, 0x16, 0xb9, 0xe5, 0x36, 0x01, 0x82, 0xa0, 0x7e, + 0x9a, 0x6c, 0x92, 0xdd, 0xa4, 0xa4, 0xe9, 0xc5, 0x20, 0x39, 0x91, 0xf5, 0xba, 0xde, 0xeb, 0xaa, + 0x57, 0xaf, 0x5e, 0x7d, 0x55, 0xef, 0x55, 0xc3, 0x9c, 0x63, 0x6b, 0x7a, 0xab, 0xbb, 0x75, 0x47, + 0xeb, 0x9a, 0x4b, 0x5d, 0xc7, 0xa6, 0x36, 0x9a, 0xd3, 0x6d, 0x7d, 0x87, 0x93, 0x97, 0xe4, 0xc3, + 0x05, 0xe4, 0xd5, 0x32, 0x34, 0xaa, 0x89, 0x6a, 0x0b, 0x67, 0x3d, 0x1a, 0x71, 0x1c, 0xdb, 0x71, + 0x25, 0xf5, 0x9c, 0x47, 0xed, 0x10, 0xaa, 0xf9, 0x6a, 0x5f, 0x73, 0xa9, 0xed, 0x68, 0x4d, 0x72, + 0x87, 0x58, 0x4d, 0xd3, 0xf2, 0x7e, 0x58, 0xbd, 0x97, 0xba, 0xbe, 0x2c, 0x2b, 0x15, 0x7b, 0xd4, + 0x6c, 0xdf, 0x69, 0xb5, 0xf5, 0x3b, 0xd4, 0xec, 0x10, 0x97, 0x6a, 0x9d, 0xae, 0x7c, 0xb2, 0xc8, + 0x9f, 0x50, 0x47, 0xd3, 0x4d, 0xab, 0x79, 0xc7, 0x21, 0xba, 0xed, 0x18, 0xc4, 0x50, 0xdd, 0xae, + 0x66, 0x79, 0xcd, 0x69, 0xda, 0x4d, 0x9b, 0xff, 0xbd, 0xc3, 0xfe, 0x09, 0x6a, 0xf9, 0x57, 0x21, + 0x8d, 0x35, 0xab, 0x49, 0x6a, 0xd6, 0xb6, 0x8d, 0xde, 0x81, 0xb8, 0x41, 0x5c, 0xbd, 0xa8, 0x2c, + 0x2a, 0xb7, 0x32, 0xf7, 0xca, 0x4b, 0x63, 0xfd, 0x5c, 0xe2, 0x75, 0x57, 0x89, 0xab, 0x3b, 0x66, + 0x97, 0xda, 0x4e, 0x25, 0xfe, 0xf9, 0x41, 0xe9, 0x14, 0xe6, 0x5c, 0xe8, 0xe7, 0x20, 0xd1, 0x26, + 0x9a, 0x4b, 0x8a, 0x33, 0x9c, 0xbd, 0x18, 0xc0, 0xfe, 0x84, 0x3d, 0x97, 0x4c, 0xa2, 0x72, 0xf9, + 0xfb, 0x31, 0xc8, 0x63, 0xe2, 0x76, 0x6d, 0xcb, 0x25, 0x8f, 0x88, 0x66, 0x10, 0x07, 0xbd, 0x01, + 0x31, 0xba, 0x67, 0x15, 0x63, 0x5c, 0xcc, 0x95, 0x00, 0x31, 0x0d, 0x47, 0xb3, 0x5c, 0x4d, 0xa7, + 0xa6, 0x6d, 0x61, 0x56, 0x15, 0xbd, 0x09, 0x19, 0x87, 0xb8, 0xbd, 0x0e, 0xe1, 0x1d, 0x2e, 0xc6, + 0x39, 0xe7, 0xf9, 0x00, 0xce, 0x7a, 0x57, 0xb3, 0x30, 0x88, 0xba, 0xec, 0x3f, 0xba, 0x00, 0x29, + 0xab, 0xd7, 0x51, 0x77, 0xc8, 0xbe, 0x5b, 0x4c, 0x2c, 0x2a, 0xb7, 0x62, 0x38, 0x69, 0xf5, 0x3a, + 0x8f, 0xc9, 0xbe, 0x8b, 0xaa, 0x90, 0x71, 0x58, 0x77, 0x55, 0xd3, 0xda, 0xb6, 0xdd, 0xe2, 0xec, + 0x62, 0xec, 0x56, 0xe6, 0xde, 0xa5, 0x30, 0xa5, 0x30, 0x05, 0xca, 0x9e, 0x81, 0xe3, 0x11, 0x5c, + 0x54, 0x87, 0x9c, 0x6c, 0x99, 0x43, 0x34, 0xd7, 0xb6, 0x8a, 0xc9, 0x45, 0xe5, 0x56, 0xfe, 0xde, + 0x52, 0x90, 0x98, 0x21, 0x2d, 0xb0, 0x62, 0xaf, 0x43, 0x30, 0xe7, 0xc2, 0x59, 0xc7, 0x57, 0x2a, + 0x7f, 0x0c, 0x59, 0xff, 0x53, 0x84, 0x20, 0x8f, 0xd7, 0xea, 0x9b, 0x4f, 0xd7, 0xd4, 0xcd, 0xf5, + 0xc7, 0xeb, 0x1b, 0x1f, 0xae, 0x17, 0x4e, 0xa1, 0xb3, 0x50, 0x90, 0xb4, 0xc7, 0x6b, 0x1f, 0xab, + 0x4f, 0x6a, 0x4f, 0x6b, 0x8d, 0x82, 0x82, 0x2e, 0xc0, 0xbc, 0xa4, 0xe2, 0x95, 0xf5, 0x87, 0x6b, + 0x6a, 0x65, 0x63, 0x73, 0x7d, 0x75, 0x05, 0x7f, 0x5c, 0x98, 0x59, 0x88, 0xff, 0xce, 0x9f, 0x5e, + 0x39, 0x55, 0x7e, 0x0a, 0xf0, 0x90, 0x50, 0x4c, 0x5e, 0xf4, 0x88, 0x4b, 0xd1, 0x5b, 0x30, 0xdb, + 0xe2, 0xad, 0x91, 0x26, 0x11, 0xa6, 0xd2, 0x4a, 0x8a, 0x75, 0xfc, 0x8b, 0x83, 0x92, 0x82, 0x25, + 0xc3, 0xdb, 0xf1, 0x9f, 0xfc, 0xa0, 0xa4, 0x94, 0x7f, 0x43, 0x81, 0x0c, 0x97, 0x27, 0xba, 0x86, + 0xaa, 0x23, 0x02, 0xaf, 0x4e, 0xd5, 0xc3, 0xb8, 0x68, 0xb4, 0x04, 0x89, 0x97, 0x5a, 0xbb, 0x37, + 0xc9, 0xd0, 0x9e, 0xb3, 0xe7, 0x58, 0x54, 0x2b, 0xff, 0xb5, 0x02, 0xf0, 0xac, 0x17, 0x41, 0xa7, + 0x98, 0x89, 0x1f, 0xe9, 0xcd, 0x9e, 0x89, 0xf3, 0xca, 0xe8, 0x1c, 0xcc, 0x9a, 0x56, 0xdb, 0xb4, + 0x08, 0x37, 0xe9, 0x14, 0x96, 0x25, 0x74, 0x16, 0x12, 0x5b, 0x6d, 0xd3, 0x32, 0xb8, 0xbd, 0xa6, + 0xb0, 0x28, 0x48, 0xc5, 0x61, 0xc8, 0xf0, 0x26, 0x47, 0xa8, 0xb7, 0xf2, 0xbf, 0x2a, 0x30, 0x5f, + 0xb5, 0x2d, 0xc3, 0x64, 0x13, 0x47, 0x6b, 0x7f, 0x9d, 0x2a, 0xb9, 0x0f, 0x69, 0xb2, 0xd7, 0x55, + 0x05, 0x67, 0x6c, 0xca, 0x30, 0xa6, 0xc8, 0x5e, 0x97, 0xff, 0x9b, 0xa8, 0xb1, 0x5f, 0x82, 0x73, + 0xa3, 0x9d, 0x8b, 0x52, 0x79, 0x7f, 0xaf, 0x40, 0xbe, 0x66, 0x99, 0xf4, 0xeb, 0xd4, 0x5a, 0xbf, + 0xfb, 0x31, 0x5f, 0xf7, 0xd1, 0x6d, 0x28, 0x6c, 0x6b, 0x66, 0x7b, 0xc3, 0x6a, 0xd8, 0x9d, 0x2d, + 0x97, 0xda, 0x16, 0x71, 0xa5, 0x7e, 0xc6, 0xe8, 0x52, 0x55, 0xcf, 0xe1, 0x74, 0xbf, 0x2b, 0x51, + 0xea, 0xe8, 0x05, 0x14, 0x6a, 0x96, 0xee, 0x90, 0x0e, 0xb1, 0xa2, 0x50, 0xd2, 0x25, 0x48, 0x9b, + 0x9e, 0x38, 0xae, 0xa8, 0x18, 0x1e, 0x10, 0x64, 0x57, 0x7a, 0x30, 0xe7, 0x7b, 0x65, 0x94, 0x5e, + 0xe6, 0x22, 0xa4, 0x2d, 0xb2, 0xab, 0x0e, 0x86, 0x29, 0x86, 0x53, 0x16, 0xd9, 0xe5, 0xc3, 0x52, + 0x7e, 0x06, 0xb9, 0x55, 0xd2, 0x26, 0x94, 0x44, 0xe6, 0x29, 0x37, 0x21, 0xef, 0x49, 0x8c, 0x72, + 0x48, 0x3e, 0x53, 0x00, 0x49, 0xb9, 0x6c, 0x51, 0x8a, 0x60, 0x54, 0x4a, 0x6c, 0xad, 0xa5, 0x3d, + 0xc7, 0x12, 0x8b, 0xa6, 0x30, 0x45, 0x10, 0x24, 0xbe, 0x6e, 0x0e, 0xdc, 0x5d, 0xdc, 0xef, 0xee, + 0x44, 0x3f, 0xdf, 0x8f, 0xa7, 0x66, 0x0a, 0xb1, 0xf2, 0x2e, 0x9c, 0x19, 0x6a, 0x55, 0xb4, 0x03, + 0x17, 0xe7, 0x2d, 0x9b, 0x59, 0x8c, 0xdd, 0xca, 0x56, 0x92, 0x5f, 0x1e, 0x94, 0x62, 0x8f, 0xc9, + 0x3e, 0xe6, 0xc4, 0x72, 0x03, 0xe6, 0xaa, 0x6d, 0xa2, 0x39, 0x11, 0x69, 0x43, 0x0e, 0xde, 0xc7, + 0x80, 0xfc, 0x52, 0xa3, 0x1c, 0x40, 0x13, 0x32, 0x75, 0x5d, 0xb3, 0x36, 0xba, 0xcc, 0xaf, 0xb9, + 0x68, 0x19, 0xce, 0xb9, 0xd4, 0xee, 0xaa, 0x1a, 0x55, 0x05, 0x38, 0xd9, 0xb2, 0x7b, 0x96, 0xa1, + 0x39, 0xfb, 0xfc, 0x1d, 0x29, 0x7c, 0x86, 0x3d, 0x5d, 0xa1, 0xbc, 0x21, 0x15, 0xf9, 0x88, 0x0d, + 0x59, 0xc7, 0xb4, 0x54, 0x86, 0x21, 0xda, 0xd4, 0x95, 0xc6, 0x0c, 0x1d, 0xd3, 0xc2, 0x82, 0x22, + 0x7b, 0xf1, 0x2b, 0xe2, 0x55, 0x11, 0xd8, 0xc8, 0x0d, 0xc8, 0x4b, 0x1b, 0x31, 0x2d, 0x4a, 0x2c, + 0xea, 0x99, 0x49, 0x4e, 0x50, 0x6b, 0x82, 0x38, 0x64, 0x11, 0xff, 0xa8, 0x40, 0x56, 0xbc, 0x3d, + 0x4a, 0x5b, 0xb8, 0x0f, 0x71, 0xc7, 0xde, 0x15, 0xb6, 0x90, 0xb9, 0x77, 0x31, 0x40, 0xc4, 0x63, + 0xb2, 0xef, 0xf7, 0xb4, 0xbc, 0x3a, 0xaa, 0x40, 0x46, 0x34, 0x5c, 0xe5, 0xdc, 0xb1, 0xa3, 0x72, + 0x83, 0xe0, 0xc2, 0xf6, 0xae, 0xcb, 0xa0, 0x0f, 0xc2, 0xe4, 0x25, 0x71, 0x5c, 0xf2, 0xf5, 0x69, + 0xf5, 0x9f, 0x15, 0x38, 0x33, 0xd4, 0x88, 0xff, 0x27, 0xca, 0xdd, 0x85, 0xf3, 0xd5, 0x16, 0xd1, + 0x77, 0xaa, 0xb6, 0xe5, 0x9a, 0x2e, 0x25, 0x96, 0xbe, 0x1f, 0x81, 0x82, 0x2f, 0x42, 0x7a, 0xd7, + 0xa4, 0x2d, 0xd5, 0x30, 0xb7, 0xb7, 0xf9, 0x2c, 0x49, 0xe1, 0x14, 0x23, 0xac, 0x9a, 0xdb, 0xdb, + 0x72, 0x8e, 0xa8, 0x50, 0x1c, 0x7f, 0x71, 0x94, 0xf3, 0xfd, 0x2f, 0x14, 0x40, 0x2b, 0xc6, 0xf7, + 0x7a, 0x2e, 0xad, 0x53, 0x8d, 0xba, 0x11, 0xf4, 0xea, 0x9b, 0x70, 0x46, 0xb7, 0x3b, 0xdd, 0x1e, + 0xd5, 0x98, 0x0b, 0x51, 0x89, 0x65, 0x30, 0xcf, 0xcd, 0xfb, 0xe7, 0x73, 0x8f, 0x73, 0xbe, 0x3a, + 0x6b, 0x96, 0xf1, 0x98, 0xec, 0xa3, 0xf3, 0x90, 0x34, 0x9c, 0x7d, 0xd5, 0xe9, 0x59, 0x1e, 0x70, + 0x35, 0x9c, 0x7d, 0xdc, 0xb3, 0xa4, 0x2a, 0x7e, 0xa8, 0xc0, 0x99, 0xa1, 0x96, 0x46, 0x69, 0x5b, + 0x9f, 0x40, 0x46, 0x33, 0xd8, 0x0e, 0xd6, 0x20, 0x6d, 0xaa, 0x49, 0x98, 0xb4, 0xec, 0x93, 0x24, + 0xb7, 0xcb, 0x4b, 0x62, 0x9f, 0xbc, 0xe4, 0x6d, 0x97, 0x97, 0x9e, 0x3e, 0xaf, 0x56, 0xd7, 0x09, + 0xdd, 0xb5, 0x9d, 0x1d, 0xde, 0x2c, 0xcf, 0x78, 0xb8, 0xb4, 0x55, 0x26, 0xac, 0xfc, 0x09, 0x9c, + 0xaf, 0x90, 0xa6, 0x69, 0xf9, 0xb7, 0x91, 0x51, 0xad, 0x04, 0x2a, 0x14, 0xc7, 0x65, 0x47, 0x69, + 0x1f, 0xbf, 0x16, 0x83, 0xf9, 0x35, 0xcb, 0x88, 0xb4, 0xed, 0x6c, 0xc9, 0xd6, 0xed, 0x4e, 0xc7, + 0xa4, 0xd2, 0xea, 0x65, 0x09, 0xbd, 0x05, 0x29, 0x83, 0x68, 0x46, 0x7f, 0xef, 0x92, 0xb9, 0x77, + 0xd9, 0x27, 0xb4, 0x47, 0xcd, 0xf6, 0x52, 0xab, 0xad, 0x2f, 0x35, 0xbc, 0xc3, 0x08, 0xdc, 0xaf, + 0x8e, 0x7e, 0x19, 0xce, 0xb3, 0xf9, 0xea, 0x58, 0x5a, 0x5b, 0x15, 0xd2, 0x54, 0xea, 0x98, 0xcd, + 0x26, 0x71, 0xe4, 0xf6, 0xfc, 0x56, 0x40, 0xf3, 0x6a, 0x92, 0xa3, 0xca, 0x19, 0x1a, 0xa2, 0x3e, + 0x9e, 0x37, 0x83, 0xc8, 0xe8, 0x3d, 0xc8, 0x4a, 0x3f, 0xc2, 0x36, 0xfd, 0x6c, 0xfb, 0x1e, 0x9b, + 0xd4, 0x6b, 0x61, 0x07, 0xd2, 0xf5, 0x30, 0x8a, 0x8b, 0xee, 0x30, 0x28, 0xf3, 0xa2, 0x67, 0x3a, + 0x44, 0xbd, 0xdb, 0xd5, 0x8b, 0xb3, 0xac, 0xef, 0x95, 0xfc, 0xe1, 0x41, 0x09, 0xb0, 0x20, 0xdf, + 0x7d, 0x56, 0x65, 0xd0, 0x46, 0xfc, 0xef, 0xea, 0x72, 0x8c, 0xff, 0x40, 0x81, 0x73, 0xa3, 0x43, + 0x10, 0xa5, 0xed, 0xdf, 0x82, 0x82, 0x6d, 0x11, 0xb5, 0xdb, 0xd2, 0x5c, 0x22, 0x75, 0x27, 0xa1, + 0x54, 0xde, 0xb6, 0xc8, 0x33, 0x46, 0x16, 0x9a, 0x10, 0x4e, 0xfe, 0xfd, 0x78, 0x2a, 0x56, 0x88, + 0x97, 0x3f, 0x85, 0xb9, 0x15, 0xa3, 0x63, 0x5a, 0xf5, 0x6e, 0xdb, 0x8c, 0x02, 0x7d, 0x5f, 0x87, + 0xb4, 0xcb, 0x44, 0x05, 0x39, 0x8b, 0x14, 0x7f, 0xf2, 0x98, 0xec, 0x0f, 0xf0, 0x8f, 0xff, 0xdd, + 0x51, 0xda, 0x7b, 0x43, 0x76, 0xeb, 0x29, 0x71, 0xa2, 0x05, 0x6c, 0x7e, 0xa9, 0x51, 0x36, 0xf8, + 0xd7, 0x15, 0xb8, 0xc0, 0x65, 0x73, 0xfb, 0xd8, 0x26, 0x0e, 0x3f, 0xf4, 0x8a, 0x60, 0x40, 0xae, + 0xc1, 0x2c, 0xd5, 0x9c, 0x26, 0x11, 0x93, 0x34, 0x51, 0xc9, 0x7c, 0x79, 0x50, 0x4a, 0xd6, 0xa9, + 0xed, 0x90, 0xda, 0x2a, 0x96, 0x8f, 0x64, 0xf7, 0x34, 0x58, 0x08, 0x6a, 0x42, 0x94, 0xdd, 0xfc, + 0xa9, 0x22, 0xdf, 0x51, 0x6d, 0x09, 0xd0, 0xdb, 0x6d, 0x9b, 0xba, 0x16, 0xc5, 0x7a, 0xb5, 0x06, + 0x19, 0x9d, 0xcb, 0x54, 0xe9, 0x7e, 0x57, 0x6c, 0xbd, 0xf2, 0xf7, 0xae, 0x07, 0xb6, 0x91, 0xbf, + 0x53, 0x34, 0xa0, 0xb1, 0xdf, 0x25, 0x18, 0xf4, 0xfe, 0x7f, 0xb4, 0x0a, 0x49, 0xa1, 0x13, 0x0f, + 0x62, 0x4c, 0x10, 0xc1, 0xe6, 0x70, 0x83, 0x57, 0x96, 0x6e, 0xc2, 0x63, 0x95, 0xfa, 0xdc, 0x82, + 0x8b, 0x81, 0x7d, 0x8d, 0x7a, 0xa7, 0xc6, 0x61, 0xfb, 0x13, 0xdb, 0xde, 0xe9, 0x75, 0x23, 0x50, + 0xe4, 0x65, 0x80, 0x8e, 0xb6, 0x27, 0xf6, 0x09, 0x02, 0xf5, 0x27, 0x70, 0xba, 0xa3, 0xed, 0xf1, + 0xb7, 0xb8, 0xa8, 0x08, 0x49, 0x47, 0x40, 0x43, 0xe9, 0x5d, 0xbc, 0x62, 0x1f, 0x41, 0x32, 0xb7, + 0xf2, 0x5f, 0x0c, 0x41, 0xfa, 0x9b, 0x15, 0xa5, 0xa7, 0x7b, 0x0f, 0x66, 0xfb, 0xad, 0x8b, 0x1d, + 0xeb, 0xc8, 0x59, 0xf2, 0xa1, 0x4d, 0x98, 0xeb, 0x3a, 0x64, 0x9b, 0x50, 0xbd, 0x45, 0x0c, 0xaf, + 0xab, 0xb1, 0x63, 0x0a, 0x2b, 0x0c, 0x44, 0x08, 0xdd, 0x94, 0x7f, 0x57, 0x81, 0x33, 0x8f, 0x88, + 0xe6, 0xd0, 0x2d, 0xa2, 0xd1, 0xc6, 0x5e, 0x14, 0x6b, 0xec, 0x7d, 0x88, 0x59, 0xf6, 0xae, 0x44, + 0x32, 0x93, 0x97, 0x51, 0xd9, 0x2c, 0x56, 0x5f, 0x1a, 0xe0, 0x77, 0xe0, 0xec, 0x70, 0x73, 0xa2, + 0xb4, 0xbc, 0xbf, 0x8c, 0x41, 0xfa, 0x61, 0x35, 0x82, 0x2e, 0xbe, 0x23, 0x77, 0xde, 0xe1, 0xfa, + 0xef, 0xbf, 0x66, 0xe9, 0x61, 0xf5, 0x31, 0xd9, 0xf7, 0xf6, 0x05, 0x8c, 0x0b, 0xad, 0x40, 0x9a, + 0xb6, 0x1c, 0xe2, 0xb6, 0xec, 0xb6, 0x21, 0x31, 0xc2, 0x91, 0xd4, 0x34, 0xe0, 0x42, 0x6d, 0x98, + 0xa7, 0x7b, 0x16, 0xc7, 0x03, 0x6a, 0x53, 0x57, 0x07, 0xe2, 0x12, 0x47, 0x11, 0xb7, 0xc0, 0xc4, + 0x1d, 0x1e, 0x94, 0x50, 0x63, 0xcf, 0x62, 0x3d, 0x7c, 0x58, 0x6d, 0x78, 0x02, 0x30, 0xa2, 0x92, + 0xa6, 0xf7, 0x69, 0x0b, 0x3b, 0x90, 0xe0, 0xbd, 0x40, 0x17, 0x20, 0xc6, 0x16, 0x49, 0x65, 0x78, + 0x91, 0x64, 0x34, 0xde, 0x29, 0xef, 0x05, 0xc7, 0x19, 0xfb, 0x01, 0x97, 0xb0, 0x00, 0x69, 0x07, + 0x1f, 0x00, 0x30, 0x15, 0x46, 0x39, 0xfa, 0x7f, 0x13, 0x83, 0xfc, 0xb3, 0x9e, 0xdb, 0x8a, 0xc6, + 0xca, 0xab, 0x00, 0xdd, 0x9e, 0xdb, 0x22, 0x8e, 0x4a, 0xf7, 0x2c, 0xd9, 0xe1, 0x29, 0x21, 0x1c, + 0xaf, 0xc7, 0x82, 0xaf, 0xb1, 0x67, 0xa1, 0x0d, 0x29, 0x84, 0xa8, 0x83, 0x38, 0xd0, 0xed, 0x23, + 0x60, 0xff, 0xc6, 0x9e, 0xf5, 0x94, 0x50, 0x6d, 0x48, 0x20, 0x61, 0x02, 0xdf, 0x81, 0x24, 0x2b, + 0xa8, 0xd4, 0x3e, 0x8e, 0x61, 0xcd, 0x32, 0x9e, 0x86, 0xed, 0xcd, 0xdc, 0xc4, 0xf1, 0x66, 0x2e, + 0xfa, 0x16, 0xa4, 0xc5, 0x4b, 0xd9, 0x2a, 0x36, 0xcb, 0x57, 0xb1, 0x20, 0x4d, 0x48, 0xdd, 0xf3, + 0xf5, 0x2b, 0xc5, 0xdf, 0xc8, 0x56, 0xaf, 0xb3, 0x90, 0xd8, 0xb6, 0x1d, 0x9d, 0xf0, 0x78, 0x51, + 0x0a, 0x8b, 0x42, 0xdf, 0x31, 0xa7, 0x0a, 0xe9, 0xf2, 0x1f, 0x29, 0x70, 0xba, 0x3f, 0x6e, 0x51, + 0x3a, 0xe5, 0xea, 0x90, 0xf6, 0x8f, 0x3f, 0x84, 0x4c, 0xe3, 0xe5, 0x3f, 0x9f, 0x81, 0xd3, 0x1f, + 0xf4, 0x88, 0xb3, 0x1f, 0x8d, 0x59, 0x55, 0x44, 0x48, 0x70, 0xe6, 0x84, 0xa6, 0xc0, 0x83, 0x84, + 0x37, 0xe1, 0xf4, 0xae, 0x66, 0x52, 0x75, 0xdb, 0x76, 0xd4, 0x5e, 0xd7, 0xd0, 0xa8, 0x17, 0x8f, + 0xc9, 0x31, 0xf2, 0x03, 0xdb, 0xd9, 0xe4, 0x44, 0x44, 0x00, 0xed, 0x58, 0xf6, 0xae, 0xa5, 0x32, + 0xb2, 0x69, 0x35, 0x99, 0x1a, 0xdc, 0x62, 0x9c, 0x9f, 0x26, 0x7e, 0xf3, 0xc7, 0x07, 0xa5, 0xe5, + 0xa6, 0x49, 0x5b, 0xbd, 0xad, 0x25, 0xdd, 0xee, 0xdc, 0xe9, 0x37, 0xc4, 0xd8, 0x1a, 0xfc, 0xbf, + 0xd3, 0xdd, 0x69, 0xde, 0xe1, 0xf1, 0xd8, 0x5e, 0xcf, 0x34, 0x96, 0x36, 0x37, 0x6b, 0xab, 0xb8, + 0xc0, 0x45, 0x7e, 0x28, 0x24, 0x36, 0xf6, 0x2c, 0x0f, 0x59, 0x7c, 0xa9, 0x40, 0x61, 0xa0, 0xa7, + 0x28, 0x87, 0x71, 0x0d, 0x32, 0x2f, 0x7a, 0xc4, 0x31, 0x89, 0x71, 0xec, 0x71, 0x04, 0xc9, 0xc8, + 0xa6, 0xce, 0x27, 0x90, 0x1d, 0xd2, 0x43, 0xec, 0xab, 0xe9, 0x21, 0xb3, 0x3b, 0x50, 0x41, 0xf9, + 0x7f, 0x14, 0x38, 0x8b, 0x89, 0x6b, 0xb7, 0x5f, 0x12, 0x71, 0x78, 0x15, 0x81, 0xa5, 0x6c, 0x80, + 0x3c, 0x27, 0x52, 0xbf, 0x8a, 0xc1, 0xa4, 0x85, 0x0c, 0xe1, 0x3b, 0x66, 0x5d, 0xaa, 0xd1, 0x9e, + 0x38, 0x6d, 0x0b, 0x46, 0xa2, 0x3e, 0x15, 0xd6, 0x79, 0x5d, 0x2c, 0x79, 0xd8, 0xce, 0xba, 0x6b, + 0x9b, 0xae, 0x6d, 0x79, 0x87, 0xe1, 0xa2, 0x24, 0x47, 0xff, 0x17, 0x61, 0x7e, 0xa4, 0xff, 0x51, + 0x7a, 0xf6, 0xdf, 0x9c, 0x81, 0x0b, 0xc3, 0xe2, 0x23, 0x0a, 0x01, 0xfc, 0x9f, 0xd2, 0x71, 0x1e, + 0xb2, 0xeb, 0xb6, 0xdd, 0x07, 0xae, 0xe5, 0x1c, 0x64, 0x44, 0x99, 0xab, 0x81, 0x6d, 0x95, 0x82, + 0x74, 0x14, 0xe5, 0x38, 0xfc, 0x96, 0x02, 0xd9, 0x88, 0xb6, 0xaf, 0x27, 0x0b, 0x1c, 0x4a, 0x4d, + 0x34, 0x20, 0xf7, 0x33, 0xd8, 0xef, 0xfe, 0xb1, 0x02, 0xa8, 0xe1, 0xf4, 0x2c, 0x5d, 0xa3, 0xe4, + 0x89, 0xdd, 0x8c, 0xa0, 0x8f, 0x67, 0x21, 0x61, 0x5a, 0x06, 0xd9, 0xe3, 0x7d, 0x8c, 0x63, 0x51, + 0x40, 0x77, 0x21, 0x25, 0xd3, 0x31, 0x44, 0xfc, 0x33, 0x56, 0x39, 0x77, 0x78, 0x50, 0x4a, 0x8a, + 0xe4, 0x8b, 0xd5, 0x2f, 0x07, 0x7f, 0x71, 0x52, 0xe4, 0x5f, 0x78, 0x81, 0xe1, 0x4f, 0xe0, 0xcc, + 0x50, 0xfb, 0xa2, 0xec, 0xfc, 0x3f, 0xf0, 0xf3, 0x75, 0xde, 0xe3, 0xa8, 0xb6, 0xf9, 0x27, 0x4a, + 0xa3, 0x41, 0xef, 0x02, 0x74, 0x1d, 0xf2, 0x52, 0x15, 0xac, 0xb1, 0x23, 0xb1, 0xa6, 0x19, 0x07, + 0x27, 0x48, 0x4d, 0xfd, 0x48, 0x81, 0xb3, 0x51, 0x9f, 0x5a, 0x7c, 0x8d, 0xdd, 0xa9, 0x43, 0x81, + 0x17, 0x6b, 0xd6, 0xb6, 0x1d, 0xd9, 0xc9, 0xd1, 0xef, 0x29, 0x30, 0xe7, 0x93, 0x1a, 0xe5, 0x8a, + 0x7d, 0xb2, 0x04, 0xaa, 0xef, 0xb0, 0x35, 0xd4, 0x6f, 0x81, 0x51, 0xda, 0xf7, 0x7f, 0x2b, 0x70, + 0xae, 0xca, 0x03, 0x03, 0x84, 0x87, 0x3d, 0xdc, 0x5e, 0x27, 0x02, 0x9b, 0x28, 0x42, 0xf2, 0x25, + 0x71, 0x5c, 0xd3, 0x16, 0x8b, 0x47, 0x0e, 0x7b, 0x45, 0xf4, 0x3d, 0xc8, 0xe8, 0xf2, 0x3d, 0xde, + 0x3c, 0xcf, 0x56, 0x6a, 0x4c, 0xc0, 0x09, 0x01, 0xc7, 0xe1, 0x41, 0x09, 0xbc, 0x96, 0xd7, 0x56, + 0x31, 0x78, 0xd2, 0x6b, 0x06, 0x5a, 0x80, 0x94, 0x6b, 0x69, 0x5d, 0xb7, 0x65, 0x7b, 0xc7, 0xab, + 0xfd, 0xb2, 0x1c, 0xeb, 0xef, 0xc2, 0xf9, 0xb1, 0xce, 0x47, 0xa9, 0xdd, 0x2d, 0x28, 0xad, 0x92, + 0xae, 0x43, 0x98, 0x6b, 0x32, 0x9e, 0x13, 0xc7, 0xdc, 0xde, 0x8f, 0x4e, 0xcb, 0xb2, 0x0f, 0x4d, + 0x58, 0x0c, 0x7f, 0x47, 0x94, 0x9d, 0xf9, 0x51, 0x12, 0x72, 0x6b, 0x7b, 0x5d, 0xdb, 0xa1, 0x75, + 0xb1, 0xfc, 0xa3, 0x55, 0x48, 0x75, 0x1d, 0xfb, 0xa5, 0xe9, 0x09, 0xce, 0x07, 0x9e, 0xf9, 0x0f, + 0xf1, 0x3c, 0x93, 0xf5, 0x71, 0x9f, 0x13, 0x61, 0x48, 0x3f, 0xb1, 0x75, 0xad, 0xfd, 0xc0, 0x6c, + 0x7b, 0x33, 0x63, 0x69, 0x9a, 0x98, 0xa5, 0x3e, 0xc7, 0x33, 0x8d, 0xb6, 0x3c, 0xff, 0xd0, 0x27, + 0xa2, 0x87, 0x90, 0x7a, 0x44, 0x69, 0x97, 0x3d, 0x94, 0xce, 0xe5, 0xc6, 0x54, 0x91, 0x8c, 0x41, + 0x4a, 0xea, 0x33, 0x23, 0x0c, 0x73, 0x0f, 0x6d, 0xbb, 0xd9, 0x26, 0xd5, 0xb6, 0xdd, 0x33, 0xaa, + 0xb6, 0xb5, 0x6d, 0x36, 0xe5, 0x16, 0xf3, 0xfa, 0x54, 0x89, 0x0f, 0xab, 0x75, 0x3c, 0xce, 0x8e, + 0xbe, 0x0d, 0xa9, 0xfa, 0xb2, 0x14, 0x25, 0xf6, 0x9c, 0xd7, 0xa6, 0x8a, 0xaa, 0x2f, 0xe3, 0x3e, + 0x13, 0x7a, 0x04, 0x99, 0x95, 0x4f, 0x7b, 0x0e, 0x91, 0x32, 0x66, 0xb9, 0x8c, 0x9b, 0x53, 0x65, + 0x70, 0x1e, 0xec, 0x67, 0x5d, 0x78, 0x15, 0x72, 0x43, 0x9a, 0x44, 0x08, 0xe2, 0x5d, 0xa6, 0x34, + 0x36, 0x9c, 0x69, 0xcc, 0xff, 0x0b, 0x3b, 0x5b, 0xb8, 0x09, 0x71, 0xa6, 0x15, 0x36, 0xb7, 0xb7, + 0x34, 0x97, 0x6c, 0x3a, 0xa6, 0xac, 0xe4, 0x15, 0x65, 0xbd, 0xbf, 0x53, 0x60, 0xa6, 0xbe, 0xcc, + 0x30, 0xdb, 0x56, 0x4f, 0xdf, 0x21, 0x54, 0xd6, 0x92, 0x25, 0x8e, 0xe5, 0x1c, 0xb2, 0x6d, 0x8a, + 0xc5, 0x3f, 0x8d, 0x65, 0x09, 0x5d, 0x06, 0xd0, 0x74, 0x9d, 0xb8, 0x2e, 0x0f, 0x47, 0xc4, 0xf8, + 0xb3, 0xb4, 0xa0, 0x3c, 0x26, 0xfb, 0x8c, 0xcd, 0x25, 0xba, 0x43, 0xc4, 0x4c, 0x4e, 0x63, 0x59, + 0x62, 0x6c, 0x94, 0x74, 0xba, 0x2a, 0xb5, 0x77, 0x88, 0xc5, 0xb5, 0x99, 0xc6, 0x69, 0x46, 0x69, + 0x30, 0x02, 0x73, 0x01, 0xc4, 0x32, 0xba, 0xb6, 0x69, 0x51, 0xae, 0xa6, 0x34, 0xee, 0x97, 0x99, + 0x48, 0x87, 0x34, 0x4d, 0x99, 0xb2, 0x99, 0xc6, 0xb2, 0x24, 0xbb, 0xb1, 0x01, 0xb1, 0x87, 0xd5, + 0xfa, 0xb1, 0xbb, 0x81, 0x20, 0xae, 0xf5, 0xa4, 0xd1, 0xa5, 0x31, 0xff, 0x2f, 0x05, 0xfe, 0xb6, + 0x02, 0x09, 0xae, 0x7a, 0x74, 0x09, 0xd2, 0xba, 0x6d, 0x51, 0xcd, 0xb4, 0xe4, 0xbc, 0x49, 0xe3, + 0x01, 0x21, 0x54, 0xf2, 0x55, 0xc8, 0x6a, 0xba, 0x6e, 0xf7, 0x2c, 0xaa, 0x5a, 0x5a, 0x87, 0xc8, + 0x37, 0x64, 0x24, 0x6d, 0x5d, 0xeb, 0x10, 0x54, 0x02, 0xaf, 0xc8, 0x95, 0x28, 0x34, 0x05, 0x92, + 0xd4, 0x0f, 0xe6, 0x48, 0xbf, 0xf1, 0x67, 0x0a, 0xcc, 0x7d, 0xe8, 0x98, 0x94, 0x54, 0x34, 0xaa, + 0xb7, 0x22, 0x70, 0xfa, 0x6f, 0x43, 0xda, 0xd0, 0xa8, 0x26, 0x32, 0x74, 0x67, 0x26, 0x73, 0xcb, + 0x69, 0xc6, 0xea, 0xf3, 0x2c, 0x5d, 0x04, 0x71, 0xf6, 0x5f, 0xac, 0x07, 0x98, 0xff, 0x1f, 0x04, + 0x72, 0xfc, 0xad, 0x8c, 0xd2, 0xa1, 0xfd, 0xd3, 0x8c, 0xe7, 0xd0, 0x22, 0xe8, 0xfd, 0x7b, 0x90, + 0x94, 0xbb, 0x22, 0xd9, 0xf7, 0xc5, 0x69, 0xf3, 0xd1, 0x8b, 0x44, 0x48, 0x36, 0x54, 0x01, 0x70, + 0xa9, 0xe6, 0x50, 0x95, 0x9a, 0x9d, 0xa3, 0x45, 0x63, 0x3d, 0xbf, 0xc7, 0xd9, 0x18, 0x15, 0xad, + 0x43, 0xa6, 0xf3, 0x52, 0xd7, 0xd5, 0x6d, 0xb3, 0x4d, 0x65, 0x20, 0x36, 0x3f, 0x24, 0xc4, 0x6b, + 0xc9, 0xd3, 0xe7, 0xd5, 0xea, 0x03, 0x5e, 0x49, 0xc4, 0x43, 0x07, 0x65, 0x0c, 0x4c, 0x82, 0xf8, + 0x8f, 0x5e, 0x03, 0x99, 0xf8, 0xa5, 0xba, 0x2e, 0xe5, 0xd3, 0x2b, 0x55, 0xc9, 0x1d, 0x1e, 0x94, + 0xd2, 0x98, 0x53, 0xeb, 0xf5, 0x06, 0x4e, 0x8b, 0x0a, 0x75, 0xd7, 0x5b, 0x54, 0xbf, 0xaf, 0x40, + 0xae, 0xd2, 0x6b, 0xef, 0x6c, 0x74, 0xeb, 0xbd, 0x4e, 0x47, 0x73, 0xf6, 0xd1, 0x45, 0xcf, 0x32, + 0xcc, 0x4f, 0x09, 0xd7, 0x6c, 0x4c, 0x0e, 0xbd, 0xf9, 0x29, 0x61, 0x43, 0x2f, 0x93, 0x4c, 0x18, + 0x5d, 0x64, 0x90, 0x5c, 0x83, 0x1c, 0xdf, 0x13, 0xa8, 0xc4, 0xa2, 0x8e, 0x49, 0xc4, 0xae, 0x31, + 0x86, 0xb3, 0x9c, 0xb8, 0x26, 0x68, 0xe8, 0x06, 0xe4, 0xdd, 0x7d, 0x97, 0x92, 0x8e, 0x2a, 0xb2, + 0xe1, 0x45, 0x52, 0x64, 0x0c, 0xe7, 0x04, 0x15, 0x0b, 0x62, 0xf9, 0x3f, 0x67, 0x20, 0xef, 0x8d, + 0x72, 0x94, 0x60, 0xae, 0x02, 0x89, 0x6d, 0xb3, 0xdd, 0x8f, 0x6c, 0x84, 0xbb, 0x5f, 0x4f, 0xd2, + 0x12, 0x73, 0xb2, 0x1e, 0xb4, 0xe3, 0xac, 0x0b, 0x5f, 0x28, 0x10, 0xe7, 0xeb, 0xd5, 0x5d, 0x88, + 0xf3, 0x69, 0xa3, 0x1c, 0x65, 0xda, 0xf0, 0xaa, 0x7d, 0x4f, 0x3d, 0x33, 0xf0, 0xd4, 0xdc, 0x4b, + 0xb6, 0xb4, 0xfb, 0x77, 0xef, 0xf1, 0xa1, 0xca, 0x62, 0x59, 0x42, 0x15, 0x48, 0x11, 0xde, 0x16, + 0x62, 0xc8, 0xd5, 0x22, 0xc8, 0x3a, 0x87, 0x06, 0xcd, 0x9b, 0xa2, 0x1e, 0x1f, 0xba, 0x00, 0x31, + 0x66, 0x03, 0x49, 0x71, 0x06, 0x7e, 0x78, 0x50, 0x8a, 0xb1, 0xd1, 0x67, 0x34, 0x11, 0x48, 0x7a, + 0x3f, 0x9e, 0x8a, 0x17, 0x12, 0xe5, 0xbf, 0x8a, 0x43, 0xae, 0xd6, 0x89, 0x68, 0x52, 0xad, 0x0c, + 0xeb, 0x38, 0x68, 0x0d, 0x1f, 0x7a, 0xd7, 0xb8, 0x8a, 0x87, 0xbd, 0x52, 0xec, 0x78, 0x5e, 0xa9, + 0xc6, 0x56, 0x08, 0x79, 0x73, 0x80, 0xbd, 0xff, 0x1b, 0x53, 0xdf, 0xdf, 0xd0, 0xb6, 0xda, 0x04, + 0x33, 0x9e, 0x7e, 0x18, 0x8b, 0x0b, 0x40, 0xbf, 0xc0, 0x17, 0x22, 0x31, 0xb5, 0x67, 0x8f, 0x3e, + 0xb5, 0x93, 0xc4, 0x32, 0x18, 0x6d, 0x61, 0x4f, 0x1a, 0xca, 0x9b, 0x10, 0x33, 0x4c, 0x4f, 0x93, + 0x47, 0x75, 0x31, 0x8c, 0x65, 0x8a, 0xbd, 0xc4, 0xfd, 0xf6, 0xe2, 0x8f, 0x0f, 0x2e, 0x6c, 0x00, + 0x0c, 0x7a, 0x85, 0x16, 0x61, 0xd6, 0x6e, 0x1b, 0x0c, 0xba, 0xb3, 0x26, 0xe4, 0x2a, 0xe9, 0xc3, + 0x83, 0x52, 0x62, 0xa3, 0x6d, 0xd4, 0x56, 0x71, 0xc2, 0x6e, 0x1b, 0x35, 0x83, 0x5f, 0xb8, 0x20, + 0xbb, 0x2a, 0xbf, 0x67, 0xc2, 0xb3, 0x0a, 0x70, 0xd2, 0x22, 0xbb, 0xab, 0xc4, 0xd5, 0xfd, 0xcb, + 0x8f, 0xb4, 0x96, 0x3f, 0x51, 0x20, 0xef, 0x69, 0x30, 0xda, 0xc9, 0x99, 0x32, 0x3b, 0xd2, 0xe0, + 0x63, 0xc7, 0x33, 0x78, 0x8f, 0x4f, 0x26, 0xd8, 0x3d, 0x87, 0x33, 0x22, 0xf3, 0x41, 0xd7, 0x28, + 0xf3, 0x8e, 0x51, 0xc1, 0xf6, 0x9f, 0x2a, 0x70, 0x76, 0x58, 0x70, 0x94, 0xfd, 0x7f, 0x3c, 0x12, + 0x77, 0x7d, 0x3d, 0x40, 0x48, 0xd0, 0xdb, 0x45, 0xfc, 0x74, 0x38, 0x04, 0xbb, 0xf0, 0x1e, 0x24, + 0x38, 0xf9, 0x04, 0x5e, 0x4a, 0x2a, 0xb1, 0x05, 0x73, 0x2b, 0x86, 0x51, 0xaf, 0x4b, 0x43, 0xfa, + 0xca, 0x7e, 0xc1, 0x83, 0x0b, 0x33, 0x41, 0x70, 0xc1, 0xff, 0xa6, 0x28, 0xe1, 0xc2, 0x8f, 0xe7, + 0x21, 0x2b, 0xdb, 0xbe, 0x69, 0xb1, 0xbd, 0xec, 0x1d, 0x88, 0x35, 0x25, 0x30, 0xcc, 0x04, 0x2e, + 0xb2, 0x83, 0x8b, 0x36, 0x98, 0xd5, 0x64, 0x0c, 0xdd, 0x1e, 0x0d, 0x88, 0x12, 0x0e, 0x42, 0x45, + 0x03, 0x86, 0x6e, 0x8f, 0xa2, 0x0f, 0xe0, 0xb4, 0x3e, 0xb8, 0xf2, 0xa0, 0x32, 0xe6, 0x58, 0x68, + 0x6e, 0x55, 0xe0, 0xcd, 0x0f, 0x9c, 0xd7, 0x87, 0xc8, 0x68, 0xc5, 0x9f, 0x73, 0x1f, 0x0f, 0xdd, + 0x7d, 0x8c, 0xa6, 0xf9, 0xfb, 0x12, 0xf3, 0xd1, 0x9b, 0x30, 0x6b, 0xf0, 0xdc, 0x6e, 0xb9, 0x7b, + 0x09, 0x9a, 0x5a, 0x43, 0xc9, 0xf3, 0x58, 0xd6, 0x47, 0x8f, 0x20, 0x2b, 0xfe, 0x89, 0x40, 0xbe, + 0xf4, 0x84, 0x37, 0xc2, 0xf9, 0x7d, 0xe7, 0xd9, 0x38, 0x63, 0x0c, 0x68, 0xe8, 0x1e, 0xc4, 0x5d, + 0x5d, 0x13, 0xd0, 0x3d, 0x38, 0xea, 0xe1, 0xcb, 0xc9, 0xc5, 0xbc, 0x2e, 0xfa, 0x10, 0xe6, 0xb6, + 0x48, 0xd3, 0xb4, 0x54, 0x3a, 0x38, 0x69, 0x2e, 0xa6, 0xc6, 0x0e, 0xb7, 0xfb, 0xde, 0x21, 0x38, + 0x85, 0x10, 0x17, 0xb6, 0x46, 0x1e, 0xb0, 0x61, 0xe2, 0xce, 0xdd, 0x27, 0x36, 0x1d, 0x3a, 0x4c, + 0x81, 0xb9, 0x7d, 0x38, 0x4f, 0x86, 0xc8, 0x68, 0x0d, 0x32, 0x1a, 0x9b, 0x9f, 0x2a, 0x4f, 0xc4, + 0x2a, 0x42, 0xe8, 0x8e, 0x73, 0x2c, 0x25, 0x0c, 0x83, 0xd6, 0x27, 0x0d, 0xc4, 0x74, 0x88, 0xd3, + 0x24, 0xc5, 0xcc, 0x64, 0x31, 0xfe, 0x33, 0x6c, 0x29, 0x86, 0x93, 0xd0, 0x63, 0xc8, 0xb5, 0xbc, + 0xec, 0x04, 0x1e, 0x12, 0xc8, 0x86, 0x6e, 0x39, 0x03, 0x92, 0x2a, 0x70, 0xb6, 0xe5, 0x23, 0xa2, + 0xd7, 0x60, 0xa6, 0xa9, 0x17, 0x73, 0x5c, 0xc2, 0xa5, 0x49, 0x29, 0x04, 0x78, 0xa6, 0xa9, 0xa3, + 0x77, 0x20, 0x25, 0x82, 0xac, 0x7b, 0x56, 0x31, 0x1f, 0x3a, 0x79, 0x87, 0xe3, 0xdb, 0x98, 0x07, + 0x83, 0xd9, 0xbb, 0x1e, 0x41, 0x56, 0x9c, 0x29, 0xb7, 0x79, 0x72, 0x4b, 0xf1, 0x74, 0xa8, 0xc1, + 0x8d, 0x67, 0xe6, 0x60, 0x71, 0x3b, 0x50, 0xd0, 0xd0, 0x3a, 0xe4, 0x1d, 0x11, 0x46, 0x90, 0xc9, + 0xd9, 0xc5, 0x02, 0x97, 0xf5, 0x4a, 0xb0, 0x2b, 0x19, 0x0b, 0x79, 0xe1, 0x9c, 0xe3, 0xa7, 0xa2, + 0xef, 0xc2, 0xd9, 0x61, 0x79, 0x72, 0x4a, 0xcc, 0x71, 0xa9, 0xaf, 0x4d, 0x95, 0xea, 0x9f, 0x19, + 0xc8, 0x19, 0x7b, 0x84, 0xee, 0x43, 0x42, 0x8c, 0x39, 0xe2, 0x02, 0x4b, 0x41, 0x7b, 0x00, 0xff, + 0x70, 0x8b, 0xda, 0x4c, 0x61, 0x54, 0x9e, 0xa5, 0xab, 0x6d, 0xbb, 0x59, 0x3c, 0x13, 0xaa, 0xb0, + 0xf1, 0x90, 0x00, 0xce, 0xd0, 0x01, 0x8d, 0xd9, 0x8c, 0x23, 0xe8, 0xf2, 0x90, 0xf7, 0x6c, 0xa8, + 0xcd, 0x04, 0x1c, 0xb0, 0xe3, 0xac, 0xe3, 0x23, 0xf2, 0x71, 0x14, 0xb9, 0x4b, 0x2a, 0x9f, 0xf6, + 0xf3, 0xe1, 0xe3, 0x38, 0x96, 0x91, 0x8f, 0x33, 0xce, 0x80, 0x86, 0x1a, 0x50, 0x10, 0x89, 0xd0, + 0x44, 0xf5, 0x8e, 0x0a, 0x8b, 0xe7, 0xb8, 0xb4, 0x57, 0x03, 0x7d, 0x6a, 0xd0, 0xd1, 0x28, 0x3e, + 0xad, 0x0f, 0xd3, 0x51, 0x17, 0x16, 0x8c, 0xfe, 0x21, 0x9c, 0xfa, 0x92, 0x9f, 0xc2, 0x0d, 0xe4, + 0x9f, 0xe7, 0xf2, 0xef, 0x05, 0xba, 0xb9, 0x89, 0xa7, 0x83, 0xb8, 0x68, 0x84, 0x54, 0x60, 0xce, + 0x8c, 0xcb, 0x57, 0xf5, 0x41, 0xa2, 0x7a, 0xb1, 0x18, 0xea, 0xcc, 0x42, 0x92, 0xe9, 0x71, 0x41, + 0x1f, 0x79, 0xc0, 0x3c, 0xab, 0x65, 0xdb, 0xdd, 0xe2, 0x85, 0x50, 0xcf, 0xea, 0x8b, 0xae, 0x61, + 0x5e, 0x97, 0x4d, 0x52, 0xd3, 0x32, 0x29, 0x5f, 0xa0, 0x16, 0x42, 0x27, 0xe9, 0xf0, 0xed, 0x3a, + 0x9c, 0x34, 0x45, 0x99, 0x4d, 0x2d, 0x2a, 0x83, 0x12, 0xd2, 0x54, 0x2e, 0x85, 0x4e, 0xad, 0xa0, + 0xe8, 0x05, 0xce, 0x51, 0x3f, 0x95, 0x4d, 0x2d, 0xe1, 0xf4, 0x46, 0xa4, 0x5e, 0x0e, 0x9d, 0x5a, + 0xa1, 0xe9, 0x9c, 0x18, 0x69, 0x63, 0x8f, 0xd8, 0x46, 0x9d, 0x0b, 0xe4, 0xf7, 0x86, 0x8b, 0x57, + 0x42, 0xd7, 0xd0, 0xd1, 0xd8, 0x04, 0x4e, 0xb7, 0x3d, 0x0a, 0x73, 0xcc, 0xbb, 0x8e, 0x49, 0x89, + 0xba, 0xa5, 0x51, 0xbd, 0x55, 0x2c, 0x85, 0x3a, 0xe6, 0xb1, 0x23, 0x1a, 0x0c, 0xbb, 0x7d, 0x12, + 0x5b, 0x8a, 0xc5, 0x06, 0xad, 0xb8, 0x38, 0x65, 0x47, 0xd0, 0x5f, 0x8a, 0x45, 0x7d, 0xf4, 0x6d, + 0x48, 0xbf, 0xe8, 0x11, 0x67, 0x9f, 0x3b, 0xd6, 0xab, 0xa1, 0xf7, 0xc1, 0x47, 0x52, 0x3c, 0x70, + 0xea, 0x85, 0x24, 0xb0, 0x57, 0x0b, 0xa8, 0x5c, 0x2c, 0x87, 0xbe, 0x7a, 0x68, 0x73, 0x84, 0x65, + 0x7d, 0xa4, 0xc1, 0xbc, 0x18, 0x1f, 0x99, 0x05, 0xea, 0xc8, 0x74, 0xcb, 0xe2, 0x35, 0x2e, 0x28, + 0x14, 0xab, 0x06, 0x26, 0xa2, 0xe2, 0x33, 0xda, 0xf8, 0x33, 0xe6, 0x7c, 0xe4, 0xf2, 0x29, 0xf0, + 0x6d, 0xf1, 0x7a, 0xa8, 0xf3, 0x09, 0x40, 0xf7, 0x38, 0xab, 0xf9, 0x88, 0x62, 0x11, 0x35, 0x54, + 0xd7, 0xa5, 0x0c, 0x54, 0x16, 0x6f, 0x4c, 0x58, 0x44, 0x47, 0x30, 0x2e, 0xbf, 0x95, 0x50, 0x17, + 0x7c, 0x3c, 0xed, 0xb5, 0x4d, 0x34, 0x47, 0x3a, 0xfa, 0x9b, 0xa1, 0x62, 0xc6, 0xee, 0xaf, 0x61, + 0xd0, 0xfb, 0x24, 0xe6, 0x0a, 0x35, 0x7e, 0x29, 0x43, 0x75, 0xa9, 0x46, 0xdd, 0xe2, 0x2b, 0xa1, + 0xae, 0x70, 0xfc, 0x96, 0x09, 0xce, 0x68, 0x03, 0xda, 0xdb, 0xf1, 0xcf, 0xc5, 0x46, 0xec, 0x62, + 0xe1, 0x52, 0xf9, 0x87, 0xf3, 0x90, 0xf3, 0x10, 0xb0, 0x40, 0xb7, 0x6f, 0xf8, 0xd1, 0xed, 0x95, + 0x30, 0x74, 0x2b, 0x38, 0x04, 0xbc, 0x7d, 0xc3, 0x0f, 0x6f, 0xaf, 0x84, 0xc1, 0x5b, 0x8f, 0x83, + 0xe1, 0x5b, 0x1c, 0x86, 0x6f, 0x5f, 0x3d, 0x02, 0xbe, 0x95, 0x82, 0x46, 0x01, 0x6e, 0x65, 0x1c, + 0xe0, 0x5e, 0x9f, 0x0c, 0x70, 0xa5, 0x20, 0x1f, 0xc2, 0x7d, 0x6b, 0x04, 0xe1, 0x5e, 0x9d, 0x80, + 0x70, 0x25, 0xb7, 0x07, 0x71, 0x6b, 0x81, 0x10, 0xf7, 0xe6, 0x34, 0x88, 0x2b, 0xa5, 0x0c, 0x61, + 0xdc, 0xe5, 0x21, 0x8c, 0x5b, 0x0a, 0xc5, 0xb8, 0x92, 0x57, 0x80, 0xdc, 0x8f, 0xc2, 0x41, 0xee, + 0x37, 0x8e, 0x04, 0x72, 0xa5, 0xb4, 0x71, 0x94, 0x8b, 0xc3, 0x50, 0xee, 0xab, 0x47, 0x40, 0xb9, + 0xde, 0x60, 0x8d, 0xc0, 0xdc, 0x07, 0x41, 0x30, 0xf7, 0xc6, 0x14, 0x98, 0x2b, 0x65, 0xf9, 0x71, + 0xee, 0x83, 0x20, 0x9c, 0x7b, 0x63, 0x0a, 0xce, 0x1d, 0x92, 0x23, 0x80, 0xee, 0x93, 0x60, 0xa0, + 0xfb, 0xca, 0x54, 0xa0, 0x2b, 0x65, 0x0d, 0x23, 0xdd, 0xd7, 0x7d, 0x48, 0xf7, 0x72, 0x08, 0xd2, + 0x95, 0x8c, 0x0c, 0xea, 0xbe, 0x3b, 0x06, 0x75, 0xcb, 0x93, 0xa0, 0xae, 0xe4, 0xec, 0x63, 0xdd, + 0x5a, 0x20, 0xd6, 0xbd, 0x39, 0x0d, 0xeb, 0x7a, 0x96, 0xe7, 0x07, 0xbb, 0x1b, 0x21, 0x60, 0xf7, + 0xd6, 0x74, 0xb0, 0x2b, 0xc5, 0x8d, 0xa0, 0x5d, 0x75, 0x22, 0xda, 0x7d, 0xfd, 0x88, 0x68, 0x57, + 0xca, 0x0e, 0x82, 0xbb, 0x3f, 0x3f, 0x0c, 0x77, 0x17, 0xc3, 0xe1, 0xae, 0x14, 0x22, 0xf1, 0x6e, + 0x2d, 0x10, 0xef, 0xde, 0x9c, 0x86, 0x77, 0x3d, 0xa5, 0xf9, 0x01, 0xef, 0x93, 0x60, 0xc0, 0xfb, + 0xca, 0x54, 0xc0, 0xeb, 0xd9, 0xce, 0x10, 0xe2, 0xad, 0x05, 0x22, 0xde, 0x9b, 0xd3, 0x10, 0x6f, + 0x7f, 0x34, 0x7d, 0x90, 0x77, 0x33, 0x14, 0xf2, 0xde, 0x3e, 0x0a, 0xe4, 0x95, 0x22, 0xc7, 0x30, + 0xef, 0x8b, 0x23, 0x60, 0xde, 0xe5, 0x63, 0x61, 0x5e, 0xf9, 0xa6, 0x70, 0xd0, 0xfb, 0x51, 0x38, + 0xe8, 0xfd, 0xc6, 0x91, 0x40, 0xaf, 0xe7, 0xdc, 0xc6, 0x50, 0xef, 0xf2, 0x10, 0xea, 0x2d, 0x85, + 0xa2, 0x5e, 0xcf, 0xd7, 0x72, 0xd8, 0xfb, 0xee, 0x18, 0xec, 0x2d, 0x4f, 0x82, 0xbd, 0xde, 0x84, + 0xf5, 0x70, 0xaf, 0x3a, 0x11, 0xa7, 0xbe, 0x7e, 0x44, 0x9c, 0xea, 0x4d, 0x8a, 0x00, 0xa0, 0x5a, + 0x0d, 0x00, 0xaa, 0xd7, 0x27, 0x03, 0x55, 0x6f, 0x2d, 0x1c, 0x20, 0xd5, 0x07, 0x41, 0x48, 0xf5, + 0xc6, 0x14, 0xa4, 0xea, 0xb9, 0x56, 0x1f, 0x54, 0x7d, 0x6b, 0x04, 0xaa, 0x5e, 0x9d, 0x1a, 0x30, + 0xe9, 0x63, 0xd5, 0xf7, 0xc6, 0xb1, 0xea, 0xb5, 0x89, 0x58, 0x55, 0xf2, 0x0f, 0xc0, 0xea, 0x5b, + 0x23, 0x60, 0xf5, 0xea, 0x04, 0xb0, 0xea, 0xbd, 0x5c, 0xa2, 0xd5, 0xad, 0xc9, 0x68, 0x75, 0xe9, + 0xa8, 0x68, 0x55, 0x8a, 0x0d, 0x84, 0xab, 0x4f, 0x82, 0xe1, 0xea, 0x2b, 0x47, 0x3c, 0xb5, 0x1d, + 0xc1, 0xab, 0x0f, 0x82, 0xf0, 0xea, 0x8d, 0x29, 0x78, 0x75, 0xb0, 0x18, 0xf6, 0x01, 0xeb, 0x83, + 0x20, 0xc0, 0x7a, 0x63, 0x0a, 0x60, 0xf5, 0xe4, 0xf8, 0x10, 0x6b, 0x2d, 0x10, 0xb1, 0xde, 0x9c, + 0x86, 0x58, 0x3d, 0x57, 0x16, 0x02, 0x59, 0xdf, 0x8f, 0xa7, 0x2e, 0x15, 0x2e, 0x97, 0x3f, 0x4b, + 0xc0, 0xec, 0x23, 0x2f, 0x5a, 0xe4, 0xbb, 0x8a, 0xa1, 0x9c, 0xe4, 0x2a, 0x06, 0x5a, 0x85, 0xa4, + 0x1c, 0x5f, 0x09, 0x63, 0x27, 0xdc, 0x29, 0x1b, 0xbb, 0x65, 0xe4, 0xb1, 0x9e, 0x20, 0x93, 0x11, + 0xdd, 0x87, 0x5c, 0xcf, 0x25, 0x8e, 0xda, 0x75, 0x4c, 0xdb, 0x31, 0xa9, 0x08, 0xde, 0x2b, 0x95, + 0xc2, 0x97, 0x07, 0xa5, 0xec, 0xa6, 0x4b, 0x9c, 0x67, 0x92, 0x8e, 0xb3, 0x3d, 0x5f, 0xc9, 0xfb, + 0x92, 0x56, 0xe2, 0xe8, 0x5f, 0xd2, 0xfa, 0x00, 0x0a, 0x0e, 0xd1, 0x8c, 0x21, 0x0f, 0x2a, 0xee, + 0x2e, 0x04, 0xaf, 0x2d, 0x9a, 0xe1, 0x73, 0x93, 0xfc, 0x0e, 0xc3, 0x69, 0x67, 0x98, 0x88, 0xee, + 0xc2, 0x7c, 0x47, 0xdb, 0x13, 0x97, 0x72, 0xbc, 0x15, 0x90, 0x47, 0xcd, 0x52, 0x3c, 0x1e, 0x8b, + 0x3a, 0xda, 0x1e, 0xff, 0x2c, 0x97, 0x78, 0xc4, 0x3f, 0x21, 0x72, 0x03, 0xf2, 0x86, 0xe9, 0x52, + 0xd3, 0xd2, 0xbd, 0xcb, 0xbd, 0x69, 0x91, 0xa9, 0xef, 0x51, 0xc5, 0xfd, 0xdd, 0xdb, 0x30, 0x27, + 0xc3, 0xcf, 0x83, 0x0f, 0x75, 0x71, 0x90, 0x98, 0x62, 0xad, 0x60, 0x0f, 0x06, 0xdf, 0x36, 0xab, + 0xc2, 0xe9, 0xa6, 0x46, 0xc9, 0xae, 0xb6, 0xaf, 0x5a, 0xb6, 0xc1, 0x75, 0x9f, 0xe1, 0xd7, 0x28, + 0x2f, 0x1e, 0x1e, 0x94, 0x72, 0x0f, 0xc5, 0xa3, 0x75, 0xdb, 0x10, 0x23, 0x30, 0x2b, 0xfe, 0xe1, + 0x5c, 0xd3, 0xf7, 0xc0, 0x40, 0x2b, 0x90, 0x65, 0xab, 0xad, 0x6a, 0x8b, 0xaf, 0x71, 0x48, 0xf8, + 0x17, 0x76, 0xbc, 0x2c, 0xbf, 0xd9, 0x81, 0x33, 0xee, 0xa0, 0xf0, 0x7e, 0x3c, 0x95, 0x2c, 0xa4, + 0xca, 0x9f, 0x29, 0x90, 0x1d, 0x4a, 0xac, 0xf8, 0xd6, 0x48, 0x08, 0xe2, 0x42, 0x30, 0xa4, 0x0c, + 0x0e, 0xe7, 0xac, 0x40, 0x4a, 0x2a, 0xd6, 0x0b, 0xe8, 0x94, 0xc2, 0x51, 0x05, 0xdf, 0xbe, 0x79, + 0xd1, 0x2c, 0x8f, 0xed, 0xed, 0xf8, 0x1f, 0xfe, 0xa0, 0x74, 0xaa, 0xfc, 0x93, 0x18, 0xe4, 0x86, + 0x33, 0x29, 0x6a, 0x23, 0xed, 0x0a, 0xf2, 0x39, 0x43, 0x1c, 0xe1, 0xad, 0x5c, 0x85, 0xb4, 0x23, + 0x2b, 0x79, 0xcd, 0x5c, 0x9c, 0x10, 0x68, 0xf1, 0xb7, 0x73, 0xc0, 0xb8, 0xf0, 0xb7, 0x33, 0xfd, + 0x09, 0xbd, 0x04, 0x09, 0xfe, 0x69, 0x3d, 0xd9, 0xb4, 0xa0, 0x7c, 0xc9, 0x35, 0xf6, 0x1c, 0x8b, + 0x6a, 0xcc, 0x01, 0x34, 0x4e, 0x74, 0x17, 0xab, 0x4f, 0x38, 0xc1, 0xa7, 0xe9, 0x4e, 0x78, 0x79, + 0xa8, 0xce, 0xb6, 0xbe, 0xed, 0x36, 0xd1, 0xa9, 0xfc, 0x8a, 0x9f, 0xf7, 0x01, 0xba, 0xeb, 0xa3, + 0x22, 0xe4, 0x37, 0xff, 0x96, 0xb0, 0xfc, 0xe6, 0x9f, 0x2f, 0xc6, 0x96, 0xef, 0x8b, 0xe0, 0xf3, + 0x45, 0x04, 0x55, 0xc5, 0x50, 0xdf, 0x7e, 0x02, 0x67, 0x02, 0x66, 0x2f, 0xca, 0x03, 0x54, 0x37, + 0xd6, 0xeb, 0xb5, 0x7a, 0x63, 0x6d, 0xbd, 0x51, 0x38, 0x85, 0x72, 0x90, 0x66, 0xe5, 0xb5, 0xf5, + 0xfa, 0x66, 0xbd, 0xa0, 0xa0, 0x02, 0x64, 0x6b, 0xeb, 0xbe, 0x0a, 0xf2, 0xb3, 0x71, 0xb7, 0x3f, + 0x84, 0x8c, 0xef, 0x1e, 0x13, 0x42, 0x90, 0x7f, 0xb6, 0x59, 0x7f, 0xa4, 0x36, 0x6a, 0x4f, 0xd7, + 0xea, 0x8d, 0x95, 0xa7, 0xcf, 0x0a, 0xa7, 0x98, 0x64, 0x4e, 0x5b, 0xa9, 0x6c, 0xe0, 0x46, 0x41, + 0xe9, 0x97, 0x1b, 0x1b, 0x9b, 0xd5, 0x47, 0x85, 0x99, 0x7e, 0xf9, 0x83, 0xcd, 0x35, 0xfc, 0x71, + 0x21, 0x26, 0x05, 0x6b, 0x30, 0x1f, 0x98, 0x20, 0x88, 0x32, 0x90, 0xdc, 0xb4, 0xf8, 0xa5, 0x1a, + 0xd1, 0xca, 0x7e, 0x9e, 0x5a, 0x41, 0x41, 0x29, 0x91, 0x8b, 0x56, 0x98, 0x41, 0xb3, 0x30, 0x53, + 0x5f, 0x2e, 0xc4, 0xd0, 0x69, 0xc8, 0xf8, 0x12, 0xed, 0x0a, 0x71, 0x94, 0x96, 0xd9, 0x56, 0x85, + 0xc4, 0xed, 0xab, 0xe0, 0x4b, 0x6f, 0x41, 0x00, 0xb3, 0x4f, 0x34, 0x4a, 0x5c, 0x5a, 0x38, 0x85, + 0x92, 0x10, 0x5b, 0x69, 0xb7, 0x0b, 0xca, 0xbd, 0x8f, 0x20, 0xe5, 0x7d, 0x9a, 0x00, 0x3d, 0x81, + 0x84, 0x40, 0x2c, 0xa5, 0xf0, 0xa9, 0xc0, 0x27, 0xd5, 0xc2, 0xe2, 0xb4, 0xb9, 0x52, 0x3e, 0xc5, + 0x24, 0xaf, 0xed, 0xfd, 0x2c, 0x24, 0x57, 0xae, 0x7e, 0xfe, 0xef, 0x57, 0x4e, 0x7d, 0x7e, 0x78, + 0x45, 0xf9, 0xe2, 0xf0, 0x8a, 0xf2, 0x2f, 0x87, 0x57, 0x94, 0x7f, 0x3b, 0xbc, 0xa2, 0xfc, 0xfe, + 0x7f, 0x5c, 0x39, 0xf5, 0x49, 0x52, 0xb2, 0x6c, 0xcd, 0xf2, 0x6f, 0x40, 0x2e, 0xff, 0x6f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x94, 0x23, 0x57, 0x4e, 0xe4, 0x52, 0x00, 0x00, } diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 42baba4f084e..ade0856f1886 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -379,6 +379,35 @@ message CheckConsistencyResponse { ResponseHeader header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; } +// An AdjustStatsRequest triggers a stats recomputation on the Range addressed by +// the request. +// +// Since this request targets a specific Range, the start key must equal the +// start key of the target Range. +// +// The stats recomputation touches essentially the whole range, but the command +// avoids having to block other commands by taking care to not interleave +// with splits, and by using the commutativity of stats updates. As a result, +// it is safe to invoke at any time, including repeatedly, though it should be +// used conservatively due to performing a full scan of the Range. +message AdjustStatsRequest { + option (gogoproto.equal) = true; + + Span header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; + bytes computation_end_key = 2 [(gogoproto.casttype) = "Key"]; + // When dry_run is true, the stats delta is computed, but no stats adjustment + // is performed. + bool dry_run = 3; +} + +// An AdjustStatsResponse is the response to an AdjustStatsRequest. +message AdjustStatsResponse { + ResponseHeader header = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true]; + + // added_delta is the adjustment made to the range's stats, i.e. `new_stats = old_stats + added_delta`. + storage.engine.enginepb.MVCCNetworkStats added_delta = 2 [(gogoproto.nullable) = false]; +} + // A BeginTransactionRequest is the argument to the BeginTransaction() method. message BeginTransactionRequest { option (gogoproto.equal) = true; @@ -1150,6 +1179,7 @@ message RequestUnion { QueryTxnRequest query_txn = 33; AdminScatterRequest admin_scatter = 36; AddSSTableRequest add_sstable = 37; + AdjustStatsRequest adjust_stats = 39; } // A ResponseUnion contains exactly one of the responses. @@ -1200,6 +1230,7 @@ message ResponseUnion { QueryTxnResponse query_txn = 33; AdminScatterResponse admin_scatter = 36; AddSSTableResponse add_sstable = 37; + AdjustStatsResponse adjust_stats = 39; } // A Header is attached to a BatchRequest, encapsulating routing and auxiliary diff --git a/pkg/roachpb/batch_generated.go b/pkg/roachpb/batch_generated.go index eef9087bf00b..5b0605fb117c 100644 --- a/pkg/roachpb/batch_generated.go +++ b/pkg/roachpb/batch_generated.go @@ -9,7 +9,7 @@ import ( "strconv" ) -type reqCounts [37]int32 +type reqCounts [38]int32 // getReqCounts returns the number of times each // request type appears in the batch. @@ -91,6 +91,8 @@ func (ba *BatchRequest) getReqCounts() reqCounts { counts[35]++ case r.AddSstable != nil: counts[36]++ + case r.AdjustStats != nil: + counts[37]++ default: panic(fmt.Sprintf("unsupported request: %+v", r)) } @@ -136,6 +138,7 @@ var requestNames = []string{ "QueryTxn", "AdmScatter", "AddSstable", + "AdjustStats", } // Summary prints a short summary of the requests in a batch. @@ -207,6 +210,7 @@ func (ba *BatchRequest) CreateReply() *BatchResponse { var buf34 []QueryTxnResponse var buf35 []AdminScatterResponse var buf36 []AddSSTableResponse + var buf37 []AdjustStatsResponse for i, r := range ba.Requests { switch { @@ -432,6 +436,12 @@ func (ba *BatchRequest) CreateReply() *BatchResponse { } br.Responses[i].AddSstable = &buf36[0] buf36 = buf36[1:] + case r.AdjustStats != nil: + if buf37 == nil { + buf37 = make([]AdjustStatsResponse, counts[37]) + } + br.Responses[i].AdjustStats = &buf37[0] + buf37 = buf37[1:] default: panic(fmt.Sprintf("unsupported request: %+v", r)) } diff --git a/pkg/roachpb/method.go b/pkg/roachpb/method.go index 0cc0a109875f..afb67bab4e56 100644 --- a/pkg/roachpb/method.go +++ b/pkg/roachpb/method.go @@ -138,4 +138,6 @@ const ( AdminScatter // AddSSTable links a file into the RocksDB log-structured merge-tree. AddSSTable + // AdjustStats applies a delta to a Range's MVCCStats to fix computational errors. + AdjustStats ) diff --git a/pkg/roachpb/method_string.go b/pkg/roachpb/method_string.go index f03442698c0f..2f1ca7e8cbfc 100644 --- a/pkg/roachpb/method_string.go +++ b/pkg/roachpb/method_string.go @@ -4,9 +4,9 @@ package roachpb import "fmt" -const _Method_name = "GetPutConditionalPutIncrementDeleteDeleteRangeClearRangeScanReverseScanBeginTransactionEndTransactionAdminSplitAdminMergeAdminTransferLeaseAdminChangeReplicasHeartbeatTxnGCPushTxnQueryTxnRangeLookupResolveIntentResolveIntentRangeNoopMergeTruncateLogRequestLeaseTransferLeaseLeaseInfoComputeChecksumDeprecatedVerifyChecksumCheckConsistencyInitPutWriteBatchExportImportAdminScatterAddSSTable" +const _Method_name = "GetPutConditionalPutIncrementDeleteDeleteRangeClearRangeScanReverseScanBeginTransactionEndTransactionAdminSplitAdminMergeAdminTransferLeaseAdminChangeReplicasHeartbeatTxnGCPushTxnQueryTxnRangeLookupResolveIntentResolveIntentRangeNoopMergeTruncateLogRequestLeaseTransferLeaseLeaseInfoComputeChecksumDeprecatedVerifyChecksumCheckConsistencyInitPutWriteBatchExportImportAdminScatterAddSSTableAdjustStats" -var _Method_index = [...]uint16{0, 3, 6, 20, 29, 35, 46, 56, 60, 71, 87, 101, 111, 121, 139, 158, 170, 172, 179, 187, 198, 211, 229, 233, 238, 249, 261, 274, 283, 298, 322, 338, 345, 355, 361, 367, 379, 389} +var _Method_index = [...]uint16{0, 3, 6, 20, 29, 35, 46, 56, 60, 71, 87, 101, 111, 121, 139, 158, 170, 172, 179, 187, 198, 211, 229, 233, 238, 249, 261, 274, 283, 298, 322, 338, 345, 355, 361, 367, 379, 389, 400} func (i Method) String() string { if i < 0 || i >= Method(len(_Method_index)-1) { diff --git a/pkg/storage/api.pb.go b/pkg/storage/api.pb.go index 6c15a2ecbb80..d14e6bb7c878 100644 --- a/pkg/storage/api.pb.go +++ b/pkg/storage/api.pb.go @@ -33,6 +33,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" import cockroach_roachpb1 "github.com/cockroachdb/cockroach/pkg/roachpb" +import cockroach_storage_engine_enginepb "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" import github_com_cockroachdb_cockroach_pkg_roachpb "github.com/cockroachdb/cockroach/pkg/roachpb" import github_com_cockroachdb_cockroach_pkg_util_uuid "github.com/cockroachdb/cockroach/pkg/util/uuid" @@ -87,6 +88,8 @@ type CollectChecksumResponse struct { // TODO(tschottdorf): with larger ranges, this is no longer tenable. // See https://github.com/cockroachdb/cockroach/issues/21128. Snapshot *cockroach_roachpb1.RaftSnapshotData `protobuf:"bytes,2,opt,name=snapshot" json:"snapshot,omitempty"` + // delta carries the stats of the range minus the recomputed stats. + Delta cockroach_storage_engine_enginepb.MVCCNetworkStats `protobuf:"bytes,3,opt,name=delta" json:"delta"` } func (m *CollectChecksumResponse) Reset() { *m = CollectChecksumResponse{} } @@ -276,6 +279,14 @@ func (m *CollectChecksumResponse) MarshalTo(dAtA []byte) (int, error) { } i += n3 } + dAtA[i] = 0x1a + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Delta.Size())) + n4, err := m.Delta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 return i, nil } @@ -328,6 +339,8 @@ func (m *CollectChecksumResponse) Size() (n int) { l = m.Snapshot.Size() n += 1 + l + sovApi(uint64(l)) } + l = m.Delta.Size() + n += 1 + l + sovApi(uint64(l)) return n } @@ -685,6 +698,36 @@ func (m *CollectChecksumResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Delta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Delta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -814,35 +857,39 @@ var ( func init() { proto.RegisterFile("storage/api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 472 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x41, 0x6f, 0xd3, 0x30, - 0x18, 0xad, 0x37, 0x68, 0x2a, 0x17, 0x09, 0xcd, 0x42, 0x63, 0x2a, 0x52, 0x32, 0x8a, 0x90, 0x06, - 0x87, 0x44, 0xea, 0xb8, 0x23, 0xda, 0x4a, 0x90, 0x0b, 0x07, 0x4f, 0xbb, 0xec, 0xc0, 0xe4, 0xc6, - 0x5e, 0x92, 0xb5, 0xb5, 0x83, 0xed, 0x20, 0xed, 0x5f, 0xf0, 0xb3, 0xca, 0xad, 0x47, 0xc4, 0x21, - 0x82, 0xf0, 0x2f, 0x38, 0x21, 0x3b, 0x6e, 0xc6, 0xe8, 0x0e, 0x83, 0xdb, 0xf7, 0x7d, 0xfe, 0xde, - 0xf3, 0x7b, 0xcf, 0x32, 0xdc, 0x53, 0x5a, 0x48, 0x92, 0xb2, 0x88, 0x14, 0x79, 0x58, 0x48, 0xa1, - 0x05, 0xda, 0x4b, 0x44, 0x32, 0x97, 0x82, 0x24, 0x59, 0xe8, 0x0e, 0x07, 0x4f, 0x6c, 0x5b, 0xcc, - 0xa2, 0x9c, 0x6b, 0x26, 0x39, 0x59, 0x9c, 0x4b, 0x72, 0xa1, 0x9b, 0xfd, 0xc1, 0xfe, 0xe6, 0x70, - 0xc9, 0x34, 0xa1, 0x44, 0x13, 0x37, 0x7f, 0x94, 0x8a, 0x54, 0xd8, 0x32, 0x32, 0x55, 0x33, 0x1d, - 0xae, 0x01, 0x44, 0x27, 0x5a, 0x48, 0x86, 0xd9, 0xc7, 0x92, 0x29, 0xfd, 0x8e, 0x11, 0xca, 0x24, - 0x3a, 0x83, 0x1e, 0x17, 0x94, 0x9d, 0xe7, 0xf4, 0x00, 0x1c, 0x82, 0xa3, 0xfb, 0xe3, 0x37, 0x75, - 0x15, 0x74, 0xdf, 0x0b, 0xca, 0xe2, 0xe9, 0xaf, 0x2a, 0x38, 0x4e, 0x73, 0x9d, 0x95, 0xb3, 0x30, - 0x11, 0xcb, 0xa8, 0x95, 0x47, 0x67, 0xd7, 0x75, 0x54, 0xcc, 0xd3, 0xc8, 0x09, 0x09, 0x1b, 0x18, - 0xee, 0x1a, 0xc6, 0x98, 0xa2, 0x0f, 0xb0, 0x67, 0x8c, 0x58, 0xf2, 0x1d, 0x4b, 0x3e, 0xa9, 0xab, - 0xc0, 0xb3, 0x2a, 0x2c, 0xfb, 0xab, 0x7f, 0x62, 0x77, 0x38, 0xec, 0x59, 0xd2, 0x98, 0x0e, 0xbf, - 0xec, 0xc0, 0xfd, 0x89, 0x58, 0x2c, 0x58, 0xa2, 0x27, 0x19, 0x4b, 0xe6, 0xaa, 0x5c, 0x3a, 0x73, - 0xe8, 0x2d, 0xec, 0x66, 0xd6, 0xa0, 0x75, 0xd5, 0x1f, 0x3d, 0x0f, 0xb7, 0xc2, 0x0d, 0xb7, 0xd3, - 0x18, 0xf7, 0x56, 0x55, 0xd0, 0x59, 0x57, 0x01, 0xc0, 0x0e, 0x6e, 0x3c, 0x48, 0xc2, 0xd3, 0xd6, - 0xc3, 0x6e, 0xe3, 0x01, 0x9b, 0xd9, 0x7f, 0x78, 0x70, 0x38, 0xec, 0x59, 0xd2, 0x98, 0xa2, 0x4b, - 0xd8, 0x4f, 0x9c, 0x76, 0x73, 0xc5, 0xee, 0x21, 0x38, 0x7a, 0x30, 0x8e, 0x8d, 0x8c, 0x6f, 0x77, - 0x4d, 0xbf, 0xd4, 0xf9, 0x22, 0x2a, 0xcb, 0x9c, 0x86, 0xa7, 0xa7, 0xf1, 0xb4, 0xae, 0x02, 0xb8, - 0x49, 0x23, 0x9e, 0x62, 0xb8, 0x61, 0x8f, 0x29, 0x1a, 0xc0, 0xde, 0xa6, 0x3b, 0xb8, 0x67, 0x2e, - 0xc2, 0x6d, 0x3f, 0xfc, 0x04, 0x1f, 0x6f, 0x45, 0xa9, 0x0a, 0xc1, 0x15, 0xbb, 0x01, 0x03, 0x37, - 0x61, 0xe8, 0x35, 0xec, 0x29, 0x4e, 0x0a, 0x95, 0x09, 0x6d, 0xe3, 0xe9, 0x8f, 0x9e, 0xfd, 0x91, - 0xf4, 0xb5, 0xeb, 0x0b, 0x7d, 0xe2, 0xd6, 0xa6, 0x44, 0x13, 0xdc, 0x82, 0x46, 0x57, 0xb0, 0x3f, - 0x11, 0x5c, 0xe5, 0x4a, 0x33, 0x9e, 0x5c, 0xa1, 0x4b, 0xf8, 0xf0, 0x2f, 0x19, 0xe8, 0xc5, 0x2d, - 0x4f, 0x77, 0xfb, 0xab, 0x0f, 0x5e, 0xde, 0x65, 0xb5, 0x71, 0x35, 0xec, 0x8c, 0x9f, 0xae, 0x7e, - 0xf8, 0x9d, 0x55, 0xed, 0x83, 0x75, 0xed, 0x83, 0xaf, 0xb5, 0x0f, 0xbe, 0xd7, 0x3e, 0xf8, 0xfc, - 0xd3, 0xef, 0x9c, 0x79, 0x0e, 0x3c, 0xeb, 0xda, 0xbf, 0x73, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, - 0x52, 0xd9, 0x94, 0x35, 0xae, 0x03, 0x00, 0x00, + // 530 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcf, 0x6f, 0xd3, 0x30, + 0x14, 0xae, 0xf7, 0xa3, 0xad, 0x5c, 0x24, 0x34, 0x0b, 0x8d, 0xa9, 0x48, 0xc9, 0xe8, 0x84, 0x34, + 0x38, 0x24, 0x52, 0xcb, 0x1d, 0xd1, 0x54, 0x82, 0x1c, 0x18, 0x52, 0xaa, 0x71, 0xd8, 0x81, 0xc9, + 0x8d, 0xbd, 0x34, 0x6b, 0x6a, 0x87, 0xd8, 0x01, 0xed, 0xbf, 0xe0, 0xbf, 0xa2, 0xdc, 0x7a, 0x44, + 0x1c, 0x22, 0x08, 0xff, 0x05, 0x27, 0x64, 0xc7, 0xe9, 0x18, 0xed, 0x61, 0xec, 0x14, 0xbf, 0xe7, + 0xf7, 0x7d, 0xef, 0x7d, 0x9f, 0x5f, 0xe0, 0x9e, 0x90, 0x3c, 0xc3, 0x11, 0x75, 0x71, 0x1a, 0x3b, + 0x69, 0xc6, 0x25, 0x47, 0x7b, 0x21, 0x0f, 0x67, 0x19, 0xc7, 0xe1, 0xd4, 0x31, 0x97, 0xdd, 0x47, + 0x3a, 0x4c, 0x27, 0x6e, 0xcc, 0x24, 0xcd, 0x18, 0x4e, 0xce, 0x33, 0x7c, 0x21, 0xab, 0xfa, 0xee, + 0x7e, 0x7d, 0x39, 0xa7, 0x12, 0x13, 0x2c, 0xb1, 0xc9, 0x1f, 0xd5, 0xd4, 0x94, 0x45, 0x31, 0xab, + 0x3f, 0xaa, 0xee, 0x63, 0x18, 0x0e, 0x4c, 0xd1, 0x83, 0x88, 0x47, 0x5c, 0x1f, 0x5d, 0x75, 0xaa, + 0xb2, 0xbd, 0x25, 0x80, 0x68, 0x2c, 0x79, 0x46, 0x03, 0xfa, 0x21, 0xa7, 0x42, 0xbe, 0xa6, 0x98, + 0xd0, 0x0c, 0x9d, 0xc1, 0x16, 0xe3, 0x84, 0x9e, 0xc7, 0xe4, 0x00, 0x1c, 0x82, 0xe3, 0xdd, 0xe1, + 0xcb, 0xb2, 0xb0, 0x9b, 0x27, 0x9c, 0x50, 0x7f, 0xf4, 0xbb, 0xb0, 0x07, 0x51, 0x2c, 0xa7, 0xf9, + 0xc4, 0x09, 0xf9, 0xdc, 0x5d, 0x69, 0x20, 0x93, 0xeb, 0xb3, 0x9b, 0xce, 0x22, 0xd7, 0x4c, 0xeb, + 0x54, 0xb0, 0xa0, 0xa9, 0x18, 0x7d, 0x82, 0xde, 0xc3, 0xb6, 0x9a, 0x57, 0x93, 0x6f, 0x69, 0x72, + 0xaf, 0x2c, 0xec, 0x96, 0x9e, 0x42, 0xb3, 0x3f, 0xff, 0x2f, 0x76, 0x83, 0x0b, 0x5a, 0x9a, 0xd4, + 0x27, 0xbd, 0xaf, 0x5b, 0x70, 0xdf, 0xe3, 0x49, 0x42, 0x43, 0xe9, 0x4d, 0x69, 0x38, 0x13, 0xf9, + 0xdc, 0x88, 0x43, 0xaf, 0x60, 0x73, 0xaa, 0x05, 0x6a, 0x55, 0x9d, 0xfe, 0x13, 0x67, 0xed, 0x05, + 0x9c, 0x75, 0x37, 0x86, 0xed, 0x45, 0x61, 0x37, 0x96, 0x85, 0x0d, 0x02, 0x03, 0x57, 0x1a, 0x32, + 0xcc, 0xa2, 0x95, 0x86, 0xed, 0x4a, 0x43, 0xa0, 0x72, 0x77, 0xd0, 0x60, 0x70, 0x41, 0x4b, 0x93, + 0xfa, 0x04, 0x5d, 0xc2, 0x4e, 0x68, 0x66, 0x57, 0x2d, 0xb6, 0x0f, 0xc1, 0xf1, 0xbd, 0xa1, 0xaf, + 0xc6, 0xf8, 0x7e, 0x5b, 0xf7, 0x73, 0x19, 0x27, 0x6e, 0x9e, 0xc7, 0xc4, 0x39, 0x3d, 0xf5, 0x47, + 0x65, 0x61, 0xc3, 0xda, 0x0d, 0x7f, 0x14, 0xc0, 0x9a, 0xdd, 0x27, 0xa8, 0x0b, 0xdb, 0x75, 0x74, + 0xb0, 0xa3, 0x1a, 0x05, 0xab, 0xb8, 0xf7, 0x05, 0xc0, 0x87, 0x6b, 0x5e, 0x8a, 0x94, 0x33, 0x41, + 0x6f, 0xe0, 0xc0, 0x4d, 0x1c, 0x7a, 0x01, 0xdb, 0x82, 0xe1, 0x54, 0x4c, 0xb9, 0xd4, 0xfe, 0x74, + 0xfa, 0x47, 0x7f, 0x59, 0x7d, 0x2d, 0xfb, 0x42, 0x8e, 0x4d, 0xd9, 0x08, 0x4b, 0x1c, 0xac, 0x40, + 0xe8, 0x2d, 0xdc, 0x25, 0x34, 0x91, 0x58, 0x4b, 0xef, 0xf4, 0x07, 0x1b, 0x1e, 0xaa, 0xda, 0x72, + 0xa7, 0x5e, 0x76, 0xe7, 0xcd, 0x3b, 0xcf, 0x3b, 0xa1, 0xf2, 0x13, 0xcf, 0x66, 0x63, 0x89, 0xa5, + 0x18, 0xee, 0x28, 0xbf, 0x82, 0x8a, 0xa7, 0x7f, 0x05, 0x3b, 0x1e, 0x67, 0x22, 0x16, 0x92, 0xb2, + 0xf0, 0x0a, 0x5d, 0xc2, 0xfb, 0xff, 0xe8, 0x42, 0x4f, 0x37, 0xf4, 0xd8, 0xbc, 0x47, 0xdd, 0x67, + 0xb7, 0x29, 0xad, 0x6c, 0xea, 0x35, 0x86, 0x8f, 0x17, 0x3f, 0xad, 0xc6, 0xa2, 0xb4, 0xc0, 0xb2, + 0xb4, 0xc0, 0xb7, 0xd2, 0x02, 0x3f, 0x4a, 0x0b, 0x7c, 0xfe, 0x65, 0x35, 0xce, 0x5a, 0x06, 0x3c, + 0x69, 0xea, 0xbf, 0x71, 0xf0, 0x27, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xe4, 0x3f, 0x61, 0x25, 0x04, + 0x00, 0x00, } diff --git a/pkg/storage/api.proto b/pkg/storage/api.proto index d0bea93dd115..9e1c6e91378e 100644 --- a/pkg/storage/api.proto +++ b/pkg/storage/api.proto @@ -18,6 +18,7 @@ option go_package = "storage"; import "roachpb/internal_raft.proto"; import "roachpb/metadata.proto"; +import "storage/engine/enginepb/mvcc3.proto"; import "gogoproto/gogo.proto"; // StoreRequestHeader locates a Store on a Node. @@ -49,6 +50,8 @@ message CollectChecksumResponse { // TODO(tschottdorf): with larger ranges, this is no longer tenable. // See https://github.com/cockroachdb/cockroach/issues/21128. roachpb.RaftSnapshotData snapshot = 2; + // delta carries the stats of the range minus the recomputed stats. + storage.engine.enginepb.MVCCNetworkStats delta = 3 [(gogoproto.nullable) = false]; } service Consistency { diff --git a/pkg/storage/batcheval/cmd_adjust_stats.go b/pkg/storage/batcheval/cmd_adjust_stats.go new file mode 100644 index 000000000000..feca94bc3ac2 --- /dev/null +++ b/pkg/storage/batcheval/cmd_adjust_stats.go @@ -0,0 +1,109 @@ +// Copyright 2017 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package batcheval + +import ( + "context" + + "github.com/pkg/errors" + + "github.com/cockroachdb/cockroach/pkg/keys" + "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/storage/batcheval/result" + "github.com/cockroachdb/cockroach/pkg/storage/engine" + "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" + "github.com/cockroachdb/cockroach/pkg/storage/spanset" +) + +func init() { + RegisterCommand(roachpb.AdjustStats, declareKeysAdjustStats, AdjustStats) +} + +func declareKeysAdjustStats( + desc roachpb.RangeDescriptor, header roachpb.Header, req roachpb.Request, spans *spanset.SpanSet, +) { + // Declare only the target key, even though we're really iterating over a key range. This is OK + // since all we're doing is computing a stats delta, and applying this delta commutes with other + // operations on the same key space (except splits, which always touch the start key). + DefaultDeclareKeys(desc, header, req, spans) + // We read the range descriptor. As a side effect, this avoids interleaving with splits (which + // shorten the range, so our recomputation would be bogus), though declaring the start key + // (above this comment) already has that effect. + spans.Add(spanset.SpanReadOnly, roachpb.Span{Key: keys.RangeDescriptorKey(desc.StartKey)}) +} + +// AdjustStats recomputes the MVCCStats stored for this range and adjust them accordingly, +// returning the MVCCStats delta obtained in the process. +func AdjustStats( + ctx context.Context, batch engine.ReadWriter, cArgs CommandArgs, resp roachpb.Response, +) (result.Result, error) { + desc := cArgs.EvalCtx.Desc() + + args := cArgs.Args.(*roachpb.AdjustStatsRequest) + reqSpan := roachpb.Span{ + Key: args.Key, + EndKey: desc.EndKey.AsRawKey(), + } + dryRun := args.DryRun + args = nil // avoid accidental use below + + descSpan := roachpb.Span{ + Key: desc.StartKey.AsRawKey(), + EndKey: desc.EndKey.AsRawKey(), + } + + if !descSpan.Equal(reqSpan) { + return result.Result{}, errors.New("descriptor mismatch; range likely merged") + } + + // If this is a SpanSetBatch, unwrap it. We're intentionally reading without + // declaring the keys because we know this is safe: We declare the range + // descriptor key and so nothing is splitting the range now, and all we are + // doing is emitting a stats update, which commutes with any concurrent writer's + // updates. + // + // NB: we could be computing these stats at any timestamp, but the byte ages + // become unsuitable for human consumption when the timestamp is far away from + // "real time", along with some risk of integer overflow. + eng := spanset.UnwrapBatch(batch) + actualMS, err := rditer.ComputeStatsForRange(desc, eng, cArgs.Header.Timestamp.WallTime) + if err != nil { + return result.Result{}, err + } + + delta := actualMS + delta.Subtract(cArgs.EvalCtx.GetMVCCStats()) + + if !dryRun { + // NB: this will never clear the ContainsEstimates flag. To be able to do this, + // we would need to guarantee that no command that sets it is in-flight in + // parallel with this command. This can be achieved by blocking all of the range + // or by using our inside knowledge that dictates that ranges which contain no + // timeseries writes never have the flag reset, or by making ContainsEstimates + // a counter (and ensuring that we're the only one subtracting at any given + // time). + // + // TODO(tschottdorf): do we not want to run at all if we have estimates in + // this range? I think we want to as this would give us much more realistic + // stats for timeseries ranges (which go cold and the approximate stats are + // wildly overcounting) and this is paced by the consistency checker, but it + // means some extra engine churn. + cArgs.Stats.Add(delta) + } + + resp.(*roachpb.AdjustStatsResponse).AddedDelta = enginepb.MVCCNetworkStats(delta) + return result.Result{}, nil +} diff --git a/pkg/storage/client_test.go b/pkg/storage/client_test.go index fbe812d787f5..307b7083290a 100644 --- a/pkg/storage/client_test.go +++ b/pkg/storage/client_test.go @@ -53,6 +53,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/storage" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/util" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -1363,7 +1364,7 @@ func verifyRangeStats(eng engine.Reader, rangeID roachpb.RangeID, expMS enginepb func verifyRecomputedStats( eng engine.Reader, d *roachpb.RangeDescriptor, expMS enginepb.MVCCStats, nowNanos int64, ) error { - if ms, err := storage.ComputeStatsForRange(d, eng, nowNanos); err != nil { + if ms, err := rditer.ComputeStatsForRange(d, eng, nowNanos); err != nil { return err } else if expMS != ms { return fmt.Errorf("expected range's stats to agree with recomputation: got\n%+v\nrecomputed\n%+v", expMS, ms) diff --git a/pkg/storage/consistency_queue_test.go b/pkg/storage/consistency_queue_test.go index af3a4ff473a0..0d02018ed964 100644 --- a/pkg/storage/consistency_queue_test.go +++ b/pkg/storage/consistency_queue_test.go @@ -20,13 +20,21 @@ import ( "testing" "time" + "github.com/cockroachdb/cockroach/pkg/base" "github.com/cockroachdb/cockroach/pkg/config" "github.com/cockroachdb/cockroach/pkg/internal/client" + "github.com/cockroachdb/cockroach/pkg/keys" "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/storage" "github.com/cockroachdb/cockroach/pkg/storage/engine" + "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/testutils" + "github.com/cockroachdb/cockroach/pkg/testutils/testcluster" "github.com/cockroachdb/cockroach/pkg/util/hlc" "github.com/cockroachdb/cockroach/pkg/util/leaktest" + "github.com/cockroachdb/cockroach/pkg/util/log" + "github.com/cockroachdb/cockroach/pkg/util/retry" + "github.com/pkg/errors" ) // TestConsistencyQueueRequiresLive verifies the queue will not @@ -176,3 +184,156 @@ func TestCheckConsistencyInconsistent(t *testing.T) { t.Fatal("CheckConsistency() failed to panic as expected") } } + +// TestConsistencyQueueAdjustStats is an end-to-end test of the mechanism CockroachDB +// employs to adjust incorrect MVCCStats ("incorrect" meaning not an inconsistency of +// these stats between replicas, but a delta between persisted stats and those one +// would obtain via a recomputation from the on-disk state), namely a call to +// AdjustStats triggered from the consistency checker (which also recomputes the stats). +// +// The test splits off a range on a single node cluster backed by an on-disk RocksDB +// instance, and takes that node offline to perturb its stats. Next, it restarts the +// node as part of a cluster, upreplicates the range, and waits for the stats +// divergence to disappear. +// +// The upreplication here is immaterial and serves only to add realism to the test. +func TestConsistencyQueueAdjustStats(t *testing.T) { + defer leaktest.AfterTest(t)() + + ctx := context.Background() + + path, cleanup := testutils.TempDir(t) + defer cleanup() + + // Set testing knobs that let the consistency queue run in a tight loop. + knobs := base.TestingKnobs{ + Store: &storage.StoreTestingKnobs{ + DisableLastProcessedCheck: true, + }, + } + + clusterArgs := base.TestClusterArgs{ + ReplicationMode: base.ReplicationManual, + ServerArgs: base.TestServerArgs{ + Knobs: knobs, + }, + ServerArgsPerNode: map[int]base.TestServerArgs{ + 0: { + Knobs: knobs, // need to pass this twice + StoreSpecs: []base.StoreSpec{{ + Path: path, + }}, + }, + }, + } + + key := []byte("a") + + computeDelta := func(db *client.DB) enginepb.MVCCStats { + var b client.Batch + b.AddRawRequest(&roachpb.AdjustStatsRequest{ + Span: roachpb.Span{Key: key}, + DryRun: true, + }) + if err := db.Run(ctx, &b); err != nil { + t.Fatal(err) + } + resp := b.RawResponse().Responses[0].GetInner().(*roachpb.AdjustStatsResponse) + delta := enginepb.MVCCStats(resp.AddedDelta) + delta.AgeTo(0) + return delta + } + + rangeID := func() roachpb.RangeID { + tc := testcluster.StartTestCluster(t, 1, clusterArgs) + defer tc.Stopper().Stop(context.TODO()) + + db0 := tc.Servers[0].DB() + + // Split off a range so that we get away from the timeseries writes, which + // pollute the stats with ContainsEstimates=true. Note that the split clears + // the right hand side (which is what we operate on) from that flag. + if err := db0.AdminSplit(ctx, key, key); err != nil { + t.Fatal(err) + } + + delta := computeDelta(db0) + + if delta != (enginepb.MVCCStats{}) { + t.Fatalf("unexpected initial stats adjustment of %+v", delta) + } + + rangeDesc, err := tc.LookupRange(key) + if err != nil { + t.Fatal(err) + } + + return rangeDesc.RangeID + }() + + func() { + cache := engine.NewRocksDBCache(1 << 20) + defer cache.Release() + eng, err := engine.NewRocksDB(engine.RocksDBConfig{ + Dir: path, + MustExist: true, + }, cache) + if err != nil { + t.Fatal(err) + } + defer eng.Close() + + statsKey := keys.RangeStatsKey(rangeID) + + var ms enginepb.MVCCStats + ok, err := engine.MVCCGetProto( + ctx, eng, statsKey, hlc.Timestamp{}, true /* consistent */, nil /* txn */, &ms, + ) + if err != nil { + t.Fatal(err) + } + if !ok { + t.Fatal("no persisted stats") + } + + // Put some garbage in the stats that we're hoping the consistency queue will + // trigger a removal of via AdjustStats. + ms.LiveCount += 123 + + // Overwrite with the new stats; remember that this range hasn't upreplicated, + // so the consistency checker won't see any replica divergence when it runs, + // but it should definitely see that its recomputed stats mismatch. + if err := engine.MVCCPutProto( + ctx, eng, nil, statsKey, hlc.Timestamp{}, nil, &ms, + ); err != nil { + t.Fatal(err) + } + }() + + // Now that we've tampered with the stats, restart the cluster and extend it + // to three nodes. + tc := testcluster.StartTestCluster(t, 3, clusterArgs) + defer tc.Stopper().Stop(context.TODO()) + + if _, err := tc.AddReplicas( + key, tc.Target(1), tc.Target(2), + ); err != nil { + t.Fatal(err) + } + + db0 := tc.Servers[0].DB() + + // The stats should magically repair themselves. The high timeout is only + // relevant in stress testing; it's usually quick. + if err := retry.ForDuration(3*time.Minute, func() error { + delta := computeDelta(db0) + if delta == (enginepb.MVCCStats{}) { + return nil + } + err := errors.Errorf("stats still in need of adjustment: %+v", delta) + log.Info(ctx, err) + return err + }); err != nil { + t.Fatal(err) + } +} diff --git a/pkg/storage/helpers_test.go b/pkg/storage/helpers_test.go index a3986fd96498..3d623fb74a22 100644 --- a/pkg/storage/helpers_test.go +++ b/pkg/storage/helpers_test.go @@ -25,6 +25,7 @@ import ( "sync/atomic" "time" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/pkg/errors" "github.com/cockroachdb/cockroach/pkg/config" @@ -62,7 +63,7 @@ func (s *Store) ComputeMVCCStats() (enginepb.MVCCStats, error) { now := s.Clock().PhysicalNow() newStoreReplicaVisitor(s).Visit(func(r *Replica) bool { var stats enginepb.MVCCStats - stats, err = ComputeStatsForRange(r.Desc(), s.Engine(), now) + stats, err = rditer.ComputeStatsForRange(r.Desc(), s.Engine(), now) if err != nil { return false } diff --git a/pkg/storage/stats.go b/pkg/storage/rditer/stats.go similarity index 90% rename from pkg/storage/stats.go rename to pkg/storage/rditer/stats.go index 84a0b6a6eb16..5a0d9a1b146d 100644 --- a/pkg/storage/stats.go +++ b/pkg/storage/rditer/stats.go @@ -12,13 +12,12 @@ // implied. See the License for the specific language governing // permissions and limitations under the License. -package storage +package rditer import ( "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" - "github.com/cockroachdb/cockroach/pkg/storage/rditer" ) // ComputeStatsForRange computes the stats for a given range by @@ -31,7 +30,7 @@ func ComputeStatsForRange( defer iter.Close() ms := enginepb.MVCCStats{} - for _, keyRange := range rditer.MakeReplicatedKeyRanges(d) { + for _, keyRange := range MakeReplicatedKeyRanges(d) { msDelta, err := iter.ComputeStats(keyRange.Start, keyRange.End, nowNanos) if err != nil { return enginepb.MVCCStats{}, err diff --git a/pkg/storage/replica_command.go b/pkg/storage/replica_command.go index f5d0b8215191..9ede04f7cff2 100644 --- a/pkg/storage/replica_command.go +++ b/pkg/storage/replica_command.go @@ -23,6 +23,7 @@ import ( "sync/atomic" "time" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/coreos/etcd/raft/raftpb" "github.com/pkg/errors" @@ -1086,7 +1087,7 @@ func splitTrigger( // Compute (absolute) stats for LHS range. This means that no more writes // to the LHS must happen below this point. - leftMS, err := ComputeStatsForRange(&split.LeftDesc, batch, ts.WallTime) + leftMS, err := rditer.ComputeStatsForRange(&split.LeftDesc, batch, ts.WallTime) if err != nil { return enginepb.MVCCStats{}, result.Result{}, errors.Wrap(err, "unable to compute stats for LHS range after split") } @@ -1118,7 +1119,7 @@ func splitTrigger( // estimate values, we cannot perform arithmetic to determine the // new range's stats. Instead, we must recompute by iterating // over the keys and counting. - rightMS, err = ComputeStatsForRange(&split.RightDesc, batch, ts.WallTime) + rightMS, err = rditer.ComputeStatsForRange(&split.RightDesc, batch, ts.WallTime) if err != nil { return enginepb.MVCCStats{}, result.Result{}, errors.Wrap(err, "unable to compute stats for RHS range after split") } diff --git a/pkg/storage/replica_consistency.go b/pkg/storage/replica_consistency.go index 2674bb5af216..e7c33137882e 100644 --- a/pkg/storage/replica_consistency.go +++ b/pkg/storage/replica_consistency.go @@ -104,9 +104,33 @@ func (r *Replica) CheckConsistency( log.Error(ctx, buf.String()) } - // Everything is good, no further action necessary. if inconsistencyCount == 0 { - return roachpb.CheckConsistencyResponse{}, nil + // The replicas were in sync. Check that the MVCCStats haven't diverged from + // what they should be. This code originated in the realization that there + // were many bugs in our stats computations. These are being fixed, but it + // is through this mechanism that existing ranges are updated. Hence, the + // logging below is relatively timid. + delta := enginepb.MVCCStats(results[0].Response.Delta) + delta.LastUpdateNanos = 0 + if delta == (enginepb.MVCCStats{}) { + return roachpb.CheckConsistencyResponse{}, nil + } + + // We've found that there's something to correct; send an AdjustStatsRequest. + // Note that this code runs only on the lease holder (at the time of initiating + // the computation), so this work isn't duplicated. Also, we're essentially + // paced by the consistency checker. + log.Infof(ctx, "triggering stats recomputation to resolve delta of %+v", results[0].Response.Delta) + + req := roachpb.AdjustStatsRequest{ + Span: roachpb.Span{Key: desc.StartKey.AsRawKey()}, + } + + var b client.Batch + b.AddRawRequest(&req) + + err := r.store.db.Run(ctx, &b) + return roachpb.CheckConsistencyResponse{}, roachpb.NewError(err) } logFunc := log.Fatalf @@ -173,7 +197,8 @@ func (r *Replica) collectChecksumFromReplica( // RunConsistencyCheck carries out a round of CheckConsistency/CollectChecksum // for the members of this range, returning the results (which it does not act -// upon). The first result will belong to the local replica. +// upon). The first result will belong to the local replica, and in particular +// there is a first result when no error is returned. func (r *Replica) RunConsistencyCheck( ctx context.Context, req roachpb.ComputeChecksumRequest, ) ([]ConsistencyCheckResult, error) { @@ -312,6 +337,10 @@ func (r *Replica) computeChecksumDone( if c, ok := r.mu.checksums[id]; ok { if result != nil { c.Checksum = result.SHA512[:] + + delta := result.PersistedMS + delta.Subtract(result.RecomputedMS) + c.Delta = enginepb.MVCCNetworkStats(delta) } c.gcTimestamp = timeutil.Now().Add(batcheval.ReplicaChecksumGCInterval) c.Snapshot = snapshot diff --git a/pkg/storage/replica_test.go b/pkg/storage/replica_test.go index 28d4231ed7f7..90e4dc436071 100644 --- a/pkg/storage/replica_test.go +++ b/pkg/storage/replica_test.go @@ -8953,3 +8953,89 @@ func TestShouldReplicaQuiesce(t *testing.T) { return q }) } + +func TestReplicaAdjustStats(t *testing.T) { + defer leaktest.AfterTest(t)() + tc := testContext{} + stopper := stop.NewStopper() + defer stopper.Stop(context.TODO()) + tc.Start(t, stopper) + + key := roachpb.RKey("a") + repl := tc.store.LookupReplica(key, nil) + desc := repl.Desc() + sKey := desc.StartKey.AsRawKey() + + const errMismatch = "descriptor mismatch; range likely merged" + + type testCase struct { + name string + key roachpb.Key + expDelta enginepb.MVCCStats + expErr string + } + + runTest := func(test testCase) { + t.Run(test.name, func(t *testing.T) { + args := &roachpb.AdjustStatsRequest{ + Span: roachpb.Span{ + Key: test.key, + }, + } + + resp, pErr := tc.SendWrapped(args) + if !testutils.IsPError(pErr, test.expErr) { + t.Fatalf("got:\n%s\nexpected: %s", pErr, test.expErr) + } + if test.expErr != "" { + return + } + + delta := enginepb.MVCCStats(resp.(*roachpb.AdjustStatsResponse).AddedDelta) + delta.AgeTo(test.expDelta.LastUpdateNanos) + + if delta != test.expDelta { + t.Fatal("diff(wanted, actual) = ", strings.Join(pretty.Diff(test.expDelta, delta), "\n")) + } + }) + } + + for _, test := range []testCase{ + // Non-matching endpoints. + {"leftmismatch", roachpb.Key("a"), enginepb.MVCCStats{}, errMismatch}, + // Recomputation that shouldn't find anything. + {"noop", sKey, enginepb.MVCCStats{}, ""}, + } { + runTest(test) + } + + ctx := context.Background() + seed := randutil.NewPseudoSeed() + t.Logf("seed is %d", seed) + rnd := rand.New(rand.NewSource(seed)) + + repl.raftMu.Lock() + repl.mu.Lock() + ms := repl.mu.state.Stats // intentionally mutated below + disturbMS := enginepb.NewPopulatedMVCCStats(rnd, false) + disturbMS.ContainsEstimates = false + ms.Add(*disturbMS) + err := repl.raftMu.stateLoader.SetMVCCStats(ctx, tc.engine, ms) + repl.assertStateLocked(ctx, tc.engine) + repl.mu.Unlock() + repl.raftMu.Unlock() + + if err != nil { + t.Fatal(err) + } + + // We have `stored ms = recomputable ms + disturbMS`, and so the returned delta + // should be `recomputable ms - stored ms = -disturbMS`. + var expDelta enginepb.MVCCStats + expDelta.Subtract(*disturbMS) + + runTest(testCase{"randdelta", sKey, expDelta, ""}) + if !t.Failed() { + runTest(testCase{"noopagain", sKey, enginepb.MVCCStats{}, ""}) + } +} diff --git a/pkg/storage/spanset/batch.go b/pkg/storage/spanset/batch.go index bf7214aeba60..faef18d09919 100644 --- a/pkg/storage/spanset/batch.go +++ b/pkg/storage/spanset/batch.go @@ -313,3 +313,17 @@ func NewBatch(b engine.Batch, spans *SpanSet) engine.Batch { spans, } } + +// UnwrapBatch returns the wrapped ReadWriter if it was created via `NewBatch`, and +// the original input otherwise. +func UnwrapBatch(rw engine.ReadWriter) engine.ReadWriter { + batch, ok := rw.(engine.Batch) + if !ok { + return rw + } + ssb, ok := batch.(*spanSetBatch) + if !ok { + return batch + } + return ssb.b +} diff --git a/pkg/storage/store_test.go b/pkg/storage/store_test.go index 173a9f1a034f..9706f79d256f 100644 --- a/pkg/storage/store_test.go +++ b/pkg/storage/store_test.go @@ -41,6 +41,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/storage/abortspan" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/engine/enginepb" + "github.com/cockroachdb/cockroach/pkg/storage/rditer" "github.com/cockroachdb/cockroach/pkg/storage/storagebase" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -236,7 +237,7 @@ func TestStoreInitAndBootstrap(t *testing.T) { // Stats should agree with a recomputation. now := r.store.Clock().Now() - if ms, err := ComputeStatsForRange(r.Desc(), eng, now.WallTime); err != nil { + if ms, err := rditer.ComputeStatsForRange(r.Desc(), eng, now.WallTime); err != nil { t.Errorf("failure computing range's stats: %s", err) } else if ms != rs { t.Errorf("expected range's stats to agree with recomputation: %s", pretty.Diff(ms, rs))