diff --git a/conn/node.go b/conn/node.go index 01a4b8eb006..0a3d647d6f8 100644 --- a/conn/node.go +++ b/conn/node.go @@ -452,7 +452,7 @@ func (n *Node) ProposePeerRemoval(ctx context.Context, id uint64) error { } type linReadReq struct { - // A one-shot chan which we send a raft index upon + // A one-shot chan which we send a raft index upon. indexCh chan<- uint64 } diff --git a/contrib/integration/bank/main.go b/contrib/integration/bank/main.go index 886d9627836..55081118456 100644 --- a/contrib/integration/bank/main.go +++ b/contrib/integration/bank/main.go @@ -96,7 +96,7 @@ func (s *State) runTotal(dg *dgo.Dgraph) error { } } ` - txn := dg.NewTxn() + txn := dg.NewReadOnlyTxn() defer txn.Discard(context.Background()) resp, err := txn.Query(context.Background(), query) if err != nil { diff --git a/contrib/integration/increment/main.go b/contrib/integration/increment/main.go index 6fdc0698bca..5fb168a21db 100644 --- a/contrib/integration/increment/main.go +++ b/contrib/integration/increment/main.go @@ -26,6 +26,7 @@ import ( var ( addr = flag.String("addr", "localhost:9080", "Address of Dgraph server.") num = flag.Int("num", 1, "How many times to run.") + ro = flag.Bool("ro", false, "Only read the counter value, don't update it.") wait = flag.String("wait", "0", "How long to wait.") pred = flag.String("pred", "counter.val", "Predicate to use for storing the counter.") ) @@ -33,29 +34,46 @@ var ( type Counter struct { Uid string `json:"uid"` Val int `json:"val"` + + startTs uint64 // Only used for internal testing. } -func increment(dg *dgo.Dgraph) (int, error) { +func queryCounter(txn *dgo.Txn) (Counter, error) { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - txn := dg.NewTxn() + var counter Counter query := fmt.Sprintf("{ q(func: has(%s)) { uid, val: %s }}", *pred, *pred) resp, err := txn.Query(ctx, query) if err != nil { - return 0, err + return counter, err } m := make(map[string][]Counter) if err := json.Unmarshal(resp.Json, &m); err != nil { - return 0, err + return counter, err } - var counter Counter if len(m["q"]) == 0 { // Do nothing. } else if len(m["q"]) == 1 { counter = m["q"][0] } else { - log.Fatalf("Invalid response: %q", resp.Json) + panic(fmt.Sprintf("Invalid response: %q", resp.Json)) + } + counter.startTs = resp.GetTxn().GetStartTs() + return counter, nil +} + +func process(dg *dgo.Dgraph, readOnly bool) (Counter, error) { + if readOnly { + txn := dg.NewReadOnlyTxn() + defer txn.Discard(nil) + return queryCounter(txn) + } + + txn := dg.NewTxn() + counter, err := queryCounter(txn) + if err != nil { + return Counter{}, err } counter.Val += 1 @@ -64,11 +82,14 @@ func increment(dg *dgo.Dgraph) (int, error) { counter.Uid = "_:new" } mu.SetNquads = []byte(fmt.Sprintf(`<%s> <%s> "%d"^^ .`, counter.Uid, *pred, counter.Val)) + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() _, err = txn.Mutate(ctx, &mu) if err != nil { - return 0, err + return Counter{}, err } - return counter.Val, txn.Commit(ctx) + return counter, txn.Commit(ctx) } func main() { @@ -87,13 +108,13 @@ func main() { } for *num > 0 { - val, err := increment(dg) + cnt, err := process(dg, *ro) if err != nil { - fmt.Printf("While trying to increment counter: %v. Retrying...\n", err) + fmt.Printf("While trying to process counter: %v. Retrying...\n", err) time.Sleep(time.Second) continue } - fmt.Printf("Counter SET OK: %d\n", val) + fmt.Printf("Counter VAL: %d [ Ts: %d ]\n", cnt.Val, cnt.startTs) *num -= 1 time.Sleep(waitDur) } diff --git a/contrib/integration/increment/main_test.go b/contrib/integration/increment/main_test.go new file mode 100644 index 00000000000..af4d8df394f --- /dev/null +++ b/contrib/integration/increment/main_test.go @@ -0,0 +1,105 @@ +package main + +import ( + "context" + "log" + "strings" + "sync" + "testing" + + "github.com/dgraph-io/dgo" + "github.com/dgraph-io/dgo/protos/api" + "github.com/dgraph-io/dgraph/x" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" +) + +const N = 10 + +func increment(t *testing.T, dg *dgo.Dgraph) int { + var max int + var mu sync.Mutex + storeMax := func(a int) { + mu.Lock() + if max < a { + max = a + } + mu.Unlock() + } + + var wg sync.WaitGroup + // N goroutines, process N times each goroutine. + for i := 0; i < N; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for i := 0; i < N; i++ { + cnt, err := process(dg, false) + if err != nil { + if strings.Index(err.Error(), "Transaction has been aborted") >= 0 { + // pass + } else { + t.Logf("Error while incrementing: %v\n", err) + } + } else { + storeMax(cnt.Val) + } + } + }() + } + wg.Wait() + return max +} + +func read(t *testing.T, dg *dgo.Dgraph, expected int) { + cnt, err := process(dg, true) + require.NoError(t, err) + ts := cnt.startTs + t.Logf("Readonly stage counter: %+v\n", cnt) + + var wg sync.WaitGroup + for i := 0; i < N; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for i := 0; i < N; i++ { + cnt, err := process(dg, true) + if err != nil { + t.Logf("Error while reading: %v\n", err) + } else { + require.Equal(t, expected, cnt.Val) + require.Equal(t, ts, cnt.startTs) + } + } + }() + } + wg.Wait() +} + +func TestIncrement(t *testing.T) { + conn, err := grpc.Dial("localhost:9180", grpc.WithInsecure()) + if err != nil { + log.Fatal(err) + } + dc := api.NewDgraphClient(conn) + dg := dgo.NewDgraphClient(dc) + + op := api.Operation{DropAll: true} + x.Check(dg.Alter(context.Background(), &op)) + + cnt, err := process(dg, false) + if err != nil { + t.Logf("Error while reading: %v\n", err) + } else { + t.Logf("Initial value: %d\n", cnt.Val) + } + + val := increment(t, dg) + t.Logf("Increment stage done. Got value: %d\n", val) + read(t, dg, val) + t.Logf("Read stage done with value: %d\n", val) + val = increment(t, dg) + t.Logf("Increment stage done. Got value: %d\n", val) + read(t, dg, val) + t.Logf("Read stage done with value: %d\n", val) +} diff --git a/dgraph/cmd/bulk/loader.go b/dgraph/cmd/bulk/loader.go index 74b7b586501..4244c63f35c 100644 --- a/dgraph/cmd/bulk/loader.go +++ b/dgraph/cmd/bulk/loader.go @@ -24,7 +24,6 @@ import ( "github.com/dgraph-io/badger" bo "github.com/dgraph-io/badger/options" - "github.com/dgraph-io/dgo/protos/api" "github.com/dgraph-io/dgraph/protos/intern" "github.com/dgraph-io/dgraph/schema" "github.com/dgraph-io/dgraph/x" @@ -180,7 +179,7 @@ func findRDFFiles(dir string) []string { } type uidRangeResponse struct { - uids *api.AssignedIds + uids *intern.AssignedIds err error } diff --git a/dgraph/cmd/zero/assign.go b/dgraph/cmd/zero/assign.go index 12057e3b5e7..881c48597e4 100644 --- a/dgraph/cmd/zero/assign.go +++ b/dgraph/cmd/zero/assign.go @@ -12,14 +12,14 @@ import ( "golang.org/x/net/context" - "github.com/dgraph-io/dgo/protos/api" "github.com/dgraph-io/dgraph/protos/intern" "github.com/dgraph-io/dgraph/x" + "github.com/golang/glog" ) var ( emptyNum intern.Num - emptyAssignedIds api.AssignedIds + emptyAssignedIds intern.AssignedIds ) const ( @@ -48,11 +48,13 @@ func (s *Server) maxTxnTs() uint64 { return s.state.MaxTxnTs } +var servedFromMemory = errors.New("Lease was served from memory.") + // lease would either allocate ids or timestamps. // This function is triggered by an RPC call. We ensure that only leader can assign new UIDs, // so we can tackle any collisions that might happen with the leasemanager // In essence, we just want one server to be handing out new uids. -func (s *Server) lease(ctx context.Context, num *intern.Num, txn bool) (*api.AssignedIds, error) { +func (s *Server) lease(ctx context.Context, num *intern.Num, txn bool) (*intern.AssignedIds, error) { node := s.Node // TODO: Fix when we move to linearizable reads, need to check if we are the leader, might be // based on leader leases. If this node gets partitioned and unless checkquorum is enabled, this @@ -61,14 +63,36 @@ func (s *Server) lease(ctx context.Context, num *intern.Num, txn bool) (*api.Ass return &emptyAssignedIds, x.Errorf("Assigning IDs is only allowed on leader.") } - val := int(num.Val) - if val == 0 { - return &emptyAssignedIds, x.Errorf("Nothing to be marked or assigned") + if num.Val == 0 && !num.ReadOnly { + return &emptyAssignedIds, x.Errorf("Nothing to be leased") + } + if glog.V(3) { + glog.Infof("Got lease request for txn: %v. Num: %+v\n", txn, num) } s.leaseLock.Lock() defer s.leaseLock.Unlock() + if txn { + if num.Val == 0 && num.ReadOnly { + // If we're only asking for a readonly timestamp, we can potentially + // service it directly. + if glog.V(3) { + glog.Infof("Attempting to serve read only txn ts [%d, %d]", + s.readOnlyTs, s.nextTxnTs) + } + if s.readOnlyTs > 0 && s.readOnlyTs == s.nextTxnTs-1 { + return &intern.AssignedIds{ReadOnly: s.readOnlyTs}, servedFromMemory + } + } + // We couldn't service it. So, let's request an extra timestamp for + // readonly transactions, if needed. + } + + // If we're asking for more ids than the standard lease bandwidth, then we + // should set howMany generously, so we can service future requests from + // memory, without asking for another lease. Only used if we need to renew + // our lease. howMany := leaseBandwidth if num.Val > leaseBandwidth { howMany = num.Val + leaseBandwidth @@ -81,6 +105,8 @@ func (s *Server) lease(ctx context.Context, num *intern.Num, txn bool) (*api.Ass var maxLease, available uint64 var proposal intern.ZeroProposal + // Calculate how many ids do we have available in memory, before we need to + // renew our lease. if txn { maxLease = s.maxTxnTs() available = maxLease - s.nextTxnTs + 1 @@ -91,19 +117,27 @@ func (s *Server) lease(ctx context.Context, num *intern.Num, txn bool) (*api.Ass proposal.MaxLeaseId = maxLease + howMany } - if available < num.Val { + // If we have less available than what we need, we need to renew our lease. + if available < num.Val+1 { // +1 for a potential readonly ts. // Blocking propose to get more ids or timestamps. if err := s.Node.proposeAndWait(ctx, &proposal); err != nil { return nil, err } } - out := &api.AssignedIds{} + out := &intern.AssignedIds{} if txn { - out.StartId = s.nextTxnTs - out.EndId = out.StartId + num.Val - 1 - s.nextTxnTs = out.EndId + 1 - s.orc.doneUntil.Begin(out.EndId) + if num.Val > 0 { + out.StartId = s.nextTxnTs + out.EndId = out.StartId + num.Val - 1 + s.nextTxnTs = out.EndId + 1 + } + if num.ReadOnly { + s.readOnlyTs = s.nextTxnTs + s.nextTxnTs++ + out.ReadOnly = s.readOnlyTs + } + s.orc.doneUntil.Begin(x.Max(out.EndId, out.ReadOnly)) } else { out.StartId = s.nextLeaseId out.EndId = out.StartId + num.Val - 1 @@ -114,7 +148,7 @@ func (s *Server) lease(ctx context.Context, num *intern.Num, txn bool) (*api.Ass // AssignUids is used to assign new uids by communicating with the leader of the RAFT group // responsible for handing out uids. -func (s *Server) AssignUids(ctx context.Context, num *intern.Num) (*api.AssignedIds, error) { +func (s *Server) AssignUids(ctx context.Context, num *intern.Num) (*intern.AssignedIds, error) { if ctx.Err() != nil { return &emptyAssignedIds, ctx.Err() } diff --git a/dgraph/cmd/zero/oracle.go b/dgraph/cmd/zero/oracle.go index 929de600293..bc7ce2bd681 100644 --- a/dgraph/cmd/zero/oracle.go +++ b/dgraph/cmd/zero/oracle.go @@ -16,6 +16,7 @@ import ( "github.com/dgraph-io/dgo/protos/api" "github.com/dgraph-io/dgraph/protos/intern" "github.com/dgraph-io/dgraph/x" + "github.com/golang/glog" "golang.org/x/net/context" ) @@ -213,17 +214,16 @@ func (o *Oracle) commitTs(startTs uint64) uint64 { return o.commits[startTs] } -func (o *Oracle) storePending(ids *api.AssignedIds) { +func (o *Oracle) storePending(ids *intern.AssignedIds) { // Wait to finish up processing everything before start id. - o.doneUntil.WaitForMark(context.Background(), ids.EndId) + max := x.Max(ids.EndId, ids.ReadOnly) + o.doneUntil.WaitForMark(context.Background(), max) // Now send it out to updates. - o.updates <- &intern.OracleDelta{MaxAssigned: ids.EndId} + o.updates <- &intern.OracleDelta{MaxAssigned: max} + o.Lock() defer o.Unlock() - max := ids.EndId - if o.maxAssigned < max { - o.maxAssigned = max - } + o.maxAssigned = x.Max(o.maxAssigned, max) } func (o *Oracle) MaxPending() uint64 { @@ -433,15 +433,22 @@ func (s *Server) TryAbort(ctx context.Context, } // Timestamps is used to assign startTs for a new transaction -func (s *Server) Timestamps(ctx context.Context, num *intern.Num) (*api.AssignedIds, error) { +func (s *Server) Timestamps(ctx context.Context, num *intern.Num) (*intern.AssignedIds, error) { if ctx.Err() != nil { return &emptyAssignedIds, ctx.Err() } reply, err := s.lease(ctx, num, true) if err == nil { - s.orc.doneUntil.Done(reply.EndId) + s.orc.doneUntil.Done(x.Max(reply.EndId, reply.ReadOnly)) go s.orc.storePending(reply) + + } else if err == servedFromMemory { + // Avoid calling doneUntil.Done, and storePending. + err = nil + + } else { + glog.Errorf("Got error: %v while leasing timestamps: %+v", err, num) } return reply, err } diff --git a/dgraph/cmd/zero/zero.go b/dgraph/cmd/zero/zero.go index 4ab823dd0c3..a6cf1f2025b 100644 --- a/dgraph/cmd/zero/zero.go +++ b/dgraph/cmd/zero/zero.go @@ -47,6 +47,7 @@ type Server struct { nextLeaseId uint64 nextTxnTs uint64 + readOnlyTs uint64 leaseLock sync.Mutex // protects nextLeaseId, nextTxnTs and corresponding proposals. // groupMap map[uint32]*Group diff --git a/dgraph/run.sh b/dgraph/run.sh new file mode 100755 index 00000000000..1e57d1ed93a --- /dev/null +++ b/dgraph/run.sh @@ -0,0 +1,2 @@ +md5sum ~/go/bin/dgraph; go build . && go install . && md5sum dgraph ~/go/bin/dgraph +docker-compose down; DATA=$HOME/dg docker-compose up --force-recreate --remove-orphans \ No newline at end of file diff --git a/edgraph/server.go b/edgraph/server.go index db2c7be33b9..82311741edb 100644 --- a/edgraph/server.go +++ b/edgraph/server.go @@ -10,7 +10,6 @@ package edgraph import ( "bytes" "fmt" - "log" "math" "math/rand" "os" @@ -52,8 +51,7 @@ type ServerState struct { mandatoryVlogTicker *time.Ticker // runs every 10m, we always run vlog GC. mu sync.Mutex - needTs []chan uint64 - notify chan struct{} + needTs chan tsReq } // TODO(tzdybal) - remove global @@ -64,7 +62,7 @@ func InitServerState() { State.FinishCh = make(chan struct{}) State.ShutdownCh = make(chan struct{}) - State.notify = make(chan struct{}, 1) + State.needTs = make(chan tsReq, 100) State.initStorage() @@ -182,58 +180,76 @@ func (s *ServerState) Dispose() error { // Server implements protos.DgraphServer type Server struct{} -// TODO(pawan) - Remove this logic from client after client doesn't have to fetch ts -// for Commit API. func (s *ServerState) fillTimestampRequests() { - var chs []chan uint64 const ( initDelay = 10 * time.Millisecond maxDelay = 10 * time.Second ) delay := initDelay - for range s.notify { - RETRY: - s.mu.Lock() - chs = append(chs, s.needTs...) - s.needTs = s.needTs[:0] - s.mu.Unlock() - - if len(chs) == 0 { - continue + + var reqs []tsReq + for { + req := <-s.needTs + slurpLoop: + for { + reqs = append(reqs, req) + select { + case req = <-s.needTs: + default: + break slurpLoop + } + } + + // Generate the request. + num := &intern.Num{} + for _, r := range reqs { + if r.readOnly { + num.ReadOnly = true + } else { + num.Val += 1 + } } - num := &intern.Num{Val: uint64(len(chs))} + + // Execute the request with infinite retries. + retry: ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ts, err := worker.Timestamps(ctx, num) cancel() if err != nil { - log.Printf("Error while retrieving timestamps: %v. Will retry...\n", err) + glog.Warning("Error while retrieving timestamps: %v with delay: %v."+ + " Will retry...\n", err, delay) time.Sleep(delay) delay *= 2 if delay > maxDelay { delay = maxDelay } - goto RETRY + goto retry } delay = initDelay - x.AssertTrue(ts.EndId-ts.StartId+1 == uint64(len(chs))) - for i, ch := range chs { - ch <- ts.StartId + uint64(i) + var offset uint64 + for _, req := range reqs { + if req.readOnly { + req.ch <- ts.ReadOnly + } else { + req.ch <- ts.StartId + offset + offset++ + } } - chs = chs[:0] + x.AssertTrue(ts.StartId == 0 || ts.StartId+offset-1 == ts.EndId) + reqs = reqs[:0] } } -func (s *ServerState) getTimestamp() uint64 { - ch := make(chan uint64) - s.mu.Lock() - s.needTs = append(s.needTs, ch) - s.mu.Unlock() +type tsReq struct { + readOnly bool + // A one-shot chan which we can send a txn timestamp upon. + ch chan uint64 +} - select { - case s.notify <- struct{}{}: - default: - } - return <-ch +func (s *ServerState) getTimestamp(readOnly bool) uint64 { + tr := tsReq{readOnly: readOnly, ch: make(chan uint64)} + s.needTs <- tr + return <-tr.ch } func (s *Server) Alter(ctx context.Context, op *api.Operation) (*api.Payload, error) { @@ -261,7 +277,7 @@ func (s *Server) Alter(ctx context.Context, op *api.Operation) (*api.Payload, er // StartTs is not needed if the predicate to be dropped lies on this server but is required // if it lies on some other machine. Let's get it for safety. - m := &intern.Mutations{StartTs: State.getTimestamp()} + m := &intern.Mutations{StartTs: State.getTimestamp(false)} if op.DropAll { m.DropAll = true _, err := query.ApplyMutations(ctx, m) @@ -307,7 +323,7 @@ func (s *Server) Mutate(ctx context.Context, mu *api.Mutation) (resp *api.Assign return nil, x.Errorf("No mutations allowed.") } if mu.StartTs == 0 { - mu.StartTs = State.getTimestamp() + mu.StartTs = State.getTimestamp(false) } emptyMutation := len(mu.GetSetJson()) == 0 && len(mu.GetDeleteJson()) == 0 && @@ -440,7 +456,7 @@ func (s *Server) Query(ctx context.Context, req *api.Request) (resp *api.Respons var l query.Latency l.Start = time.Now() if tr, ok := trace.FromContext(ctx); ok { - tr.LazyPrintf("Query received: %v, variables: %v", req.Query, req.Vars) + tr.LazyPrintf("Query request received: %v", req) } parsedReq, err := gql.Parse(gql.Request{ @@ -452,7 +468,7 @@ func (s *Server) Query(ctx context.Context, req *api.Request) (resp *api.Respons } if req.StartTs == 0 { - req.StartTs = State.getTimestamp() + req.StartTs = State.getTimestamp(req.ReadOnly) } resp.Txn = &api.TxnContext{ StartTs: req.StartTs, diff --git a/protos/intern/internal.pb.go b/protos/intern/internal.pb.go index 9fc586a4aa8..246620db3b9 100644 --- a/protos/intern/internal.pb.go +++ b/protos/intern/internal.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-gogo. +// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: internal.proto -// DO NOT EDIT! /* Package intern is a generated protocol buffer package. @@ -53,6 +52,7 @@ PeerResponse RaftBatch Num + AssignedIds SnapshotMeta */ package intern @@ -62,10 +62,10 @@ import fmt "fmt" import math "math" import api "github.com/dgraph-io/dgo/protos/api" -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) +import context "golang.org/x/net/context" +import grpc "google.golang.org/grpc" + +import binary "encoding/binary" import io "io" @@ -1881,7 +1881,8 @@ func (m *RaftBatch) GetPayload() *api.Payload { } type Num struct { - Val uint64 `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"` + Val uint64 `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"` + ReadOnly bool `protobuf:"varint,2,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` } func (m *Num) Reset() { *m = Num{} } @@ -1896,6 +1897,46 @@ func (m *Num) GetVal() uint64 { return 0 } +func (m *Num) GetReadOnly() bool { + if m != nil { + return m.ReadOnly + } + return false +} + +type AssignedIds struct { + StartId uint64 `protobuf:"varint,1,opt,name=startId,proto3" json:"startId,omitempty"` + EndId uint64 `protobuf:"varint,2,opt,name=endId,proto3" json:"endId,omitempty"` + // The following is used for read only transactions. + ReadOnly uint64 `protobuf:"varint,5,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` +} + +func (m *AssignedIds) Reset() { *m = AssignedIds{} } +func (m *AssignedIds) String() string { return proto.CompactTextString(m) } +func (*AssignedIds) ProtoMessage() {} +func (*AssignedIds) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{44} } + +func (m *AssignedIds) GetStartId() uint64 { + if m != nil { + return m.StartId + } + return 0 +} + +func (m *AssignedIds) GetEndId() uint64 { + if m != nil { + return m.EndId + } + return 0 +} + +func (m *AssignedIds) GetReadOnly() uint64 { + if m != nil { + return m.ReadOnly + } + return 0 +} + type SnapshotMeta struct { ClientTs uint64 `protobuf:"varint,1,opt,name=client_ts,json=clientTs,proto3" json:"client_ts,omitempty"` GroupId uint32 `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` @@ -1904,7 +1945,7 @@ type SnapshotMeta struct { func (m *SnapshotMeta) Reset() { *m = SnapshotMeta{} } func (m *SnapshotMeta) String() string { return proto.CompactTextString(m) } func (*SnapshotMeta) ProtoMessage() {} -func (*SnapshotMeta) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{44} } +func (*SnapshotMeta) Descriptor() ([]byte, []int) { return fileDescriptorInternal, []int{45} } func (m *SnapshotMeta) GetClientTs() uint64 { if m != nil { @@ -1965,6 +2006,7 @@ func init() { proto.RegisterType((*PeerResponse)(nil), "intern.PeerResponse") proto.RegisterType((*RaftBatch)(nil), "intern.RaftBatch") proto.RegisterType((*Num)(nil), "intern.Num") + proto.RegisterType((*AssignedIds)(nil), "intern.AssignedIds") proto.RegisterType((*SnapshotMeta)(nil), "intern.SnapshotMeta") proto.RegisterEnum("intern.DirectedEdge_Op", DirectedEdge_Op_name, DirectedEdge_Op_value) proto.RegisterEnum("intern.Posting_ValType", Posting_ValType_name, Posting_ValType_value) @@ -2151,8 +2193,8 @@ type ZeroClient interface { Update(ctx context.Context, opts ...grpc.CallOption) (Zero_UpdateClient, error) Oracle(ctx context.Context, in *api.Payload, opts ...grpc.CallOption) (Zero_OracleClient, error) ShouldServe(ctx context.Context, in *Tablet, opts ...grpc.CallOption) (*Tablet, error) - AssignUids(ctx context.Context, in *Num, opts ...grpc.CallOption) (*api.AssignedIds, error) - Timestamps(ctx context.Context, in *Num, opts ...grpc.CallOption) (*api.AssignedIds, error) + AssignUids(ctx context.Context, in *Num, opts ...grpc.CallOption) (*AssignedIds, error) + Timestamps(ctx context.Context, in *Num, opts ...grpc.CallOption) (*AssignedIds, error) CommitOrAbort(ctx context.Context, in *api.TxnContext, opts ...grpc.CallOption) (*api.TxnContext, error) TryAbort(ctx context.Context, in *TxnTimestamps, opts ...grpc.CallOption) (*OracleDelta, error) } @@ -2246,8 +2288,8 @@ func (c *zeroClient) ShouldServe(ctx context.Context, in *Tablet, opts ...grpc.C return out, nil } -func (c *zeroClient) AssignUids(ctx context.Context, in *Num, opts ...grpc.CallOption) (*api.AssignedIds, error) { - out := new(api.AssignedIds) +func (c *zeroClient) AssignUids(ctx context.Context, in *Num, opts ...grpc.CallOption) (*AssignedIds, error) { + out := new(AssignedIds) err := grpc.Invoke(ctx, "/intern.Zero/AssignUids", in, out, c.cc, opts...) if err != nil { return nil, err @@ -2255,8 +2297,8 @@ func (c *zeroClient) AssignUids(ctx context.Context, in *Num, opts ...grpc.CallO return out, nil } -func (c *zeroClient) Timestamps(ctx context.Context, in *Num, opts ...grpc.CallOption) (*api.AssignedIds, error) { - out := new(api.AssignedIds) +func (c *zeroClient) Timestamps(ctx context.Context, in *Num, opts ...grpc.CallOption) (*AssignedIds, error) { + out := new(AssignedIds) err := grpc.Invoke(ctx, "/intern.Zero/Timestamps", in, out, c.cc, opts...) if err != nil { return nil, err @@ -2289,8 +2331,8 @@ type ZeroServer interface { Update(Zero_UpdateServer) error Oracle(*api.Payload, Zero_OracleServer) error ShouldServe(context.Context, *Tablet) (*Tablet, error) - AssignUids(context.Context, *Num) (*api.AssignedIds, error) - Timestamps(context.Context, *Num) (*api.AssignedIds, error) + AssignUids(context.Context, *Num) (*AssignedIds, error) + Timestamps(context.Context, *Num) (*AssignedIds, error) CommitOrAbort(context.Context, *api.TxnContext) (*api.TxnContext, error) TryAbort(context.Context, *TxnTimestamps) (*OracleDelta, error) } @@ -2911,22 +2953,8 @@ func (m *List) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintInternal(dAtA, i, uint64(len(m.Uids)*8)) for _, num := range m.Uids { - dAtA[i] = uint8(num) - i++ - dAtA[i] = uint8(num >> 8) - i++ - dAtA[i] = uint8(num >> 16) - i++ - dAtA[i] = uint8(num >> 24) - i++ - dAtA[i] = uint8(num >> 32) - i++ - dAtA[i] = uint8(num >> 40) - i++ - dAtA[i] = uint8(num >> 48) - i++ - dAtA[i] = uint8(num >> 56) - i++ + binary.LittleEndian.PutUint64(dAtA[i:], uint64(num)) + i += 8 } } return i, nil @@ -3049,7 +3077,8 @@ func (m *Query) MarshalTo(dAtA []byte) (int, error) { if m.AfterUid != 0 { dAtA[i] = 0x19 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.AfterUid)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.AfterUid)) + i += 8 } if m.DoCount { dAtA[i] = 0x20 @@ -3449,7 +3478,8 @@ func (m *RaftContext) MarshalTo(dAtA []byte) (int, error) { if m.Id != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Id)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Id)) + i += 8 } if m.Group != 0 { dAtA[i] = 0x10 @@ -3488,7 +3518,8 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { if m.Id != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Id)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Id)) + i += 8 } if m.GroupId != 0 { dAtA[i] = 0x10 @@ -3922,7 +3953,8 @@ func (m *DirectedEdge) MarshalTo(dAtA []byte) (int, error) { if m.Entity != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Entity)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Entity)) + i += 8 } if len(m.Attr) > 0 { dAtA[i] = 0x12 @@ -3944,7 +3976,8 @@ func (m *DirectedEdge) MarshalTo(dAtA []byte) (int, error) { if m.ValueId != 0 { dAtA[i] = 0x29 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.ValueId)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.ValueId)) + i += 8 } if len(m.Label) > 0 { dAtA[i] = 0x32 @@ -4289,7 +4322,8 @@ func (m *Posting) MarshalTo(dAtA []byte) (int, error) { if m.Uid != 0 { dAtA[i] = 0x9 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Uid)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Uid)) + i += 8 } if len(m.Value) > 0 { dAtA[i] = 0x12 @@ -4813,7 +4847,8 @@ func (m *MapEntry) MarshalTo(dAtA []byte) (int, error) { if m.Uid != 0 { dAtA[i] = 0x11 i++ - i = encodeFixed64Internal(dAtA, i, uint64(m.Uid)) + binary.LittleEndian.PutUint64(dAtA[i:], uint64(m.Uid)) + i += 8 } if m.Posting != nil { dAtA[i] = 0x1a @@ -5094,6 +5129,49 @@ func (m *Num) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintInternal(dAtA, i, uint64(m.Val)) } + if m.ReadOnly { + dAtA[i] = 0x10 + i++ + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + return i, nil +} + +func (m *AssignedIds) 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 *AssignedIds) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.StartId != 0 { + dAtA[i] = 0x8 + i++ + i = encodeVarintInternal(dAtA, i, uint64(m.StartId)) + } + if m.EndId != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintInternal(dAtA, i, uint64(m.EndId)) + } + if m.ReadOnly != 0 { + dAtA[i] = 0x28 + i++ + i = encodeVarintInternal(dAtA, i, uint64(m.ReadOnly)) + } return i, nil } @@ -5125,24 +5203,6 @@ func (m *SnapshotMeta) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func encodeFixed64Internal(dAtA []byte, offset int, v uint64) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - dAtA[offset+4] = uint8(v >> 32) - dAtA[offset+5] = uint8(v >> 40) - dAtA[offset+6] = uint8(v >> 48) - dAtA[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Internal(dAtA []byte, offset int, v uint32) int { - dAtA[offset] = uint8(v) - dAtA[offset+1] = uint8(v >> 8) - dAtA[offset+2] = uint8(v >> 16) - dAtA[offset+3] = uint8(v >> 24) - return offset + 4 -} func encodeVarintInternal(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -6091,6 +6151,24 @@ func (m *Num) Size() (n int) { if m.Val != 0 { n += 1 + sovInternal(uint64(m.Val)) } + if m.ReadOnly { + n += 2 + } + return n +} + +func (m *AssignedIds) Size() (n int) { + var l int + _ = l + if m.StartId != 0 { + n += 1 + sovInternal(uint64(m.StartId)) + } + if m.EndId != 0 { + n += 1 + sovInternal(uint64(m.EndId)) + } + if m.ReadOnly != 0 { + n += 1 + sovInternal(uint64(m.ReadOnly)) + } return n } @@ -6154,15 +6232,8 @@ func (m *List) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - v = uint64(dAtA[iNdEx-8]) - v |= uint64(dAtA[iNdEx-7]) << 8 - v |= uint64(dAtA[iNdEx-6]) << 16 - v |= uint64(dAtA[iNdEx-5]) << 24 - v |= uint64(dAtA[iNdEx-4]) << 32 - v |= uint64(dAtA[iNdEx-3]) << 40 - v |= uint64(dAtA[iNdEx-2]) << 48 - v |= uint64(dAtA[iNdEx-1]) << 56 m.Uids = append(m.Uids, v) } else if wireType == 2 { var packedLen int @@ -6192,15 +6263,8 @@ func (m *List) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + v = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - v = uint64(dAtA[iNdEx-8]) - v |= uint64(dAtA[iNdEx-7]) << 8 - v |= uint64(dAtA[iNdEx-6]) << 16 - v |= uint64(dAtA[iNdEx-5]) << 24 - v |= uint64(dAtA[iNdEx-4]) << 32 - v |= uint64(dAtA[iNdEx-3]) << 40 - v |= uint64(dAtA[iNdEx-2]) << 48 - v |= uint64(dAtA[iNdEx-1]) << 56 m.Uids = append(m.Uids, v) } } else { @@ -6550,15 +6614,8 @@ func (m *Query) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.AfterUid = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.AfterUid = uint64(dAtA[iNdEx-8]) - m.AfterUid |= uint64(dAtA[iNdEx-7]) << 8 - m.AfterUid |= uint64(dAtA[iNdEx-6]) << 16 - m.AfterUid |= uint64(dAtA[iNdEx-5]) << 24 - m.AfterUid |= uint64(dAtA[iNdEx-4]) << 32 - m.AfterUid |= uint64(dAtA[iNdEx-3]) << 40 - m.AfterUid |= uint64(dAtA[iNdEx-2]) << 48 - m.AfterUid |= uint64(dAtA[iNdEx-1]) << 56 case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field DoCount", wireType) @@ -7642,15 +7699,8 @@ func (m *RaftContext) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Id = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Id = uint64(dAtA[iNdEx-8]) - m.Id |= uint64(dAtA[iNdEx-7]) << 8 - m.Id |= uint64(dAtA[iNdEx-6]) << 16 - m.Id |= uint64(dAtA[iNdEx-5]) << 24 - m.Id |= uint64(dAtA[iNdEx-4]) << 32 - m.Id |= uint64(dAtA[iNdEx-3]) << 40 - m.Id |= uint64(dAtA[iNdEx-2]) << 48 - m.Id |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) @@ -7776,15 +7826,8 @@ func (m *Member) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Id = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Id = uint64(dAtA[iNdEx-8]) - m.Id |= uint64(dAtA[iNdEx-7]) << 8 - m.Id |= uint64(dAtA[iNdEx-6]) << 16 - m.Id |= uint64(dAtA[iNdEx-5]) << 24 - m.Id |= uint64(dAtA[iNdEx-4]) << 32 - m.Id |= uint64(dAtA[iNdEx-3]) << 40 - m.Id |= uint64(dAtA[iNdEx-2]) << 48 - m.Id |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field GroupId", wireType) @@ -7988,41 +8031,14 @@ func (m *Group) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Members == nil { m.Members = make(map[uint64]*Member) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint64 + var mapvalue *Member + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8032,46 +8048,74 @@ func (m *Group) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapvalue = &Member{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Member{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Members[mapkey] = mapvalue - } else { - var mapvalue *Member - m.Members[mapkey] = mapvalue } + m.Members[mapkey] = mapvalue iNdEx = postIndex case 2: if wireType != 2 { @@ -8099,51 +8143,14 @@ func (m *Group) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthInternal - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Tablets == nil { m.Tablets = make(map[string]*Tablet) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue *Tablet + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8153,46 +8160,85 @@ func (m *Group) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthInternal + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Tablet{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Tablet{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Tablets[mapkey] = mapvalue - } else { - var mapvalue *Tablet - m.Tablets[mapkey] = mapvalue } + m.Tablets[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -8553,41 +8599,14 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Groups == nil { m.Groups = make(map[uint32]*Group) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint32 + var mapvalue *Group + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8597,46 +8616,74 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapvalue = &Group{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Group{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Groups[mapkey] = mapvalue - } else { - var mapvalue *Group - m.Groups[mapkey] = mapvalue } + m.Groups[mapkey] = mapvalue iNdEx = postIndex case 3: if wireType != 2 { @@ -8664,41 +8711,14 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var mapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } if m.Zeros == nil { m.Zeros = make(map[uint64]*Member) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey uint64 + var mapvalue *Member + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowInternal @@ -8708,46 +8728,74 @@ func (m *MembershipState) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInternal + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthInternal + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break + mapvalue = &Member{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthInternal - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := &Member{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - m.Zeros[mapkey] = mapvalue - } else { - var mapvalue *Member - m.Zeros[mapkey] = mapvalue } + m.Zeros[mapkey] = mapvalue iNdEx = postIndex case 4: if wireType != 0 { @@ -9236,15 +9284,8 @@ func (m *DirectedEdge) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Entity = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Entity = uint64(dAtA[iNdEx-8]) - m.Entity |= uint64(dAtA[iNdEx-7]) << 8 - m.Entity |= uint64(dAtA[iNdEx-6]) << 16 - m.Entity |= uint64(dAtA[iNdEx-5]) << 24 - m.Entity |= uint64(dAtA[iNdEx-4]) << 32 - m.Entity |= uint64(dAtA[iNdEx-3]) << 40 - m.Entity |= uint64(dAtA[iNdEx-2]) << 48 - m.Entity |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Attr", wireType) @@ -9332,15 +9373,8 @@ func (m *DirectedEdge) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.ValueId = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.ValueId = uint64(dAtA[iNdEx-8]) - m.ValueId |= uint64(dAtA[iNdEx-7]) << 8 - m.ValueId |= uint64(dAtA[iNdEx-6]) << 16 - m.ValueId |= uint64(dAtA[iNdEx-5]) << 24 - m.ValueId |= uint64(dAtA[iNdEx-4]) << 32 - m.ValueId |= uint64(dAtA[iNdEx-3]) << 40 - m.ValueId |= uint64(dAtA[iNdEx-2]) << 48 - m.ValueId |= uint64(dAtA[iNdEx-1]) << 56 case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Label", wireType) @@ -10413,15 +10447,8 @@ func (m *Posting) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Uid = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Uid = uint64(dAtA[iNdEx-8]) - m.Uid |= uint64(dAtA[iNdEx-7]) << 8 - m.Uid |= uint64(dAtA[iNdEx-6]) << 16 - m.Uid |= uint64(dAtA[iNdEx-5]) << 24 - m.Uid |= uint64(dAtA[iNdEx-4]) << 32 - m.Uid |= uint64(dAtA[iNdEx-3]) << 40 - m.Uid |= uint64(dAtA[iNdEx-2]) << 48 - m.Uid |= uint64(dAtA[iNdEx-1]) << 56 case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) @@ -11975,15 +12002,8 @@ func (m *MapEntry) Unmarshal(dAtA []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + m.Uid = uint64(binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - m.Uid = uint64(dAtA[iNdEx-8]) - m.Uid |= uint64(dAtA[iNdEx-7]) << 8 - m.Uid |= uint64(dAtA[iNdEx-6]) << 16 - m.Uid |= uint64(dAtA[iNdEx-5]) << 24 - m.Uid |= uint64(dAtA[iNdEx-4]) << 32 - m.Uid |= uint64(dAtA[iNdEx-3]) << 40 - m.Uid |= uint64(dAtA[iNdEx-2]) << 48 - m.Uid |= uint64(dAtA[iNdEx-1]) << 56 case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Posting", wireType) @@ -12848,6 +12868,133 @@ func (m *Num) Unmarshal(dAtA []byte) error { break } } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipInternal(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AssignedIds) 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 ErrIntOverflowInternal + } + 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: AssignedIds: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AssignedIds: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartId", wireType) + } + m.StartId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StartId |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EndId", wireType) + } + m.EndId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EndId |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + m.ReadOnly = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReadOnly |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipInternal(dAtA[iNdEx:]) @@ -13065,196 +13212,198 @@ var ( func init() { proto.RegisterFile("internal.proto", fileDescriptorInternal) } var fileDescriptorInternal = []byte{ - // 3044 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x39, 0x4d, 0x6f, 0x23, 0xc7, - 0xb1, 0x9a, 0x21, 0x39, 0x1c, 0x16, 0x49, 0x2d, 0xdd, 0x5e, 0x7b, 0x69, 0xda, 0x4f, 0x96, 0xc7, - 0xf6, 0xae, 0x6c, 0xaf, 0x65, 0xaf, 0xbc, 0xfe, 0x7c, 0xcf, 0x0f, 0xd0, 0x4a, 0xdc, 0x35, 0xbd, - 0xfa, 0x72, 0x93, 0x5a, 0x3f, 0xfb, 0xf0, 0x88, 0x16, 0xa7, 0x45, 0x0d, 0x34, 0x9c, 0x19, 0x4f, - 0x0f, 0x05, 0xca, 0xc7, 0xf7, 0x4e, 0x41, 0xfe, 0x40, 0x90, 0x63, 0x02, 0x04, 0xb9, 0x05, 0xc8, - 0x7f, 0x08, 0x90, 0x00, 0x3e, 0xe4, 0x9e, 0x4b, 0xe2, 0xdc, 0x72, 0xcb, 0x2f, 0x48, 0xd0, 0xd5, - 0x3d, 0x1f, 0xa4, 0x3e, 0xbc, 0x49, 0x90, 0x13, 0xa7, 0xaa, 0xab, 0xba, 0xba, 0xeb, 0xbb, 0x8b, - 0xb0, 0xec, 0x05, 0x09, 0x8f, 0x03, 0xe6, 0xaf, 0x47, 0x71, 0x98, 0x84, 0xc4, 0x52, 0x70, 0xa7, - 0xc6, 0x22, 0x4f, 0xa1, 0x9c, 0x0e, 0x94, 0x77, 0x3c, 0x91, 0x10, 0x02, 0xe5, 0xa9, 0xe7, 0x8a, - 0xb6, 0xb1, 0x5a, 0x5a, 0xb3, 0x28, 0x7e, 0x3b, 0x5f, 0x40, 0x6d, 0xc0, 0xc4, 0xe9, 0x13, 0xe6, - 0x4f, 0x39, 0x69, 0x41, 0xe9, 0x8c, 0xf9, 0x6d, 0x63, 0xd5, 0x58, 0x6b, 0x50, 0xf9, 0x49, 0x36, - 0xc0, 0x3e, 0x63, 0xfe, 0x30, 0x39, 0x8f, 0x78, 0xdb, 0x5c, 0x35, 0xd6, 0x96, 0x37, 0x6e, 0xad, - 0x2b, 0x01, 0xeb, 0x07, 0xa1, 0x48, 0xbc, 0x60, 0xbc, 0xfe, 0x84, 0xf9, 0x83, 0xf3, 0x88, 0xd3, - 0xea, 0x99, 0xfa, 0x70, 0xf6, 0xa1, 0xde, 0x8f, 0x47, 0x0f, 0xa7, 0xc1, 0x28, 0xf1, 0xc2, 0x40, - 0x4a, 0x0d, 0xd8, 0x84, 0xe3, 0xae, 0x35, 0x8a, 0xdf, 0x12, 0xc7, 0xe2, 0xb1, 0x68, 0x97, 0x56, - 0x4b, 0x12, 0x27, 0xbf, 0x49, 0x1b, 0xaa, 0x9e, 0xd8, 0x0a, 0xa7, 0x41, 0xd2, 0x2e, 0xaf, 0x1a, - 0x6b, 0x36, 0x4d, 0x41, 0xe7, 0xff, 0x4b, 0x50, 0xf9, 0x62, 0xca, 0xe3, 0x73, 0xe4, 0x4b, 0x92, - 0x38, 0xdd, 0x4b, 0x7e, 0x93, 0x9b, 0x50, 0xf1, 0x59, 0x30, 0x16, 0x6d, 0x13, 0x37, 0x53, 0x00, - 0x79, 0x11, 0x6a, 0xec, 0x38, 0xe1, 0xf1, 0x70, 0xea, 0xb9, 0xed, 0xd2, 0xaa, 0xb1, 0x66, 0x51, - 0x1b, 0x11, 0x87, 0x9e, 0x4b, 0x5e, 0x00, 0xdb, 0x0d, 0x87, 0xa3, 0xa2, 0x2c, 0x37, 0x44, 0x59, - 0xe4, 0x0e, 0xd8, 0x53, 0xcf, 0x1d, 0xfa, 0x9e, 0x48, 0xda, 0x95, 0x55, 0x63, 0xad, 0xbe, 0xd1, - 0x48, 0x2f, 0x2c, 0x75, 0x48, 0xab, 0x53, 0xcf, 0x45, 0x65, 0xae, 0x83, 0x2d, 0xe2, 0xd1, 0xf0, - 0x78, 0x1a, 0x8c, 0xda, 0x16, 0x12, 0x3e, 0x9b, 0x12, 0x16, 0x6e, 0x4f, 0xab, 0x42, 0x01, 0xf2, - 0x7a, 0x31, 0x3f, 0xe3, 0xb1, 0xe0, 0xed, 0xaa, 0x12, 0xa9, 0x41, 0x72, 0x1f, 0xea, 0xc7, 0x6c, - 0xc4, 0x93, 0x61, 0xc4, 0x62, 0x36, 0x69, 0xdb, 0xf3, 0x9b, 0x3d, 0x94, 0x4b, 0x07, 0x72, 0x45, - 0x50, 0x38, 0xce, 0x00, 0xf2, 0x21, 0x34, 0x11, 0x12, 0xc3, 0x63, 0xcf, 0x4f, 0x78, 0xdc, 0xae, - 0x21, 0x1f, 0xc9, 0xf8, 0x10, 0x3b, 0x88, 0x39, 0xa7, 0x0d, 0x45, 0xa8, 0x30, 0xe4, 0x3f, 0x00, - 0xf8, 0x2c, 0x62, 0x81, 0x3b, 0x64, 0xbe, 0xdf, 0x06, 0x3c, 0x4b, 0x4d, 0x61, 0x36, 0x7d, 0x9f, - 0xdc, 0x92, 0xe7, 0x64, 0xee, 0x30, 0x11, 0xed, 0xe6, 0xaa, 0xb1, 0x56, 0xa6, 0x96, 0x04, 0x07, - 0xc2, 0xf9, 0x00, 0x6a, 0xe8, 0x25, 0x78, 0xfb, 0x37, 0xc0, 0x3a, 0x93, 0x80, 0x72, 0xa6, 0xfa, - 0xc6, 0x33, 0xa9, 0xd8, 0xcc, 0x99, 0xa8, 0x26, 0x70, 0x56, 0xc0, 0xde, 0x61, 0xc1, 0x38, 0xf5, - 0x40, 0x69, 0x1e, 0x64, 0xaa, 0x51, 0xfc, 0x76, 0x7e, 0x69, 0x82, 0x45, 0xb9, 0x98, 0xfa, 0x09, - 0x79, 0x0b, 0x40, 0x2a, 0x7f, 0xc2, 0x92, 0xd8, 0x9b, 0xe9, 0x9d, 0xe7, 0xd5, 0x5f, 0x9b, 0x7a, - 0xee, 0x2e, 0x2e, 0x93, 0xfb, 0xd0, 0x40, 0x09, 0x29, 0xb9, 0x39, 0x7f, 0x90, 0xec, 0xac, 0xb4, - 0x8e, 0x64, 0x9a, 0xeb, 0x79, 0xb0, 0xd0, 0xee, 0xca, 0xf7, 0x9a, 0x54, 0x43, 0xe4, 0x75, 0x1d, - 0x48, 0x82, 0x8f, 0x92, 0xa1, 0xcb, 0x45, 0xea, 0x18, 0xcd, 0x0c, 0xbb, 0xcd, 0x45, 0x42, 0xde, - 0x07, 0xa5, 0xcc, 0x54, 0x68, 0x05, 0x85, 0x92, 0x39, 0x63, 0x09, 0x25, 0x15, 0xe9, 0xb4, 0xd4, - 0x7b, 0x50, 0x97, 0x77, 0x4d, 0xb9, 0x2c, 0xe4, 0x6a, 0x65, 0x37, 0xd3, 0xea, 0xa1, 0x20, 0x89, - 0x34, 0x8b, 0x54, 0x95, 0x74, 0x42, 0xe5, 0x2c, 0xf8, 0xed, 0x74, 0xa1, 0xb2, 0x1f, 0xbb, 0x3c, - 0xbe, 0x34, 0x0e, 0x08, 0x94, 0x5d, 0x2e, 0x46, 0x18, 0xa6, 0x36, 0xc5, 0xef, 0x3c, 0x36, 0x4a, - 0x85, 0xd8, 0x70, 0x7e, 0x61, 0x40, 0xbd, 0x1f, 0xc6, 0xc9, 0x2e, 0x17, 0x82, 0x8d, 0x39, 0x79, - 0x15, 0x2a, 0xa1, 0xdc, 0x56, 0x6b, 0xbc, 0x99, 0x9e, 0x0b, 0x65, 0x51, 0xb5, 0xb6, 0x60, 0x1b, - 0xf3, 0x7a, 0xdb, 0xdc, 0x84, 0x8a, 0x8a, 0x2e, 0x19, 0x79, 0x15, 0xaa, 0x00, 0xa9, 0xfb, 0xf0, - 0xf8, 0x58, 0x70, 0xa5, 0xdb, 0x0a, 0xd5, 0xd0, 0xd5, 0x2e, 0xf7, 0x31, 0x80, 0x3c, 0xe7, 0x3f, - 0xe1, 0x1d, 0xce, 0x09, 0xd4, 0x29, 0x3b, 0x4e, 0xb6, 0xc2, 0x20, 0xe1, 0xb3, 0x84, 0x2c, 0x83, - 0xe9, 0xb9, 0xa8, 0x2e, 0x8b, 0x9a, 0x9e, 0x2b, 0x0f, 0x38, 0x8e, 0xc3, 0x69, 0x84, 0xda, 0x6a, - 0x52, 0x05, 0xa0, 0x5a, 0x5d, 0x37, 0xc6, 0x53, 0x4b, 0xb5, 0xba, 0x6e, 0x4c, 0x5e, 0x86, 0xba, - 0x08, 0x58, 0x24, 0x4e, 0xc2, 0x44, 0x1e, 0xb0, 0x8c, 0x07, 0x84, 0x14, 0x35, 0x10, 0xce, 0x6f, - 0x0c, 0xb0, 0x76, 0xf9, 0xe4, 0x88, 0xc7, 0x17, 0xa4, 0xbc, 0x00, 0x36, 0x6e, 0x3c, 0xf4, 0x5c, - 0x2d, 0xa8, 0x8a, 0x70, 0xcf, 0xbd, 0x54, 0xd4, 0xf3, 0x60, 0xf9, 0x9c, 0x49, 0x43, 0x28, 0xdf, - 0xd3, 0x90, 0xd4, 0x0f, 0x9b, 0x0c, 0x5d, 0xce, 0x5c, 0x4c, 0x49, 0x36, 0xb5, 0xd8, 0x64, 0x9b, - 0x33, 0x57, 0x9e, 0xcd, 0x67, 0x22, 0x19, 0x4e, 0x23, 0x97, 0x25, 0x1c, 0xd3, 0x50, 0x59, 0x3a, - 0x91, 0x48, 0x0e, 0x11, 0x43, 0xde, 0x84, 0x67, 0x46, 0xfe, 0x54, 0xc8, 0x3c, 0xe8, 0x05, 0xc7, - 0xe1, 0x30, 0x0c, 0xfc, 0x73, 0xd4, 0xb1, 0x4d, 0x6f, 0xe8, 0x85, 0x5e, 0x70, 0x1c, 0xee, 0x07, - 0xfe, 0xb9, 0xf3, 0x63, 0x13, 0x2a, 0x8f, 0x50, 0x0d, 0xf7, 0xa1, 0x3a, 0xc1, 0x0b, 0xa5, 0xd1, - 0xdd, 0x49, 0xb5, 0x8c, 0xeb, 0xeb, 0xea, 0xb6, 0xa2, 0x1b, 0x24, 0xf1, 0x39, 0x4d, 0x49, 0x25, - 0x57, 0xc2, 0x8e, 0x7c, 0x9e, 0x08, 0xed, 0x1d, 0x0b, 0x5c, 0x03, 0xb5, 0xa8, 0xb9, 0x34, 0x69, - 0xe7, 0x73, 0x68, 0x14, 0xb7, 0x93, 0x25, 0xe8, 0x94, 0x9f, 0xa3, 0x0e, 0xcb, 0x54, 0x7e, 0x92, - 0xd7, 0xa0, 0x82, 0x01, 0x8c, 0x1a, 0xac, 0x6f, 0x2c, 0xa7, 0xbb, 0x2a, 0x36, 0xaa, 0x16, 0x3f, - 0x31, 0x3f, 0x32, 0xe4, 0x5e, 0x45, 0x21, 0xc5, 0xbd, 0x6a, 0xd7, 0xef, 0xa5, 0xd8, 0x0a, 0x7b, - 0x39, 0x7f, 0x33, 0xa0, 0xf1, 0x35, 0x8f, 0xc3, 0x83, 0x38, 0x8c, 0x42, 0xc1, 0x7c, 0x72, 0x1b, - 0x2c, 0x75, 0xd3, 0x2b, 0xce, 0xa1, 0x57, 0x25, 0x9d, 0xba, 0x1b, 0x9a, 0xf6, 0xa2, 0x0c, 0xbd, - 0x4a, 0x56, 0x00, 0x26, 0x6c, 0xb6, 0xc3, 0x99, 0xe0, 0x3d, 0x37, 0x75, 0xab, 0x1c, 0x43, 0x3a, - 0x60, 0x4f, 0xd8, 0x6c, 0x30, 0x0b, 0x06, 0x02, 0xad, 0x5e, 0xa6, 0x19, 0x4c, 0x5e, 0x82, 0xda, - 0x84, 0xcd, 0xa4, 0x7f, 0xf7, 0x5c, 0x6d, 0xf5, 0x1c, 0x41, 0x5e, 0x81, 0x52, 0x32, 0x0b, 0x30, - 0x71, 0xd4, 0x37, 0x6e, 0xac, 0xcb, 0x3e, 0x60, 0x30, 0x0b, 0x74, 0x24, 0x50, 0xb9, 0x96, 0x6a, - 0xc6, 0xce, 0x35, 0xd3, 0x82, 0xd2, 0xc8, 0x73, 0xb1, 0x88, 0xd4, 0xa8, 0xfc, 0x74, 0xbe, 0x2b, - 0xc1, 0x0d, 0x6d, 0x9a, 0x13, 0x2f, 0xea, 0x27, 0xd2, 0x9f, 0xda, 0x50, 0xc5, 0x50, 0xe6, 0xb1, - 0xb6, 0x50, 0x0a, 0x92, 0xff, 0x04, 0x0b, 0x5d, 0x3b, 0x35, 0xfe, 0xab, 0xf3, 0xea, 0xc9, 0xb6, - 0x50, 0xce, 0xa0, 0xbd, 0x40, 0xb3, 0x90, 0x8f, 0xa0, 0xf2, 0x2d, 0x8f, 0x43, 0x95, 0xa6, 0xea, - 0x1b, 0xce, 0x55, 0xbc, 0xd2, 0x20, 0x9a, 0x55, 0x31, 0xfc, 0x1b, 0xb5, 0xb8, 0x26, 0x93, 0xd2, - 0x24, 0x3c, 0xe3, 0x6e, 0xbb, 0x8a, 0xa7, 0x5a, 0x34, 0x78, 0xba, 0x9c, 0xaa, 0xce, 0xce, 0x54, - 0xd7, 0xf9, 0x0c, 0xea, 0x85, 0x6b, 0x16, 0xfd, 0xb0, 0xa9, 0xb4, 0xfd, 0xea, 0xbc, 0x1f, 0x36, - 0xe7, 0x22, 0xa5, 0xe8, 0xd2, 0x9f, 0x01, 0xe4, 0x97, 0xfe, 0x57, 0x82, 0xc3, 0xf9, 0x91, 0x01, - 0x37, 0xb6, 0xc2, 0x20, 0xe0, 0xd8, 0x97, 0x28, 0x73, 0xe6, 0x3e, 0x6d, 0x5c, 0xeb, 0xd3, 0x6f, - 0x43, 0x45, 0x48, 0x06, 0x2d, 0xe5, 0xd6, 0x15, 0xf6, 0xa1, 0x8a, 0x4a, 0xa6, 0xa5, 0x09, 0x9b, - 0x0d, 0x23, 0x1e, 0xb8, 0x5e, 0x30, 0xc6, 0x38, 0x50, 0x56, 0x39, 0x50, 0x18, 0xe7, 0x67, 0x06, - 0x58, 0x2a, 0x1c, 0xe6, 0x52, 0xa4, 0x31, 0x9f, 0x22, 0x5f, 0x82, 0x5a, 0x14, 0x73, 0xd7, 0x1b, - 0xa5, 0x92, 0x6b, 0x34, 0x47, 0xc8, 0x0c, 0x7e, 0x1c, 0xc6, 0x23, 0x8e, 0xdb, 0xdb, 0x54, 0x01, - 0xb2, 0xed, 0xc3, 0x52, 0x82, 0x89, 0x4e, 0x65, 0x51, 0x5b, 0x22, 0x64, 0x86, 0x93, 0x2c, 0x22, - 0x62, 0x23, 0xd5, 0x80, 0x95, 0xa8, 0x02, 0x64, 0xd6, 0x55, 0x96, 0x44, 0x0b, 0xda, 0x54, 0x43, - 0xce, 0xaf, 0x4d, 0x68, 0x6c, 0x7b, 0x31, 0x1f, 0x25, 0xdc, 0xed, 0xba, 0x63, 0x24, 0xe4, 0x41, - 0xe2, 0x25, 0xe7, 0x3a, 0xc3, 0x6b, 0x28, 0x2b, 0xc6, 0xe6, 0x7c, 0x53, 0xaa, 0xec, 0x52, 0xc2, - 0x5e, 0x5a, 0x01, 0xe4, 0x03, 0x00, 0xd5, 0xb2, 0x60, 0x3f, 0x5d, 0xbe, 0xbe, 0x9f, 0xae, 0x21, - 0xa9, 0xfc, 0x94, 0x4a, 0x52, 0x7c, 0x9e, 0xaa, 0x00, 0x16, 0x36, 0xdb, 0x53, 0xe9, 0xe0, 0x58, - 0xe1, 0x8f, 0xb8, 0x8f, 0x0e, 0x8c, 0x15, 0xfe, 0x88, 0xfb, 0x59, 0x9f, 0x55, 0x55, 0x47, 0x92, - 0xdf, 0xe4, 0x0e, 0x98, 0x61, 0x84, 0x77, 0x2c, 0x08, 0x2d, 0x5e, 0x70, 0x7d, 0x3f, 0xa2, 0x66, - 0x18, 0x11, 0x07, 0x2c, 0xd5, 0x30, 0xb6, 0x6b, 0xe8, 0xf8, 0x80, 0x29, 0x04, 0x5b, 0x1b, 0xaa, - 0x57, 0x9c, 0xe7, 0xc1, 0xdc, 0x8f, 0x48, 0x15, 0x4a, 0xfd, 0xee, 0xa0, 0xb5, 0x24, 0x3f, 0xb6, - 0xbb, 0x3b, 0x2d, 0xc3, 0xf9, 0x8b, 0x01, 0xb5, 0xdd, 0x69, 0xc2, 0xa4, 0x8f, 0x89, 0xeb, 0x8c, - 0xfb, 0x02, 0xd8, 0x22, 0x61, 0x31, 0xd6, 0x54, 0x53, 0xa5, 0x12, 0x84, 0x07, 0x82, 0xbc, 0x09, - 0x15, 0xee, 0x8e, 0x79, 0x9a, 0x0d, 0x6e, 0x5e, 0x76, 0x56, 0xaa, 0x48, 0xc8, 0x5d, 0xb0, 0xc4, - 0xe8, 0x84, 0x4f, 0x58, 0xbb, 0x3c, 0x4f, 0xdc, 0x47, 0xac, 0x2a, 0x83, 0x54, 0xd3, 0x60, 0xdf, - 0x1f, 0x87, 0x11, 0x36, 0xbe, 0x15, 0xdd, 0xf7, 0xc7, 0x61, 0x24, 0xdb, 0xde, 0x0d, 0x78, 0xce, - 0x1b, 0x07, 0x61, 0xcc, 0x87, 0x5e, 0xe0, 0xf2, 0xd9, 0x70, 0x14, 0x06, 0xc7, 0xbe, 0x37, 0x4a, - 0x50, 0xaf, 0x36, 0x7d, 0x56, 0x2d, 0xf6, 0xe4, 0xda, 0x96, 0x5e, 0x72, 0xee, 0x40, 0xed, 0x31, - 0x3f, 0xc7, 0x46, 0x53, 0x90, 0x0e, 0x98, 0xa7, 0x67, 0xba, 0x5e, 0x42, 0x7a, 0x8a, 0xc7, 0x4f, - 0xa8, 0x79, 0x7a, 0xe6, 0x9c, 0x80, 0xdd, 0xd7, 0x0d, 0x03, 0x79, 0x5b, 0xa6, 0x50, 0x4c, 0xc5, - 0x3a, 0xe8, 0xb2, 0x4e, 0xbf, 0xd0, 0xaf, 0xd0, 0x94, 0x46, 0xda, 0x17, 0x0f, 0xa4, 0x95, 0xa4, - 0x80, 0x62, 0xc7, 0x54, 0x9a, 0xeb, 0x98, 0x7e, 0x6a, 0x82, 0x9d, 0x95, 0xac, 0x77, 0xa0, 0x36, - 0x49, 0x6d, 0xa1, 0x43, 0x37, 0x6b, 0x8f, 0x33, 0x23, 0xd1, 0x9c, 0x46, 0xdf, 0xa1, 0x7c, 0xd9, - 0x1d, 0xf2, 0x1c, 0x50, 0x79, 0xaa, 0x1c, 0x70, 0x07, 0x6e, 0x8c, 0x7c, 0xce, 0x82, 0x61, 0x1e, - 0xc2, 0xca, 0x43, 0x97, 0x11, 0x7d, 0x90, 0xc5, 0xb1, 0xce, 0x69, 0xd5, 0xbc, 0x14, 0xbd, 0x01, - 0x15, 0x97, 0xfb, 0x09, 0x5b, 0x7c, 0x09, 0xed, 0xc7, 0x6c, 0xe4, 0xf3, 0x6d, 0xb9, 0x44, 0x15, - 0x05, 0xb9, 0x0b, 0x76, 0xda, 0x89, 0xe9, 0xf7, 0x4f, 0xd6, 0x54, 0xa7, 0x0a, 0xa7, 0x19, 0x85, - 0xf3, 0x0a, 0x94, 0x1e, 0x3f, 0xe9, 0x5f, 0x6b, 0xa9, 0xff, 0x05, 0xf3, 0xf1, 0x93, 0x62, 0x9e, - 0x6d, 0x64, 0xe5, 0x51, 0xbe, 0x8c, 0xcd, 0xfc, 0x65, 0xdc, 0x01, 0x7b, 0x2a, 0x78, 0xbc, 0xcb, - 0x13, 0xa6, 0x83, 0x3c, 0x83, 0x65, 0x99, 0x94, 0x4f, 0x3b, 0x2f, 0x0c, 0x74, 0x49, 0x4a, 0x41, - 0xe7, 0xaf, 0x25, 0xa8, 0xea, 0x40, 0x97, 0x7b, 0x4e, 0xb3, 0x76, 0x51, 0x7e, 0xe6, 0x59, 0xc3, - 0x2c, 0x66, 0x8d, 0xe2, 0x1b, 0xbc, 0xf4, 0x74, 0x6f, 0x70, 0xf2, 0xdf, 0xd0, 0x88, 0xd4, 0x5a, - 0x31, 0xd7, 0xbc, 0xb8, 0xc8, 0xa7, 0x7f, 0x91, 0xb7, 0x1e, 0xe5, 0x80, 0x8c, 0x14, 0x7c, 0xb0, - 0x24, 0x6c, 0x8c, 0x06, 0x6f, 0xd0, 0xaa, 0x84, 0x07, 0x6c, 0x7c, 0x45, 0xc6, 0x79, 0x8a, 0xa4, - 0x21, 0xdb, 0xe3, 0x30, 0x6a, 0x37, 0x30, 0x11, 0xc8, 0x44, 0x53, 0xcc, 0x01, 0xcd, 0xf9, 0x1c, - 0xf0, 0x22, 0xd4, 0x46, 0xe1, 0x64, 0xe2, 0xe1, 0xda, 0xb2, 0x2a, 0xdc, 0x0a, 0x31, 0x10, 0xce, - 0xb7, 0x50, 0xd5, 0x17, 0x26, 0x75, 0xa8, 0x6e, 0x77, 0x1f, 0x6e, 0x1e, 0xee, 0xc8, 0x2c, 0x04, - 0x60, 0x3d, 0xe8, 0xed, 0x6d, 0xd2, 0xaf, 0x5a, 0x86, 0xcc, 0x48, 0xbd, 0xbd, 0x41, 0xcb, 0x24, - 0x35, 0xa8, 0x3c, 0xdc, 0xd9, 0xdf, 0x1c, 0xb4, 0x4a, 0xc4, 0x86, 0xf2, 0x83, 0xfd, 0xfd, 0x9d, - 0x56, 0x99, 0x34, 0xc0, 0xde, 0xde, 0x1c, 0x74, 0x07, 0xbd, 0xdd, 0x6e, 0xab, 0x22, 0x69, 0x1f, - 0x75, 0xf7, 0x5b, 0x96, 0xfc, 0x38, 0xec, 0x6d, 0xb7, 0xaa, 0x72, 0xfd, 0x60, 0xb3, 0xdf, 0xff, - 0x72, 0x9f, 0x6e, 0xb7, 0x6c, 0xb9, 0x6f, 0x7f, 0x40, 0x7b, 0x7b, 0x8f, 0x5a, 0x35, 0xe7, 0x1e, - 0xd4, 0x0b, 0x4a, 0x93, 0x1c, 0xb4, 0xfb, 0xb0, 0xb5, 0x24, 0xc5, 0x3c, 0xd9, 0xdc, 0x39, 0xec, - 0xb6, 0x0c, 0xb2, 0x0c, 0x80, 0x9f, 0xc3, 0x9d, 0xcd, 0xbd, 0x47, 0x2d, 0xd3, 0xf9, 0x3f, 0x23, - 0xe3, 0xc1, 0x47, 0xf0, 0x5b, 0x60, 0x6b, 0x55, 0xa7, 0xfd, 0xf5, 0x8d, 0x05, 0xbb, 0xd0, 0x8c, - 0x40, 0xba, 0xd9, 0xe8, 0x84, 0x8f, 0x4e, 0xc5, 0x74, 0xa2, 0xbd, 0x22, 0x83, 0xd5, 0x5b, 0x56, - 0xea, 0x24, 0x4d, 0x02, 0x0a, 0xca, 0xe6, 0x3c, 0x65, 0xa4, 0x57, 0x73, 0x9e, 0xfb, 0x00, 0xf9, - 0x24, 0xe1, 0x92, 0xce, 0xf8, 0x26, 0x54, 0x98, 0xef, 0x31, 0xa1, 0xab, 0x98, 0x02, 0x1c, 0x0a, - 0xf5, 0xc2, 0xfc, 0x41, 0x1a, 0x8c, 0xf9, 0xfe, 0xf0, 0x94, 0x9f, 0x0b, 0xe4, 0xb5, 0x69, 0x95, - 0xf9, 0xfe, 0x63, 0x7e, 0x2e, 0xc8, 0x1a, 0x54, 0xd4, 0xf8, 0xc2, 0xbc, 0xe4, 0x45, 0x8c, 0xec, - 0x54, 0x11, 0x38, 0x77, 0xc1, 0x52, 0xcf, 0xe4, 0x82, 0xcf, 0x18, 0x57, 0x16, 0x9a, 0x4f, 0xf5, - 0xb9, 0xf1, 0x51, 0x4d, 0xde, 0xd1, 0xa3, 0x12, 0xa1, 0x06, 0x34, 0xc6, 0x7c, 0x63, 0xa6, 0x08, - 0xf5, 0x94, 0x04, 0x19, 0x9c, 0x6d, 0xb0, 0xaf, 0x1d, 0x44, 0x69, 0x45, 0x98, 0xb9, 0x22, 0x2e, - 0x19, 0x4d, 0x39, 0x31, 0x40, 0x3e, 0x4e, 0xd1, 0x6e, 0xac, 0x76, 0x91, 0x6e, 0xbc, 0x2e, 0x4d, - 0xe4, 0xf9, 0x6e, 0xcc, 0x83, 0x0b, 0xb7, 0xcf, 0x87, 0x30, 0x19, 0x0d, 0x79, 0x0d, 0xca, 0x38, - 0x35, 0x2a, 0xcd, 0x27, 0xac, 0x6c, 0x64, 0x84, 0xab, 0xce, 0x11, 0x34, 0x55, 0x0d, 0xa3, 0xfc, - 0x9b, 0x29, 0x17, 0xd7, 0x76, 0x4a, 0x2b, 0x00, 0x59, 0x9a, 0x4d, 0xe7, 0x60, 0x05, 0x8c, 0x74, - 0x94, 0x63, 0x8f, 0xfb, 0x6e, 0x7a, 0x2b, 0x0d, 0x39, 0x1f, 0x42, 0x23, 0x95, 0x81, 0x2f, 0xec, - 0x3b, 0x59, 0x35, 0x4d, 0xfd, 0x52, 0x1a, 0x44, 0x91, 0xec, 0x85, 0x6e, 0x56, 0x48, 0x9d, 0x3f, - 0x99, 0x29, 0xa7, 0x7e, 0x68, 0xce, 0xf5, 0x6a, 0xc6, 0x62, 0xaf, 0x36, 0xdf, 0xf7, 0x98, 0x4f, - 0xdd, 0xf7, 0xfc, 0x17, 0xd4, 0x5c, 0x2c, 0xfa, 0xde, 0x59, 0x9a, 0xfa, 0x56, 0x2e, 0x2b, 0xf0, - 0xba, 0x35, 0xf0, 0xce, 0x38, 0xcd, 0x19, 0xe4, 0x99, 0x92, 0xf0, 0x94, 0x07, 0xde, 0xb7, 0xf8, - 0xa2, 0x96, 0x17, 0xcf, 0x11, 0xf9, 0x88, 0x42, 0x35, 0x02, 0x7a, 0x44, 0x91, 0x4e, 0x5d, 0xac, - 0x7c, 0xea, 0x22, 0xb5, 0x37, 0x8d, 0x04, 0x8f, 0x93, 0xb4, 0x41, 0x54, 0x50, 0xd6, 0x64, 0xd5, - 0x34, 0x2d, 0x0b, 0xc6, 0xce, 0xc7, 0x50, 0xcb, 0xce, 0x22, 0xf3, 0xcd, 0xde, 0xfe, 0x5e, 0x57, - 0x65, 0x87, 0xde, 0xde, 0x76, 0xf7, 0x7f, 0x5a, 0x86, 0xcc, 0x58, 0xb4, 0xfb, 0xa4, 0x4b, 0xfb, - 0xdd, 0x96, 0x29, 0x33, 0xcb, 0x76, 0x77, 0xa7, 0x3b, 0xe8, 0xb6, 0x4a, 0x9f, 0x97, 0xed, 0x6a, - 0xcb, 0xa6, 0x36, 0x9f, 0x45, 0xbe, 0x37, 0xf2, 0x12, 0xe7, 0x2b, 0xb0, 0x77, 0x59, 0x74, 0xa1, - 0xf1, 0xcf, 0x0b, 0xd2, 0x54, 0x4f, 0x15, 0x74, 0xf1, 0x78, 0x03, 0xaa, 0x3a, 0x6b, 0x68, 0xcf, - 0xba, 0x90, 0x55, 0xd2, 0x75, 0xe7, 0x57, 0x06, 0xdc, 0xdc, 0x0d, 0xcf, 0x78, 0x56, 0x85, 0x0f, - 0xd8, 0xb9, 0x1f, 0x32, 0xf7, 0x07, 0xcc, 0x78, 0x1b, 0x6e, 0x88, 0x70, 0x1a, 0x8f, 0xf8, 0x70, - 0x61, 0xaa, 0xd1, 0x54, 0xe8, 0x47, 0xda, 0x1d, 0x1d, 0x68, 0xba, 0x5c, 0x24, 0x39, 0x55, 0x09, - 0xa9, 0xea, 0x12, 0x99, 0xd2, 0x64, 0xed, 0x44, 0xf9, 0x69, 0xda, 0x09, 0xe7, 0x3b, 0x03, 0x9a, - 0xdd, 0x59, 0x14, 0xc6, 0x49, 0x7a, 0xd4, 0xe7, 0x64, 0xdb, 0xfe, 0x4d, 0x1a, 0x0c, 0x65, 0x5a, - 0x89, 0xf9, 0x37, 0xbd, 0x6b, 0x47, 0x2e, 0xf7, 0xc1, 0x92, 0x9b, 0x4d, 0x85, 0x76, 0xa5, 0x97, - 0x52, 0x99, 0x73, 0x1b, 0xaf, 0xf7, 0x91, 0x86, 0x6a, 0xda, 0x62, 0xab, 0x55, 0x9e, 0x6b, 0xb5, - 0x3e, 0x01, 0x4b, 0x91, 0x16, 0xec, 0x5c, 0x87, 0x6a, 0xff, 0x70, 0x6b, 0xab, 0xdb, 0xef, 0xb7, - 0x0c, 0xd2, 0x84, 0xda, 0xf6, 0xe1, 0xc1, 0x4e, 0x6f, 0x6b, 0x73, 0xa0, 0x6d, 0xfd, 0x70, 0xb3, - 0xb7, 0xd3, 0xdd, 0x6e, 0x95, 0x9c, 0x2d, 0xa8, 0x0d, 0x66, 0x81, 0x66, 0x2f, 0x96, 0x41, 0xe3, - 0x9a, 0x32, 0x68, 0x2e, 0x94, 0xc1, 0x2f, 0xa1, 0x5e, 0x68, 0x89, 0xc8, 0xeb, 0x50, 0x4e, 0x66, - 0xc1, 0xc5, 0x81, 0x6c, 0x2a, 0x87, 0xe2, 0x32, 0x79, 0x05, 0x1a, 0xf2, 0x71, 0xc6, 0x84, 0xf0, - 0xc6, 0x01, 0x77, 0xf5, 0xae, 0xf2, 0xc1, 0xb6, 0xa9, 0x51, 0xce, 0xcb, 0xd0, 0x94, 0x2f, 0x64, - 0x6f, 0xc2, 0x45, 0xc2, 0x26, 0x11, 0x16, 0x6e, 0x9d, 0xa4, 0xcb, 0xd4, 0x4c, 0x84, 0x73, 0x1b, - 0x1a, 0x07, 0x9c, 0xc7, 0x94, 0x8b, 0x28, 0x0c, 0x04, 0xbe, 0x8c, 0xb4, 0x66, 0x55, 0x55, 0xd0, - 0x90, 0x73, 0x04, 0x35, 0xd9, 0xd4, 0x3e, 0x60, 0xc9, 0xe8, 0xe4, 0x1f, 0x6d, 0x7c, 0x6f, 0x43, - 0x35, 0x52, 0x16, 0xd1, 0xad, 0x6b, 0x03, 0x93, 0x91, 0xb6, 0x12, 0x4d, 0x17, 0x9d, 0x5b, 0x50, - 0xda, 0x9b, 0x4e, 0x8a, 0x7f, 0x5d, 0x94, 0xb1, 0x41, 0x73, 0x1e, 0x42, 0x23, 0xed, 0x01, 0xb1, - 0x29, 0x93, 0xba, 0xf4, 0x3d, 0x1e, 0x14, 0xf4, 0x6c, 0x2b, 0xc4, 0x40, 0x5c, 0xe3, 0x36, 0x1b, - 0xbf, 0x33, 0xa0, 0x2c, 0x4f, 0x28, 0xf3, 0x76, 0x77, 0x74, 0x12, 0x92, 0xb9, 0x83, 0x74, 0xe6, - 0x20, 0x67, 0x89, 0xbc, 0xab, 0x06, 0x8f, 0xe9, 0x6c, 0xf5, 0x99, 0xe2, 0x25, 0x51, 0x11, 0x17, - 0x38, 0x36, 0xa0, 0xfe, 0x79, 0xe8, 0x05, 0x5b, 0x6a, 0x1e, 0x47, 0x2e, 0x53, 0xcb, 0x05, 0x9e, - 0xf7, 0xc1, 0xea, 0x09, 0x69, 0x83, 0xcb, 0xc9, 0xb3, 0x67, 0x50, 0xd1, 0x4c, 0xce, 0xd2, 0xc6, - 0xcf, 0x4b, 0x50, 0xfe, 0x9a, 0xc7, 0x21, 0xb9, 0x0f, 0x55, 0x3d, 0x0c, 0x20, 0x0b, 0x8f, 0xfe, - 0x4e, 0x16, 0x8a, 0x0b, 0xd3, 0x02, 0x67, 0x89, 0x7c, 0x00, 0x96, 0xce, 0xf7, 0xf3, 0x13, 0x8b, - 0xce, 0x55, 0xe1, 0xeb, 0x2c, 0xad, 0x19, 0xef, 0x1a, 0xe4, 0x1d, 0xb0, 0x94, 0xa7, 0x2e, 0xe8, - 0xee, 0xb2, 0xd6, 0xde, 0x59, 0x42, 0x86, 0x7a, 0xff, 0x24, 0x9c, 0xfa, 0x6e, 0x9f, 0xc7, 0x67, - 0x9c, 0x2c, 0xcc, 0xd0, 0x3a, 0x0b, 0xb0, 0xb3, 0x44, 0xde, 0x06, 0x50, 0xee, 0x7b, 0xe8, 0xb9, - 0x82, 0xd4, 0xd3, 0xf5, 0xbd, 0xe9, 0xa4, 0xd3, 0x42, 0x91, 0xa9, 0x73, 0xf7, 0x5c, 0xa1, 0xc8, - 0x0b, 0xee, 0xfd, 0x83, 0xe4, 0xef, 0x41, 0x73, 0x0b, 0xa3, 0x6e, 0x3f, 0xde, 0x3c, 0x0a, 0xe3, - 0x84, 0x2c, 0x4e, 0xd5, 0x3a, 0x8b, 0x08, 0x67, 0x89, 0x7c, 0x04, 0xf6, 0x20, 0x3e, 0x57, 0xf4, - 0xcf, 0x15, 0xa2, 0x31, 0x17, 0x7c, 0xc5, 0xfd, 0x37, 0xfe, 0x50, 0x02, 0xeb, 0xcb, 0x30, 0x3e, - 0xe5, 0x31, 0x59, 0x07, 0x0b, 0x5f, 0x6a, 0x05, 0x47, 0xca, 0x5e, 0x6e, 0x97, 0x09, 0xbd, 0x0b, - 0x35, 0x54, 0xd9, 0x80, 0x89, 0xd3, 0xdc, 0x48, 0xf8, 0xe7, 0x59, 0xae, 0x35, 0x55, 0xed, 0xf1, - 0x5e, 0xcb, 0xfd, 0x24, 0xe6, 0x6c, 0x92, 0xbd, 0x4e, 0x2f, 0x3c, 0x9f, 0x3a, 0xf5, 0xfc, 0x85, - 0xd4, 0x47, 0xdb, 0xdc, 0x83, 0x72, 0x5f, 0xde, 0x29, 0xff, 0xbb, 0x2b, 0xff, 0x2b, 0xa1, 0x43, - 0x8a, 0xc8, 0x4c, 0xce, 0x87, 0x60, 0xa9, 0x72, 0x9d, 0x2b, 0x62, 0xae, 0xb7, 0xe9, 0xdc, 0x5c, - 0x44, 0x6b, 0xc6, 0xdb, 0x50, 0x3d, 0x98, 0xc6, 0x63, 0x3e, 0x10, 0x0b, 0x9e, 0x53, 0x34, 0x19, - 0xea, 0xda, 0x52, 0x49, 0x3c, 0x17, 0x30, 0x97, 0xd4, 0x3b, 0x97, 0xa3, 0x9d, 0x25, 0x72, 0x0f, - 0x5a, 0x94, 0x8f, 0xb8, 0x57, 0x28, 0x86, 0xa4, 0x78, 0xe5, 0xc5, 0xc8, 0x5b, 0x33, 0xc8, 0xa7, - 0xd0, 0x9c, 0x2b, 0x9e, 0x24, 0x2b, 0x24, 0x97, 0xd5, 0xd4, 0xc5, 0x0d, 0x1e, 0xb4, 0x7e, 0xfb, - 0xfd, 0x8a, 0xf1, 0xfb, 0xef, 0x57, 0x8c, 0x3f, 0x7e, 0xbf, 0x62, 0xfc, 0xe4, 0xcf, 0x2b, 0x4b, - 0x47, 0x16, 0xfe, 0x4d, 0xfb, 0xde, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x5c, 0xfb, 0x58, - 0xcb, 0x1d, 0x00, 0x00, + // 3075 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x39, 0x4b, 0x6f, 0x23, 0xc7, + 0xd1, 0x9a, 0x21, 0x39, 0x1c, 0x16, 0x49, 0x2d, 0xdd, 0x5e, 0xdb, 0x34, 0xed, 0x4f, 0x96, 0xc7, + 0xf6, 0xae, 0x6c, 0xaf, 0x65, 0xaf, 0xbc, 0x7e, 0x7e, 0x71, 0x00, 0xad, 0xc4, 0x5d, 0xd3, 0xab, + 0x97, 0x9b, 0xd4, 0x3a, 0xf6, 0x21, 0x44, 0x8b, 0xd3, 0xa2, 0x06, 0x1a, 0xce, 0x8c, 0xa7, 0x87, + 0x02, 0xe5, 0x63, 0x72, 0x0a, 0xf2, 0x07, 0x82, 0x1c, 0x73, 0x08, 0x92, 0x53, 0x80, 0xfc, 0x87, + 0x00, 0x09, 0xe0, 0x43, 0xee, 0xb9, 0x24, 0xce, 0x2d, 0xb7, 0xfc, 0x82, 0x04, 0x5d, 0xdd, 0xf3, + 0x20, 0xf5, 0xc8, 0x26, 0x41, 0x4e, 0x9c, 0xaa, 0xae, 0xea, 0xea, 0xae, 0xaa, 0xae, 0x17, 0x61, + 0xd9, 0x0b, 0x12, 0x1e, 0x07, 0xcc, 0x5f, 0x8f, 0xe2, 0x30, 0x09, 0x89, 0xa5, 0xe0, 0x4e, 0x8d, + 0x45, 0x9e, 0x42, 0x39, 0x1d, 0x28, 0xef, 0x78, 0x22, 0x21, 0x04, 0xca, 0x53, 0xcf, 0x15, 0x6d, + 0x63, 0xb5, 0xb4, 0x66, 0x51, 0xfc, 0x76, 0x3e, 0x87, 0xda, 0x80, 0x89, 0xd3, 0xc7, 0xcc, 0x9f, + 0x72, 0xd2, 0x82, 0xd2, 0x19, 0xf3, 0xdb, 0xc6, 0xaa, 0xb1, 0xd6, 0xa0, 0xf2, 0x93, 0x6c, 0x80, + 0x7d, 0xc6, 0xfc, 0x61, 0x72, 0x1e, 0xf1, 0xb6, 0xb9, 0x6a, 0xac, 0x2d, 0x6f, 0x3c, 0xb7, 0xae, + 0x04, 0xac, 0x1f, 0x84, 0x22, 0xf1, 0x82, 0xf1, 0xfa, 0x63, 0xe6, 0x0f, 0xce, 0x23, 0x4e, 0xab, + 0x67, 0xea, 0xc3, 0xd9, 0x87, 0x7a, 0x3f, 0x1e, 0x3d, 0x98, 0x06, 0xa3, 0xc4, 0x0b, 0x03, 0x29, + 0x35, 0x60, 0x13, 0x8e, 0xbb, 0xd6, 0x28, 0x7e, 0x4b, 0x1c, 0x8b, 0xc7, 0xa2, 0x5d, 0x5a, 0x2d, + 0x49, 0x9c, 0xfc, 0x26, 0x6d, 0xa8, 0x7a, 0x62, 0x2b, 0x9c, 0x06, 0x49, 0xbb, 0xbc, 0x6a, 0xac, + 0xd9, 0x34, 0x05, 0x9d, 0x1f, 0x97, 0xa0, 0xf2, 0xf9, 0x94, 0xc7, 0xe7, 0xc8, 0x97, 0x24, 0x71, + 0xba, 0x97, 0xfc, 0x26, 0x37, 0xa1, 0xe2, 0xb3, 0x60, 0x2c, 0xda, 0x26, 0x6e, 0xa6, 0x00, 0xf2, + 0x02, 0xd4, 0xd8, 0x71, 0xc2, 0xe3, 0xe1, 0xd4, 0x73, 0xdb, 0xa5, 0x55, 0x63, 0xcd, 0xa2, 0x36, + 0x22, 0x0e, 0x3d, 0x97, 0x3c, 0x0f, 0xb6, 0x1b, 0x0e, 0x47, 0x45, 0x59, 0x6e, 0x88, 0xb2, 0xc8, + 0x6d, 0xb0, 0xa7, 0x9e, 0x3b, 0xf4, 0x3d, 0x91, 0xb4, 0x2b, 0xab, 0xc6, 0x5a, 0x7d, 0xa3, 0x91, + 0x5e, 0x58, 0xea, 0x90, 0x56, 0xa7, 0x9e, 0x8b, 0xca, 0x5c, 0x07, 0x5b, 0xc4, 0xa3, 0xe1, 0xf1, + 0x34, 0x18, 0xb5, 0x2d, 0x24, 0x7c, 0x3a, 0x25, 0x2c, 0xdc, 0x9e, 0x56, 0x85, 0x02, 0xe4, 0xf5, + 0x62, 0x7e, 0xc6, 0x63, 0xc1, 0xdb, 0x55, 0x25, 0x52, 0x83, 0xe4, 0x1e, 0xd4, 0x8f, 0xd9, 0x88, + 0x27, 0xc3, 0x88, 0xc5, 0x6c, 0xd2, 0xb6, 0xe7, 0x37, 0x7b, 0x20, 0x97, 0x0e, 0xe4, 0x8a, 0xa0, + 0x70, 0x9c, 0x01, 0xe4, 0x03, 0x68, 0x22, 0x24, 0x86, 0xc7, 0x9e, 0x9f, 0xf0, 0xb8, 0x5d, 0x43, + 0x3e, 0x92, 0xf1, 0x21, 0x76, 0x10, 0x73, 0x4e, 0x1b, 0x8a, 0x50, 0x61, 0xc8, 0xff, 0x01, 0xf0, + 0x59, 0xc4, 0x02, 0x77, 0xc8, 0x7c, 0xbf, 0x0d, 0x78, 0x96, 0x9a, 0xc2, 0x6c, 0xfa, 0x3e, 0x79, + 0x4e, 0x9e, 0x93, 0xb9, 0xc3, 0x44, 0xb4, 0x9b, 0xab, 0xc6, 0x5a, 0x99, 0x5a, 0x12, 0x1c, 0x08, + 0xe7, 0x7d, 0xa8, 0xa1, 0x97, 0xe0, 0xed, 0x5f, 0x07, 0xeb, 0x4c, 0x02, 0xca, 0x99, 0xea, 0x1b, + 0x4f, 0xa5, 0x62, 0x33, 0x67, 0xa2, 0x9a, 0xc0, 0x59, 0x01, 0x7b, 0x87, 0x05, 0xe3, 0xd4, 0x03, + 0xa5, 0x79, 0x90, 0xa9, 0x46, 0xf1, 0xdb, 0xf9, 0x95, 0x09, 0x16, 0xe5, 0x62, 0xea, 0x27, 0xe4, + 0x4d, 0x00, 0xa9, 0xfc, 0x09, 0x4b, 0x62, 0x6f, 0xa6, 0x77, 0x9e, 0x57, 0x7f, 0x6d, 0xea, 0xb9, + 0xbb, 0xb8, 0x4c, 0xee, 0x41, 0x03, 0x25, 0xa4, 0xe4, 0xe6, 0xfc, 0x41, 0xb2, 0xb3, 0xd2, 0x3a, + 0x92, 0x69, 0xae, 0x67, 0xc1, 0x42, 0xbb, 0x2b, 0xdf, 0x6b, 0x52, 0x0d, 0x91, 0xd7, 0xf4, 0x43, + 0x12, 0x7c, 0x94, 0x0c, 0x5d, 0x2e, 0x52, 0xc7, 0x68, 0x66, 0xd8, 0x6d, 0x2e, 0x12, 0xf2, 0x1e, + 0x28, 0x65, 0xa6, 0x42, 0x2b, 0x28, 0x94, 0xcc, 0x19, 0x4b, 0x28, 0xa9, 0x48, 0xa7, 0xa5, 0xde, + 0x85, 0xba, 0xbc, 0x6b, 0xca, 0x65, 0x21, 0x57, 0x2b, 0xbb, 0x99, 0x56, 0x0f, 0x05, 0x49, 0xa4, + 0x59, 0xa4, 0xaa, 0xa4, 0x13, 0x2a, 0x67, 0xc1, 0x6f, 0xa7, 0x0b, 0x95, 0xfd, 0xd8, 0xe5, 0xf1, + 0xa5, 0xef, 0x80, 0x40, 0xd9, 0xe5, 0x62, 0x84, 0xcf, 0xd4, 0xa6, 0xf8, 0x9d, 0xbf, 0x8d, 0x52, + 0xe1, 0x6d, 0x38, 0xbf, 0x34, 0xa0, 0xde, 0x0f, 0xe3, 0x64, 0x97, 0x0b, 0xc1, 0xc6, 0x9c, 0xbc, + 0x02, 0x95, 0x50, 0x6e, 0xab, 0x35, 0xde, 0x4c, 0xcf, 0x85, 0xb2, 0xa8, 0x5a, 0x5b, 0xb0, 0x8d, + 0x79, 0xbd, 0x6d, 0x6e, 0x42, 0x45, 0xbd, 0x2e, 0xf9, 0xf2, 0x2a, 0x54, 0x01, 0x52, 0xf7, 0xe1, + 0xf1, 0xb1, 0xe0, 0x4a, 0xb7, 0x15, 0xaa, 0xa1, 0xab, 0x5d, 0xee, 0x23, 0x00, 0x79, 0xce, 0xff, + 0xc0, 0x3b, 0x9c, 0x13, 0xa8, 0x53, 0x76, 0x9c, 0x6c, 0x85, 0x41, 0xc2, 0x67, 0x09, 0x59, 0x06, + 0xd3, 0x73, 0x51, 0x5d, 0x16, 0x35, 0x3d, 0x57, 0x1e, 0x70, 0x1c, 0x87, 0xd3, 0x08, 0xb5, 0xd5, + 0xa4, 0x0a, 0x40, 0xb5, 0xba, 0x6e, 0x8c, 0xa7, 0x96, 0x6a, 0x75, 0xdd, 0x98, 0xbc, 0x04, 0x75, + 0x11, 0xb0, 0x48, 0x9c, 0x84, 0x89, 0x3c, 0x60, 0x19, 0x0f, 0x08, 0x29, 0x6a, 0x20, 0x9c, 0xdf, + 0x19, 0x60, 0xed, 0xf2, 0xc9, 0x11, 0x8f, 0x2f, 0x48, 0x79, 0x1e, 0x6c, 0xdc, 0x78, 0xe8, 0xb9, + 0x5a, 0x50, 0x15, 0xe1, 0x9e, 0x7b, 0xa9, 0xa8, 0x67, 0xc1, 0xf2, 0x39, 0x93, 0x86, 0x50, 0xbe, + 0xa7, 0x21, 0xa9, 0x1f, 0x36, 0x19, 0xba, 0x9c, 0xb9, 0x18, 0x92, 0x6c, 0x6a, 0xb1, 0xc9, 0x36, + 0x67, 0xae, 0x3c, 0x9b, 0xcf, 0x44, 0x32, 0x9c, 0x46, 0x2e, 0x4b, 0x38, 0x86, 0xa1, 0xb2, 0x74, + 0x22, 0x91, 0x1c, 0x22, 0x86, 0xbc, 0x01, 0x4f, 0x8d, 0xfc, 0xa9, 0x90, 0x71, 0xd0, 0x0b, 0x8e, + 0xc3, 0x61, 0x18, 0xf8, 0xe7, 0xa8, 0x63, 0x9b, 0xde, 0xd0, 0x0b, 0xbd, 0xe0, 0x38, 0xdc, 0x0f, + 0xfc, 0x73, 0xe7, 0xa7, 0x26, 0x54, 0x1e, 0xa2, 0x1a, 0xee, 0x41, 0x75, 0x82, 0x17, 0x4a, 0x5f, + 0x77, 0x27, 0xd5, 0x32, 0xae, 0xaf, 0xab, 0xdb, 0x8a, 0x6e, 0x90, 0xc4, 0xe7, 0x34, 0x25, 0x95, + 0x5c, 0x09, 0x3b, 0xf2, 0x79, 0x22, 0xb4, 0x77, 0x2c, 0x70, 0x0d, 0xd4, 0xa2, 0xe6, 0xd2, 0xa4, + 0x9d, 0xcf, 0xa0, 0x51, 0xdc, 0x4e, 0xa6, 0xa0, 0x53, 0x7e, 0x8e, 0x3a, 0x2c, 0x53, 0xf9, 0x49, + 0x5e, 0x85, 0x0a, 0x3e, 0x60, 0xd4, 0x60, 0x7d, 0x63, 0x39, 0xdd, 0x55, 0xb1, 0x51, 0xb5, 0xf8, + 0xb1, 0xf9, 0xa1, 0x21, 0xf7, 0x2a, 0x0a, 0x29, 0xee, 0x55, 0xbb, 0x7e, 0x2f, 0xc5, 0x56, 0xd8, + 0xcb, 0xf9, 0x87, 0x01, 0x8d, 0xaf, 0x78, 0x1c, 0x1e, 0xc4, 0x61, 0x14, 0x0a, 0xe6, 0x93, 0x5b, + 0x60, 0xa9, 0x9b, 0x5e, 0x71, 0x0e, 0xbd, 0x2a, 0xe9, 0xd4, 0xdd, 0xd0, 0xb4, 0x17, 0x65, 0xe8, + 0x55, 0xb2, 0x02, 0x30, 0x61, 0xb3, 0x1d, 0xce, 0x04, 0xef, 0xb9, 0xa9, 0x5b, 0xe5, 0x18, 0xd2, + 0x01, 0x7b, 0xc2, 0x66, 0x83, 0x59, 0x30, 0x10, 0x68, 0xf5, 0x32, 0xcd, 0x60, 0xf2, 0x22, 0xd4, + 0x26, 0x6c, 0x26, 0xfd, 0xbb, 0xe7, 0x6a, 0xab, 0xe7, 0x08, 0xf2, 0x32, 0x94, 0x92, 0x59, 0x80, + 0x81, 0xa3, 0xbe, 0x71, 0x63, 0x5d, 0xd6, 0x01, 0x83, 0x59, 0xa0, 0x5f, 0x02, 0x95, 0x6b, 0xa9, + 0x66, 0xec, 0x5c, 0x33, 0x2d, 0x28, 0x8d, 0x3c, 0x17, 0x93, 0x48, 0x8d, 0xca, 0x4f, 0xe7, 0xdb, + 0x12, 0xdc, 0xd0, 0xa6, 0x39, 0xf1, 0xa2, 0x7e, 0x22, 0xfd, 0xa9, 0x0d, 0x55, 0x7c, 0xca, 0x3c, + 0xd6, 0x16, 0x4a, 0x41, 0xf2, 0xff, 0x60, 0xa1, 0x6b, 0xa7, 0xc6, 0x7f, 0x65, 0x5e, 0x3d, 0xd9, + 0x16, 0xca, 0x19, 0xb4, 0x17, 0x68, 0x16, 0xf2, 0x21, 0x54, 0xbe, 0xe1, 0x71, 0xa8, 0xc2, 0x54, + 0x7d, 0xc3, 0xb9, 0x8a, 0x57, 0x1a, 0x44, 0xb3, 0x2a, 0x86, 0xff, 0xa1, 0x16, 0xd7, 0x64, 0x50, + 0x9a, 0x84, 0x67, 0xdc, 0x6d, 0x57, 0xf1, 0x54, 0x8b, 0x06, 0x4f, 0x97, 0x53, 0xd5, 0xd9, 0x99, + 0xea, 0x3a, 0x9f, 0x42, 0xbd, 0x70, 0xcd, 0xa2, 0x1f, 0x36, 0x95, 0xb6, 0x5f, 0x99, 0xf7, 0xc3, + 0xe6, 0xdc, 0x4b, 0x29, 0xba, 0xf4, 0xa7, 0x00, 0xf9, 0xa5, 0xff, 0x9b, 0xc7, 0xe1, 0xfc, 0xc4, + 0x80, 0x1b, 0x5b, 0x61, 0x10, 0x70, 0xac, 0x4b, 0x94, 0x39, 0x73, 0x9f, 0x36, 0xae, 0xf5, 0xe9, + 0xb7, 0xa0, 0x22, 0x24, 0x83, 0x96, 0xf2, 0xdc, 0x15, 0xf6, 0xa1, 0x8a, 0x4a, 0x86, 0xa5, 0x09, + 0x9b, 0x0d, 0x23, 0x1e, 0xb8, 0x5e, 0x30, 0xc6, 0x77, 0xa0, 0xac, 0x72, 0xa0, 0x30, 0xce, 0x2f, + 0x0c, 0xb0, 0xd4, 0x73, 0x98, 0x0b, 0x91, 0xc6, 0x7c, 0x88, 0x7c, 0x11, 0x6a, 0x51, 0xcc, 0x5d, + 0x6f, 0x94, 0x4a, 0xae, 0xd1, 0x1c, 0x21, 0x23, 0xf8, 0x71, 0x18, 0x8f, 0x38, 0x6e, 0x6f, 0x53, + 0x05, 0xc8, 0xb2, 0x0f, 0x53, 0x09, 0x06, 0x3a, 0x15, 0x45, 0x6d, 0x89, 0x90, 0x11, 0x4e, 0xb2, + 0x88, 0x88, 0x8d, 0x54, 0x01, 0x56, 0xa2, 0x0a, 0x90, 0x51, 0x57, 0x59, 0x12, 0x2d, 0x68, 0x53, + 0x0d, 0x39, 0xbf, 0x35, 0xa1, 0xb1, 0xed, 0xc5, 0x7c, 0x94, 0x70, 0xb7, 0xeb, 0x8e, 0x91, 0x90, + 0x07, 0x89, 0x97, 0x9c, 0xeb, 0x08, 0xaf, 0xa1, 0x2c, 0x19, 0x9b, 0xf3, 0x45, 0xa9, 0xb2, 0x4b, + 0x09, 0x6b, 0x69, 0x05, 0x90, 0xf7, 0x01, 0x54, 0xc9, 0x82, 0xf5, 0x74, 0xf9, 0xfa, 0x7a, 0xba, + 0x86, 0xa4, 0xf2, 0x53, 0x2a, 0x49, 0xf1, 0x79, 0x2a, 0x03, 0x58, 0x58, 0x6c, 0x4f, 0xa5, 0x83, + 0x63, 0x86, 0x3f, 0xe2, 0x3e, 0x3a, 0x30, 0x66, 0xf8, 0x23, 0xee, 0x67, 0x75, 0x56, 0x55, 0x1d, + 0x49, 0x7e, 0x93, 0xdb, 0x60, 0x86, 0x11, 0xde, 0xb1, 0x20, 0xb4, 0x78, 0xc1, 0xf5, 0xfd, 0x88, + 0x9a, 0x61, 0x44, 0x1c, 0xb0, 0x54, 0xc1, 0xd8, 0xae, 0xa1, 0xe3, 0x03, 0x86, 0x10, 0x2c, 0x6d, + 0xa8, 0x5e, 0x71, 0x9e, 0x05, 0x73, 0x3f, 0x22, 0x55, 0x28, 0xf5, 0xbb, 0x83, 0xd6, 0x92, 0xfc, + 0xd8, 0xee, 0xee, 0xb4, 0x0c, 0xe7, 0x6f, 0x06, 0xd4, 0x76, 0xa7, 0x09, 0x93, 0x3e, 0x26, 0xae, + 0x33, 0xee, 0xf3, 0x60, 0x8b, 0x84, 0xc5, 0x98, 0x53, 0x4d, 0x15, 0x4a, 0x10, 0x1e, 0x08, 0xf2, + 0x06, 0x54, 0xb8, 0x3b, 0xe6, 0x69, 0x34, 0xb8, 0x79, 0xd9, 0x59, 0xa9, 0x22, 0x21, 0x77, 0xc0, + 0x12, 0xa3, 0x13, 0x3e, 0x61, 0xed, 0xf2, 0x3c, 0x71, 0x1f, 0xb1, 0x2a, 0x0d, 0x52, 0x4d, 0x83, + 0x75, 0x7f, 0x1c, 0x46, 0x58, 0xf8, 0x56, 0x74, 0xdd, 0x1f, 0x87, 0x91, 0x2c, 0x7b, 0x37, 0xe0, + 0x19, 0x6f, 0x1c, 0x84, 0x31, 0x1f, 0x7a, 0x81, 0xcb, 0x67, 0xc3, 0x51, 0x18, 0x1c, 0xfb, 0xde, + 0x28, 0x41, 0xbd, 0xda, 0xf4, 0x69, 0xb5, 0xd8, 0x93, 0x6b, 0x5b, 0x7a, 0xc9, 0xb9, 0x0d, 0xb5, + 0x47, 0xfc, 0x1c, 0x0b, 0x4d, 0x41, 0x3a, 0x60, 0x9e, 0x9e, 0xe9, 0x7c, 0x09, 0xe9, 0x29, 0x1e, + 0x3d, 0xa6, 0xe6, 0xe9, 0x99, 0x73, 0x02, 0x76, 0x5f, 0x17, 0x0c, 0xe4, 0x2d, 0x19, 0x42, 0x31, + 0x14, 0xeb, 0x47, 0x97, 0x55, 0xfa, 0x85, 0x7a, 0x85, 0xa6, 0x34, 0xd2, 0xbe, 0x78, 0x20, 0xad, + 0x24, 0x05, 0x14, 0x2b, 0xa6, 0xd2, 0x5c, 0xc5, 0xf4, 0x73, 0x13, 0xec, 0x2c, 0x65, 0xbd, 0x0d, + 0xb5, 0x49, 0x6a, 0x0b, 0xfd, 0x74, 0xb3, 0xf2, 0x38, 0x33, 0x12, 0xcd, 0x69, 0xf4, 0x1d, 0xca, + 0x97, 0xdd, 0x21, 0x8f, 0x01, 0x95, 0x27, 0x8a, 0x01, 0xb7, 0xe1, 0xc6, 0xc8, 0xe7, 0x2c, 0x18, + 0xe6, 0x4f, 0x58, 0x79, 0xe8, 0x32, 0xa2, 0x0f, 0xb2, 0x77, 0xac, 0x63, 0x5a, 0x35, 0x4f, 0x45, + 0xaf, 0x43, 0xc5, 0xe5, 0x7e, 0xc2, 0x16, 0x3b, 0xa1, 0xfd, 0x98, 0x8d, 0x7c, 0xbe, 0x2d, 0x97, + 0xa8, 0xa2, 0x20, 0x77, 0xc0, 0x4e, 0x2b, 0x31, 0xdd, 0xff, 0x64, 0x45, 0x75, 0xaa, 0x70, 0x9a, + 0x51, 0x38, 0x2f, 0x43, 0xe9, 0xd1, 0xe3, 0xfe, 0xb5, 0x96, 0xfa, 0x21, 0x98, 0x8f, 0x1e, 0x17, + 0xe3, 0x6c, 0x23, 0x4b, 0x8f, 0xb2, 0x33, 0x36, 0xf3, 0xce, 0xb8, 0x03, 0xf6, 0x54, 0xf0, 0x78, + 0x97, 0x27, 0x4c, 0x3f, 0xf2, 0x0c, 0x96, 0x69, 0x52, 0xb6, 0x76, 0x5e, 0x18, 0xe8, 0x94, 0x94, + 0x82, 0xce, 0xdf, 0x4b, 0x50, 0xd5, 0x0f, 0x5d, 0xee, 0x39, 0xcd, 0xca, 0x45, 0xf9, 0x99, 0x47, + 0x0d, 0xb3, 0x18, 0x35, 0x8a, 0x3d, 0x78, 0xe9, 0xc9, 0x7a, 0x70, 0xf2, 0x7d, 0x68, 0x44, 0x6a, + 0xad, 0x18, 0x6b, 0x5e, 0x58, 0xe4, 0xd3, 0xbf, 0xc8, 0x5b, 0x8f, 0x72, 0x40, 0xbe, 0x14, 0x6c, + 0x58, 0x12, 0x36, 0x46, 0x83, 0x37, 0x68, 0x55, 0xc2, 0x03, 0x36, 0xbe, 0x22, 0xe2, 0x3c, 0x41, + 0xd0, 0x90, 0xe5, 0x71, 0x18, 0xb5, 0x1b, 0x18, 0x08, 0x64, 0xa0, 0x29, 0xc6, 0x80, 0xe6, 0x7c, + 0x0c, 0x78, 0x01, 0x6a, 0xa3, 0x70, 0x32, 0xf1, 0x70, 0x6d, 0x59, 0x25, 0x6e, 0x85, 0x18, 0x08, + 0xe7, 0x1b, 0xa8, 0xea, 0x0b, 0x93, 0x3a, 0x54, 0xb7, 0xbb, 0x0f, 0x36, 0x0f, 0x77, 0x64, 0x14, + 0x02, 0xb0, 0xee, 0xf7, 0xf6, 0x36, 0xe9, 0x97, 0x2d, 0x43, 0x46, 0xa4, 0xde, 0xde, 0xa0, 0x65, + 0x92, 0x1a, 0x54, 0x1e, 0xec, 0xec, 0x6f, 0x0e, 0x5a, 0x25, 0x62, 0x43, 0xf9, 0xfe, 0xfe, 0xfe, + 0x4e, 0xab, 0x4c, 0x1a, 0x60, 0x6f, 0x6f, 0x0e, 0xba, 0x83, 0xde, 0x6e, 0xb7, 0x55, 0x91, 0xb4, + 0x0f, 0xbb, 0xfb, 0x2d, 0x4b, 0x7e, 0x1c, 0xf6, 0xb6, 0x5b, 0x55, 0xb9, 0x7e, 0xb0, 0xd9, 0xef, + 0x7f, 0xb1, 0x4f, 0xb7, 0x5b, 0xb6, 0xdc, 0xb7, 0x3f, 0xa0, 0xbd, 0xbd, 0x87, 0xad, 0x9a, 0x73, + 0x17, 0xea, 0x05, 0xa5, 0x49, 0x0e, 0xda, 0x7d, 0xd0, 0x5a, 0x92, 0x62, 0x1e, 0x6f, 0xee, 0x1c, + 0x76, 0x5b, 0x06, 0x59, 0x06, 0xc0, 0xcf, 0xe1, 0xce, 0xe6, 0xde, 0xc3, 0x96, 0xe9, 0xfc, 0xc8, + 0xc8, 0x78, 0xb0, 0x09, 0x7e, 0x13, 0x6c, 0xad, 0xea, 0xb4, 0xbe, 0xbe, 0xb1, 0x60, 0x17, 0x9a, + 0x11, 0x48, 0x37, 0x1b, 0x9d, 0xf0, 0xd1, 0xa9, 0x98, 0x4e, 0xb4, 0x57, 0x64, 0xb0, 0xea, 0x65, + 0xa5, 0x4e, 0xd2, 0x20, 0xa0, 0xa0, 0x6c, 0xce, 0x53, 0x46, 0x7a, 0x35, 0xe7, 0xb9, 0x07, 0x90, + 0x4f, 0x12, 0x2e, 0xa9, 0x8c, 0x6f, 0x42, 0x85, 0xf9, 0x1e, 0x13, 0x3a, 0x8b, 0x29, 0xc0, 0xa1, + 0x50, 0x2f, 0xcc, 0x1f, 0xa4, 0xc1, 0x98, 0xef, 0x0f, 0x4f, 0xf9, 0xb9, 0x40, 0x5e, 0x9b, 0x56, + 0x99, 0xef, 0x3f, 0xe2, 0xe7, 0x82, 0xac, 0x41, 0x45, 0x8d, 0x2f, 0xcc, 0x4b, 0x3a, 0x62, 0x64, + 0xa7, 0x8a, 0xc0, 0xb9, 0x03, 0x96, 0x6a, 0x93, 0x0b, 0x3e, 0x63, 0x5c, 0x99, 0x68, 0x3e, 0xd1, + 0xe7, 0xc6, 0xa6, 0x9a, 0xbc, 0xad, 0x47, 0x25, 0x42, 0x0d, 0x68, 0x8c, 0xf9, 0xc2, 0x4c, 0x11, + 0xea, 0x29, 0x09, 0x32, 0x38, 0xdb, 0x60, 0x5f, 0x3b, 0x88, 0xd2, 0x8a, 0x30, 0x73, 0x45, 0x5c, + 0x32, 0x9a, 0x72, 0x62, 0x80, 0x7c, 0x9c, 0xa2, 0xdd, 0x58, 0xed, 0x22, 0xdd, 0x78, 0x5d, 0x9a, + 0xc8, 0xf3, 0xdd, 0x98, 0x07, 0x17, 0x6e, 0x9f, 0x0f, 0x61, 0x32, 0x1a, 0xf2, 0x2a, 0x94, 0x71, + 0x6a, 0x54, 0x9a, 0x0f, 0x58, 0xd9, 0xc8, 0x08, 0x57, 0x9d, 0x23, 0x68, 0xaa, 0x1c, 0x46, 0xf9, + 0xd7, 0x53, 0x2e, 0xae, 0xad, 0x94, 0x56, 0x00, 0xb2, 0x30, 0x9b, 0xce, 0xc1, 0x0a, 0x18, 0xe9, + 0x28, 0xc7, 0x1e, 0xf7, 0xdd, 0xf4, 0x56, 0x1a, 0x72, 0x3e, 0x80, 0x46, 0x2a, 0x03, 0x3b, 0xec, + 0xdb, 0x59, 0x36, 0x4d, 0xfd, 0x52, 0x1a, 0x44, 0x91, 0xec, 0x85, 0x6e, 0x96, 0x48, 0x9d, 0xbf, + 0x98, 0x29, 0xa7, 0x6e, 0x34, 0xe7, 0x6a, 0x35, 0x63, 0xb1, 0x56, 0x9b, 0xaf, 0x7b, 0xcc, 0x27, + 0xae, 0x7b, 0xbe, 0x07, 0x35, 0x17, 0x93, 0xbe, 0x77, 0x96, 0x86, 0xbe, 0x95, 0xcb, 0x12, 0xbc, + 0x2e, 0x0d, 0xbc, 0x33, 0x4e, 0x73, 0x06, 0x79, 0xa6, 0x24, 0x3c, 0xe5, 0x81, 0xf7, 0x0d, 0x76, + 0xd4, 0xf2, 0xe2, 0x39, 0x22, 0x1f, 0x51, 0xa8, 0x42, 0x40, 0x8f, 0x28, 0xd2, 0xa9, 0x8b, 0x95, + 0x4f, 0x5d, 0xa4, 0xf6, 0xa6, 0x91, 0xe0, 0x71, 0x92, 0x16, 0x88, 0x0a, 0xca, 0x8a, 0xac, 0x9a, + 0xa6, 0x65, 0xc1, 0xd8, 0xf9, 0x08, 0x6a, 0xd9, 0x59, 0x64, 0xbc, 0xd9, 0xdb, 0xdf, 0xeb, 0xaa, + 0xe8, 0xd0, 0xdb, 0xdb, 0xee, 0xfe, 0xa0, 0x65, 0xc8, 0x88, 0x45, 0xbb, 0x8f, 0xbb, 0xb4, 0xdf, + 0x6d, 0x99, 0x32, 0xb2, 0x6c, 0x77, 0x77, 0xba, 0x83, 0x6e, 0xab, 0xf4, 0x59, 0xd9, 0xae, 0xb6, + 0x6c, 0x6a, 0xf3, 0x59, 0xe4, 0x7b, 0x23, 0x2f, 0x71, 0xbe, 0x04, 0x7b, 0x97, 0x45, 0x17, 0x0a, + 0xff, 0x3c, 0x21, 0x4d, 0xf5, 0x54, 0x41, 0x27, 0x8f, 0xd7, 0xa1, 0xaa, 0xa3, 0x86, 0xf6, 0xac, + 0x0b, 0x51, 0x25, 0x5d, 0x77, 0x7e, 0x63, 0xc0, 0xcd, 0xdd, 0xf0, 0x8c, 0x67, 0x59, 0xf8, 0x80, + 0x9d, 0xfb, 0x21, 0x73, 0xff, 0x85, 0x19, 0x6f, 0xc1, 0x0d, 0x11, 0x4e, 0xe3, 0x11, 0x1f, 0x2e, + 0x4c, 0x35, 0x9a, 0x0a, 0xfd, 0x50, 0xbb, 0xa3, 0x03, 0x4d, 0x97, 0x8b, 0x24, 0xa7, 0x2a, 0x21, + 0x55, 0x5d, 0x22, 0x53, 0x9a, 0xac, 0x9c, 0x28, 0x3f, 0x49, 0x39, 0xe1, 0x7c, 0x6b, 0x40, 0xb3, + 0x3b, 0x8b, 0xc2, 0x38, 0x49, 0x8f, 0xfa, 0x8c, 0x2c, 0xdb, 0xbf, 0x4e, 0x1f, 0x43, 0x99, 0x56, + 0x62, 0xfe, 0x75, 0xef, 0xda, 0x91, 0xcb, 0x3d, 0xb0, 0xe4, 0x66, 0x53, 0xa1, 0x5d, 0xe9, 0xc5, + 0x54, 0xe6, 0xdc, 0xc6, 0xeb, 0x7d, 0xa4, 0xa1, 0x9a, 0xb6, 0x58, 0x6a, 0x95, 0xe7, 0x4a, 0xad, + 0x8f, 0xc1, 0x52, 0xa4, 0x05, 0x3b, 0xd7, 0xa1, 0xda, 0x3f, 0xdc, 0xda, 0xea, 0xf6, 0xfb, 0x2d, + 0x83, 0x34, 0xa1, 0xb6, 0x7d, 0x78, 0xb0, 0xd3, 0xdb, 0xda, 0x1c, 0x68, 0x5b, 0x3f, 0xd8, 0xec, + 0xed, 0x74, 0xb7, 0x5b, 0x25, 0x67, 0x0b, 0x6a, 0x83, 0x59, 0xa0, 0xd9, 0x8b, 0x69, 0xd0, 0xb8, + 0x26, 0x0d, 0x9a, 0x0b, 0x69, 0xf0, 0x0b, 0xa8, 0x17, 0x4a, 0x22, 0xf2, 0x1a, 0x94, 0x93, 0x59, + 0x70, 0x71, 0x20, 0x9b, 0xca, 0xa1, 0xb8, 0x4c, 0x5e, 0x86, 0x86, 0x6c, 0xce, 0x98, 0x10, 0xde, + 0x38, 0xe0, 0xae, 0xde, 0x55, 0x36, 0x6c, 0x9b, 0x1a, 0xe5, 0xbc, 0x04, 0x4d, 0xd9, 0x21, 0x7b, + 0x13, 0x2e, 0x12, 0x36, 0x89, 0x30, 0x71, 0xeb, 0x20, 0x5d, 0xa6, 0x66, 0x22, 0x9c, 0x5b, 0xd0, + 0x38, 0xe0, 0x3c, 0xa6, 0x5c, 0x44, 0x61, 0x20, 0xb0, 0x33, 0xd2, 0x9a, 0x55, 0x59, 0x41, 0x43, + 0xce, 0x11, 0xd4, 0x64, 0x51, 0x7b, 0x9f, 0x25, 0xa3, 0x93, 0x7f, 0xb7, 0xf0, 0xbd, 0x05, 0xd5, + 0x48, 0x59, 0x44, 0x97, 0xae, 0x0d, 0x0c, 0x46, 0xda, 0x4a, 0x34, 0x5d, 0x74, 0xee, 0x41, 0x69, + 0x6f, 0x3a, 0x29, 0xfe, 0x75, 0x51, 0x56, 0x05, 0xda, 0x5c, 0x2b, 0x68, 0xce, 0xb7, 0x82, 0xce, + 0x57, 0x50, 0x4f, 0xaf, 0xdb, 0x73, 0xf1, 0xbf, 0x07, 0x54, 0x79, 0xcf, 0x9d, 0xb3, 0x80, 0xea, + 0xaf, 0x78, 0xe0, 0xf6, 0x52, 0x3d, 0x29, 0x60, 0x7e, 0x6f, 0x3d, 0x57, 0xc8, 0xf6, 0x7e, 0x00, + 0x8d, 0xb4, 0xf8, 0xc4, 0x6a, 0x50, 0x1a, 0xd1, 0xf7, 0x78, 0x50, 0x30, 0xb0, 0xad, 0x10, 0x03, + 0x71, 0x8d, 0xbf, 0x6e, 0xfc, 0xc1, 0x80, 0xb2, 0x54, 0x8d, 0x4c, 0x18, 0xdd, 0xd1, 0x49, 0x48, + 0xe6, 0x34, 0xd0, 0x99, 0x83, 0x9c, 0x25, 0xf2, 0x8e, 0x9a, 0x78, 0xa6, 0x43, 0xdd, 0xa7, 0x8a, + 0xda, 0x45, 0x0b, 0x5c, 0xe0, 0xd8, 0x80, 0xfa, 0x67, 0xa1, 0x17, 0x6c, 0xa9, 0x41, 0x20, 0xb9, + 0xcc, 0x1e, 0x17, 0x78, 0xde, 0x03, 0xab, 0x27, 0xa4, 0xf1, 0x2f, 0x27, 0xcf, 0xfa, 0xaf, 0xa2, + 0x7f, 0x38, 0x4b, 0x1b, 0xbf, 0x2e, 0x41, 0xf9, 0x2b, 0x1e, 0x87, 0xe4, 0x1e, 0x54, 0xf5, 0x14, + 0x82, 0x2c, 0x4c, 0x1b, 0x3a, 0x59, 0x0c, 0x58, 0x18, 0x53, 0x38, 0x4b, 0xe4, 0x7d, 0xb0, 0x74, + 0xa2, 0x99, 0x1f, 0x95, 0x74, 0xae, 0x8a, 0x1b, 0xce, 0xd2, 0x9a, 0xf1, 0x8e, 0x41, 0xde, 0x06, + 0x4b, 0x3d, 0x91, 0x05, 0xdd, 0x5d, 0xd6, 0x53, 0x38, 0x4b, 0xc8, 0x50, 0xef, 0x9f, 0x84, 0x53, + 0xdf, 0xed, 0xf3, 0xf8, 0x8c, 0x93, 0x85, 0xe1, 0x5d, 0x67, 0x01, 0x46, 0xad, 0x83, 0x72, 0xa4, + 0x43, 0xcf, 0x15, 0xa4, 0x9e, 0xae, 0xef, 0x4d, 0x27, 0xb9, 0x90, 0x82, 0xa7, 0x29, 0x8e, 0xc2, + 0xd3, 0x7a, 0x12, 0x8e, 0x77, 0xa1, 0xb9, 0x85, 0x8f, 0x7e, 0x3f, 0xde, 0x3c, 0x0a, 0xe3, 0x84, + 0x2c, 0x0e, 0xf5, 0x3a, 0x8b, 0x08, 0x67, 0x89, 0x7c, 0x08, 0xf6, 0x20, 0x3e, 0x57, 0xf4, 0xcf, + 0x14, 0x82, 0x41, 0x2e, 0xfb, 0x0a, 0x2d, 0x6c, 0xfc, 0xa9, 0x04, 0xd6, 0x17, 0x61, 0x7c, 0xca, + 0x63, 0xb2, 0x0e, 0x16, 0x36, 0x8a, 0x05, 0x77, 0xca, 0x1a, 0xc7, 0xcb, 0x84, 0xde, 0x81, 0x1a, + 0x2a, 0x6e, 0xc0, 0xc4, 0x69, 0x6e, 0x2a, 0xfc, 0xef, 0x2e, 0xd7, 0x9d, 0x2a, 0x36, 0xf0, 0x5e, + 0xcb, 0xfd, 0x24, 0xe6, 0x6c, 0x92, 0x35, 0xc7, 0x17, 0xba, 0xb7, 0x4e, 0x3d, 0x6f, 0xd0, 0xfa, + 0x68, 0xa1, 0xbb, 0x50, 0xee, 0xcb, 0x3b, 0xe5, 0xff, 0xb6, 0xe5, 0xff, 0x64, 0x74, 0x48, 0x11, + 0x99, 0xc9, 0xf9, 0x00, 0x2c, 0x55, 0x2d, 0xe4, 0x8a, 0x98, 0x2b, 0xad, 0x3a, 0x37, 0x17, 0xd1, + 0x9a, 0xf1, 0x16, 0x54, 0x0f, 0xa6, 0xf1, 0x98, 0x0f, 0xc4, 0x82, 0xff, 0x14, 0xad, 0x86, 0xba, + 0xb6, 0x54, 0x0e, 0xc9, 0x05, 0xcc, 0xe5, 0x94, 0xce, 0xe5, 0x68, 0x67, 0x89, 0xdc, 0x85, 0x16, + 0xe5, 0x23, 0xee, 0x15, 0x72, 0x31, 0x29, 0x5e, 0x79, 0xf1, 0xfd, 0xad, 0x19, 0xe4, 0x13, 0x68, + 0xce, 0xe5, 0x6e, 0x92, 0xe5, 0xb1, 0xcb, 0x52, 0xfa, 0xe2, 0x06, 0xf7, 0x5b, 0xbf, 0xff, 0x6e, + 0xc5, 0xf8, 0xe3, 0x77, 0x2b, 0xc6, 0x9f, 0xbf, 0x5b, 0x31, 0x7e, 0xf6, 0xd7, 0x95, 0xa5, 0x23, + 0x0b, 0xff, 0x25, 0x7e, 0xf7, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x10, 0xb6, 0xef, 0x4a, + 0x1e, 0x00, 0x00, } diff --git a/protos/internal.proto b/protos/internal.proto index 28bd5e43e65..4480a072db9 100644 --- a/protos/internal.proto +++ b/protos/internal.proto @@ -14,6 +14,12 @@ * limitations under the License. */ + +// Style guide for Protocol Buffer 3. +// Use CamelCase (with an initial capital) for message names – for example, +// SongServerRequest. Use underscore_separated_names for field names – for +// example, song_name. + syntax = "proto3"; package intern; @@ -389,8 +395,8 @@ service Zero { rpc Update (stream Group) returns (stream MembershipState) {} rpc Oracle (api.Payload) returns (stream OracleDelta) {} rpc ShouldServe (Tablet) returns (Tablet) {} - rpc AssignUids (Num) returns (api.AssignedIds) {} - rpc Timestamps (Num) returns (api.AssignedIds) {} + rpc AssignUids (Num) returns (AssignedIds) {} + rpc Timestamps (Num) returns (AssignedIds) {} rpc CommitOrAbort (api.TxnContext) returns (api.TxnContext) {} rpc TryAbort (TxnTimestamps) returns (OracleDelta) {} } @@ -411,6 +417,15 @@ service Worker { message Num { uint64 val = 1; + bool read_only = 2; +} + +message AssignedIds { + uint64 startId = 1; + uint64 endId = 2; + + // The following is used for read only transactions. + uint64 read_only = 5; } message SnapshotMeta { diff --git a/query/mutation.go b/query/mutation.go index 97b960ebecf..2cd5206c58a 100644 --- a/query/mutation.go +++ b/query/mutation.go @@ -153,7 +153,7 @@ func AssignUids(ctx context.Context, nquads []*api.NQuad) (map[string]uint64, er num.Val = uint64(len(newUids)) if int(num.Val) > 0 { - var res *api.AssignedIds + var res *intern.AssignedIds // TODO: Optimize later by prefetching. Also consolidate all the UID requests into a single // pending request from this server to zero. if res, err = worker.AssignUidsOverNetwork(ctx, num); err != nil { diff --git a/worker/groups.go b/worker/groups.go index 36df0d7eab8..f8fb80c5285 100644 --- a/worker/groups.go +++ b/worker/groups.go @@ -792,7 +792,7 @@ func (g *groupi) processOracleDeltaStream() { return } // Block forever trying to propose this. - elog.Printf("Batched %d updates. Proposing Delta of size: %d.", batch, delta.Size()) + elog.Printf("Batched %d updates. Proposing Delta: %v.", batch, delta) g.Node.proposeAndWait(context.Background(), &intern.Proposal{Delta: delta}) } } diff --git a/worker/mutation.go b/worker/mutation.go index 050899504f8..70a37df40d7 100644 --- a/worker/mutation.go +++ b/worker/mutation.go @@ -369,7 +369,7 @@ func ValidateAndConvert(edge *intern.DirectedEdge, su *intern.SchemaUpdate) erro return nil } -func AssignUidsOverNetwork(ctx context.Context, num *intern.Num) (*api.AssignedIds, error) { +func AssignUidsOverNetwork(ctx context.Context, num *intern.Num) (*intern.AssignedIds, error) { pl := groups().Leader(0) if pl == nil { return nil, conn.ErrNoConnection @@ -380,7 +380,7 @@ func AssignUidsOverNetwork(ctx context.Context, num *intern.Num) (*api.AssignedI return c.AssignUids(ctx, num) } -func Timestamps(ctx context.Context, num *intern.Num) (*api.AssignedIds, error) { +func Timestamps(ctx context.Context, num *intern.Num) (*intern.AssignedIds, error) { pl := groups().Leader(0) if pl == nil { return nil, conn.ErrNoConnection diff --git a/x/watermark.go b/x/watermark.go index 5d4e0be8826..40c124643a3 100644 --- a/x/watermark.go +++ b/x/watermark.go @@ -96,6 +96,7 @@ func (w *WaterMark) WaitForMark(ctx context.Context, index uint64) error { } waitCh := make(chan struct{}) w.markCh <- mark{index: index, waiter: waitCh} + select { case <-ctx.Done(): return ctx.Err() @@ -153,9 +154,11 @@ func (w *WaterMark) process() { for len(indices) > 0 { min := indices[0] - if done := pending[min]; done != 0 { + if done := pending[min]; done > 0 { break // len(indices) will be > 0. } + // Even if done is called multiple times causing it to become + // negative, we should still pop the index. heap.Pop(&indices) delete(pending, min) until = min diff --git a/xidmap/xidmap.go b/xidmap/xidmap.go index 9e0b4dfbcd5..3a70775eddf 100644 --- a/xidmap/xidmap.go +++ b/xidmap/xidmap.go @@ -17,7 +17,6 @@ import ( "google.golang.org/grpc" "github.com/dgraph-io/badger" - "github.com/dgraph-io/dgo/protos/api" "github.com/dgraph-io/dgraph/protos/intern" "github.com/dgraph-io/dgraph/x" farm "github.com/dgryski/go-farm" @@ -41,7 +40,7 @@ type XidMap struct { shards []shard kv *badger.DB opt Options - newRanges chan *api.AssignedIds + newRanges chan *intern.AssignedIds noMapMu sync.Mutex noMap block // block for allocating uids without an xid to uid mapping @@ -68,7 +67,7 @@ type block struct { start, end uint64 } -func (b *block) assign(ch <-chan *api.AssignedIds) uint64 { +func (b *block) assign(ch <-chan *intern.AssignedIds) uint64 { if b.end == 0 || b.start > b.end { newRange := <-ch b.start, b.end = newRange.StartId, newRange.EndId @@ -87,7 +86,7 @@ func New(kv *badger.DB, zero *grpc.ClientConn, opt Options) *XidMap { shards: make([]shard, opt.NumShards), kv: kv, opt: opt, - newRanges: make(chan *api.AssignedIds), + newRanges: make(chan *intern.AssignedIds), } for i := range xm.shards { xm.shards[i].elems = make(map[string]*list.Element)