diff --git a/client/rpcserver/payments_server.go b/client/rpcserver/payments_server.go index 55f16b09..123f0c1b 100644 --- a/client/rpcserver/payments_server.go +++ b/client/rpcserver/payments_server.go @@ -38,6 +38,7 @@ type paymentsServer struct { c *client.Client tipProgressStreams *serverStreams[*types.TipProgressEvent] + tipStreams *serverStreams[*types.ReceivedTip] } func (p *paymentsServer) TipUser(ctx context.Context, req *types.TipUserRequest, _ *types.TipUserResponse) error { @@ -58,6 +59,19 @@ func (p *paymentsServer) TipProgress(ctx context.Context, req *types.TipProgress return p.tipProgressStreams.runStream(ctx, req.UnackedFrom, stream) } +func (p *paymentsServer) TipStream(ctx context.Context, req *types.TipStreamRequest, stream types.PaymentsService_TipStreamServer) error { + return p.tipStreams.runStream(ctx, req.UnackedFrom, stream) +} + +// tipNtfnHandler is called by the client when a tip arrived from a remote user. +func (p *paymentsServer) tipNtfnHandler(ru *client.RemoteUser, amtMAtoms int64) { + ntfn := &types.ReceivedTip{ + Uid: ru.ID().Bytes(), + AmountMatoms: amtMAtoms, + } + p.tipStreams.send(ntfn) +} + func (p *paymentsServer) tipProgressNtfnHandler(ru *client.RemoteUser, amtMAtoms int64, completed bool, attempt int, attemptErr error, willRetry bool) { var attemptErrMsg string if attemptErr != nil { @@ -79,9 +93,14 @@ func (p *paymentsServer) AckTipProgress(_ context.Context, req *types.AckRequest return p.tipProgressStreams.ack(req.SequenceId) } +func (p *paymentsServer) AckTipReceived(_ context.Context, req *types.AckRequest, _ *types.AckResponse) error { + return p.tipStreams.ack(req.SequenceId) +} + func (p *paymentsServer) registerOfflineMessageStorageHandlers() { nmgr := p.c.NotificationManager() nmgr.RegisterSync(client.OnTipAttemptProgressNtfn(p.tipProgressNtfnHandler)) + nmgr.RegisterSync(client.OnTipReceivedNtfn(p.tipNtfnHandler)) } var _ types.PaymentsServiceServer = (*paymentsServer)(nil) @@ -92,6 +111,10 @@ func (s *Server) InitPaymentsService(cfg PaymentsServerCfg) error { if err != nil { return err } + tipStreams, err := newServerStreams[*types.ReceivedTip](cfg.RootReplayMsgLogs, "tipstream", cfg.Log) + if err != nil { + return err + } ps := &paymentsServer{ cfg: cfg, @@ -99,6 +122,7 @@ func (s *Server) InitPaymentsService(cfg PaymentsServerCfg) error { c: cfg.Client, tipProgressStreams: tipProgressStreams, + tipStreams: tipStreams, } ps.registerOfflineMessageStorageHandlers() s.services.Bind("PaymentsService", types.PaymentsServiceDefn(), ps) diff --git a/clientrpc/clientrpc.proto b/clientrpc/clientrpc.proto index e70e805b..0f40b550 100644 --- a/clientrpc/clientrpc.proto +++ b/clientrpc/clientrpc.proto @@ -158,8 +158,15 @@ service PaymentsService { rpc TipProgress(TipProgressRequest) returns (stream TipProgressEvent); /* AckTipProgress acknowledges events received up to a given - sequence_id have been processed. */ + sequence_id have been processed. */ rpc AckTipProgress(AckRequest) returns (AckResponse); + + /* TipStream returns a stream that gets tips received by the client. */ + rpc TipStream(TipStreamRequest) returns (stream ReceivedTip); + + /* AckTipReceived acknowledges events received up to a given + sequence_id have been processed. */ + rpc AckTipReceived(AckRequest) returns (AckResponse); } /* ResourcesService is the service to perform resource and page related actions. */ @@ -966,3 +973,21 @@ message FileMetadata { /* attributes of the file. */ map attributes = 10; } + +/* TipStreamRequest is the request for a new tip reception stream.*/ +message TipStreamRequest { + /* unacked_from specifies to the server the sequence_id of the last processed + PM. PMs received by the server that have a higher sequence_id will be + streamed back to the client. */ + uint64 unacked_from = 1; +} + +/* ReceivedPM is a private message received by the client. */ +message ReceivedTip { + /* uid is the source user ID in raw format. */ + bytes uid = 1; + /* amount_matoms is the amount being tipped in milli-atoms. */ + int64 amount_matoms = 2; + /* sequence_id is an opaque sequential ID. */ + uint64 sequence_id = 3; +} diff --git a/clientrpc/types/clientrpc.pb.go b/clientrpc/types/clientrpc.pb.go index b53a9a9b..0c9c7d5a 100644 --- a/clientrpc/types/clientrpc.pb.go +++ b/clientrpc/types/clientrpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc v3.21.12 // source: clientrpc.proto @@ -4896,6 +4896,124 @@ func (x *FileMetadata) GetAttributes() map[string]string { return nil } +// TipStreamRequest is the request for a new tip reception stream. +type TipStreamRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // unacked_from specifies to the server the sequence_id of the last processed + // PM. PMs received by the server that have a higher sequence_id will be + // streamed back to the client. + UnackedFrom uint64 `protobuf:"varint,1,opt,name=unacked_from,json=unackedFrom,proto3" json:"unacked_from,omitempty"` +} + +func (x *TipStreamRequest) Reset() { + *x = TipStreamRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_clientrpc_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TipStreamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TipStreamRequest) ProtoMessage() {} + +func (x *TipStreamRequest) ProtoReflect() protoreflect.Message { + mi := &file_clientrpc_proto_msgTypes[78] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TipStreamRequest.ProtoReflect.Descriptor instead. +func (*TipStreamRequest) Descriptor() ([]byte, []int) { + return file_clientrpc_proto_rawDescGZIP(), []int{78} +} + +func (x *TipStreamRequest) GetUnackedFrom() uint64 { + if x != nil { + return x.UnackedFrom + } + return 0 +} + +// ReceivedPM is a private message received by the client. +type ReceivedTip struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // uid is the source user ID in raw format. + Uid []byte `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` + // amount_matoms is the amount being tipped in milli-atoms. + AmountMatoms int64 `protobuf:"varint,2,opt,name=amount_matoms,json=amountMatoms,proto3" json:"amount_matoms,omitempty"` + // sequence_id is an opaque sequential ID. + SequenceId uint64 `protobuf:"varint,3,opt,name=sequence_id,json=sequenceId,proto3" json:"sequence_id,omitempty"` +} + +func (x *ReceivedTip) Reset() { + *x = ReceivedTip{} + if protoimpl.UnsafeEnabled { + mi := &file_clientrpc_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReceivedTip) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceivedTip) ProtoMessage() {} + +func (x *ReceivedTip) ProtoReflect() protoreflect.Message { + mi := &file_clientrpc_proto_msgTypes[79] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceivedTip.ProtoReflect.Descriptor instead. +func (*ReceivedTip) Descriptor() ([]byte, []int) { + return file_clientrpc_proto_rawDescGZIP(), []int{79} +} + +func (x *ReceivedTip) GetUid() []byte { + if x != nil { + return x.Uid + } + return nil +} + +func (x *ReceivedTip) GetAmountMatoms() int64 { + if x != nil { + return x.AmountMatoms + } + return 0 +} + +func (x *ReceivedTip) GetSequenceId() uint64 { + if x != nil { + return x.SequenceId + } + return 0 +} + // GCInfo is the summary info for a GC. type ListGCsResponse_GCInfo struct { state protoimpl.MessageState @@ -4917,7 +5035,7 @@ type ListGCsResponse_GCInfo struct { func (x *ListGCsResponse_GCInfo) Reset() { *x = ListGCsResponse_GCInfo{} if protoimpl.UnsafeEnabled { - mi := &file_clientrpc_proto_msgTypes[78] + mi := &file_clientrpc_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4930,7 +5048,7 @@ func (x *ListGCsResponse_GCInfo) String() string { func (*ListGCsResponse_GCInfo) ProtoMessage() {} func (x *ListGCsResponse_GCInfo) ProtoReflect() protoreflect.Message { - mi := &file_clientrpc_proto_msgTypes[78] + mi := &file_clientrpc_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5450,167 +5568,183 @@ var file_clientrpc_proto_rawDesc = []byte{ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x0b, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x53, - 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x4d, 0x45, 0x10, 0x01, 0x32, 0x7d, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0f, 0x4b, 0x65, 0x65, 0x70, 0x61, - 0x6c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x17, 0x2e, 0x4b, 0x65, 0x65, - 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x32, 0xb2, 0x05, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x1a, 0x0f, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x1d, 0x0a, 0x02, 0x50, 0x4d, 0x12, 0x0a, 0x2e, 0x50, 0x4d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x50, 0x4d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x08, 0x50, 0x4d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x10, 0x2e, 0x50, - 0x4d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, - 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x4d, 0x30, 0x01, 0x12, 0x2a, 0x0a, - 0x0d, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x4d, 0x12, 0x0b, - 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x03, 0x47, 0x43, 0x4d, - 0x12, 0x0b, 0x2e, 0x47, 0x43, 0x4d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, - 0x47, 0x43, 0x4d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x47, - 0x43, 0x4d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x11, 0x2e, 0x47, 0x43, 0x4d, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x47, 0x43, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x30, 0x01, 0x12, 0x2b, 0x0a, - 0x0e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x4d, 0x12, - 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x4d, 0x65, - 0x64, 0x69, 0x61, 0x74, 0x65, 0x4b, 0x58, 0x12, 0x11, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x4b, 0x58, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x4d, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x4b, 0x58, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, - 0x0a, 0x08, 0x4b, 0x58, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x10, 0x2e, 0x4b, 0x58, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x4b, - 0x58, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x0e, - 0x41, 0x63, 0x6b, 0x4b, 0x58, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x0b, - 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0c, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x14, 0x2e, 0x41, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x53, 0x65, 0x6e, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x10, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x55, 0x73, - 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x12, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x69, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, - 0x69, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc8, 0x05, 0x0a, 0x09, - 0x47, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x54, 0x6f, 0x47, 0x43, 0x12, 0x12, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x54, 0x6f, 0x47, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x54, 0x6f, 0x47, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x41, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x12, 0x16, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x47, 0x43, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x4b, 0x69, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, 0x47, - 0x43, 0x12, 0x12, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, 0x47, 0x43, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, - 0x47, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x47, 0x65, - 0x74, 0x47, 0x43, 0x12, 0x0d, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0f, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x43, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x43, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, - 0x11, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x12, 0x19, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x30, 0x01, 0x12, 0x31, 0x0a, 0x14, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x10, 0x54, 0x69, + 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x75, 0x6e, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x46, 0x72, 0x6f, + 0x6d, 0x22, 0x65, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x54, 0x69, 0x70, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x75, + 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x74, + 0x6f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x4d, 0x61, 0x74, 0x6f, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x2a, 0x3b, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x53, 0x53, 0x41, + 0x47, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, + 0x5f, 0x4d, 0x45, 0x10, 0x01, 0x32, 0x7d, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0f, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, + 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x17, 0x2e, 0x4b, 0x65, 0x65, 0x70, 0x61, + 0x6c, 0x69, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0f, 0x2e, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x30, 0x01, 0x32, 0xb2, 0x05, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x2e, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x0f, + 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x1d, 0x0a, 0x02, 0x50, 0x4d, 0x12, 0x0a, 0x2e, 0x50, 0x4d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0b, 0x2e, 0x50, 0x4d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, + 0x0a, 0x08, 0x50, 0x4d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x10, 0x2e, 0x50, 0x4d, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x4d, 0x30, 0x01, 0x12, 0x2a, 0x0a, 0x0d, 0x41, + 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x4d, 0x12, 0x0b, 0x2e, 0x41, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x03, 0x47, 0x43, 0x4d, 0x12, 0x0b, + 0x2e, 0x47, 0x43, 0x4d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x47, 0x43, + 0x4d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x47, 0x43, 0x4d, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x11, 0x2e, 0x47, 0x43, 0x4d, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x47, 0x43, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x41, + 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x4d, 0x12, 0x0b, 0x2e, + 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x4d, 0x65, 0x64, 0x69, + 0x61, 0x74, 0x65, 0x4b, 0x58, 0x12, 0x11, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x4b, + 0x58, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, + 0x74, 0x65, 0x4b, 0x58, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, + 0x4b, 0x58, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x10, 0x2e, 0x4b, 0x58, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x4b, 0x58, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x41, 0x63, + 0x6b, 0x4b, 0x58, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x0b, 0x2e, 0x41, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x41, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x14, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x15, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x64, 0x46, + 0x69, 0x6c, 0x65, 0x12, 0x10, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, + 0x4e, 0x69, 0x63, 0x6b, 0x12, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x69, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x69, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc8, 0x05, 0x0a, 0x09, 0x47, 0x43, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x54, 0x6f, 0x47, 0x43, 0x12, 0x12, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x6f, + 0x47, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x54, 0x6f, 0x47, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x12, 0x16, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x4b, 0x69, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, 0x47, 0x43, 0x12, + 0x12, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, 0x47, 0x43, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x4b, 0x69, 0x63, 0x6b, 0x46, 0x72, 0x6f, 0x6d, 0x47, 0x43, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x47, + 0x43, 0x12, 0x0d, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x43, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x43, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, + 0x12, 0x19, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x30, 0x01, + 0x12, 0x31, 0x0a, 0x14, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x47, + 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x18, 0x2e, 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x2e, 0x0a, 0x11, 0x41, 0x63, 0x6b, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x0b, - 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x4a, 0x6f, 0x69, - 0x6e, 0x65, 0x64, 0x47, 0x43, 0x73, 0x12, 0x11, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, - 0x43, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, - 0x65, 0x64, 0x47, 0x43, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x0c, 0x41, - 0x63, 0x6b, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, 0x43, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x84, 0x03, 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x74, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4d, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, - 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x33, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, - 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x6f, - 0x73, 0x74, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x19, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x6f, 0x73, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x15, 0x41, 0x63, 0x6b, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa5, 0x01, - 0x0a, 0x0f, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x54, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x54, - 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, - 0x54, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x37, 0x0a, 0x0b, 0x54, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x13, - 0x2e, 0x54, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x54, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x41, 0x63, 0x6b, 0x54, - 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb3, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1e, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x4a, 0x0a, 0x0e, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x17, 0x2e, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x46, 0x75, 0x6c, - 0x66, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x9f, 0x01, 0x0a, 0x0e, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, - 0x0a, 0x18, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e, 0x44, 0x6f, 0x77, + 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x12, 0x16, 0x2e, 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x41, + 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x47, 0x43, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x12, 0x18, 0x2e, 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x47, 0x43, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x2e, 0x0a, 0x11, 0x41, 0x63, 0x6b, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x0b, 0x2e, 0x41, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x4a, 0x6f, 0x69, 0x6e, 0x65, + 0x64, 0x47, 0x43, 0x73, 0x12, 0x11, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, 0x43, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, + 0x47, 0x43, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x0c, 0x41, 0x63, 0x6b, + 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x47, 0x43, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x84, 0x03, 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, + 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, + 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x50, + 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1a, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x54, 0x6f, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, + 0x50, 0x6f, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, + 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x13, 0x2e, 0x50, + 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0d, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x74, + 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x50, 0x6f, 0x73, 0x74, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x45, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x19, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x13, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x15, 0x41, 0x63, 0x6b, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, + 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x82, 0x02, 0x0a, 0x0f, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x2c, 0x0a, 0x07, 0x54, 0x69, 0x70, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x54, 0x69, 0x70, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x54, 0x69, + 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x0b, 0x54, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x13, 0x2e, 0x54, + 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x11, 0x2e, 0x54, 0x69, 0x70, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x41, 0x63, 0x6b, 0x54, 0x69, 0x70, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x09, 0x54, 0x69, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x12, 0x11, 0x2e, 0x54, 0x69, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x54, 0x69, + 0x70, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x0e, 0x41, 0x63, 0x6b, 0x54, 0x69, 0x70, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb3, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x0e, 0x46, 0x75, + 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x2e, 0x46, + 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x9f, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x18, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x14, 0x41, 0x63, - 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x12, 0x0b, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x0c, 0x2e, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x34, 0x5a, - 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x7a, 0x65, 0x72, 0x6f, 0x2f, 0x62, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x72, 0x65, - 0x6c, 0x61, 0x79, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, + 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x14, 0x41, 0x63, 0x6b, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x0b, 0x2e, + 0x41, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x41, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x7a, 0x65, + 0x72, 0x6f, 0x2f, 0x62, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5626,7 +5760,7 @@ func file_clientrpc_proto_rawDescGZIP() []byte { } var file_clientrpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_clientrpc_proto_msgTypes = make([]protoimpl.MessageInfo, 84) +var file_clientrpc_proto_msgTypes = make([]protoimpl.MessageInfo, 86) var file_clientrpc_proto_goTypes = []interface{}{ (MessageMode)(0), // 0: MessageMode (*VersionRequest)(nil), // 1: VersionRequest @@ -5707,12 +5841,14 @@ var file_clientrpc_proto_goTypes = []interface{}{ (*RMFetchResourceReply)(nil), // 76: RMFetchResourceReply (*FileManifest)(nil), // 77: FileManifest (*FileMetadata)(nil), // 78: FileMetadata - (*ListGCsResponse_GCInfo)(nil), // 79: ListGCsResponse.GCInfo - nil, // 80: PostMetadata.AttributesEntry - nil, // 81: PostMetadataStatus.AttributesEntry - nil, // 82: RMFetchResource.MetaEntry - nil, // 83: RMFetchResourceReply.MetaEntry - nil, // 84: FileMetadata.AttributesEntry + (*TipStreamRequest)(nil), // 79: TipStreamRequest + (*ReceivedTip)(nil), // 80: ReceivedTip + (*ListGCsResponse_GCInfo)(nil), // 81: ListGCsResponse.GCInfo + nil, // 82: PostMetadata.AttributesEntry + nil, // 83: PostMetadataStatus.AttributesEntry + nil, // 84: RMFetchResource.MetaEntry + nil, // 85: RMFetchResourceReply.MetaEntry + nil, // 86: FileMetadata.AttributesEntry } var file_clientrpc_proto_depIdxs = []int32{ 65, // 0: PMRequest.msg:type_name -> RMPrivateMessage @@ -5724,7 +5860,7 @@ var file_clientrpc_proto_depIdxs = []int32{ 72, // 6: WriteNewInviteResponse.invite:type_name -> OOBPublicIdentityInvite 72, // 7: AcceptInviteResponse.invite:type_name -> OOBPublicIdentityInvite 74, // 8: GetGCResponse.gc:type_name -> RMGroupList - 79, // 9: ListGCsResponse.gcs:type_name -> ListGCsResponse.GCInfo + 81, // 9: ListGCsResponse.gcs:type_name -> ListGCsResponse.GCInfo 73, // 10: ReceivedGCInvite.invite:type_name -> RMGroupInvite 50, // 11: GCMembersAddedEvent.users:type_name -> UserAndNick 50, // 12: GCMembersRemovedEvent.users:type_name -> UserAndNick @@ -5734,14 +5870,14 @@ var file_clientrpc_proto_depIdxs = []int32{ 78, // 16: DownloadCompletedResponse.file_metadata:type_name -> FileMetadata 0, // 17: RMPrivateMessage.mode:type_name -> MessageMode 0, // 18: RMGroupMessage.mode:type_name -> MessageMode - 80, // 19: PostMetadata.attributes:type_name -> PostMetadata.AttributesEntry - 81, // 20: PostMetadataStatus.attributes:type_name -> PostMetadataStatus.AttributesEntry + 82, // 19: PostMetadata.attributes:type_name -> PostMetadata.AttributesEntry + 83, // 20: PostMetadataStatus.attributes:type_name -> PostMetadataStatus.AttributesEntry 70, // 21: OOBPublicIdentityInvite.public:type_name -> PublicIdentity 71, // 22: OOBPublicIdentityInvite.funds:type_name -> InviteFunds - 82, // 23: RMFetchResource.meta:type_name -> RMFetchResource.MetaEntry - 83, // 24: RMFetchResourceReply.meta:type_name -> RMFetchResourceReply.MetaEntry + 84, // 23: RMFetchResource.meta:type_name -> RMFetchResource.MetaEntry + 85, // 24: RMFetchResourceReply.meta:type_name -> RMFetchResourceReply.MetaEntry 77, // 25: FileMetadata.manifest:type_name -> FileManifest - 84, // 26: FileMetadata.attributes:type_name -> FileMetadata.AttributesEntry + 86, // 26: FileMetadata.attributes:type_name -> FileMetadata.AttributesEntry 1, // 27: VersionService.Version:input_type -> VersionRequest 3, // 28: VersionService.KeepaliveStream:input_type -> KeepaliveStreamRequest 69, // 29: ChatService.UserPublicIdentity:input_type -> PublicIdentityReq @@ -5780,54 +5916,58 @@ var file_clientrpc_proto_depIdxs = []int32{ 24, // 62: PaymentsService.TipUser:input_type -> TipUserRequest 57, // 63: PaymentsService.TipProgress:input_type -> TipProgressRequest 5, // 64: PaymentsService.AckTipProgress:input_type -> AckRequest - 59, // 65: ResourcesService.RequestsStream:input_type -> ResourceRequestsStreamRequest - 61, // 66: ResourcesService.FulfillRequest:input_type -> FulfillResourceRequest - 63, // 67: ContentService.DownloadsCompletedStream:input_type -> DownloadsCompletedStreamRequest - 5, // 68: ContentService.AckDownloadCompleted:input_type -> AckRequest - 2, // 69: VersionService.Version:output_type -> VersionResponse - 4, // 70: VersionService.KeepaliveStream:output_type -> KeepaliveEvent - 70, // 71: ChatService.UserPublicIdentity:output_type -> PublicIdentity - 8, // 72: ChatService.PM:output_type -> PMResponse - 10, // 73: ChatService.PMStream:output_type -> ReceivedPM - 6, // 74: ChatService.AckReceivedPM:output_type -> AckResponse - 12, // 75: ChatService.GCM:output_type -> GCMResponse - 14, // 76: ChatService.GCMStream:output_type -> GCReceivedMsg - 6, // 77: ChatService.AckReceivedGCM:output_type -> AckResponse - 27, // 78: ChatService.MediateKX:output_type -> MediateKXResponse - 29, // 79: ChatService.KXStream:output_type -> KXCompleted - 6, // 80: ChatService.AckKXCompleted:output_type -> AckResponse - 31, // 81: ChatService.WriteNewInvite:output_type -> WriteNewInviteResponse - 33, // 82: ChatService.AcceptInvite:output_type -> AcceptInviteResponse - 39, // 83: ChatService.SendFile:output_type -> SendFileResponse - 41, // 84: ChatService.UserNick:output_type -> UserNickResponse - 35, // 85: GCService.InviteToGC:output_type -> InviteToGCResponse - 37, // 86: GCService.AcceptGCInvite:output_type -> AcceptGCInviteResponse - 43, // 87: GCService.KickFromGC:output_type -> KickFromGCResponse - 45, // 88: GCService.GetGC:output_type -> GetGCResponse - 47, // 89: GCService.List:output_type -> ListGCsResponse - 49, // 90: GCService.ReceivedGCInvites:output_type -> ReceivedGCInvite - 6, // 91: GCService.AckReceivedGCInvites:output_type -> AckResponse - 52, // 92: GCService.MembersAdded:output_type -> GCMembersAddedEvent - 6, // 93: GCService.AckMembersAdded:output_type -> AckResponse - 54, // 94: GCService.MembersRemoved:output_type -> GCMembersRemovedEvent - 6, // 95: GCService.AckMembersRemoved:output_type -> AckResponse - 56, // 96: GCService.JoinedGCs:output_type -> JoinedGCEvent - 6, // 97: GCService.AckJoinedGCs:output_type -> AckResponse - 16, // 98: PostsService.SubscribeToPosts:output_type -> SubscribeToPostsResponse - 18, // 99: PostsService.UnsubscribeToPosts:output_type -> UnsubscribeToPostsResponse - 21, // 100: PostsService.PostsStream:output_type -> ReceivedPost - 6, // 101: PostsService.AckReceivedPost:output_type -> AckResponse - 23, // 102: PostsService.PostsStatusStream:output_type -> ReceivedPostStatus - 6, // 103: PostsService.AckReceivedPostStatus:output_type -> AckResponse - 25, // 104: PaymentsService.TipUser:output_type -> TipUserResponse - 58, // 105: PaymentsService.TipProgress:output_type -> TipProgressEvent - 6, // 106: PaymentsService.AckTipProgress:output_type -> AckResponse - 60, // 107: ResourcesService.RequestsStream:output_type -> ResourceRequestsStreamResponse - 62, // 108: ResourcesService.FulfillRequest:output_type -> FulfillResourceRequestResponse - 64, // 109: ContentService.DownloadsCompletedStream:output_type -> DownloadCompletedResponse - 6, // 110: ContentService.AckDownloadCompleted:output_type -> AckResponse - 69, // [69:111] is the sub-list for method output_type - 27, // [27:69] is the sub-list for method input_type + 79, // 65: PaymentsService.TipStream:input_type -> TipStreamRequest + 5, // 66: PaymentsService.AckTipReceived:input_type -> AckRequest + 59, // 67: ResourcesService.RequestsStream:input_type -> ResourceRequestsStreamRequest + 61, // 68: ResourcesService.FulfillRequest:input_type -> FulfillResourceRequest + 63, // 69: ContentService.DownloadsCompletedStream:input_type -> DownloadsCompletedStreamRequest + 5, // 70: ContentService.AckDownloadCompleted:input_type -> AckRequest + 2, // 71: VersionService.Version:output_type -> VersionResponse + 4, // 72: VersionService.KeepaliveStream:output_type -> KeepaliveEvent + 70, // 73: ChatService.UserPublicIdentity:output_type -> PublicIdentity + 8, // 74: ChatService.PM:output_type -> PMResponse + 10, // 75: ChatService.PMStream:output_type -> ReceivedPM + 6, // 76: ChatService.AckReceivedPM:output_type -> AckResponse + 12, // 77: ChatService.GCM:output_type -> GCMResponse + 14, // 78: ChatService.GCMStream:output_type -> GCReceivedMsg + 6, // 79: ChatService.AckReceivedGCM:output_type -> AckResponse + 27, // 80: ChatService.MediateKX:output_type -> MediateKXResponse + 29, // 81: ChatService.KXStream:output_type -> KXCompleted + 6, // 82: ChatService.AckKXCompleted:output_type -> AckResponse + 31, // 83: ChatService.WriteNewInvite:output_type -> WriteNewInviteResponse + 33, // 84: ChatService.AcceptInvite:output_type -> AcceptInviteResponse + 39, // 85: ChatService.SendFile:output_type -> SendFileResponse + 41, // 86: ChatService.UserNick:output_type -> UserNickResponse + 35, // 87: GCService.InviteToGC:output_type -> InviteToGCResponse + 37, // 88: GCService.AcceptGCInvite:output_type -> AcceptGCInviteResponse + 43, // 89: GCService.KickFromGC:output_type -> KickFromGCResponse + 45, // 90: GCService.GetGC:output_type -> GetGCResponse + 47, // 91: GCService.List:output_type -> ListGCsResponse + 49, // 92: GCService.ReceivedGCInvites:output_type -> ReceivedGCInvite + 6, // 93: GCService.AckReceivedGCInvites:output_type -> AckResponse + 52, // 94: GCService.MembersAdded:output_type -> GCMembersAddedEvent + 6, // 95: GCService.AckMembersAdded:output_type -> AckResponse + 54, // 96: GCService.MembersRemoved:output_type -> GCMembersRemovedEvent + 6, // 97: GCService.AckMembersRemoved:output_type -> AckResponse + 56, // 98: GCService.JoinedGCs:output_type -> JoinedGCEvent + 6, // 99: GCService.AckJoinedGCs:output_type -> AckResponse + 16, // 100: PostsService.SubscribeToPosts:output_type -> SubscribeToPostsResponse + 18, // 101: PostsService.UnsubscribeToPosts:output_type -> UnsubscribeToPostsResponse + 21, // 102: PostsService.PostsStream:output_type -> ReceivedPost + 6, // 103: PostsService.AckReceivedPost:output_type -> AckResponse + 23, // 104: PostsService.PostsStatusStream:output_type -> ReceivedPostStatus + 6, // 105: PostsService.AckReceivedPostStatus:output_type -> AckResponse + 25, // 106: PaymentsService.TipUser:output_type -> TipUserResponse + 58, // 107: PaymentsService.TipProgress:output_type -> TipProgressEvent + 6, // 108: PaymentsService.AckTipProgress:output_type -> AckResponse + 80, // 109: PaymentsService.TipStream:output_type -> ReceivedTip + 6, // 110: PaymentsService.AckTipReceived:output_type -> AckResponse + 60, // 111: ResourcesService.RequestsStream:output_type -> ResourceRequestsStreamResponse + 62, // 112: ResourcesService.FulfillRequest:output_type -> FulfillResourceRequestResponse + 64, // 113: ContentService.DownloadsCompletedStream:output_type -> DownloadCompletedResponse + 6, // 114: ContentService.AckDownloadCompleted:output_type -> AckResponse + 71, // [71:115] is the sub-list for method output_type + 27, // [27:71] is the sub-list for method input_type 27, // [27:27] is the sub-list for extension type_name 27, // [27:27] is the sub-list for extension extendee 0, // [0:27] is the sub-list for field type_name @@ -6776,6 +6916,30 @@ func file_clientrpc_proto_init() { } } file_clientrpc_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TipStreamRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clientrpc_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReceivedTip); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_clientrpc_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListGCsResponse_GCInfo); i { case 0: return &v.state @@ -6794,7 +6958,7 @@ func file_clientrpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_clientrpc_proto_rawDesc, NumEnums: 1, - NumMessages: 84, + NumMessages: 86, NumExtensions: 0, NumServices: 7, }, diff --git a/clientrpc/types/clientrpc_svcintf.pb.go b/clientrpc/types/clientrpc_svcintf.pb.go index e336dca4..03f36498 100644 --- a/clientrpc/types/clientrpc_svcintf.pb.go +++ b/clientrpc/types/clientrpc_svcintf.pb.go @@ -1136,6 +1136,11 @@ type PaymentsServiceClient interface { // AckTipProgress acknowledges events received up to a given // sequence_id have been processed. AckTipProgress(ctx context.Context, in *AckRequest, out *AckResponse) error + // TipStream returns a stream that gets tips received by the client. + TipStream(ctx context.Context, in *TipStreamRequest) (PaymentsService_TipStreamClient, error) + // AckTipReceived acknowledges events received up to a given + // sequence_id have been processed. + AckTipReceived(ctx context.Context, in *AckRequest, out *AckResponse) error } type client_PaymentsService struct { @@ -1166,6 +1171,24 @@ func (c *client_PaymentsService) AckTipProgress(ctx context.Context, in *AckRequ return c.defn.Methods[method].ClientHandler(c.c, ctx, in, out) } +type PaymentsService_TipStreamClient interface { + Recv(*ReceivedTip) error +} + +func (c *client_PaymentsService) TipStream(ctx context.Context, in *TipStreamRequest) (PaymentsService_TipStreamClient, error) { + const method = "TipStream" + inner, err := c.defn.Methods[method].ClientStreamHandler(c.c, ctx, in) + if err != nil { + return nil, err + } + return streamerImpl[*ReceivedTip]{c: inner}, nil +} + +func (c *client_PaymentsService) AckTipReceived(ctx context.Context, in *AckRequest, out *AckResponse) error { + const method = "AckTipReceived" + return c.defn.Methods[method].ClientHandler(c.c, ctx, in, out) +} + func NewPaymentsServiceClient(c ClientConn) PaymentsServiceClient { return &client_PaymentsService{c: c, defn: PaymentsServiceDefn()} } @@ -1182,12 +1205,21 @@ type PaymentsServiceServer interface { // AckTipProgress acknowledges events received up to a given // sequence_id have been processed. AckTipProgress(context.Context, *AckRequest, *AckResponse) error + // TipStream returns a stream that gets tips received by the client. + TipStream(context.Context, *TipStreamRequest, PaymentsService_TipStreamServer) error + // AckTipReceived acknowledges events received up to a given + // sequence_id have been processed. + AckTipReceived(context.Context, *AckRequest, *AckResponse) error } type PaymentsService_TipProgressServer interface { Send(m *TipProgressEvent) error } +type PaymentsService_TipStreamServer interface { + Send(m *ReceivedTip) error +} + func PaymentsServiceDefn() ServiceDefn { return ServiceDefn{ Name: "PaymentsService", @@ -1237,6 +1269,36 @@ func PaymentsServiceDefn() ServiceDefn { return conn.Request(ctx, method, request, response) }, }, + "TipStream": { + IsStreaming: true, + NewRequest: func() proto.Message { return new(TipStreamRequest) }, + NewResponse: func() proto.Message { return new(ReceivedTip) }, + RequestDefn: func() protoreflect.MessageDescriptor { return new(TipStreamRequest).ProtoReflect().Descriptor() }, + ResponseDefn: func() protoreflect.MessageDescriptor { return new(ReceivedTip).ProtoReflect().Descriptor() }, + Help: "TipStream returns a stream that gets tips received by the client.", + ServerStreamHandler: func(x interface{}, ctx context.Context, request proto.Message, stream ServerStream) error { + return x.(PaymentsServiceServer).TipStream(ctx, request.(*TipStreamRequest), streamerImpl[*ReceivedTip]{s: stream}) + }, + ClientStreamHandler: func(conn ClientConn, ctx context.Context, request proto.Message) (ClientStream, error) { + method := "PaymentsService.TipStream" + return conn.Stream(ctx, method, request) + }, + }, + "AckTipReceived": { + IsStreaming: false, + NewRequest: func() proto.Message { return new(AckRequest) }, + NewResponse: func() proto.Message { return new(AckResponse) }, + RequestDefn: func() protoreflect.MessageDescriptor { return new(AckRequest).ProtoReflect().Descriptor() }, + ResponseDefn: func() protoreflect.MessageDescriptor { return new(AckResponse).ProtoReflect().Descriptor() }, + Help: "AckTipReceived acknowledges events received up to a given sequence_id have been processed.", + ServerHandler: func(x interface{}, ctx context.Context, request, response proto.Message) error { + return x.(PaymentsServiceServer).AckTipReceived(ctx, request.(*AckRequest), response.(*AckResponse)) + }, + ClientHandler: func(conn ClientConn, ctx context.Context, request, response proto.Message) error { + method := "PaymentsService.AckTipReceived" + return conn.Request(ctx, method, request, response) + }, + }, }, } } @@ -1851,4 +1913,14 @@ var help_messages = map[string]map[string]string{ "signature": "signature of the file by the host.", "attributes": "attributes of the file.", }, + "TipStreamRequest": { + "@": "TipStreamRequest is the request for a new tip reception stream.", + "unacked_from": "unacked_from specifies to the server the sequence_id of the last processed PM. PMs received by the server that have a higher sequence_id will be streamed back to the client.", + }, + "ReceivedTip": { + "@": "ReceivedPM is a private message received by the client.", + "uid": "uid is the source user ID in raw format.", + "amount_matoms": "amount_matoms is the amount being tipped in milli-atoms.", + "sequence_id": "sequence_id is an opaque sequential ID.", + }, }