From 23c1ea6c314b0a16b435431446c374682618eb3a Mon Sep 17 00:00:00 2001 From: Ori Newman Date: Tue, 10 Nov 2020 06:14:51 -0800 Subject: [PATCH] [NOD-1525] Implement headers first ibd (#1017) * [NOD-1525] Implement headers first IBD * [NOD-1525] Fix proto translators * [NOD-1525] Register missing flows * [NOD-1525] Rename SyncStateNormal->SyncStateRelay, simplifiy IBD peer selection code and get rid of panic in FinishIBD * [NOD-1525] Remove redundant methods from interface --- app/appmessage/domainconverters.go | 10 +- app/appmessage/message.go | 59 +- app/appmessage/p2p_ibdrootnotfound.go | 22 + app/appmessage/p2p_msgblock.go | 4 +- app/appmessage/p2p_msgblock_test.go | 2 +- ...p_blockheader.go => p2p_msgblockheader.go} | 24 +- ...der_test.go => p2p_msgblockheader_test.go} | 12 +- app/appmessage/p2p_msgdoneheaders.go | 22 + app/appmessage/p2p_msgdoneibdblocks.go | 22 - .../p2p_msgibdrootutxosetandblock.go | 23 + app/appmessage/p2p_msgrequestheaders.go | 34 + ..._test.go => p2p_msgrequestheaders_test.go} | 8 +- app/appmessage/p2p_msgrequestibdblocks.go | 24 +- .../p2p_msgrequestibdrootutxosetandblock.go | 26 + app/appmessage/p2p_msgrequestnextheaders.go | 22 + app/appmessage/p2p_msgrequestnextibdblocks.go | 22 - app/appmessage/p2p_msgrequestrelayblocks.go | 4 +- app/protocol/flowcontext/ibd.go | 42 +- .../flows/blockrelay/handle_relay_invs.go | 2 +- .../flows/ibd/handle_ibd_block_requests.go | 49 + ...bd_blocks.go => handle_request_headers.go} | 52 +- ...dle_request_ibd_root_utxo_set_and_block.go | 65 + app/protocol/flows/ibd/ibd.go | 183 +- app/protocol/protocol.go | 30 +- app/protocol/protocolerrors/protocolerrors.go | 16 +- domain/consensus/consensus.go | 21 +- .../consensus/model/externalapi/consensus.go | 2 +- domain/consensus/model/externalapi/sync.go | 10 +- .../blockprocessor/validateandinsertblock.go | 6 +- .../calculate_past_utxo.go | 3 + .../processes/reachabilitymanager/tree.go | 3 + .../processes/syncmanager/syncinfo.go | 2 +- domain/consensus/ruleerrors/rule_error.go | 2 + .../grpcserver/protowire/messages.pb.go | 3420 +++++++++-------- .../grpcserver/protowire/messages.proto | 51 +- .../server/grpcserver/protowire/p2p_block.go | 48 +- .../protowire/p2p_done_ibd_blocks.go | 6 +- .../server/grpcserver/protowire/p2p_header.go | 73 + .../grpcserver/protowire/p2p_ibd_block.go | 2 +- .../protowire/p2p_ibd_root_not_found.go | 11 + .../p2p_ibd_root_utxo_set_and_block.go | 19 + .../protowire/p2p_request_headers.go | 28 + .../protowire/p2p_request_ibd_blocks.go | 35 +- ...p2p_request_ibd_root_utxo_set_and_block.go | 18 + .../protowire/p2p_request_next_headers.go | 11 + .../protowire/p2p_request_next_ibd_blocks.go | 11 - .../protowire/p2p_request_relay_blocks.go | 8 +- .../protowire/rpc_get_block_template.go | 2 +- .../protowire/rpc_notify_block_added.go | 2 +- .../grpcserver/protowire/rpc_submit_block.go | 2 +- .../server/grpcserver/protowire/wire.go | 49 +- 51 files changed, 2822 insertions(+), 1802 deletions(-) create mode 100644 app/appmessage/p2p_ibdrootnotfound.go rename app/appmessage/{p2p_blockheader.go => p2p_msgblockheader.go} (84%) rename app/appmessage/{p2p_blockheader_test.go => p2p_msgblockheader_test.go} (88%) create mode 100644 app/appmessage/p2p_msgdoneheaders.go delete mode 100644 app/appmessage/p2p_msgdoneibdblocks.go create mode 100644 app/appmessage/p2p_msgibdrootutxosetandblock.go create mode 100644 app/appmessage/p2p_msgrequestheaders.go rename app/appmessage/{p2p_msgrequestibdblocks_test.go => p2p_msgrequestheaders_test.go} (78%) create mode 100644 app/appmessage/p2p_msgrequestibdrootutxosetandblock.go create mode 100644 app/appmessage/p2p_msgrequestnextheaders.go delete mode 100644 app/appmessage/p2p_msgrequestnextibdblocks.go create mode 100644 app/protocol/flows/ibd/handle_ibd_block_requests.go rename app/protocol/flows/ibd/{handle_request_ibd_blocks.go => handle_request_headers.go} (53%) create mode 100644 app/protocol/flows/ibd/handle_request_ibd_root_utxo_set_and_block.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_header.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_not_found.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_utxo_set_and_block.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_headers.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_root_utxo_set_and_block.go create mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_headers.go delete mode 100644 infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_ibd_blocks.go diff --git a/app/appmessage/domainconverters.go b/app/appmessage/domainconverters.go index f49ae453c..6d91961dc 100644 --- a/app/appmessage/domainconverters.go +++ b/app/appmessage/domainconverters.go @@ -17,9 +17,9 @@ func DomainBlockToMsgBlock(domainBlock *externalapi.DomainBlock) *MsgBlock { } } -// DomainBlockHeaderToBlockHeader converts an externalapi.DomainBlockHeader to BlockHeader -func DomainBlockHeaderToBlockHeader(domainBlockHeader *externalapi.DomainBlockHeader) *BlockHeader { - return &BlockHeader{ +// DomainBlockHeaderToBlockHeader converts an externalapi.DomainBlockHeader to MsgBlockHeader +func DomainBlockHeaderToBlockHeader(domainBlockHeader *externalapi.DomainBlockHeader) *MsgBlockHeader { + return &MsgBlockHeader{ Version: domainBlockHeader.Version, ParentHashes: domainBlockHeader.ParentHashes, HashMerkleRoot: &domainBlockHeader.HashMerkleRoot, @@ -44,8 +44,8 @@ func MsgBlockToDomainBlock(msgBlock *MsgBlock) *externalapi.DomainBlock { } } -// BlockHeaderToDomainBlockHeader converts a BlockHeader to externalapi.DomainBlockHeader -func BlockHeaderToDomainBlockHeader(blockHeader *BlockHeader) *externalapi.DomainBlockHeader { +// BlockHeaderToDomainBlockHeader converts a MsgBlockHeader to externalapi.DomainBlockHeader +func BlockHeaderToDomainBlockHeader(blockHeader *MsgBlockHeader) *externalapi.DomainBlockHeader { return &externalapi.DomainBlockHeader{ Version: blockHeader.Version, ParentHashes: blockHeader.ParentHashes, diff --git a/app/appmessage/message.go b/app/appmessage/message.go index a9eb54902..9108242f0 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -34,7 +34,7 @@ const ( CmdVerAck CmdRequestAddresses CmdAddresses - CmdRequestIBDBlocks + CmdRequestHeaders CmdBlock CmdTx CmdPing @@ -48,10 +48,15 @@ const ( CmdInvTransaction CmdRequestTransactions CmdIBDBlock - CmdRequestNextIBDBlocks - CmdDoneIBDBlocks + CmdDoneHeaders CmdTransactionNotFound CmdReject + CmdHeader + CmdRequestNextHeaders + CmdRequestIBDRootUTXOSetAndBlock + CmdIBDRootUTXOSetAndBlock + CmdRequestIBDBlocks + CmdIBDRootNotFound // rpc CmdGetCurrentNetworkRequestMessage @@ -107,28 +112,32 @@ const ( // ProtocolMessageCommandToString maps all MessageCommands to their string representation var ProtocolMessageCommandToString = map[MessageCommand]string{ - CmdVersion: "Version", - CmdVerAck: "VerAck", - CmdRequestAddresses: "RequestAddresses", - CmdAddresses: "Addresses", - CmdRequestIBDBlocks: "RequestBlocks", - CmdBlock: "Block", - CmdTx: "Tx", - CmdPing: "Ping", - CmdPong: "Pong", - CmdRequestBlockLocator: "RequestBlockLocator", - CmdBlockLocator: "BlockLocator", - CmdSelectedTip: "SelectedTip", - CmdRequestSelectedTip: "RequestSelectedTip", - CmdInvRelayBlock: "InvRelayBlock", - CmdRequestRelayBlocks: "RequestRelayBlocks", - CmdInvTransaction: "InvTransaction", - CmdRequestTransactions: "RequestTransactions", - CmdIBDBlock: "IBDBlock", - CmdRequestNextIBDBlocks: "RequestNextIBDBlocks", - CmdDoneIBDBlocks: "DoneIBDBlocks", - CmdTransactionNotFound: "TransactionNotFound", - CmdReject: "Reject", + CmdVersion: "Version", + CmdVerAck: "VerAck", + CmdRequestAddresses: "RequestAddresses", + CmdAddresses: "Addresses", + CmdRequestHeaders: "RequestBlocks", + CmdBlock: "Block", + CmdTx: "Tx", + CmdPing: "Ping", + CmdPong: "Pong", + CmdRequestBlockLocator: "RequestBlockLocator", + CmdBlockLocator: "BlockLocator", + CmdSelectedTip: "SelectedTip", + CmdRequestSelectedTip: "RequestSelectedTip", + CmdInvRelayBlock: "InvRelayBlock", + CmdRequestRelayBlocks: "RequestRelayBlocks", + CmdInvTransaction: "InvTransaction", + CmdRequestTransactions: "RequestTransactions", + CmdIBDBlock: "IBDBlock", + CmdDoneHeaders: "DoneIBDBlocks", + CmdTransactionNotFound: "TransactionNotFound", + CmdReject: "Reject", + CmdHeader: "Header", + CmdRequestNextHeaders: "RequestNextHeaders", + CmdRequestIBDRootUTXOSetAndBlock: "RequestPruningUTXOSetAndBlock", + CmdIBDRootUTXOSetAndBlock: "IBDRootUTXOSetAndBlock", + CmdIBDRootNotFound: "IBDRootNotFound", } // RPCMessageCommandToString maps all MessageCommands to their string representation diff --git a/app/appmessage/p2p_ibdrootnotfound.go b/app/appmessage/p2p_ibdrootnotfound.go new file mode 100644 index 000000000..d667a3de1 --- /dev/null +++ b/app/appmessage/p2p_ibdrootnotfound.go @@ -0,0 +1,22 @@ +package appmessage + +// MsgIBDRootNotFound implements the Message interface and represents a kaspa +// IBDRootNotFound message. It is used to notify the IBD root that was requested +// by other peer was not found. +// +// This message has no payload. +type MsgIBDRootNotFound struct { + baseMessage +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgIBDRootNotFound) Command() MessageCommand { + return CmdDoneHeaders +} + +// NewMsgIBDRootNotFound returns a new kaspa IBDRootNotFound message that conforms to the +// Message interface. +func NewMsgIBDRootNotFound() *MsgDoneHeaders { + return &MsgDoneHeaders{} +} diff --git a/app/appmessage/p2p_msgblock.go b/app/appmessage/p2p_msgblock.go index 8df74735f..5d8d3de53 100644 --- a/app/appmessage/p2p_msgblock.go +++ b/app/appmessage/p2p_msgblock.go @@ -40,7 +40,7 @@ type TxLoc struct { // response to a getdata message (MsgGetData) for a given block hash. type MsgBlock struct { baseMessage - Header BlockHeader + Header MsgBlockHeader Transactions []*MsgTx } @@ -79,7 +79,7 @@ func (msg *MsgBlock) ConvertToPartial(subnetworkID *externalapi.DomainSubnetwork // NewMsgBlock returns a new kaspa block message that conforms to the // Message interface. See MsgBlock for details. -func NewMsgBlock(blockHeader *BlockHeader) *MsgBlock { +func NewMsgBlock(blockHeader *MsgBlockHeader) *MsgBlock { return &MsgBlock{ Header: *blockHeader, Transactions: make([]*MsgTx, 0, defaultTransactionAlloc), diff --git a/app/appmessage/p2p_msgblock_test.go b/app/appmessage/p2p_msgblock_test.go index 2751c9e60..39d02fca9 100644 --- a/app/appmessage/p2p_msgblock_test.go +++ b/app/appmessage/p2p_msgblock_test.go @@ -129,7 +129,7 @@ func TestConvertToPartial(t *testing.T) { // blockOne is the first block in the mainnet block DAG. var blockOne = MsgBlock{ - Header: BlockHeader{ + Header: MsgBlockHeader{ Version: 1, ParentHashes: []*externalapi.DomainHash{mainnetGenesisHash, simnetGenesisHash}, HashMerkleRoot: mainnetGenesisMerkleRoot, diff --git a/app/appmessage/p2p_blockheader.go b/app/appmessage/p2p_msgblockheader.go similarity index 84% rename from app/appmessage/p2p_blockheader.go rename to app/appmessage/p2p_msgblockheader.go index 44af00df0..203ba7f16 100644 --- a/app/appmessage/p2p_blockheader.go +++ b/app/appmessage/p2p_msgblockheader.go @@ -31,9 +31,11 @@ const MaxNumParentBlocks = 255 // BaseBlockHeaderPayload + up to MaxNumParentBlocks hashes of parent blocks const MaxBlockHeaderPayload = BaseBlockHeaderPayload + (MaxNumParentBlocks * externalapi.DomainHashSize) -// BlockHeader defines information about a block and is used in the kaspa +// MsgBlockHeader defines information about a block and is used in the kaspa // block (MsgBlock) and headers (MsgHeader) messages. -type BlockHeader struct { +type MsgBlockHeader struct { + baseMessage + // Version of the block. This is not the same as the protocol version. Version int32 @@ -61,7 +63,7 @@ type BlockHeader struct { } // NumParentBlocks return the number of entries in ParentHashes -func (h *BlockHeader) NumParentBlocks() byte { +func (h *MsgBlockHeader) NumParentBlocks() byte { numParents := len(h.ParentHashes) if numParents > math.MaxUint8 { panic(errors.Errorf("number of parents is %d, which is more than one byte can fit", numParents)) @@ -70,24 +72,30 @@ func (h *BlockHeader) NumParentBlocks() byte { } // BlockHash computes the block identifier hash for the given block header. -func (h *BlockHeader) BlockHash() *externalapi.DomainHash { +func (h *MsgBlockHeader) BlockHash() *externalapi.DomainHash { return consensusserialization.HeaderHash(BlockHeaderToDomainBlockHeader(h)) } // IsGenesis returns true iff this block is a genesis block -func (h *BlockHeader) IsGenesis() bool { +func (h *MsgBlockHeader) IsGenesis() bool { return h.NumParentBlocks() == 0 } -// NewBlockHeader returns a new BlockHeader using the provided version, previous +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (h *MsgBlockHeader) Command() MessageCommand { + return CmdHeader +} + +// NewBlockHeader returns a new MsgBlockHeader using the provided version, previous // block hash, hash merkle root, accepted ID merkle root, difficulty bits, and nonce used to generate the // block with defaults or calclulated values for the remaining fields. func NewBlockHeader(version int32, parentHashes []*externalapi.DomainHash, hashMerkleRoot *externalapi.DomainHash, - acceptedIDMerkleRoot *externalapi.DomainHash, utxoCommitment *externalapi.DomainHash, bits uint32, nonce uint64) *BlockHeader { + acceptedIDMerkleRoot *externalapi.DomainHash, utxoCommitment *externalapi.DomainHash, bits uint32, nonce uint64) *MsgBlockHeader { // Limit the timestamp to one millisecond precision since the protocol // doesn't support better. - return &BlockHeader{ + return &MsgBlockHeader{ Version: version, ParentHashes: parentHashes, HashMerkleRoot: hashMerkleRoot, diff --git a/app/appmessage/p2p_blockheader_test.go b/app/appmessage/p2p_msgblockheader_test.go similarity index 88% rename from app/appmessage/p2p_blockheader_test.go rename to app/appmessage/p2p_msgblockheader_test.go index 08a17dbc9..ebc4bc973 100644 --- a/app/appmessage/p2p_blockheader_test.go +++ b/app/appmessage/p2p_msgblockheader_test.go @@ -14,7 +14,7 @@ import ( "github.com/kaspanet/kaspad/util/random" ) -// TestBlockHeader tests the BlockHeader API. +// TestBlockHeader tests the MsgBlockHeader API. func TestBlockHeader(t *testing.T) { nonce, err := random.Uint64() if err != nil { @@ -52,7 +52,7 @@ func TestIsGenesis(t *testing.T) { bits := uint32(0x1d00ffff) timestamp := mstime.UnixMilliseconds(0x495fab29000) - baseBlockHdr := &BlockHeader{ + baseBlockHdr := &MsgBlockHeader{ Version: 1, ParentHashes: []*externalapi.DomainHash{mainnetGenesisHash, simnetGenesisHash}, HashMerkleRoot: mainnetGenesisMerkleRoot, @@ -60,7 +60,7 @@ func TestIsGenesis(t *testing.T) { Bits: bits, Nonce: nonce, } - genesisBlockHdr := &BlockHeader{ + genesisBlockHdr := &MsgBlockHeader{ Version: 1, ParentHashes: []*externalapi.DomainHash{}, HashMerkleRoot: mainnetGenesisMerkleRoot, @@ -70,8 +70,8 @@ func TestIsGenesis(t *testing.T) { } tests := []struct { - in *BlockHeader // Block header to encode - isGenesis bool // Expected result for call of .IsGenesis + in *MsgBlockHeader // Block header to encode + isGenesis bool // Expected result for call of .IsGenesis }{ {genesisBlockHdr, true}, {baseBlockHdr, false}, @@ -81,7 +81,7 @@ func TestIsGenesis(t *testing.T) { for i, test := range tests { isGenesis := test.in.IsGenesis() if isGenesis != test.isGenesis { - t.Errorf("BlockHeader.IsGenesis: #%d got: %t, want: %t", + t.Errorf("MsgBlockHeader.IsGenesis: #%d got: %t, want: %t", i, isGenesis, test.isGenesis) } } diff --git a/app/appmessage/p2p_msgdoneheaders.go b/app/appmessage/p2p_msgdoneheaders.go new file mode 100644 index 000000000..d55733264 --- /dev/null +++ b/app/appmessage/p2p_msgdoneheaders.go @@ -0,0 +1,22 @@ +package appmessage + +// MsgDoneHeaders implements the Message interface and represents a kaspa +// DoneHeaders message. It is used to notify the IBD syncing peer that the +// syncer sent all the requested headers. +// +// This message has no payload. +type MsgDoneHeaders struct { + baseMessage +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgDoneHeaders) Command() MessageCommand { + return CmdDoneHeaders +} + +// NewMsgDoneHeaders returns a new kaspa DoneIBDBlocks message that conforms to the +// Message interface. +func NewMsgDoneHeaders() *MsgDoneHeaders { + return &MsgDoneHeaders{} +} diff --git a/app/appmessage/p2p_msgdoneibdblocks.go b/app/appmessage/p2p_msgdoneibdblocks.go deleted file mode 100644 index e8d0983f7..000000000 --- a/app/appmessage/p2p_msgdoneibdblocks.go +++ /dev/null @@ -1,22 +0,0 @@ -package appmessage - -// MsgDoneIBDBlocks implements the Message interface and represents a kaspa -// DoneIBDBlocks message. It is used to notify the IBD syncing peer that the -// syncer sent all the requested blocks. -// -// This message has no payload. -type MsgDoneIBDBlocks struct { - baseMessage -} - -// Command returns the protocol command string for the message. This is part -// of the Message interface implementation. -func (msg *MsgDoneIBDBlocks) Command() MessageCommand { - return CmdDoneIBDBlocks -} - -// NewMsgDoneIBDBlocks returns a new kaspa DoneIBDBlocks message that conforms to the -// Message interface. -func NewMsgDoneIBDBlocks() *MsgDoneIBDBlocks { - return &MsgDoneIBDBlocks{} -} diff --git a/app/appmessage/p2p_msgibdrootutxosetandblock.go b/app/appmessage/p2p_msgibdrootutxosetandblock.go new file mode 100644 index 000000000..556827216 --- /dev/null +++ b/app/appmessage/p2p_msgibdrootutxosetandblock.go @@ -0,0 +1,23 @@ +package appmessage + +// MsgIBDRootUTXOSetAndBlock implements the Message interface and represents a kaspa +// IBDRootUTXOSetAndBlock message. It is used to answer RequestIBDRootUTXOSetAndBlock messages. +type MsgIBDRootUTXOSetAndBlock struct { + baseMessage + UTXOSet []byte + Block *MsgBlock +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgIBDRootUTXOSetAndBlock) Command() MessageCommand { + return CmdRequestIBDRootUTXOSetAndBlock +} + +// NewMsgIBDRootUTXOSetAndBlock returns a new MsgIBDRootUTXOSetAndBlock. +func NewMsgIBDRootUTXOSetAndBlock(utxoSet []byte, block *MsgBlock) *MsgIBDRootUTXOSetAndBlock { + return &MsgIBDRootUTXOSetAndBlock{ + UTXOSet: utxoSet, + Block: block, + } +} diff --git a/app/appmessage/p2p_msgrequestheaders.go b/app/appmessage/p2p_msgrequestheaders.go new file mode 100644 index 000000000..6ccba5069 --- /dev/null +++ b/app/appmessage/p2p_msgrequestheaders.go @@ -0,0 +1,34 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package appmessage + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" +) + +// MsgRequestHeaders implements the Message interface and represents a kaspa +// RequestHeaders message. It is used to request a list of blocks starting after the +// low hash and until the high hash. +type MsgRequestHeaders struct { + baseMessage + LowHash *externalapi.DomainHash + HighHash *externalapi.DomainHash +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgRequestHeaders) Command() MessageCommand { + return CmdRequestHeaders +} + +// NewMsgRequstHeaders returns a new kaspa RequestHeaders message that conforms to the +// Message interface using the passed parameters and defaults for the remaining +// fields. +func NewMsgRequstHeaders(lowHash, highHash *externalapi.DomainHash) *MsgRequestHeaders { + return &MsgRequestHeaders{ + LowHash: lowHash, + HighHash: highHash, + } +} diff --git a/app/appmessage/p2p_msgrequestibdblocks_test.go b/app/appmessage/p2p_msgrequestheaders_test.go similarity index 78% rename from app/appmessage/p2p_msgrequestibdblocks_test.go rename to app/appmessage/p2p_msgrequestheaders_test.go index b69589f1b..1d475b9d2 100644 --- a/app/appmessage/p2p_msgrequestibdblocks_test.go +++ b/app/appmessage/p2p_msgrequestheaders_test.go @@ -10,7 +10,7 @@ import ( "github.com/kaspanet/kaspad/domain/consensus/utils/hashes" ) -// TestRequstIBDBlocks tests the MsgRequestIBDBlocks API. +// TestRequstIBDBlocks tests the MsgRequestHeaders API. func TestRequstIBDBlocks(t *testing.T) { hashStr := "000000000002e7ad7b9eef9479e4aabc65cb831269cc20d2632c13684406dee0" lowHash, err := hashes.FromString(hashStr) @@ -25,16 +25,16 @@ func TestRequstIBDBlocks(t *testing.T) { } // Ensure we get the same data back out. - msg := NewMsgRequstIBDBlocks(lowHash, highHash) + msg := NewMsgRequstHeaders(lowHash, highHash) if *msg.HighHash != *highHash { - t.Errorf("NewMsgRequstIBDBlocks: wrong high hash - got %v, want %v", + t.Errorf("NewMsgRequstHeaders: wrong high hash - got %v, want %v", msg.HighHash, highHash) } // Ensure the command is expected value. wantCmd := MessageCommand(4) if cmd := msg.Command(); cmd != wantCmd { - t.Errorf("NewMsgRequstIBDBlocks: wrong command - got %v want %v", + t.Errorf("NewMsgRequstHeaders: wrong command - got %v want %v", cmd, wantCmd) } } diff --git a/app/appmessage/p2p_msgrequestibdblocks.go b/app/appmessage/p2p_msgrequestibdblocks.go index 7535cfc6a..848490716 100644 --- a/app/appmessage/p2p_msgrequestibdblocks.go +++ b/app/appmessage/p2p_msgrequestibdblocks.go @@ -1,20 +1,19 @@ -// Copyright (c) 2013-2016 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - package appmessage import ( "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) +// MaxRequestIBDBlocksHashes is the maximum number of hashes that can +// be in a single RequestIBDBlocks message. +const MaxRequestIBDBlocksHashes = MaxInvPerMsg + // MsgRequestIBDBlocks implements the Message interface and represents a kaspa -// RequestIBDBlocks message. It is used to request a list of blocks starting after the -// low hash and until the high hash. +// RequestIBDBlocks message. It is used to request blocks as part of the IBD +// protocol. type MsgRequestIBDBlocks struct { baseMessage - LowHash *externalapi.DomainHash - HighHash *externalapi.DomainHash + Hashes []*externalapi.DomainHash } // Command returns the protocol command string for the message. This is part @@ -23,12 +22,9 @@ func (msg *MsgRequestIBDBlocks) Command() MessageCommand { return CmdRequestIBDBlocks } -// NewMsgRequstIBDBlocks returns a new kaspa RequestIBDBlocks message that conforms to the -// Message interface using the passed parameters and defaults for the remaining -// fields. -func NewMsgRequstIBDBlocks(lowHash, highHash *externalapi.DomainHash) *MsgRequestIBDBlocks { +// NewMsgRequestIBDBlocks returns a new MsgRequestIBDBlocks. +func NewMsgRequestIBDBlocks(hashes []*externalapi.DomainHash) *MsgRequestIBDBlocks { return &MsgRequestIBDBlocks{ - LowHash: lowHash, - HighHash: highHash, + Hashes: hashes, } } diff --git a/app/appmessage/p2p_msgrequestibdrootutxosetandblock.go b/app/appmessage/p2p_msgrequestibdrootutxosetandblock.go new file mode 100644 index 000000000..1a828775b --- /dev/null +++ b/app/appmessage/p2p_msgrequestibdrootutxosetandblock.go @@ -0,0 +1,26 @@ +package appmessage + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" +) + +// MsgRequestIBDRootUTXOSetAndBlock implements the Message interface and represents a kaspa +// RequestIBDRootUTXOSetAndBlock message. It is used to request the UTXO set and block body +// of the IBD root block. +type MsgRequestIBDRootUTXOSetAndBlock struct { + baseMessage + IBDRoot *externalapi.DomainHash +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgRequestIBDRootUTXOSetAndBlock) Command() MessageCommand { + return CmdRequestIBDRootUTXOSetAndBlock +} + +// NewMsgRequestIBDRootUTXOSetAndBlock returns a new MsgRequestIBDRootUTXOSetAndBlock. +func NewMsgRequestIBDRootUTXOSetAndBlock(ibdRoot *externalapi.DomainHash) *MsgRequestIBDRootUTXOSetAndBlock { + return &MsgRequestIBDRootUTXOSetAndBlock{ + IBDRoot: ibdRoot, + } +} diff --git a/app/appmessage/p2p_msgrequestnextheaders.go b/app/appmessage/p2p_msgrequestnextheaders.go new file mode 100644 index 000000000..22687f12c --- /dev/null +++ b/app/appmessage/p2p_msgrequestnextheaders.go @@ -0,0 +1,22 @@ +package appmessage + +// MsgRequestNextHeaders implements the Message interface and represents a kaspa +// RequestNextHeaders message. It is used to notify the IBD syncer peer to send +// more headers. +// +// This message has no payload. +type MsgRequestNextHeaders struct { + baseMessage +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgRequestNextHeaders) Command() MessageCommand { + return CmdRequestNextHeaders +} + +// NewMsgRequestNextHeaders returns a new kaspa RequestNextHeaders message that conforms to the +// Message interface. +func NewMsgRequestNextHeaders() *MsgRequestNextHeaders { + return &MsgRequestNextHeaders{} +} diff --git a/app/appmessage/p2p_msgrequestnextibdblocks.go b/app/appmessage/p2p_msgrequestnextibdblocks.go deleted file mode 100644 index 9b3a4c13c..000000000 --- a/app/appmessage/p2p_msgrequestnextibdblocks.go +++ /dev/null @@ -1,22 +0,0 @@ -package appmessage - -// MsgRequestNextIBDBlocks implements the Message interface and represents a kaspa -// RequestNextIBDBlocks message. It is used to notify the IBD syncer peer to send -// more blocks. -// -// This message has no payload. -type MsgRequestNextIBDBlocks struct { - baseMessage -} - -// Command returns the protocol command string for the message. This is part -// of the Message interface implementation. -func (msg *MsgRequestNextIBDBlocks) Command() MessageCommand { - return CmdRequestNextIBDBlocks -} - -// NewMsgRequestNextIBDBlocks returns a new kaspa RequestNextIBDBlocks message that conforms to the -// Message interface. -func NewMsgRequestNextIBDBlocks() *MsgRequestNextIBDBlocks { - return &MsgRequestNextIBDBlocks{} -} diff --git a/app/appmessage/p2p_msgrequestrelayblocks.go b/app/appmessage/p2p_msgrequestrelayblocks.go index 34a4e7d4a..9f6bb246f 100644 --- a/app/appmessage/p2p_msgrequestrelayblocks.go +++ b/app/appmessage/p2p_msgrequestrelayblocks.go @@ -4,9 +4,9 @@ import ( "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) -// MsgRequestRelayBlocksHashes is the maximum number of hashes that can +// MaxRequestRelayBlocksHashes is the maximum number of hashes that can // be in a single RequestRelayBlocks message. -const MsgRequestRelayBlocksHashes = MaxInvPerMsg +const MaxRequestRelayBlocksHashes = MaxInvPerMsg // MsgRequestRelayBlocks implements the Message interface and represents a kaspa // RequestRelayBlocks message. It is used to request blocks as part of the block diff --git a/app/protocol/flowcontext/ibd.go b/app/protocol/flowcontext/ibd.go index 2e669a746..e81f14109 100644 --- a/app/protocol/flowcontext/ibd.go +++ b/app/protocol/flowcontext/ibd.go @@ -1,6 +1,7 @@ package flowcontext import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "sync/atomic" "time" @@ -19,7 +20,16 @@ func (f *FlowContext) StartIBDIfRequired() error { return nil } - peer, err := f.selectPeerForIBD() + syncInfo, err := f.domain.Consensus().GetSyncInfo() + if err != nil { + return err + } + + if syncInfo.State == externalapi.SyncStateRelay { + return nil + } + + peer, err := f.selectPeerForIBD(syncInfo) if err != nil { return err } @@ -42,20 +52,32 @@ func (f *FlowContext) IsInIBD() bool { // selectPeerForIBD returns the first peer whose selected tip // hash is not in our DAG -func (f *FlowContext) selectPeerForIBD() (*peerpkg.Peer, error) { +func (f *FlowContext) selectPeerForIBD(syncInfo *externalapi.SyncInfo) (*peerpkg.Peer, error) { f.peersMutex.RLock() defer f.peersMutex.RUnlock() - for _, peer := range f.peers { - peerSelectedTipHash := peer.SelectedTipHash() - blockInfo, err := f.domain.Consensus().GetBlockInfo(peerSelectedTipHash) - if err != nil { - return nil, err - } - if !blockInfo.Exists { - return peer, nil + if syncInfo.State == externalapi.SyncStateHeadersFirst { + for _, peer := range f.peers { + peerSelectedTipHash := peer.SelectedTipHash() + blockInfo, err := f.domain.Consensus().GetBlockInfo(peerSelectedTipHash) + if err != nil { + return nil, err + } + + if syncInfo.State == externalapi.SyncStateHeadersFirst { + if !blockInfo.Exists { + return peer, nil + } + } else { + if blockInfo.Exists && blockInfo.BlockStatus == externalapi.StatusHeaderOnly && + blockInfo.IsBlockInHeaderPruningPointFuture { + return peer, nil + } + } } + return nil, nil } + return nil, nil } diff --git a/app/protocol/flows/blockrelay/handle_relay_invs.go b/app/protocol/flows/blockrelay/handle_relay_invs.go index 248e2ff25..c73153989 100644 --- a/app/protocol/flows/blockrelay/handle_relay_invs.go +++ b/app/protocol/flows/blockrelay/handle_relay_invs.go @@ -114,7 +114,7 @@ func (flow *handleRelayInvsFlow) readInv() (*appmessage.MsgInvRelayBlock, error) } func (flow *handleRelayInvsFlow) requestBlocks(requestQueue *hashesQueueSet) error { - numHashesToRequest := mathUtil.MinInt(appmessage.MsgRequestRelayBlocksHashes, requestQueue.len()) + numHashesToRequest := mathUtil.MinInt(appmessage.MaxRequestRelayBlocksHashes, requestQueue.len()) hashesToRequest := requestQueue.dequeue(numHashesToRequest) pendingBlocks := map[externalapi.DomainHash]struct{}{} diff --git a/app/protocol/flows/ibd/handle_ibd_block_requests.go b/app/protocol/flows/ibd/handle_ibd_block_requests.go new file mode 100644 index 000000000..df232787c --- /dev/null +++ b/app/protocol/flows/ibd/handle_ibd_block_requests.go @@ -0,0 +1,49 @@ +package ibd + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/app/protocol/protocolerrors" + "github.com/kaspanet/kaspad/domain" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" + "github.com/pkg/errors" +) + +// HandleIBDBlockRequestsContext is the interface for the context needed for the HandleIBDBlockRequests flow. +type HandleIBDBlockRequestsContext interface { + Domain() domain.Domain +} + +// HandleIBDBlockRequests listens to appmessage.MsgRequestRelayBlocks messages and sends +// their corresponding blocks to the requesting peer. +func HandleIBDBlockRequests(context HandleIBDBlockRequestsContext, incomingRoute *router.Route, + outgoingRoute *router.Route) error { + + for { + message, err := incomingRoute.Dequeue() + if err != nil { + return err + } + msgRequestIBDBlocks := message.(*appmessage.MsgRequestIBDBlocks) + for _, hash := range msgRequestIBDBlocks.Hashes { + // Fetch the block from the database. + blockInfo, err := context.Domain().Consensus().GetBlockInfo(hash) + if err != nil { + return err + } + if !blockInfo.Exists { + return protocolerrors.Errorf(true, "block %s not found", hash) + } + block, err := context.Domain().Consensus().GetBlock(hash) + if err != nil { + return errors.Wrapf(err, "unable to fetch requested block hash %s", hash) + } + + // TODO (Partial nodes): Convert block to partial block if needed + + err = outgoingRoute.Enqueue(appmessage.DomainBlockToMsgBlock(block)) + if err != nil { + return err + } + } + } +} diff --git a/app/protocol/flows/ibd/handle_request_ibd_blocks.go b/app/protocol/flows/ibd/handle_request_headers.go similarity index 53% rename from app/protocol/flows/ibd/handle_request_ibd_blocks.go rename to app/protocol/flows/ibd/handle_request_headers.go index 8fdee2a28..cadfa2b84 100644 --- a/app/protocol/flows/ibd/handle_request_ibd_blocks.go +++ b/app/protocol/flows/ibd/handle_request_headers.go @@ -11,7 +11,7 @@ import ( const ibdBatchSize = router.DefaultMaxMessages -// RequestIBDBlocksContext is the interface for the context needed for the HandleRequestIBDBlocks flow. +// RequestIBDBlocksContext is the interface for the context needed for the HandleRequestHeaders flow. type RequestIBDBlocksContext interface { Domain() domain.Domain } @@ -21,8 +21,8 @@ type handleRequestBlocksFlow struct { incomingRoute, outgoingRoute *router.Route } -// HandleRequestIBDBlocks handles getBlocks messages -func HandleRequestIBDBlocks(context RequestIBDBlocksContext, incomingRoute *router.Route, outgoingRoute *router.Route) error { +// HandleRequestHeaders handles RequestHeaders messages +func HandleRequestHeaders(context RequestIBDBlocksContext, incomingRoute *router.Route, outgoingRoute *router.Route) error { flow := &handleRequestBlocksFlow{ RequestIBDBlocksContext: context, incomingRoute: incomingRoute, @@ -33,24 +33,24 @@ func HandleRequestIBDBlocks(context RequestIBDBlocksContext, incomingRoute *rout func (flow *handleRequestBlocksFlow) start() error { for { - lowHash, highHash, err := receiveRequestIBDBlocks(flow.incomingRoute) + lowHash, highHash, err := receiveRequestHeaders(flow.incomingRoute) if err != nil { return err } - msgIBDBlocks, err := flow.buildMsgIBDBlocks(lowHash, highHash) + msgHeaders, err := flow.buildMsgBlockHeaders(lowHash, highHash) if err != nil { return err } - for offset := 0; offset < len(msgIBDBlocks); offset += ibdBatchSize { + for offset := 0; offset < len(msgHeaders); offset += ibdBatchSize { end := offset + ibdBatchSize - if end > len(msgIBDBlocks) { - end = len(msgIBDBlocks) + if end > len(msgHeaders) { + end = len(msgHeaders) } - blocksToSend := msgIBDBlocks[offset:end] - err = flow.sendMsgIBDBlocks(blocksToSend) + blocksToSend := msgHeaders[offset:end] + err = flow.sendHeaders(blocksToSend) if err != nil { return nil } @@ -66,56 +66,56 @@ func (flow *handleRequestBlocksFlow) start() error { return err } - if _, ok := message.(*appmessage.MsgRequestNextIBDBlocks); !ok { + if _, ok := message.(*appmessage.MsgRequestNextHeaders); !ok { return protocolerrors.Errorf(true, "received unexpected message type. "+ - "expected: %s, got: %s", appmessage.CmdRequestNextIBDBlocks, message.Command()) + "expected: %s, got: %s", appmessage.CmdRequestNextHeaders, message.Command()) } } - err = flow.outgoingRoute.Enqueue(appmessage.NewMsgDoneIBDBlocks()) + err = flow.outgoingRoute.Enqueue(appmessage.NewMsgDoneHeaders()) if err != nil { return err } } } -func receiveRequestIBDBlocks(incomingRoute *router.Route) (lowHash *externalapi.DomainHash, +func receiveRequestHeaders(incomingRoute *router.Route) (lowHash *externalapi.DomainHash, highHash *externalapi.DomainHash, err error) { message, err := incomingRoute.Dequeue() if err != nil { return nil, nil, err } - msgRequestIBDBlocks := message.(*appmessage.MsgRequestIBDBlocks) + msgRequestIBDBlocks := message.(*appmessage.MsgRequestHeaders) return msgRequestIBDBlocks.LowHash, msgRequestIBDBlocks.HighHash, nil } -func (flow *handleRequestBlocksFlow) buildMsgIBDBlocks(lowHash *externalapi.DomainHash, - highHash *externalapi.DomainHash) ([]*appmessage.MsgIBDBlock, error) { +func (flow *handleRequestBlocksFlow) buildMsgBlockHeaders(lowHash *externalapi.DomainHash, + highHash *externalapi.DomainHash) ([]*appmessage.MsgBlockHeader, error) { blockHashes, err := flow.Domain().Consensus().GetHashesBetween(lowHash, highHash) if err != nil { return nil, err } - const maxHashesInMsgIBDBlocks = appmessage.MaxInvPerMsg - if len(blockHashes) > maxHashesInMsgIBDBlocks { - blockHashes = blockHashes[:maxHashesInMsgIBDBlocks] + const maxHeaders = appmessage.MaxInvPerMsg + if len(blockHashes) > maxHeaders { + blockHashes = blockHashes[:maxHeaders] } - msgIBDBlocks := make([]*appmessage.MsgIBDBlock, len(blockHashes)) + msgBlockHeaders := make([]*appmessage.MsgBlockHeader, len(blockHashes)) for i, blockHash := range blockHashes { - block, err := flow.Domain().Consensus().GetBlock(blockHash) + header, err := flow.Domain().Consensus().GetBlockHeader(blockHash) if err != nil { return nil, err } - msgIBDBlocks[i] = appmessage.NewMsgIBDBlock(appmessage.DomainBlockToMsgBlock(block)) + msgBlockHeaders[i] = appmessage.DomainBlockHeaderToBlockHeader(header) } - return msgIBDBlocks, nil + return msgBlockHeaders, nil } -func (flow *handleRequestBlocksFlow) sendMsgIBDBlocks(msgIBDBlocks []*appmessage.MsgIBDBlock) error { - for _, msgIBDBlock := range msgIBDBlocks { +func (flow *handleRequestBlocksFlow) sendHeaders(headers []*appmessage.MsgBlockHeader) error { + for _, msgIBDBlock := range headers { err := flow.outgoingRoute.Enqueue(msgIBDBlock) if err != nil { return err diff --git a/app/protocol/flows/ibd/handle_request_ibd_root_utxo_set_and_block.go b/app/protocol/flows/ibd/handle_request_ibd_root_utxo_set_and_block.go new file mode 100644 index 000000000..8298e7e52 --- /dev/null +++ b/app/protocol/flows/ibd/handle_request_ibd_root_utxo_set_and_block.go @@ -0,0 +1,65 @@ +package ibd + +import ( + "errors" + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/domain" + "github.com/kaspanet/kaspad/domain/consensus/ruleerrors" + "github.com/kaspanet/kaspad/infrastructure/network/netadapter/router" +) + +// HandleRequestIBDRootUTXOSetAndBlockContext is the interface for the context needed for the HandleRequestIBDRootUTXOSetAndBlock flow. +type HandleRequestIBDRootUTXOSetAndBlockContext interface { + Domain() domain.Domain +} + +type handleRequestIBDRootUTXOSetAndBlockFlow struct { + HandleRequestIBDRootUTXOSetAndBlockContext + incomingRoute, outgoingRoute *router.Route +} + +// HandleRequestIBDRootUTXOSetAndBlock listens to appmessage.MsgRequestIBDRootUTXOSetAndBlock messages and sends +// the IBD root UTXO set and block body. +func HandleRequestIBDRootUTXOSetAndBlock(context HandleRequestIBDRootUTXOSetAndBlockContext, incomingRoute, + outgoingRoute *router.Route) error { + flow := &handleRequestIBDRootUTXOSetAndBlockFlow{ + HandleRequestIBDRootUTXOSetAndBlockContext: context, + incomingRoute: incomingRoute, + outgoingRoute: outgoingRoute, + } + + return flow.start() +} + +func (flow *handleRequestIBDRootUTXOSetAndBlockFlow) start() error { + for { + message, err := flow.incomingRoute.Dequeue() + if err != nil { + return err + } + msgRequestIBDRootUTXOSetAndBlock := message.(*appmessage.MsgRequestIBDRootUTXOSetAndBlock) + + utxoSet, err := flow.Domain().Consensus().GetPruningPointUTXOSet(msgRequestIBDRootUTXOSetAndBlock.IBDRoot) + if err != nil { + if errors.Is(err, ruleerrors.ErrWrongPruningPointHash) { + err = flow.outgoingRoute.Enqueue(appmessage.NewMsgIBDRootNotFound()) + if err != nil { + return err + } + + continue + } + } + + block, err := flow.Domain().Consensus().GetBlock(msgRequestIBDRootUTXOSetAndBlock.IBDRoot) + if err != nil { + return err + } + + err = flow.outgoingRoute.Enqueue(appmessage.NewMsgIBDRootUTXOSetAndBlock(utxoSet, + appmessage.DomainBlockToMsgBlock(block))) + if err != nil { + return err + } + } +} diff --git a/app/protocol/flows/ibd/ibd.go b/app/protocol/flows/ibd/ibd.go index bac01639b..79053b5fd 100644 --- a/app/protocol/flows/ibd/ibd.go +++ b/app/protocol/flows/ibd/ibd.go @@ -53,8 +53,53 @@ func (flow *handleIBDFlow) start() error { func (flow *handleIBDFlow) runIBD() error { flow.peer.WaitForIBDStart() - defer flow.FinishIBD() + err := flow.ibdLoop() + if err != nil { + finishIBDErr := flow.FinishIBD() + if finishIBDErr != nil { + return finishIBDErr + } + return err + } + return flow.FinishIBD() +} +func (flow *handleIBDFlow) ibdLoop() error { + for { + syncInfo, err := flow.Domain().Consensus().GetSyncInfo() + if err != nil { + return err + } + + switch syncInfo.State { + case externalapi.SyncStateHeadersFirst: + err := flow.syncHeaders() + if err != nil { + return err + } + case externalapi.SyncStateMissingUTXOSet: + found, err := flow.fetchMissingUTXOSet(syncInfo.IBDRootUTXOBlockHash) + if err != nil { + return err + } + + if !found { + return nil + } + case externalapi.SyncStateMissingBlockBodies: + err := flow.syncMissingBlockBodies() + if err != nil { + return err + } + case externalapi.SyncStateRelay: + return nil + default: + return errors.Errorf("unexpected state %s", syncInfo.State) + } + } +} + +func (flow *handleIBDFlow) syncHeaders() error { peerSelectedTipHash := flow.peer.SelectedTipHash() log.Debugf("Trying to find highest shared chain block with peer %s with selected tip %s", flow.peer, peerSelectedTipHash) highestSharedBlockHash, err := flow.findHighestSharedBlockHash(peerSelectedTipHash) @@ -64,7 +109,104 @@ func (flow *handleIBDFlow) runIBD() error { log.Debugf("Found highest shared chain block %s with peer %s", highestSharedBlockHash, flow.peer) - return flow.downloadBlocks(highestSharedBlockHash, peerSelectedTipHash) + return flow.downloadHeaders(highestSharedBlockHash, peerSelectedTipHash) +} + +func (flow *handleIBDFlow) syncMissingBlockBodies() error { + hashes, err := flow.Domain().Consensus().GetMissingBlockBodyHashes(flow.peer.SelectedTipHash()) + if err != nil { + return err + } + + for offset := 0; offset < len(hashes); offset += appmessage.MaxRequestIBDBlocksHashes { + var hashesToRequest []*externalapi.DomainHash + if offset+appmessage.MaxRequestIBDBlocksHashes < len(hashes) { + hashesToRequest = hashes[offset : offset+appmessage.MaxRequestIBDBlocksHashes] + } else { + hashesToRequest = hashes[offset:] + } + + err := flow.outgoingRoute.Enqueue(appmessage.NewMsgRequestIBDBlocks(hashesToRequest)) + if err != nil { + return err + } + + for _, expectedHash := range hashesToRequest { + message, err := flow.incomingRoute.DequeueWithTimeout(common.DefaultTimeout) + if err != nil { + return err + } + + msgIBDBlock, ok := message.(*appmessage.MsgIBDBlock) + if !ok { + return protocolerrors.Errorf(true, "received unexpected message type. "+ + "expected: %s, got: %s", appmessage.CmdIBDBlock, message.Command()) + } + + block := appmessage.MsgBlockToDomainBlock(msgIBDBlock.MsgBlock) + blockHash := consensusserialization.BlockHash(block) + if *expectedHash != *blockHash { + return protocolerrors.Errorf(true, "expected block %s but got %s", expectedHash, blockHash) + } + + err = flow.Domain().Consensus().ValidateAndInsertBlock(block) + if err != nil { + return protocolerrors.ConvertToBanningProtocolErrorIfRuleError(err, "invalid block %s", blockHash) + } + } + } + + return nil +} + +func (flow *handleIBDFlow) fetchMissingUTXOSet(ibdRootHash *externalapi.DomainHash) (bool, error) { + err := flow.outgoingRoute.Enqueue(appmessage.NewMsgRequestIBDRootUTXOSetAndBlock(ibdRootHash)) + if err != nil { + return false, err + } + + utxoSet, block, found, err := flow.receiveIBDRootUTXOSetAndBlock() + if err != nil { + return false, err + } + + if !found { + return false, nil + } + + err = flow.Domain().Consensus().ValidateAndInsertBlock(block) + if err != nil { + blockHash := consensusserialization.BlockHash(block) + return false, protocolerrors.ConvertToBanningProtocolErrorIfRuleError(err, "got invalid block %s during IBD", blockHash) + } + + err = flow.Domain().Consensus().SetPruningPointUTXOSet(utxoSet) + if err != nil { + return false, protocolerrors.ConvertToBanningProtocolErrorIfRuleError(err, "error with IBD root UTXO set") + } + + return true, nil +} + +func (flow *handleIBDFlow) receiveIBDRootUTXOSetAndBlock() ([]byte, *externalapi.DomainBlock, bool, error) { + message, err := flow.incomingRoute.DequeueWithTimeout(common.DefaultTimeout) + if err != nil { + return nil, nil, false, err + } + + switch message := message.(type) { + case *appmessage.MsgIBDRootUTXOSetAndBlock: + return message.UTXOSet, + appmessage.MsgBlockToDomainBlock(message.Block), true, nil + case *appmessage.MsgIBDRootNotFound: + return nil, nil, false, nil + default: + return nil, nil, false, + protocolerrors.Errorf(true, "received unexpected message type. "+ + "expected: %s or %s, got: %s", + appmessage.CmdIBDRootUTXOSetAndBlock, appmessage.CmdIBDRootNotFound, message.Command(), + ) + } } func (flow *handleIBDFlow) findHighestSharedBlockHash(peerSelectedTipHash *externalapi.DomainHash) (lowHash *externalapi.DomainHash, @@ -123,17 +265,17 @@ func (flow *handleIBDFlow) receiveBlockLocator() (blockLocatorHashes []*external return msgBlockLocator.BlockLocatorHashes, nil } -func (flow *handleIBDFlow) downloadBlocks(highestSharedBlockHash *externalapi.DomainHash, +func (flow *handleIBDFlow) downloadHeaders(highestSharedBlockHash *externalapi.DomainHash, peerSelectedTipHash *externalapi.DomainHash) error { - err := flow.sendGetBlocks(highestSharedBlockHash, peerSelectedTipHash) + err := flow.sendRequestHeaders(highestSharedBlockHash, peerSelectedTipHash) if err != nil { return err } blocksReceived := 0 for { - msgIBDBlock, doneIBD, err := flow.receiveIBDBlock() + msgBlockHeader, doneIBD, err := flow.receiveHeader() if err != nil { return err } @@ -142,14 +284,14 @@ func (flow *handleIBDFlow) downloadBlocks(highestSharedBlockHash *externalapi.Do return nil } - err = flow.processIBDBlock(msgIBDBlock) + err = flow.processHeader(msgBlockHeader) if err != nil { return err } blocksReceived++ if blocksReceived%ibdBatchSize == 0 { - err = flow.outgoingRoute.Enqueue(appmessage.NewMsgRequestNextIBDBlocks()) + err = flow.outgoingRoute.Enqueue(appmessage.NewMsgRequestNextHeaders()) if err != nil { return err } @@ -157,47 +299,52 @@ func (flow *handleIBDFlow) downloadBlocks(highestSharedBlockHash *externalapi.Do } } -func (flow *handleIBDFlow) sendGetBlocks(highestSharedBlockHash *externalapi.DomainHash, +func (flow *handleIBDFlow) sendRequestHeaders(highestSharedBlockHash *externalapi.DomainHash, peerSelectedTipHash *externalapi.DomainHash) error { - msgGetBlockInvs := appmessage.NewMsgRequstIBDBlocks(highestSharedBlockHash, peerSelectedTipHash) + msgGetBlockInvs := appmessage.NewMsgRequstHeaders(highestSharedBlockHash, peerSelectedTipHash) return flow.outgoingRoute.Enqueue(msgGetBlockInvs) } -func (flow *handleIBDFlow) receiveIBDBlock() (msgIBDBlock *appmessage.MsgIBDBlock, doneIBD bool, err error) { +func (flow *handleIBDFlow) receiveHeader() (msgIBDBlock *appmessage.MsgBlockHeader, doneIBD bool, err error) { message, err := flow.incomingRoute.DequeueWithTimeout(common.DefaultTimeout) if err != nil { return nil, false, err } switch message := message.(type) { - case *appmessage.MsgIBDBlock: + case *appmessage.MsgBlockHeader: return message, false, nil - case *appmessage.MsgDoneIBDBlocks: + case *appmessage.MsgDoneHeaders: return nil, true, nil default: return nil, false, protocolerrors.Errorf(true, "received unexpected message type. "+ - "expected: %s, got: %s", appmessage.CmdIBDBlock, message.Command()) + "expected: %s or %s, got: %s", appmessage.CmdHeader, appmessage.CmdDoneHeaders, message.Command()) } } -func (flow *handleIBDFlow) processIBDBlock(msgIBDBlock *appmessage.MsgIBDBlock) error { - block := appmessage.MsgBlockToDomainBlock(msgIBDBlock.MsgBlock) +func (flow *handleIBDFlow) processHeader(msgBlockHeader *appmessage.MsgBlockHeader) error { + header := appmessage.BlockHeaderToDomainBlockHeader(msgBlockHeader) + block := &externalapi.DomainBlock{ + Header: header, + Transactions: nil, + } + blockHash := consensusserialization.BlockHash(block) blockInfo, err := flow.Domain().Consensus().GetBlockInfo(blockHash) if err != nil { return err } if blockInfo.Exists { - log.Debugf("IBD block %s is already in the DAG. Skipping...", blockHash) + log.Debugf("Block header %s is already in the DAG. Skipping...", blockHash) return nil } err = flow.Domain().Consensus().ValidateAndInsertBlock(block) if err != nil { if !errors.As(err, &ruleerrors.RuleError{}) { - return errors.Wrapf(err, "failed to process block %s during IBD", blockHash) + return errors.Wrapf(err, "failed to process header %s during IBD", blockHash) } - log.Infof("Rejected block %s from %s during IBD: %s", blockHash, flow.peer, err) + log.Infof("Rejected block header %s from %s during IBD: %s", blockHash, flow.peer, err) return protocolerrors.Wrapf(true, err, "got invalid block %s during IBD", blockHash) } diff --git a/app/protocol/protocol.go b/app/protocol/protocol.go index 67fc5bf5e..b8c095c2f 100644 --- a/app/protocol/protocol.go +++ b/app/protocol/protocol.go @@ -180,33 +180,51 @@ func (m *Manager) registerIBDFlows(router *routerpkg.Router, isStopping *uint32, return []*flow{ m.registerFlow("HandleIBD", router, []appmessage.MessageCommand{appmessage.CmdBlockLocator, appmessage.CmdIBDBlock, - appmessage.CmdDoneIBDBlocks}, isStopping, errChan, + appmessage.CmdDoneHeaders, appmessage.CmdIBDRootNotFound, appmessage.CmdIBDRootUTXOSetAndBlock}, isStopping, errChan, func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { return ibd.HandleIBD(m.context, incomingRoute, outgoingRoute, peer) }, ), - m.registerFlow("RequestSelectedTip", router, []appmessage.MessageCommand{appmessage.CmdSelectedTip}, isStopping, errChan, + m.registerFlow("RequestSelectedTip", router, + []appmessage.MessageCommand{appmessage.CmdSelectedTip}, isStopping, errChan, func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { return selectedtip.RequestSelectedTip(m.context, incomingRoute, outgoingRoute, peer) }, ), - m.registerFlow("HandleRequestSelectedTip", router, []appmessage.MessageCommand{appmessage.CmdRequestSelectedTip}, isStopping, errChan, + m.registerFlow("HandleRequestSelectedTip", router, + []appmessage.MessageCommand{appmessage.CmdRequestSelectedTip}, isStopping, errChan, func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { return selectedtip.HandleRequestSelectedTip(m.context, incomingRoute, outgoingRoute) }, ), - m.registerFlow("HandleRequestBlockLocator", router, []appmessage.MessageCommand{appmessage.CmdRequestBlockLocator}, isStopping, errChan, + m.registerFlow("HandleRequestBlockLocator", router, + []appmessage.MessageCommand{appmessage.CmdRequestBlockLocator}, isStopping, errChan, func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { return ibd.HandleRequestBlockLocator(m.context, incomingRoute, outgoingRoute) }, ), - m.registerFlow("HandleRequestIBDBlocks", router, []appmessage.MessageCommand{appmessage.CmdRequestIBDBlocks, appmessage.CmdRequestNextIBDBlocks}, isStopping, errChan, + m.registerFlow("HandleRequestHeaders", router, + []appmessage.MessageCommand{appmessage.CmdRequestHeaders, appmessage.CmdRequestNextHeaders}, isStopping, errChan, func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { - return ibd.HandleRequestIBDBlocks(m.context, incomingRoute, outgoingRoute) + return ibd.HandleRequestHeaders(m.context, incomingRoute, outgoingRoute) + }, + ), + + m.registerFlow("HandleRequestIBDRootUTXOSetAndBlock", router, + []appmessage.MessageCommand{appmessage.CmdRequestIBDRootUTXOSetAndBlock}, isStopping, errChan, + func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { + return ibd.HandleRequestIBDRootUTXOSetAndBlock(m.context, incomingRoute, outgoingRoute) + }, + ), + + m.registerFlow("HandleIBDBlockRequests", router, + []appmessage.MessageCommand{appmessage.CmdRequestIBDBlocks}, isStopping, errChan, + func(incomingRoute *routerpkg.Route, peer *peerpkg.Peer) error { + return ibd.HandleIBDBlockRequests(m.context, incomingRoute, outgoingRoute) }, ), } diff --git a/app/protocol/protocolerrors/protocolerrors.go b/app/protocol/protocolerrors/protocolerrors.go index 562fe4313..0c42934cb 100644 --- a/app/protocol/protocolerrors/protocolerrors.go +++ b/app/protocol/protocolerrors/protocolerrors.go @@ -1,6 +1,9 @@ package protocolerrors -import "github.com/pkg/errors" +import ( + "github.com/kaspanet/kaspad/domain/consensus/ruleerrors" + "github.com/pkg/errors" +) // ProtocolError is an error that signifies a violation // of the peer-to-peer protocol @@ -50,3 +53,14 @@ func Wrapf(shouldBan bool, err error, format string, args ...interface{}) error Cause: errors.Wrapf(err, format, args...), } } + +// ConvertToBanningProtocolErrorIfRuleError converts the given error to +// a banning protocol error if it's a rule error, and otherwise keep it +// as is. +func ConvertToBanningProtocolErrorIfRuleError(err error, format string, args ...interface{}) error { + if !errors.As(err, &ruleerrors.RuleError{}) { + return err + } + + return Wrapf(true, err, format, args...) +} diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index 2d4f51275..b93ca8e87 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -5,6 +5,8 @@ import ( "github.com/kaspanet/kaspad/domain/consensus/model" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + "github.com/kaspanet/kaspad/domain/consensus/ruleerrors" + "github.com/pkg/errors" ) type consensus struct { @@ -132,11 +134,26 @@ func (s *consensus) GetMissingBlockBodyHashes(highHash *externalapi.DomainHash) return s.syncManager.GetMissingBlockBodyHashes(highHash) } -func (s *consensus) GetPruningPointUTXOSet() ([]byte, error) { +func (s *consensus) GetPruningPointUTXOSet(expectedPruningPointHash *externalapi.DomainHash) ([]byte, error) { s.lock.RLock() defer s.lock.RUnlock() - return s.pruningStore.PruningPointSerializedUTXOSet(s.databaseContext) + pruningPointHash, err := s.pruningStore.PruningPoint(s.databaseContext) + if err != nil { + return nil, err + } + + if *expectedPruningPointHash != *pruningPointHash { + return nil, errors.Wrapf(ruleerrors.ErrWrongPruningPointHash, "expected pruning point %s but got %s", + expectedPruningPointHash, + pruningPointHash) + } + + serializedUTXOSet, err := s.pruningStore.PruningPointSerializedUTXOSet(s.databaseContext) + if err != nil { + return nil, err + } + return serializedUTXOSet, nil } func (s *consensus) SetPruningPointUTXOSet(serializedUTXOSet []byte) error { diff --git a/domain/consensus/model/externalapi/consensus.go b/domain/consensus/model/externalapi/consensus.go index 2dabcb928..598316ac4 100644 --- a/domain/consensus/model/externalapi/consensus.go +++ b/domain/consensus/model/externalapi/consensus.go @@ -12,7 +12,7 @@ type Consensus interface { GetHashesBetween(lowHash, highHash *DomainHash) ([]*DomainHash, error) GetMissingBlockBodyHashes(highHash *DomainHash) ([]*DomainHash, error) - GetPruningPointUTXOSet() ([]byte, error) + GetPruningPointUTXOSet(expectedPruningPointHash *DomainHash) ([]byte, error) SetPruningPointUTXOSet(serializedUTXOSet []byte) error GetVirtualSelectedParent() (*DomainBlock, error) CreateBlockLocator(lowHash, highHash *DomainHash) (BlockLocator, error) diff --git a/domain/consensus/model/externalapi/sync.go b/domain/consensus/model/externalapi/sync.go index 9b23d2389..d69db5fab 100644 --- a/domain/consensus/model/externalapi/sync.go +++ b/domain/consensus/model/externalapi/sync.go @@ -1,9 +1,11 @@ package externalapi +import "fmt" + // Each of the following represent one of the possible sync // states of the consensus const ( - SyncStateNormal SyncState = iota + SyncStateRelay SyncState = iota SyncStateMissingGenesis SyncStateHeadersFirst SyncStateMissingUTXOSet @@ -15,8 +17,8 @@ type SyncState uint8 func (s SyncState) String() string { switch s { - case SyncStateNormal: - return "SyncStateNormal" + case SyncStateRelay: + return "SyncStateRelay" case SyncStateHeadersFirst: return "SyncStateHeadersFirst" case SyncStateMissingUTXOSet: @@ -25,7 +27,7 @@ func (s SyncState) String() string { return "SyncStateMissingBlockBodies" } - return "" + return fmt.Sprintf("", s) } // SyncInfo holds info about the current sync state of the consensus diff --git a/domain/consensus/processes/blockprocessor/validateandinsertblock.go b/domain/consensus/processes/blockprocessor/validateandinsertblock.go index 89c7ff8f0..b4f217874 100644 --- a/domain/consensus/processes/blockprocessor/validateandinsertblock.go +++ b/domain/consensus/processes/blockprocessor/validateandinsertblock.go @@ -34,7 +34,7 @@ func (bp *blockProcessor) validateAndInsertBlock(block *externalapi.DomainBlock) } if mode.State == externalapi.SyncStateHeadersFirst && !isHeaderOnlyBlock(block) { - mode.State = externalapi.SyncStateNormal + mode.State = externalapi.SyncStateRelay log.Warnf("block %s contains transactions while validating in header only mode", hash) } @@ -97,7 +97,7 @@ func (bp *blockProcessor) validateAndInsertBlock(block *externalapi.DomainBlock) if err != nil { return err } - } else if mode.State == externalapi.SyncStateNormal { + } else if mode.State == externalapi.SyncStateRelay { // Attempt to add the block to the virtual err = bp.consensusStateManager.AddBlockToVirtual(hash) if err != nil { @@ -118,7 +118,7 @@ func (bp *blockProcessor) validateAndInsertBlock(block *externalapi.DomainBlock) } } - if mode.State == externalapi.SyncStateNormal { + if mode.State == externalapi.SyncStateRelay { // Trigger pruning, which will check if the pruning point changed and delete the data if it did. err = bp.pruningManager.FindNextPruningPoint() if err != nil { diff --git a/domain/consensus/processes/consensusstatemanager/calculate_past_utxo.go b/domain/consensus/processes/consensusstatemanager/calculate_past_utxo.go index 5b42bd2ac..4c267bde9 100644 --- a/domain/consensus/processes/consensusstatemanager/calculate_past_utxo.go +++ b/domain/consensus/processes/consensusstatemanager/calculate_past_utxo.go @@ -52,6 +52,9 @@ func (csm *consensusStateManager) restorePastUTXO(blockHash *externalapi.DomainH utxoDiffs = append(utxoDiffs, utxoDiff) nextBlockHash, err = csm.utxoDiffStore.UTXODiffChild(csm.databaseContext, nextBlockHash) + if err != nil { + return nil, err + } } // apply the diffs in reverse order diff --git a/domain/consensus/processes/reachabilitymanager/tree.go b/domain/consensus/processes/reachabilitymanager/tree.go index 16975f398..6a40ec47c 100644 --- a/domain/consensus/processes/reachabilitymanager/tree.go +++ b/domain/consensus/processes/reachabilitymanager/tree.go @@ -629,6 +629,9 @@ func (rt *reachabilityManager) reclaimIntervalAfterChosenChild(node, commonAnces currentInterval.Start, currentInterval.End-slackReachabilityIntervalForReclaiming, )) + if err != nil { + return err + } currentParent, err := rt.parent(current) if err != nil { diff --git a/domain/consensus/processes/syncmanager/syncinfo.go b/domain/consensus/processes/syncmanager/syncinfo.go index 85547a4b9..64437aba9 100644 --- a/domain/consensus/processes/syncmanager/syncinfo.go +++ b/domain/consensus/processes/syncmanager/syncinfo.go @@ -70,7 +70,7 @@ func (sm *syncManager) resolveSyncState() (externalapi.SyncState, error) { return externalapi.SyncStateMissingBlockBodies, nil } - return externalapi.SyncStateNormal, nil + return externalapi.SyncStateRelay, nil } func (sm *syncManager) virtualSelectedParentHash() (*externalapi.DomainHash, error) { diff --git a/domain/consensus/ruleerrors/rule_error.go b/domain/consensus/ruleerrors/rule_error.go index 69f8f2fae..d24623dba 100644 --- a/domain/consensus/ruleerrors/rule_error.go +++ b/domain/consensus/ruleerrors/rule_error.go @@ -234,6 +234,8 @@ var ( ErrMissingBlockHeaderInIBD = newRuleError("ErrMissingBlockHeaderInIBD") ErrMalformedUTXO = newRuleError("ErrMalformedUTXO") + + ErrWrongPruningPointHash = newRuleError("ErrWrongPruningPointHash") ) // RuleError identifies a rule violation. It is used to indicate that diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go index 2be58fc1b..2dbc3ad32 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.pb.go @@ -2,17 +2,16 @@ // versions: // protoc-gen-go v1.25.0 // protoc v3.12.3 -// source: dbobjects.proto +// source: messages.proto package protowire import ( - reflect "reflect" - sync "sync" - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) const ( @@ -38,9 +37,9 @@ type KaspadMessage struct { // *KaspadMessage_RequestBlockLocator // *KaspadMessage_BlockLocator // *KaspadMessage_RequestAddresses - // *KaspadMessage_RequestIBDBlocks - // *KaspadMessage_RequestNextIBDBlocks - // *KaspadMessage_DoneIBDBlocks + // *KaspadMessage_RequestHeaders + // *KaspadMessage_RequestNextHeaders + // *KaspadMessage_DoneHeaders // *KaspadMessage_RequestRelayBlocks // *KaspadMessage_RequestSelectedTip // *KaspadMessage_RequestTransactions @@ -54,6 +53,11 @@ type KaspadMessage struct { // *KaspadMessage_Version // *KaspadMessage_TransactionNotFound // *KaspadMessage_Reject + // *KaspadMessage_BlockHeader + // *KaspadMessage_RequestIBDRootUTXOSetAndBlock + // *KaspadMessage_IbdRootUTXOSetAndBlock + // *KaspadMessage_RequestIBDBlocks + // *KaspadMessage_IbdRootNotFound // *KaspadMessage_GetCurrentNetworkRequest // *KaspadMessage_GetCurrentNetworkResponse // *KaspadMessage_SubmitBlockRequest @@ -186,23 +190,23 @@ func (x *KaspadMessage) GetRequestAddresses() *RequestAddressesMessage { return nil } -func (x *KaspadMessage) GetRequestIBDBlocks() *RequestIBDBlocksMessage { - if x, ok := x.GetPayload().(*KaspadMessage_RequestIBDBlocks); ok { - return x.RequestIBDBlocks +func (x *KaspadMessage) GetRequestHeaders() *RequestHeadersMessage { + if x, ok := x.GetPayload().(*KaspadMessage_RequestHeaders); ok { + return x.RequestHeaders } return nil } -func (x *KaspadMessage) GetRequestNextIBDBlocks() *RequestNextIBDBlocksMessage { - if x, ok := x.GetPayload().(*KaspadMessage_RequestNextIBDBlocks); ok { - return x.RequestNextIBDBlocks +func (x *KaspadMessage) GetRequestNextHeaders() *RequestNextHeadersMessage { + if x, ok := x.GetPayload().(*KaspadMessage_RequestNextHeaders); ok { + return x.RequestNextHeaders } return nil } -func (x *KaspadMessage) GetDoneIBDBlocks() *DoneIBDBlocksMessage { - if x, ok := x.GetPayload().(*KaspadMessage_DoneIBDBlocks); ok { - return x.DoneIBDBlocks +func (x *KaspadMessage) GetDoneHeaders() *DoneHeadersMessage { + if x, ok := x.GetPayload().(*KaspadMessage_DoneHeaders); ok { + return x.DoneHeaders } return nil } @@ -298,6 +302,41 @@ func (x *KaspadMessage) GetReject() *RejectMessage { return nil } +func (x *KaspadMessage) GetBlockHeader() *BlockHeaderMessage { + if x, ok := x.GetPayload().(*KaspadMessage_BlockHeader); ok { + return x.BlockHeader + } + return nil +} + +func (x *KaspadMessage) GetRequestIBDRootUTXOSetAndBlock() *RequestIBDRootUTXOSetAndBlockMessage { + if x, ok := x.GetPayload().(*KaspadMessage_RequestIBDRootUTXOSetAndBlock); ok { + return x.RequestIBDRootUTXOSetAndBlock + } + return nil +} + +func (x *KaspadMessage) GetIbdRootUTXOSetAndBlock() *IBDRootUTXOSetAndBlockMessage { + if x, ok := x.GetPayload().(*KaspadMessage_IbdRootUTXOSetAndBlock); ok { + return x.IbdRootUTXOSetAndBlock + } + return nil +} + +func (x *KaspadMessage) GetRequestIBDBlocks() *RequestIBDBlocksMessage { + if x, ok := x.GetPayload().(*KaspadMessage_RequestIBDBlocks); ok { + return x.RequestIBDBlocks + } + return nil +} + +func (x *KaspadMessage) GetIbdRootNotFound() *IBDRootNotFoundMessage { + if x, ok := x.GetPayload().(*KaspadMessage_IbdRootNotFound); ok { + return x.IbdRootNotFound + } + return nil +} + func (x *KaspadMessage) GetGetCurrentNetworkRequest() *GetCurrentNetworkRequestMessage { if x, ok := x.GetPayload().(*KaspadMessage_GetCurrentNetworkRequest); ok { return x.GetCurrentNetworkRequest @@ -662,16 +701,16 @@ type KaspadMessage_RequestAddresses struct { RequestAddresses *RequestAddressesMessage `protobuf:"bytes,6,opt,name=requestAddresses,proto3,oneof"` } -type KaspadMessage_RequestIBDBlocks struct { - RequestIBDBlocks *RequestIBDBlocksMessage `protobuf:"bytes,7,opt,name=requestIBDBlocks,proto3,oneof"` +type KaspadMessage_RequestHeaders struct { + RequestHeaders *RequestHeadersMessage `protobuf:"bytes,7,opt,name=requestHeaders,proto3,oneof"` } -type KaspadMessage_RequestNextIBDBlocks struct { - RequestNextIBDBlocks *RequestNextIBDBlocksMessage `protobuf:"bytes,8,opt,name=requestNextIBDBlocks,proto3,oneof"` +type KaspadMessage_RequestNextHeaders struct { + RequestNextHeaders *RequestNextHeadersMessage `protobuf:"bytes,8,opt,name=requestNextHeaders,proto3,oneof"` } -type KaspadMessage_DoneIBDBlocks struct { - DoneIBDBlocks *DoneIBDBlocksMessage `protobuf:"bytes,9,opt,name=DoneIBDBlocks,proto3,oneof"` +type KaspadMessage_DoneHeaders struct { + DoneHeaders *DoneHeadersMessage `protobuf:"bytes,9,opt,name=DoneHeaders,proto3,oneof"` } type KaspadMessage_RequestRelayBlocks struct { @@ -726,6 +765,26 @@ type KaspadMessage_Reject struct { Reject *RejectMessage `protobuf:"bytes,22,opt,name=reject,proto3,oneof"` } +type KaspadMessage_BlockHeader struct { + BlockHeader *BlockHeaderMessage `protobuf:"bytes,23,opt,name=blockHeader,proto3,oneof"` +} + +type KaspadMessage_RequestIBDRootUTXOSetAndBlock struct { + RequestIBDRootUTXOSetAndBlock *RequestIBDRootUTXOSetAndBlockMessage `protobuf:"bytes,24,opt,name=requestIBDRootUTXOSetAndBlock,proto3,oneof"` +} + +type KaspadMessage_IbdRootUTXOSetAndBlock struct { + IbdRootUTXOSetAndBlock *IBDRootUTXOSetAndBlockMessage `protobuf:"bytes,25,opt,name=ibdRootUTXOSetAndBlock,proto3,oneof"` +} + +type KaspadMessage_RequestIBDBlocks struct { + RequestIBDBlocks *RequestIBDBlocksMessage `protobuf:"bytes,26,opt,name=requestIBDBlocks,proto3,oneof"` +} + +type KaspadMessage_IbdRootNotFound struct { + IbdRootNotFound *IBDRootNotFoundMessage `protobuf:"bytes,27,opt,name=ibdRootNotFound,proto3,oneof"` +} + type KaspadMessage_GetCurrentNetworkRequest struct { GetCurrentNetworkRequest *GetCurrentNetworkRequestMessage `protobuf:"bytes,1001,opt,name=getCurrentNetworkRequest,proto3,oneof"` } @@ -930,11 +989,11 @@ func (*KaspadMessage_BlockLocator) isKaspadMessage_Payload() {} func (*KaspadMessage_RequestAddresses) isKaspadMessage_Payload() {} -func (*KaspadMessage_RequestIBDBlocks) isKaspadMessage_Payload() {} +func (*KaspadMessage_RequestHeaders) isKaspadMessage_Payload() {} -func (*KaspadMessage_RequestNextIBDBlocks) isKaspadMessage_Payload() {} +func (*KaspadMessage_RequestNextHeaders) isKaspadMessage_Payload() {} -func (*KaspadMessage_DoneIBDBlocks) isKaspadMessage_Payload() {} +func (*KaspadMessage_DoneHeaders) isKaspadMessage_Payload() {} func (*KaspadMessage_RequestRelayBlocks) isKaspadMessage_Payload() {} @@ -962,6 +1021,16 @@ func (*KaspadMessage_TransactionNotFound) isKaspadMessage_Payload() {} func (*KaspadMessage_Reject) isKaspadMessage_Payload() {} +func (*KaspadMessage_BlockHeader) isKaspadMessage_Payload() {} + +func (*KaspadMessage_RequestIBDRootUTXOSetAndBlock) isKaspadMessage_Payload() {} + +func (*KaspadMessage_IbdRootUTXOSetAndBlock) isKaspadMessage_Payload() {} + +func (*KaspadMessage_RequestIBDBlocks) isKaspadMessage_Payload() {} + +func (*KaspadMessage_IbdRootNotFound) isKaspadMessage_Payload() {} + func (*KaspadMessage_GetCurrentNetworkRequest) isKaspadMessage_Payload() {} func (*KaspadMessage_GetCurrentNetworkResponse) isKaspadMessage_Payload() {} @@ -1626,7 +1695,7 @@ type BlockMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Header *BlockHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + Header *BlockHeaderMessage `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` Transactions []*TransactionMessage `protobuf:"bytes,2,rep,name=transactions,proto3" json:"transactions,omitempty"` } @@ -1662,7 +1731,7 @@ func (*BlockMessage) Descriptor() ([]byte, []int) { return file_messages_proto_rawDescGZIP(), []int{10} } -func (x *BlockMessage) GetHeader() *BlockHeader { +func (x *BlockMessage) GetHeader() *BlockHeaderMessage { if x != nil { return x.Header } @@ -1676,7 +1745,7 @@ func (x *BlockMessage) GetTransactions() []*TransactionMessage { return nil } -type BlockHeader struct { +type BlockHeaderMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1691,8 +1760,8 @@ type BlockHeader struct { Nonce uint64 `protobuf:"varint,8,opt,name=nonce,proto3" json:"nonce,omitempty"` } -func (x *BlockHeader) Reset() { - *x = BlockHeader{} +func (x *BlockHeaderMessage) Reset() { + *x = BlockHeaderMessage{} if protoimpl.UnsafeEnabled { mi := &file_messages_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1700,13 +1769,13 @@ func (x *BlockHeader) Reset() { } } -func (x *BlockHeader) String() string { +func (x *BlockHeaderMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BlockHeader) ProtoMessage() {} +func (*BlockHeaderMessage) ProtoMessage() {} -func (x *BlockHeader) ProtoReflect() protoreflect.Message { +func (x *BlockHeaderMessage) ProtoReflect() protoreflect.Message { mi := &file_messages_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1718,61 +1787,61 @@ func (x *BlockHeader) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BlockHeader.ProtoReflect.Descriptor instead. -func (*BlockHeader) Descriptor() ([]byte, []int) { +// Deprecated: Use BlockHeaderMessage.ProtoReflect.Descriptor instead. +func (*BlockHeaderMessage) Descriptor() ([]byte, []int) { return file_messages_proto_rawDescGZIP(), []int{11} } -func (x *BlockHeader) GetVersion() int32 { +func (x *BlockHeaderMessage) GetVersion() int32 { if x != nil { return x.Version } return 0 } -func (x *BlockHeader) GetParentHashes() []*Hash { +func (x *BlockHeaderMessage) GetParentHashes() []*Hash { if x != nil { return x.ParentHashes } return nil } -func (x *BlockHeader) GetHashMerkleRoot() *Hash { +func (x *BlockHeaderMessage) GetHashMerkleRoot() *Hash { if x != nil { return x.HashMerkleRoot } return nil } -func (x *BlockHeader) GetAcceptedIDMerkleRoot() *Hash { +func (x *BlockHeaderMessage) GetAcceptedIDMerkleRoot() *Hash { if x != nil { return x.AcceptedIDMerkleRoot } return nil } -func (x *BlockHeader) GetUtxoCommitment() *Hash { +func (x *BlockHeaderMessage) GetUtxoCommitment() *Hash { if x != nil { return x.UtxoCommitment } return nil } -func (x *BlockHeader) GetTimestamp() int64 { +func (x *BlockHeaderMessage) GetTimestamp() int64 { if x != nil { return x.Timestamp } return 0 } -func (x *BlockHeader) GetBits() uint32 { +func (x *BlockHeaderMessage) GetBits() uint32 { if x != nil { return x.Bits } return 0 } -func (x *BlockHeader) GetNonce() uint64 { +func (x *BlockHeaderMessage) GetNonce() uint64 { if x != nil { return x.Nonce } @@ -1931,7 +2000,7 @@ func (x *BlockLocatorMessage) GetHashes() []*Hash { } // GetBlocksMessage start -type RequestIBDBlocksMessage struct { +type RequestHeadersMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1940,8 +2009,8 @@ type RequestIBDBlocksMessage struct { HighHash *Hash `protobuf:"bytes,2,opt,name=highHash,proto3" json:"highHash,omitempty"` } -func (x *RequestIBDBlocksMessage) Reset() { - *x = RequestIBDBlocksMessage{} +func (x *RequestHeadersMessage) Reset() { + *x = RequestHeadersMessage{} if protoimpl.UnsafeEnabled { mi := &file_messages_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1949,13 +2018,13 @@ func (x *RequestIBDBlocksMessage) Reset() { } } -func (x *RequestIBDBlocksMessage) String() string { +func (x *RequestHeadersMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RequestIBDBlocksMessage) ProtoMessage() {} +func (*RequestHeadersMessage) ProtoMessage() {} -func (x *RequestIBDBlocksMessage) ProtoReflect() protoreflect.Message { +func (x *RequestHeadersMessage) ProtoReflect() protoreflect.Message { mi := &file_messages_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1967,19 +2036,19 @@ func (x *RequestIBDBlocksMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RequestIBDBlocksMessage.ProtoReflect.Descriptor instead. -func (*RequestIBDBlocksMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use RequestHeadersMessage.ProtoReflect.Descriptor instead. +func (*RequestHeadersMessage) Descriptor() ([]byte, []int) { return file_messages_proto_rawDescGZIP(), []int{15} } -func (x *RequestIBDBlocksMessage) GetLowHash() *Hash { +func (x *RequestHeadersMessage) GetLowHash() *Hash { if x != nil { return x.LowHash } return nil } -func (x *RequestIBDBlocksMessage) GetHighHash() *Hash { +func (x *RequestHeadersMessage) GetHighHash() *Hash { if x != nil { return x.HighHash } @@ -1987,14 +2056,14 @@ func (x *RequestIBDBlocksMessage) GetHighHash() *Hash { } // RequestNextIBDBlocksMessage start -type RequestNextIBDBlocksMessage struct { +type RequestNextHeadersMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *RequestNextIBDBlocksMessage) Reset() { - *x = RequestNextIBDBlocksMessage{} +func (x *RequestNextHeadersMessage) Reset() { + *x = RequestNextHeadersMessage{} if protoimpl.UnsafeEnabled { mi := &file_messages_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2002,13 +2071,13 @@ func (x *RequestNextIBDBlocksMessage) Reset() { } } -func (x *RequestNextIBDBlocksMessage) String() string { +func (x *RequestNextHeadersMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RequestNextIBDBlocksMessage) ProtoMessage() {} +func (*RequestNextHeadersMessage) ProtoMessage() {} -func (x *RequestNextIBDBlocksMessage) ProtoReflect() protoreflect.Message { +func (x *RequestNextHeadersMessage) ProtoReflect() protoreflect.Message { mi := &file_messages_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2020,20 +2089,20 @@ func (x *RequestNextIBDBlocksMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RequestNextIBDBlocksMessage.ProtoReflect.Descriptor instead. -func (*RequestNextIBDBlocksMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use RequestNextHeadersMessage.ProtoReflect.Descriptor instead. +func (*RequestNextHeadersMessage) Descriptor() ([]byte, []int) { return file_messages_proto_rawDescGZIP(), []int{16} } // DoneIBDBlocksMessage start -type DoneIBDBlocksMessage struct { +type DoneHeadersMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *DoneIBDBlocksMessage) Reset() { - *x = DoneIBDBlocksMessage{} +func (x *DoneHeadersMessage) Reset() { + *x = DoneHeadersMessage{} if protoimpl.UnsafeEnabled { mi := &file_messages_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2041,13 +2110,13 @@ func (x *DoneIBDBlocksMessage) Reset() { } } -func (x *DoneIBDBlocksMessage) String() string { +func (x *DoneHeadersMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DoneIBDBlocksMessage) ProtoMessage() {} +func (*DoneHeadersMessage) ProtoMessage() {} -func (x *DoneIBDBlocksMessage) ProtoReflect() protoreflect.Message { +func (x *DoneHeadersMessage) ProtoReflect() protoreflect.Message { mi := &file_messages_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2059,12 +2128,12 @@ func (x *DoneIBDBlocksMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DoneIBDBlocksMessage.ProtoReflect.Descriptor instead. -func (*DoneIBDBlocksMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use DoneHeadersMessage.ProtoReflect.Descriptor instead. +func (*DoneHeadersMessage) Descriptor() ([]byte, []int) { return file_messages_proto_rawDescGZIP(), []int{17} } -// GetRelayBlocksMessage start +// RequestRelayBlocksMessage start type RequestRelayBlocksMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2694,6 +2763,197 @@ func (x *RejectMessage) GetReason() string { return "" } +// RequestIBDRootUTXOSetAndBlockMessage start +type RequestIBDRootUTXOSetAndBlockMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IbdRoot *Hash `protobuf:"bytes,1,opt,name=ibdRoot,proto3" json:"ibdRoot,omitempty"` +} + +func (x *RequestIBDRootUTXOSetAndBlockMessage) Reset() { + *x = RequestIBDRootUTXOSetAndBlockMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_messages_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestIBDRootUTXOSetAndBlockMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestIBDRootUTXOSetAndBlockMessage) ProtoMessage() {} + +func (x *RequestIBDRootUTXOSetAndBlockMessage) ProtoReflect() protoreflect.Message { + mi := &file_messages_proto_msgTypes[30] + 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 RequestIBDRootUTXOSetAndBlockMessage.ProtoReflect.Descriptor instead. +func (*RequestIBDRootUTXOSetAndBlockMessage) Descriptor() ([]byte, []int) { + return file_messages_proto_rawDescGZIP(), []int{30} +} + +func (x *RequestIBDRootUTXOSetAndBlockMessage) GetIbdRoot() *Hash { + if x != nil { + return x.IbdRoot + } + return nil +} + +// IBDRootUTXOSetAndBlockMessage start +type IBDRootUTXOSetAndBlockMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UtxoSet []byte `protobuf:"bytes,1,opt,name=utxoSet,proto3" json:"utxoSet,omitempty"` + Block *BlockMessage `protobuf:"bytes,2,opt,name=block,proto3" json:"block,omitempty"` +} + +func (x *IBDRootUTXOSetAndBlockMessage) Reset() { + *x = IBDRootUTXOSetAndBlockMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_messages_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IBDRootUTXOSetAndBlockMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IBDRootUTXOSetAndBlockMessage) ProtoMessage() {} + +func (x *IBDRootUTXOSetAndBlockMessage) ProtoReflect() protoreflect.Message { + mi := &file_messages_proto_msgTypes[31] + 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 IBDRootUTXOSetAndBlockMessage.ProtoReflect.Descriptor instead. +func (*IBDRootUTXOSetAndBlockMessage) Descriptor() ([]byte, []int) { + return file_messages_proto_rawDescGZIP(), []int{31} +} + +func (x *IBDRootUTXOSetAndBlockMessage) GetUtxoSet() []byte { + if x != nil { + return x.UtxoSet + } + return nil +} + +func (x *IBDRootUTXOSetAndBlockMessage) GetBlock() *BlockMessage { + if x != nil { + return x.Block + } + return nil +} + +// RequestIBDBlocksMessage start +type RequestIBDBlocksMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Hashes []*Hash `protobuf:"bytes,1,rep,name=hashes,proto3" json:"hashes,omitempty"` +} + +func (x *RequestIBDBlocksMessage) Reset() { + *x = RequestIBDBlocksMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_messages_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestIBDBlocksMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestIBDBlocksMessage) ProtoMessage() {} + +func (x *RequestIBDBlocksMessage) ProtoReflect() protoreflect.Message { + mi := &file_messages_proto_msgTypes[32] + 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 RequestIBDBlocksMessage.ProtoReflect.Descriptor instead. +func (*RequestIBDBlocksMessage) Descriptor() ([]byte, []int) { + return file_messages_proto_rawDescGZIP(), []int{32} +} + +func (x *RequestIBDBlocksMessage) GetHashes() []*Hash { + if x != nil { + return x.Hashes + } + return nil +} + +// IBDRootNotFoundMessage start +type IBDRootNotFoundMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *IBDRootNotFoundMessage) Reset() { + *x = IBDRootNotFoundMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_messages_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IBDRootNotFoundMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IBDRootNotFoundMessage) ProtoMessage() {} + +func (x *IBDRootNotFoundMessage) ProtoReflect() protoreflect.Message { + mi := &file_messages_proto_msgTypes[33] + 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 IBDRootNotFoundMessage.ProtoReflect.Descriptor instead. +func (*IBDRootNotFoundMessage) Descriptor() ([]byte, []int) { + return file_messages_proto_rawDescGZIP(), []int{33} +} + type RPCError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2705,7 +2965,7 @@ type RPCError struct { func (x *RPCError) Reset() { *x = RPCError{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[30] + mi := &file_messages_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2718,7 +2978,7 @@ func (x *RPCError) String() string { func (*RPCError) ProtoMessage() {} func (x *RPCError) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[30] + mi := &file_messages_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2731,7 +2991,7 @@ func (x *RPCError) ProtoReflect() protoreflect.Message { // Deprecated: Use RPCError.ProtoReflect.Descriptor instead. func (*RPCError) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{30} + return file_messages_proto_rawDescGZIP(), []int{34} } func (x *RPCError) GetMessage() string { @@ -2750,7 +3010,7 @@ type GetCurrentNetworkRequestMessage struct { func (x *GetCurrentNetworkRequestMessage) Reset() { *x = GetCurrentNetworkRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[31] + mi := &file_messages_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2763,7 +3023,7 @@ func (x *GetCurrentNetworkRequestMessage) String() string { func (*GetCurrentNetworkRequestMessage) ProtoMessage() {} func (x *GetCurrentNetworkRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[31] + mi := &file_messages_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2776,7 +3036,7 @@ func (x *GetCurrentNetworkRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCurrentNetworkRequestMessage.ProtoReflect.Descriptor instead. func (*GetCurrentNetworkRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{31} + return file_messages_proto_rawDescGZIP(), []int{35} } type GetCurrentNetworkResponseMessage struct { @@ -2791,7 +3051,7 @@ type GetCurrentNetworkResponseMessage struct { func (x *GetCurrentNetworkResponseMessage) Reset() { *x = GetCurrentNetworkResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[32] + mi := &file_messages_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2804,7 +3064,7 @@ func (x *GetCurrentNetworkResponseMessage) String() string { func (*GetCurrentNetworkResponseMessage) ProtoMessage() {} func (x *GetCurrentNetworkResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[32] + mi := &file_messages_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2817,7 +3077,7 @@ func (x *GetCurrentNetworkResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCurrentNetworkResponseMessage.ProtoReflect.Descriptor instead. func (*GetCurrentNetworkResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{32} + return file_messages_proto_rawDescGZIP(), []int{36} } func (x *GetCurrentNetworkResponseMessage) GetCurrentNetwork() string { @@ -2845,7 +3105,7 @@ type SubmitBlockRequestMessage struct { func (x *SubmitBlockRequestMessage) Reset() { *x = SubmitBlockRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[33] + mi := &file_messages_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2858,7 +3118,7 @@ func (x *SubmitBlockRequestMessage) String() string { func (*SubmitBlockRequestMessage) ProtoMessage() {} func (x *SubmitBlockRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[33] + mi := &file_messages_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2871,7 +3131,7 @@ func (x *SubmitBlockRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitBlockRequestMessage.ProtoReflect.Descriptor instead. func (*SubmitBlockRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{33} + return file_messages_proto_rawDescGZIP(), []int{37} } func (x *SubmitBlockRequestMessage) GetBlock() *BlockMessage { @@ -2892,7 +3152,7 @@ type SubmitBlockResponseMessage struct { func (x *SubmitBlockResponseMessage) Reset() { *x = SubmitBlockResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[34] + mi := &file_messages_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2905,7 +3165,7 @@ func (x *SubmitBlockResponseMessage) String() string { func (*SubmitBlockResponseMessage) ProtoMessage() {} func (x *SubmitBlockResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[34] + mi := &file_messages_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2918,7 +3178,7 @@ func (x *SubmitBlockResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitBlockResponseMessage.ProtoReflect.Descriptor instead. func (*SubmitBlockResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{34} + return file_messages_proto_rawDescGZIP(), []int{38} } func (x *SubmitBlockResponseMessage) GetError() *RPCError { @@ -2939,7 +3199,7 @@ type GetBlockTemplateRequestMessage struct { func (x *GetBlockTemplateRequestMessage) Reset() { *x = GetBlockTemplateRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[35] + mi := &file_messages_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2952,7 +3212,7 @@ func (x *GetBlockTemplateRequestMessage) String() string { func (*GetBlockTemplateRequestMessage) ProtoMessage() {} func (x *GetBlockTemplateRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[35] + mi := &file_messages_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2965,7 +3225,7 @@ func (x *GetBlockTemplateRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockTemplateRequestMessage.ProtoReflect.Descriptor instead. func (*GetBlockTemplateRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{35} + return file_messages_proto_rawDescGZIP(), []int{39} } func (x *GetBlockTemplateRequestMessage) GetPayAddress() string { @@ -2987,7 +3247,7 @@ type GetBlockTemplateResponseMessage struct { func (x *GetBlockTemplateResponseMessage) Reset() { *x = GetBlockTemplateResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[36] + mi := &file_messages_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3000,7 +3260,7 @@ func (x *GetBlockTemplateResponseMessage) String() string { func (*GetBlockTemplateResponseMessage) ProtoMessage() {} func (x *GetBlockTemplateResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[36] + mi := &file_messages_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3013,7 +3273,7 @@ func (x *GetBlockTemplateResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockTemplateResponseMessage.ProtoReflect.Descriptor instead. func (*GetBlockTemplateResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{36} + return file_messages_proto_rawDescGZIP(), []int{40} } func (x *GetBlockTemplateResponseMessage) GetBlockMessage() *BlockMessage { @@ -3039,7 +3299,7 @@ type NotifyBlockAddedRequestMessage struct { func (x *NotifyBlockAddedRequestMessage) Reset() { *x = NotifyBlockAddedRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[37] + mi := &file_messages_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3052,7 +3312,7 @@ func (x *NotifyBlockAddedRequestMessage) String() string { func (*NotifyBlockAddedRequestMessage) ProtoMessage() {} func (x *NotifyBlockAddedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[37] + mi := &file_messages_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3065,7 +3325,7 @@ func (x *NotifyBlockAddedRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyBlockAddedRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyBlockAddedRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{37} + return file_messages_proto_rawDescGZIP(), []int{41} } type NotifyBlockAddedResponseMessage struct { @@ -3079,7 +3339,7 @@ type NotifyBlockAddedResponseMessage struct { func (x *NotifyBlockAddedResponseMessage) Reset() { *x = NotifyBlockAddedResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[38] + mi := &file_messages_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3092,7 +3352,7 @@ func (x *NotifyBlockAddedResponseMessage) String() string { func (*NotifyBlockAddedResponseMessage) ProtoMessage() {} func (x *NotifyBlockAddedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[38] + mi := &file_messages_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3105,7 +3365,7 @@ func (x *NotifyBlockAddedResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyBlockAddedResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyBlockAddedResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{38} + return file_messages_proto_rawDescGZIP(), []int{42} } func (x *NotifyBlockAddedResponseMessage) GetError() *RPCError { @@ -3126,7 +3386,7 @@ type BlockAddedNotificationMessage struct { func (x *BlockAddedNotificationMessage) Reset() { *x = BlockAddedNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[39] + mi := &file_messages_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3139,7 +3399,7 @@ func (x *BlockAddedNotificationMessage) String() string { func (*BlockAddedNotificationMessage) ProtoMessage() {} func (x *BlockAddedNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[39] + mi := &file_messages_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3152,7 +3412,7 @@ func (x *BlockAddedNotificationMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockAddedNotificationMessage.ProtoReflect.Descriptor instead. func (*BlockAddedNotificationMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{39} + return file_messages_proto_rawDescGZIP(), []int{43} } func (x *BlockAddedNotificationMessage) GetBlock() *BlockMessage { @@ -3171,7 +3431,7 @@ type GetPeerAddressesRequestMessage struct { func (x *GetPeerAddressesRequestMessage) Reset() { *x = GetPeerAddressesRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[40] + mi := &file_messages_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3184,7 +3444,7 @@ func (x *GetPeerAddressesRequestMessage) String() string { func (*GetPeerAddressesRequestMessage) ProtoMessage() {} func (x *GetPeerAddressesRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[40] + mi := &file_messages_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3197,7 +3457,7 @@ func (x *GetPeerAddressesRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPeerAddressesRequestMessage.ProtoReflect.Descriptor instead. func (*GetPeerAddressesRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{40} + return file_messages_proto_rawDescGZIP(), []int{44} } type GetPeerAddressesResponseMessage struct { @@ -3212,7 +3472,7 @@ type GetPeerAddressesResponseMessage struct { func (x *GetPeerAddressesResponseMessage) Reset() { *x = GetPeerAddressesResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[41] + mi := &file_messages_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3225,7 +3485,7 @@ func (x *GetPeerAddressesResponseMessage) String() string { func (*GetPeerAddressesResponseMessage) ProtoMessage() {} func (x *GetPeerAddressesResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[41] + mi := &file_messages_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3238,7 +3498,7 @@ func (x *GetPeerAddressesResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPeerAddressesResponseMessage.ProtoReflect.Descriptor instead. func (*GetPeerAddressesResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{41} + return file_messages_proto_rawDescGZIP(), []int{45} } func (x *GetPeerAddressesResponseMessage) GetAddresses() []*GetPeerAddressesKnownAddressMessage { @@ -3266,7 +3526,7 @@ type GetPeerAddressesKnownAddressMessage struct { func (x *GetPeerAddressesKnownAddressMessage) Reset() { *x = GetPeerAddressesKnownAddressMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[42] + mi := &file_messages_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3279,7 +3539,7 @@ func (x *GetPeerAddressesKnownAddressMessage) String() string { func (*GetPeerAddressesKnownAddressMessage) ProtoMessage() {} func (x *GetPeerAddressesKnownAddressMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[42] + mi := &file_messages_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3292,7 +3552,7 @@ func (x *GetPeerAddressesKnownAddressMessage) ProtoReflect() protoreflect.Messag // Deprecated: Use GetPeerAddressesKnownAddressMessage.ProtoReflect.Descriptor instead. func (*GetPeerAddressesKnownAddressMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{42} + return file_messages_proto_rawDescGZIP(), []int{46} } func (x *GetPeerAddressesKnownAddressMessage) GetAddr() string { @@ -3311,7 +3571,7 @@ type GetSelectedTipHashRequestMessage struct { func (x *GetSelectedTipHashRequestMessage) Reset() { *x = GetSelectedTipHashRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[43] + mi := &file_messages_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3324,7 +3584,7 @@ func (x *GetSelectedTipHashRequestMessage) String() string { func (*GetSelectedTipHashRequestMessage) ProtoMessage() {} func (x *GetSelectedTipHashRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[43] + mi := &file_messages_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3337,7 +3597,7 @@ func (x *GetSelectedTipHashRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSelectedTipHashRequestMessage.ProtoReflect.Descriptor instead. func (*GetSelectedTipHashRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{43} + return file_messages_proto_rawDescGZIP(), []int{47} } type GetSelectedTipHashResponseMessage struct { @@ -3352,7 +3612,7 @@ type GetSelectedTipHashResponseMessage struct { func (x *GetSelectedTipHashResponseMessage) Reset() { *x = GetSelectedTipHashResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[44] + mi := &file_messages_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3365,7 +3625,7 @@ func (x *GetSelectedTipHashResponseMessage) String() string { func (*GetSelectedTipHashResponseMessage) ProtoMessage() {} func (x *GetSelectedTipHashResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[44] + mi := &file_messages_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3378,7 +3638,7 @@ func (x *GetSelectedTipHashResponseMessage) ProtoReflect() protoreflect.Message // Deprecated: Use GetSelectedTipHashResponseMessage.ProtoReflect.Descriptor instead. func (*GetSelectedTipHashResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{44} + return file_messages_proto_rawDescGZIP(), []int{48} } func (x *GetSelectedTipHashResponseMessage) GetSelectedTipHash() string { @@ -3408,7 +3668,7 @@ type MempoolEntry struct { func (x *MempoolEntry) Reset() { *x = MempoolEntry{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[45] + mi := &file_messages_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3421,7 +3681,7 @@ func (x *MempoolEntry) String() string { func (*MempoolEntry) ProtoMessage() {} func (x *MempoolEntry) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[45] + mi := &file_messages_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3434,7 +3694,7 @@ func (x *MempoolEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use MempoolEntry.ProtoReflect.Descriptor instead. func (*MempoolEntry) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{45} + return file_messages_proto_rawDescGZIP(), []int{49} } func (x *MempoolEntry) GetFee() uint64 { @@ -3462,7 +3722,7 @@ type GetMempoolEntryRequestMessage struct { func (x *GetMempoolEntryRequestMessage) Reset() { *x = GetMempoolEntryRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[46] + mi := &file_messages_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3475,7 +3735,7 @@ func (x *GetMempoolEntryRequestMessage) String() string { func (*GetMempoolEntryRequestMessage) ProtoMessage() {} func (x *GetMempoolEntryRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[46] + mi := &file_messages_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3488,7 +3748,7 @@ func (x *GetMempoolEntryRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMempoolEntryRequestMessage.ProtoReflect.Descriptor instead. func (*GetMempoolEntryRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{46} + return file_messages_proto_rawDescGZIP(), []int{50} } func (x *GetMempoolEntryRequestMessage) GetTxId() string { @@ -3510,7 +3770,7 @@ type GetMempoolEntryResponseMessage struct { func (x *GetMempoolEntryResponseMessage) Reset() { *x = GetMempoolEntryResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[47] + mi := &file_messages_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3523,7 +3783,7 @@ func (x *GetMempoolEntryResponseMessage) String() string { func (*GetMempoolEntryResponseMessage) ProtoMessage() {} func (x *GetMempoolEntryResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[47] + mi := &file_messages_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3536,7 +3796,7 @@ func (x *GetMempoolEntryResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMempoolEntryResponseMessage.ProtoReflect.Descriptor instead. func (*GetMempoolEntryResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{47} + return file_messages_proto_rawDescGZIP(), []int{51} } func (x *GetMempoolEntryResponseMessage) GetEntry() *MempoolEntry { @@ -3562,7 +3822,7 @@ type GetMempoolEntriesRequestMessage struct { func (x *GetMempoolEntriesRequestMessage) Reset() { *x = GetMempoolEntriesRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[48] + mi := &file_messages_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3575,7 +3835,7 @@ func (x *GetMempoolEntriesRequestMessage) String() string { func (*GetMempoolEntriesRequestMessage) ProtoMessage() {} func (x *GetMempoolEntriesRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[48] + mi := &file_messages_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3588,7 +3848,7 @@ func (x *GetMempoolEntriesRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMempoolEntriesRequestMessage.ProtoReflect.Descriptor instead. func (*GetMempoolEntriesRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{48} + return file_messages_proto_rawDescGZIP(), []int{52} } type GetMempoolEntriesResponseMessage struct { @@ -3603,7 +3863,7 @@ type GetMempoolEntriesResponseMessage struct { func (x *GetMempoolEntriesResponseMessage) Reset() { *x = GetMempoolEntriesResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[49] + mi := &file_messages_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3616,7 +3876,7 @@ func (x *GetMempoolEntriesResponseMessage) String() string { func (*GetMempoolEntriesResponseMessage) ProtoMessage() {} func (x *GetMempoolEntriesResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[49] + mi := &file_messages_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3629,7 +3889,7 @@ func (x *GetMempoolEntriesResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMempoolEntriesResponseMessage.ProtoReflect.Descriptor instead. func (*GetMempoolEntriesResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{49} + return file_messages_proto_rawDescGZIP(), []int{53} } func (x *GetMempoolEntriesResponseMessage) GetEntries() []*MempoolEntry { @@ -3655,7 +3915,7 @@ type GetConnectedPeerInfoRequestMessage struct { func (x *GetConnectedPeerInfoRequestMessage) Reset() { *x = GetConnectedPeerInfoRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[50] + mi := &file_messages_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3668,7 +3928,7 @@ func (x *GetConnectedPeerInfoRequestMessage) String() string { func (*GetConnectedPeerInfoRequestMessage) ProtoMessage() {} func (x *GetConnectedPeerInfoRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[50] + mi := &file_messages_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3681,7 +3941,7 @@ func (x *GetConnectedPeerInfoRequestMessage) ProtoReflect() protoreflect.Message // Deprecated: Use GetConnectedPeerInfoRequestMessage.ProtoReflect.Descriptor instead. func (*GetConnectedPeerInfoRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{50} + return file_messages_proto_rawDescGZIP(), []int{54} } type GetConnectedPeerInfoResponseMessage struct { @@ -3696,7 +3956,7 @@ type GetConnectedPeerInfoResponseMessage struct { func (x *GetConnectedPeerInfoResponseMessage) Reset() { *x = GetConnectedPeerInfoResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[51] + mi := &file_messages_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3709,7 +3969,7 @@ func (x *GetConnectedPeerInfoResponseMessage) String() string { func (*GetConnectedPeerInfoResponseMessage) ProtoMessage() {} func (x *GetConnectedPeerInfoResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[51] + mi := &file_messages_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3722,7 +3982,7 @@ func (x *GetConnectedPeerInfoResponseMessage) ProtoReflect() protoreflect.Messag // Deprecated: Use GetConnectedPeerInfoResponseMessage.ProtoReflect.Descriptor instead. func (*GetConnectedPeerInfoResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{51} + return file_messages_proto_rawDescGZIP(), []int{55} } func (x *GetConnectedPeerInfoResponseMessage) GetInfos() []*GetConnectedPeerInfoMessage { @@ -3759,7 +4019,7 @@ type GetConnectedPeerInfoMessage struct { func (x *GetConnectedPeerInfoMessage) Reset() { *x = GetConnectedPeerInfoMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[52] + mi := &file_messages_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3772,7 +4032,7 @@ func (x *GetConnectedPeerInfoMessage) String() string { func (*GetConnectedPeerInfoMessage) ProtoMessage() {} func (x *GetConnectedPeerInfoMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[52] + mi := &file_messages_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3785,7 +4045,7 @@ func (x *GetConnectedPeerInfoMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConnectedPeerInfoMessage.ProtoReflect.Descriptor instead. func (*GetConnectedPeerInfoMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{52} + return file_messages_proto_rawDescGZIP(), []int{56} } func (x *GetConnectedPeerInfoMessage) GetId() string { @@ -3870,7 +4130,7 @@ type AddPeerRequestMessage struct { func (x *AddPeerRequestMessage) Reset() { *x = AddPeerRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[53] + mi := &file_messages_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3883,7 +4143,7 @@ func (x *AddPeerRequestMessage) String() string { func (*AddPeerRequestMessage) ProtoMessage() {} func (x *AddPeerRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[53] + mi := &file_messages_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3896,7 +4156,7 @@ func (x *AddPeerRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPeerRequestMessage.ProtoReflect.Descriptor instead. func (*AddPeerRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{53} + return file_messages_proto_rawDescGZIP(), []int{57} } func (x *AddPeerRequestMessage) GetAddress() string { @@ -3924,7 +4184,7 @@ type AddPeerResponseMessage struct { func (x *AddPeerResponseMessage) Reset() { *x = AddPeerResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[54] + mi := &file_messages_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3937,7 +4197,7 @@ func (x *AddPeerResponseMessage) String() string { func (*AddPeerResponseMessage) ProtoMessage() {} func (x *AddPeerResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[54] + mi := &file_messages_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3950,7 +4210,7 @@ func (x *AddPeerResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPeerResponseMessage.ProtoReflect.Descriptor instead. func (*AddPeerResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{54} + return file_messages_proto_rawDescGZIP(), []int{58} } func (x *AddPeerResponseMessage) GetError() *RPCError { @@ -3971,7 +4231,7 @@ type SubmitTransactionRequestMessage struct { func (x *SubmitTransactionRequestMessage) Reset() { *x = SubmitTransactionRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[55] + mi := &file_messages_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3984,7 +4244,7 @@ func (x *SubmitTransactionRequestMessage) String() string { func (*SubmitTransactionRequestMessage) ProtoMessage() {} func (x *SubmitTransactionRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[55] + mi := &file_messages_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3997,7 +4257,7 @@ func (x *SubmitTransactionRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTransactionRequestMessage.ProtoReflect.Descriptor instead. func (*SubmitTransactionRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{55} + return file_messages_proto_rawDescGZIP(), []int{59} } func (x *SubmitTransactionRequestMessage) GetTransactionMessage() *TransactionMessage { @@ -4019,7 +4279,7 @@ type SubmitTransactionResponseMessage struct { func (x *SubmitTransactionResponseMessage) Reset() { *x = SubmitTransactionResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[56] + mi := &file_messages_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4032,7 +4292,7 @@ func (x *SubmitTransactionResponseMessage) String() string { func (*SubmitTransactionResponseMessage) ProtoMessage() {} func (x *SubmitTransactionResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[56] + mi := &file_messages_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4045,7 +4305,7 @@ func (x *SubmitTransactionResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTransactionResponseMessage.ProtoReflect.Descriptor instead. func (*SubmitTransactionResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{56} + return file_messages_proto_rawDescGZIP(), []int{60} } func (x *SubmitTransactionResponseMessage) GetTxId() string { @@ -4071,7 +4331,7 @@ type NotifyChainChangedRequestMessage struct { func (x *NotifyChainChangedRequestMessage) Reset() { *x = NotifyChainChangedRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[57] + mi := &file_messages_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4084,7 +4344,7 @@ func (x *NotifyChainChangedRequestMessage) String() string { func (*NotifyChainChangedRequestMessage) ProtoMessage() {} func (x *NotifyChainChangedRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[57] + mi := &file_messages_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4097,7 +4357,7 @@ func (x *NotifyChainChangedRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyChainChangedRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyChainChangedRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{57} + return file_messages_proto_rawDescGZIP(), []int{61} } type NotifyChainChangedResponseMessage struct { @@ -4111,7 +4371,7 @@ type NotifyChainChangedResponseMessage struct { func (x *NotifyChainChangedResponseMessage) Reset() { *x = NotifyChainChangedResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[58] + mi := &file_messages_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4124,7 +4384,7 @@ func (x *NotifyChainChangedResponseMessage) String() string { func (*NotifyChainChangedResponseMessage) ProtoMessage() {} func (x *NotifyChainChangedResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[58] + mi := &file_messages_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4137,7 +4397,7 @@ func (x *NotifyChainChangedResponseMessage) ProtoReflect() protoreflect.Message // Deprecated: Use NotifyChainChangedResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyChainChangedResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{58} + return file_messages_proto_rawDescGZIP(), []int{62} } func (x *NotifyChainChangedResponseMessage) GetError() *RPCError { @@ -4159,7 +4419,7 @@ type ChainChangedNotificationMessage struct { func (x *ChainChangedNotificationMessage) Reset() { *x = ChainChangedNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[59] + mi := &file_messages_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4172,7 +4432,7 @@ func (x *ChainChangedNotificationMessage) String() string { func (*ChainChangedNotificationMessage) ProtoMessage() {} func (x *ChainChangedNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[59] + mi := &file_messages_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4185,7 +4445,7 @@ func (x *ChainChangedNotificationMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChainChangedNotificationMessage.ProtoReflect.Descriptor instead. func (*ChainChangedNotificationMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{59} + return file_messages_proto_rawDescGZIP(), []int{63} } func (x *ChainChangedNotificationMessage) GetRemovedChainBlockHashes() []string { @@ -4214,7 +4474,7 @@ type ChainBlock struct { func (x *ChainBlock) Reset() { *x = ChainBlock{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[60] + mi := &file_messages_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4227,7 +4487,7 @@ func (x *ChainBlock) String() string { func (*ChainBlock) ProtoMessage() {} func (x *ChainBlock) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[60] + mi := &file_messages_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4240,7 +4500,7 @@ func (x *ChainBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use ChainBlock.ProtoReflect.Descriptor instead. func (*ChainBlock) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{60} + return file_messages_proto_rawDescGZIP(), []int{64} } func (x *ChainBlock) GetHash() string { @@ -4269,7 +4529,7 @@ type AcceptedBlock struct { func (x *AcceptedBlock) Reset() { *x = AcceptedBlock{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[61] + mi := &file_messages_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4282,7 +4542,7 @@ func (x *AcceptedBlock) String() string { func (*AcceptedBlock) ProtoMessage() {} func (x *AcceptedBlock) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[61] + mi := &file_messages_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4295,7 +4555,7 @@ func (x *AcceptedBlock) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptedBlock.ProtoReflect.Descriptor instead. func (*AcceptedBlock) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{61} + return file_messages_proto_rawDescGZIP(), []int{65} } func (x *AcceptedBlock) GetHash() string { @@ -4325,7 +4585,7 @@ type GetBlockRequestMessage struct { func (x *GetBlockRequestMessage) Reset() { *x = GetBlockRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[62] + mi := &file_messages_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4338,7 +4598,7 @@ func (x *GetBlockRequestMessage) String() string { func (*GetBlockRequestMessage) ProtoMessage() {} func (x *GetBlockRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[62] + mi := &file_messages_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4351,7 +4611,7 @@ func (x *GetBlockRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockRequestMessage.ProtoReflect.Descriptor instead. func (*GetBlockRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{62} + return file_messages_proto_rawDescGZIP(), []int{66} } func (x *GetBlockRequestMessage) GetHash() string { @@ -4388,7 +4648,7 @@ type GetBlockResponseMessage struct { func (x *GetBlockResponseMessage) Reset() { *x = GetBlockResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[63] + mi := &file_messages_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4401,7 +4661,7 @@ func (x *GetBlockResponseMessage) String() string { func (*GetBlockResponseMessage) ProtoMessage() {} func (x *GetBlockResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[63] + mi := &file_messages_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4414,7 +4674,7 @@ func (x *GetBlockResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockResponseMessage.ProtoReflect.Descriptor instead. func (*GetBlockResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{63} + return file_messages_proto_rawDescGZIP(), []int{67} } func (x *GetBlockResponseMessage) GetBlockHash() string { @@ -4462,7 +4722,7 @@ type BlockVerboseData struct { func (x *BlockVerboseData) Reset() { *x = BlockVerboseData{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[64] + mi := &file_messages_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4475,7 +4735,7 @@ func (x *BlockVerboseData) String() string { func (*BlockVerboseData) ProtoMessage() {} func (x *BlockVerboseData) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[64] + mi := &file_messages_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4488,7 +4748,7 @@ func (x *BlockVerboseData) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockVerboseData.ProtoReflect.Descriptor instead. func (*BlockVerboseData) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{64} + return file_messages_proto_rawDescGZIP(), []int{68} } func (x *BlockVerboseData) GetHash() string { @@ -4613,7 +4873,7 @@ type TransactionVerboseData struct { func (x *TransactionVerboseData) Reset() { *x = TransactionVerboseData{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[65] + mi := &file_messages_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4626,7 +4886,7 @@ func (x *TransactionVerboseData) String() string { func (*TransactionVerboseData) ProtoMessage() {} func (x *TransactionVerboseData) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[65] + mi := &file_messages_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4639,7 +4899,7 @@ func (x *TransactionVerboseData) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionVerboseData.ProtoReflect.Descriptor instead. func (*TransactionVerboseData) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{65} + return file_messages_proto_rawDescGZIP(), []int{69} } func (x *TransactionVerboseData) GetTxId() string { @@ -4754,7 +5014,7 @@ type TransactionVerboseInput struct { func (x *TransactionVerboseInput) Reset() { *x = TransactionVerboseInput{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[66] + mi := &file_messages_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4767,7 +5027,7 @@ func (x *TransactionVerboseInput) String() string { func (*TransactionVerboseInput) ProtoMessage() {} func (x *TransactionVerboseInput) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[66] + mi := &file_messages_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4780,7 +5040,7 @@ func (x *TransactionVerboseInput) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionVerboseInput.ProtoReflect.Descriptor instead. func (*TransactionVerboseInput) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{66} + return file_messages_proto_rawDescGZIP(), []int{70} } func (x *TransactionVerboseInput) GetTxId() string { @@ -4823,7 +5083,7 @@ type ScriptSig struct { func (x *ScriptSig) Reset() { *x = ScriptSig{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[67] + mi := &file_messages_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4836,7 +5096,7 @@ func (x *ScriptSig) String() string { func (*ScriptSig) ProtoMessage() {} func (x *ScriptSig) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[67] + mi := &file_messages_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4849,7 +5109,7 @@ func (x *ScriptSig) ProtoReflect() protoreflect.Message { // Deprecated: Use ScriptSig.ProtoReflect.Descriptor instead. func (*ScriptSig) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{67} + return file_messages_proto_rawDescGZIP(), []int{71} } func (x *ScriptSig) GetAsm() string { @@ -4879,7 +5139,7 @@ type TransactionVerboseOutput struct { func (x *TransactionVerboseOutput) Reset() { *x = TransactionVerboseOutput{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[68] + mi := &file_messages_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4892,7 +5152,7 @@ func (x *TransactionVerboseOutput) String() string { func (*TransactionVerboseOutput) ProtoMessage() {} func (x *TransactionVerboseOutput) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[68] + mi := &file_messages_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4905,7 +5165,7 @@ func (x *TransactionVerboseOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionVerboseOutput.ProtoReflect.Descriptor instead. func (*TransactionVerboseOutput) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{68} + return file_messages_proto_rawDescGZIP(), []int{72} } func (x *TransactionVerboseOutput) GetValue() uint64 { @@ -4943,7 +5203,7 @@ type ScriptPubKeyResult struct { func (x *ScriptPubKeyResult) Reset() { *x = ScriptPubKeyResult{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[69] + mi := &file_messages_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4956,7 +5216,7 @@ func (x *ScriptPubKeyResult) String() string { func (*ScriptPubKeyResult) ProtoMessage() {} func (x *ScriptPubKeyResult) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[69] + mi := &file_messages_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4969,7 +5229,7 @@ func (x *ScriptPubKeyResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ScriptPubKeyResult.ProtoReflect.Descriptor instead. func (*ScriptPubKeyResult) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{69} + return file_messages_proto_rawDescGZIP(), []int{73} } func (x *ScriptPubKeyResult) GetAsm() string { @@ -5011,7 +5271,7 @@ type GetSubnetworkRequestMessage struct { func (x *GetSubnetworkRequestMessage) Reset() { *x = GetSubnetworkRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[70] + mi := &file_messages_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5024,7 +5284,7 @@ func (x *GetSubnetworkRequestMessage) String() string { func (*GetSubnetworkRequestMessage) ProtoMessage() {} func (x *GetSubnetworkRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[70] + mi := &file_messages_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5037,7 +5297,7 @@ func (x *GetSubnetworkRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSubnetworkRequestMessage.ProtoReflect.Descriptor instead. func (*GetSubnetworkRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{70} + return file_messages_proto_rawDescGZIP(), []int{74} } func (x *GetSubnetworkRequestMessage) GetSubnetworkId() string { @@ -5059,7 +5319,7 @@ type GetSubnetworkResponseMessage struct { func (x *GetSubnetworkResponseMessage) Reset() { *x = GetSubnetworkResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[71] + mi := &file_messages_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5072,7 +5332,7 @@ func (x *GetSubnetworkResponseMessage) String() string { func (*GetSubnetworkResponseMessage) ProtoMessage() {} func (x *GetSubnetworkResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[71] + mi := &file_messages_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5085,7 +5345,7 @@ func (x *GetSubnetworkResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSubnetworkResponseMessage.ProtoReflect.Descriptor instead. func (*GetSubnetworkResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{71} + return file_messages_proto_rawDescGZIP(), []int{75} } func (x *GetSubnetworkResponseMessage) GetGasLimit() uint64 { @@ -5114,7 +5374,7 @@ type GetChainFromBlockRequestMessage struct { func (x *GetChainFromBlockRequestMessage) Reset() { *x = GetChainFromBlockRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[72] + mi := &file_messages_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5127,7 +5387,7 @@ func (x *GetChainFromBlockRequestMessage) String() string { func (*GetChainFromBlockRequestMessage) ProtoMessage() {} func (x *GetChainFromBlockRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[72] + mi := &file_messages_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5140,7 +5400,7 @@ func (x *GetChainFromBlockRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainFromBlockRequestMessage.ProtoReflect.Descriptor instead. func (*GetChainFromBlockRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{72} + return file_messages_proto_rawDescGZIP(), []int{76} } func (x *GetChainFromBlockRequestMessage) GetStartHash() string { @@ -5171,7 +5431,7 @@ type GetChainFromBlockResponseMessage struct { func (x *GetChainFromBlockResponseMessage) Reset() { *x = GetChainFromBlockResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[73] + mi := &file_messages_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5184,7 +5444,7 @@ func (x *GetChainFromBlockResponseMessage) String() string { func (*GetChainFromBlockResponseMessage) ProtoMessage() {} func (x *GetChainFromBlockResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[73] + mi := &file_messages_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5197,7 +5457,7 @@ func (x *GetChainFromBlockResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainFromBlockResponseMessage.ProtoReflect.Descriptor instead. func (*GetChainFromBlockResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{73} + return file_messages_proto_rawDescGZIP(), []int{77} } func (x *GetChainFromBlockResponseMessage) GetRemovedChainBlockHashes() []string { @@ -5242,7 +5502,7 @@ type GetBlocksRequestMessage struct { func (x *GetBlocksRequestMessage) Reset() { *x = GetBlocksRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[74] + mi := &file_messages_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5255,7 +5515,7 @@ func (x *GetBlocksRequestMessage) String() string { func (*GetBlocksRequestMessage) ProtoMessage() {} func (x *GetBlocksRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[74] + mi := &file_messages_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5268,7 +5528,7 @@ func (x *GetBlocksRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlocksRequestMessage.ProtoReflect.Descriptor instead. func (*GetBlocksRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{74} + return file_messages_proto_rawDescGZIP(), []int{78} } func (x *GetBlocksRequestMessage) GetLowHash() string { @@ -5313,7 +5573,7 @@ type GetBlocksResponseMessage struct { func (x *GetBlocksResponseMessage) Reset() { *x = GetBlocksResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[75] + mi := &file_messages_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5326,7 +5586,7 @@ func (x *GetBlocksResponseMessage) String() string { func (*GetBlocksResponseMessage) ProtoMessage() {} func (x *GetBlocksResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[75] + mi := &file_messages_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5339,7 +5599,7 @@ func (x *GetBlocksResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlocksResponseMessage.ProtoReflect.Descriptor instead. func (*GetBlocksResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{75} + return file_messages_proto_rawDescGZIP(), []int{79} } func (x *GetBlocksResponseMessage) GetBlockHashes() []string { @@ -5379,7 +5639,7 @@ type GetBlockCountRequestMessage struct { func (x *GetBlockCountRequestMessage) Reset() { *x = GetBlockCountRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[76] + mi := &file_messages_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5392,7 +5652,7 @@ func (x *GetBlockCountRequestMessage) String() string { func (*GetBlockCountRequestMessage) ProtoMessage() {} func (x *GetBlockCountRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[76] + mi := &file_messages_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5405,7 +5665,7 @@ func (x *GetBlockCountRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockCountRequestMessage.ProtoReflect.Descriptor instead. func (*GetBlockCountRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{76} + return file_messages_proto_rawDescGZIP(), []int{80} } type GetBlockCountResponseMessage struct { @@ -5420,7 +5680,7 @@ type GetBlockCountResponseMessage struct { func (x *GetBlockCountResponseMessage) Reset() { *x = GetBlockCountResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[77] + mi := &file_messages_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5433,7 +5693,7 @@ func (x *GetBlockCountResponseMessage) String() string { func (*GetBlockCountResponseMessage) ProtoMessage() {} func (x *GetBlockCountResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[77] + mi := &file_messages_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5446,7 +5706,7 @@ func (x *GetBlockCountResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockCountResponseMessage.ProtoReflect.Descriptor instead. func (*GetBlockCountResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{77} + return file_messages_proto_rawDescGZIP(), []int{81} } func (x *GetBlockCountResponseMessage) GetBlockCount() uint64 { @@ -5472,7 +5732,7 @@ type GetBlockDagInfoRequestMessage struct { func (x *GetBlockDagInfoRequestMessage) Reset() { *x = GetBlockDagInfoRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[78] + mi := &file_messages_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5485,7 +5745,7 @@ func (x *GetBlockDagInfoRequestMessage) String() string { func (*GetBlockDagInfoRequestMessage) ProtoMessage() {} func (x *GetBlockDagInfoRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[78] + mi := &file_messages_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5498,7 +5758,7 @@ func (x *GetBlockDagInfoRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockDagInfoRequestMessage.ProtoReflect.Descriptor instead. func (*GetBlockDagInfoRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{78} + return file_messages_proto_rawDescGZIP(), []int{82} } type GetBlockDagInfoResponseMessage struct { @@ -5518,7 +5778,7 @@ type GetBlockDagInfoResponseMessage struct { func (x *GetBlockDagInfoResponseMessage) Reset() { *x = GetBlockDagInfoResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[79] + mi := &file_messages_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5531,7 +5791,7 @@ func (x *GetBlockDagInfoResponseMessage) String() string { func (*GetBlockDagInfoResponseMessage) ProtoMessage() {} func (x *GetBlockDagInfoResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[79] + mi := &file_messages_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5544,7 +5804,7 @@ func (x *GetBlockDagInfoResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBlockDagInfoResponseMessage.ProtoReflect.Descriptor instead. func (*GetBlockDagInfoResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{79} + return file_messages_proto_rawDescGZIP(), []int{83} } func (x *GetBlockDagInfoResponseMessage) GetNetworkName() string { @@ -5607,7 +5867,7 @@ type ResolveFinalityConflictRequestMessage struct { func (x *ResolveFinalityConflictRequestMessage) Reset() { *x = ResolveFinalityConflictRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[80] + mi := &file_messages_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5620,7 +5880,7 @@ func (x *ResolveFinalityConflictRequestMessage) String() string { func (*ResolveFinalityConflictRequestMessage) ProtoMessage() {} func (x *ResolveFinalityConflictRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[80] + mi := &file_messages_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5633,7 +5893,7 @@ func (x *ResolveFinalityConflictRequestMessage) ProtoReflect() protoreflect.Mess // Deprecated: Use ResolveFinalityConflictRequestMessage.ProtoReflect.Descriptor instead. func (*ResolveFinalityConflictRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{80} + return file_messages_proto_rawDescGZIP(), []int{84} } func (x *ResolveFinalityConflictRequestMessage) GetFinalityBlockHash() string { @@ -5654,7 +5914,7 @@ type ResolveFinalityConflictResponseMessage struct { func (x *ResolveFinalityConflictResponseMessage) Reset() { *x = ResolveFinalityConflictResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[81] + mi := &file_messages_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5667,7 +5927,7 @@ func (x *ResolveFinalityConflictResponseMessage) String() string { func (*ResolveFinalityConflictResponseMessage) ProtoMessage() {} func (x *ResolveFinalityConflictResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[81] + mi := &file_messages_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5680,7 +5940,7 @@ func (x *ResolveFinalityConflictResponseMessage) ProtoReflect() protoreflect.Mes // Deprecated: Use ResolveFinalityConflictResponseMessage.ProtoReflect.Descriptor instead. func (*ResolveFinalityConflictResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{81} + return file_messages_proto_rawDescGZIP(), []int{85} } func (x *ResolveFinalityConflictResponseMessage) GetError() *RPCError { @@ -5699,7 +5959,7 @@ type NotifyFinalityConflictsRequestMessage struct { func (x *NotifyFinalityConflictsRequestMessage) Reset() { *x = NotifyFinalityConflictsRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[82] + mi := &file_messages_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5712,7 +5972,7 @@ func (x *NotifyFinalityConflictsRequestMessage) String() string { func (*NotifyFinalityConflictsRequestMessage) ProtoMessage() {} func (x *NotifyFinalityConflictsRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[82] + mi := &file_messages_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5725,7 +5985,7 @@ func (x *NotifyFinalityConflictsRequestMessage) ProtoReflect() protoreflect.Mess // Deprecated: Use NotifyFinalityConflictsRequestMessage.ProtoReflect.Descriptor instead. func (*NotifyFinalityConflictsRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{82} + return file_messages_proto_rawDescGZIP(), []int{86} } type NotifyFinalityConflictsResponseMessage struct { @@ -5739,7 +5999,7 @@ type NotifyFinalityConflictsResponseMessage struct { func (x *NotifyFinalityConflictsResponseMessage) Reset() { *x = NotifyFinalityConflictsResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[83] + mi := &file_messages_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5752,7 +6012,7 @@ func (x *NotifyFinalityConflictsResponseMessage) String() string { func (*NotifyFinalityConflictsResponseMessage) ProtoMessage() {} func (x *NotifyFinalityConflictsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[83] + mi := &file_messages_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5765,7 +6025,7 @@ func (x *NotifyFinalityConflictsResponseMessage) ProtoReflect() protoreflect.Mes // Deprecated: Use NotifyFinalityConflictsResponseMessage.ProtoReflect.Descriptor instead. func (*NotifyFinalityConflictsResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{83} + return file_messages_proto_rawDescGZIP(), []int{87} } func (x *NotifyFinalityConflictsResponseMessage) GetError() *RPCError { @@ -5786,7 +6046,7 @@ type FinalityConflictNotificationMessage struct { func (x *FinalityConflictNotificationMessage) Reset() { *x = FinalityConflictNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[84] + mi := &file_messages_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5799,7 +6059,7 @@ func (x *FinalityConflictNotificationMessage) String() string { func (*FinalityConflictNotificationMessage) ProtoMessage() {} func (x *FinalityConflictNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[84] + mi := &file_messages_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5812,7 +6072,7 @@ func (x *FinalityConflictNotificationMessage) ProtoReflect() protoreflect.Messag // Deprecated: Use FinalityConflictNotificationMessage.ProtoReflect.Descriptor instead. func (*FinalityConflictNotificationMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{84} + return file_messages_proto_rawDescGZIP(), []int{88} } func (x *FinalityConflictNotificationMessage) GetViolatingBlockHash() string { @@ -5833,7 +6093,7 @@ type FinalityConflictResolvedNotificationMessage struct { func (x *FinalityConflictResolvedNotificationMessage) Reset() { *x = FinalityConflictResolvedNotificationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[85] + mi := &file_messages_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5846,7 +6106,7 @@ func (x *FinalityConflictResolvedNotificationMessage) String() string { func (*FinalityConflictResolvedNotificationMessage) ProtoMessage() {} func (x *FinalityConflictResolvedNotificationMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[85] + mi := &file_messages_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5859,7 +6119,7 @@ func (x *FinalityConflictResolvedNotificationMessage) ProtoReflect() protoreflec // Deprecated: Use FinalityConflictResolvedNotificationMessage.ProtoReflect.Descriptor instead. func (*FinalityConflictResolvedNotificationMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{85} + return file_messages_proto_rawDescGZIP(), []int{89} } func (x *FinalityConflictResolvedNotificationMessage) GetFinalityBlockHash() string { @@ -5878,7 +6138,7 @@ type ShutDownRequestMessage struct { func (x *ShutDownRequestMessage) Reset() { *x = ShutDownRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[86] + mi := &file_messages_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5891,7 +6151,7 @@ func (x *ShutDownRequestMessage) String() string { func (*ShutDownRequestMessage) ProtoMessage() {} func (x *ShutDownRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[86] + mi := &file_messages_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5904,7 +6164,7 @@ func (x *ShutDownRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ShutDownRequestMessage.ProtoReflect.Descriptor instead. func (*ShutDownRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{86} + return file_messages_proto_rawDescGZIP(), []int{90} } type ShutDownResponseMessage struct { @@ -5918,7 +6178,7 @@ type ShutDownResponseMessage struct { func (x *ShutDownResponseMessage) Reset() { *x = ShutDownResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[87] + mi := &file_messages_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5931,7 +6191,7 @@ func (x *ShutDownResponseMessage) String() string { func (*ShutDownResponseMessage) ProtoMessage() {} func (x *ShutDownResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[87] + mi := &file_messages_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5944,7 +6204,7 @@ func (x *ShutDownResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ShutDownResponseMessage.ProtoReflect.Descriptor instead. func (*ShutDownResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{87} + return file_messages_proto_rawDescGZIP(), []int{91} } func (x *ShutDownResponseMessage) GetError() *RPCError { @@ -5967,7 +6227,7 @@ type GetHeadersRequestMessage struct { func (x *GetHeadersRequestMessage) Reset() { *x = GetHeadersRequestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[88] + mi := &file_messages_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5980,7 +6240,7 @@ func (x *GetHeadersRequestMessage) String() string { func (*GetHeadersRequestMessage) ProtoMessage() {} func (x *GetHeadersRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[88] + mi := &file_messages_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5993,7 +6253,7 @@ func (x *GetHeadersRequestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHeadersRequestMessage.ProtoReflect.Descriptor instead. func (*GetHeadersRequestMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{88} + return file_messages_proto_rawDescGZIP(), []int{92} } func (x *GetHeadersRequestMessage) GetStartHash() string { @@ -6029,7 +6289,7 @@ type GetHeadersResponseMessage struct { func (x *GetHeadersResponseMessage) Reset() { *x = GetHeadersResponseMessage{} if protoimpl.UnsafeEnabled { - mi := &file_messages_proto_msgTypes[89] + mi := &file_messages_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6042,7 +6302,7 @@ func (x *GetHeadersResponseMessage) String() string { func (*GetHeadersResponseMessage) ProtoMessage() {} func (x *GetHeadersResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_messages_proto_msgTypes[89] + mi := &file_messages_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6055,7 +6315,7 @@ func (x *GetHeadersResponseMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHeadersResponseMessage.ProtoReflect.Descriptor instead. func (*GetHeadersResponseMessage) Descriptor() ([]byte, []int) { - return file_messages_proto_rawDescGZIP(), []int{89} + return file_messages_proto_rawDescGZIP(), []int{93} } func (x *GetHeadersResponseMessage) GetHeaders() []string { @@ -6076,7 +6336,7 @@ var File_messages_proto protoreflect.FileDescriptor var file_messages_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x22, 0x8d, 0x33, 0x0a, 0x0d, + 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x22, 0xbc, 0x36, 0x0a, 0x0d, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, @@ -6104,1038 +6364,1083 @@ var file_messages_proto_rawDesc = []byte{ 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x12, 0x50, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, - 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x5c, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, - 0x78, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x12, 0x47, 0x0a, 0x0d, 0x44, 0x6f, 0x6e, 0x65, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x44, 0x6f, 0x6e, - 0x65, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x0d, - 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x49, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, - 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, - 0x12, 0x41, 0x0a, 0x0b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x54, 0x69, 0x70, 0x12, 0x32, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x56, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, - 0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, - 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x69, 0x0a, - 0x18, 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, - 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x73, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x5a, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x17, 0x67, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, - 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, - 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x63, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, - 0x0a, 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, - 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, - 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, - 0x17, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, - 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4b, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x61, - 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, - 0x0f, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x64, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, - 0x18, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x73, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x73, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, - 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4e, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x67, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x84, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x15, 0x67, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x18, 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, - 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x86, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, - 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, - 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x89, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8a, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x8b, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, - 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x17, - 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8d, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, - 0x00, 0x52, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, - 0x52, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, - 0x0a, 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, - 0x0a, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x91, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x92, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, - 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x93, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x94, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, - 0x0a, 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x95, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x73, - 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, - 0x0a, 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x96, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, - 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x98, 0x08, + 0x73, 0x12, 0x4a, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, + 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, + 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x44, 0x6f, 0x6e, + 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x67, 0x65, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x10, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x34, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x12, 0x56, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x12, 0x59, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x08, 0x69, 0x62, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x0d, 0x69, 0x6e, + 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, + 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, + 0x12, 0x2c, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x41, + 0x0a, 0x0b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x70, 0x12, 0x32, 0x0a, 0x06, 0x76, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x56, 0x65, + 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, + 0x65, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x35, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x13, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x41, 0x0a, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x77, + 0x0a, 0x1d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, + 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, + 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x41, + 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x62, 0x0a, 0x16, 0x69, 0x62, 0x64, 0x52, 0x6f, + 0x6f, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, + 0x65, 0x74, 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x16, 0x69, 0x62, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x55, 0x54, 0x58, 0x4f, + 0x53, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x50, 0x0a, 0x10, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, + 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x4d, 0x0a, + 0x0f, 0x69, 0x62, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x62, 0x64, + 0x52, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x69, 0x0a, 0x18, + 0x67, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, + 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, + 0x0a, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xee, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, + 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x63, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x69, 0x0a, + 0x18, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf3, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, + 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xf4, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x67, 0x65, 0x74, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf5, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x67, 0x65, 0x74, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0xf6, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x17, + 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf7, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1b, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0xf8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x75, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xf9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x1c, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4b, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0xfa, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x64, + 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0f, + 0x61, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0xfb, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x64, 0x64, + 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, + 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xfc, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x73, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, 0x0a, 0x19, 0x73, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0xfd, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xfe, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x19, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x6f, 0x0a, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0xff, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x4e, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, + 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x51, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x82, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x10, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x83, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, 0x67, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x84, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x15, 0x67, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, + 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x85, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, + 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6c, + 0x0a, 0x19, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x86, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, + 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x10, + 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x87, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, 0x67, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x88, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x89, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x14, + 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8a, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x15, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x8b, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x16, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x17, 0x67, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x8c, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x17, 0x67, 0x65, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x8d, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, + 0x52, 0x1e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x7e, 0x0a, 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x8e, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, + 0x1f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x7b, 0x0a, 0x1e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x8f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1e, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x7e, 0x0a, + 0x1f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x90, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1f, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, + 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x91, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x1c, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x24, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x92, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x24, + 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x93, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x18, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x6c, 0x0a, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x94, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x00, 0x52, 0x19, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, + 0x0f, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x95, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x68, + 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, + 0x10, 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x96, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x10, + 0x73, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x54, 0x0a, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xeb, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x67, 0x65, 0x74, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x98, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x12, 0x67, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x10, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x34, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x49, 0x44, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x49, 0x44, 0x12, 0x37, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x6a, 0x0a, 0x0a, 0x4e, + 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x24, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x8c, 0x01, + 0x0a, 0x17, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, + 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, 0x0c, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x22, 0xd3, 0x02, 0x0a, + 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, + 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, + 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x6f, + 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x49, 0x44, 0x12, 0x37, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x0b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x6a, 0x0a, 0x0a, - 0x4e, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x24, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x8c, - 0x01, 0x0a, 0x17, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, - 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x22, 0xd3, 0x02, - 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, - 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x06, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, - 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x31, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0b, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x22, 0x99, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4f, - 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x10, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, - 0x60, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x22, 0x25, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, - 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x22, 0x81, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0c, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xdb, 0x02, 0x0a, 0x0b, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0c, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0e, 0x68, 0x61, - 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, - 0x6f, 0x6f, 0x74, 0x12, 0x43, 0x0a, 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, - 0x44, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, - 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0e, 0x75, 0x74, 0x78, 0x6f, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x12, 0x0a, 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x62, - 0x69, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x1c, 0x0a, 0x04, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x74, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x2b, 0x0a, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x22, 0x3e, 0x0a, - 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x71, 0x0a, - 0x17, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x2b, 0x0a, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, - 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x49, - 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x16, 0x0a, 0x14, 0x44, 0x6f, 0x6e, 0x65, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x44, 0x0a, 0x19, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x1b, 0x0a, - 0x19, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x48, 0x0a, 0x1a, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, - 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, - 0x03, 0x69, 0x64, 0x73, 0x22, 0x46, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x28, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x14, - 0x49, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, - 0x61, 0x73, 0x68, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x44, 0x0a, 0x16, 0x49, 0x6e, 0x76, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, - 0x23, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x50, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x4f, 0x0a, 0x12, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x39, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x22, 0x0f, 0x0a, 0x0d, 0x56, 0x65, - 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8d, 0x03, 0x0a, 0x0e, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x4e, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, + 0x6b, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x31, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x78, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x54, 0x78, 0x12, 0x3b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x49, 0x44, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x27, 0x0a, 0x0d, 0x52, - 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x24, 0x0a, 0x08, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x76, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x22, 0x48, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x40, 0x0a, 0x1e, 0x47, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8a, 0x01, - 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x1f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0b, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x99, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4f, 0x75, + 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x10, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, + 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x60, + 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x0d, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x22, 0x25, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, + 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x41, + 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0xe2, 0x02, 0x0a, 0x12, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, + 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x12, 0x43, 0x0a, 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, + 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, + 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, 0x72, 0x6b, 0x6c, + 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0e, + 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, + 0x62, 0x69, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x62, 0x69, 0x74, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x1c, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x22, 0x74, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2b, 0x0a, + 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x22, 0x3e, 0x0a, 0x13, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x27, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x6f, 0x0a, 0x15, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2b, + 0x0a, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, + 0x68, 0x52, 0x08, 0x68, 0x69, 0x67, 0x68, 0x48, 0x61, 0x73, 0x68, 0x22, 0x1b, 0x0a, 0x19, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x6f, 0x6e, 0x65, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x44, + 0x0a, 0x19, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x68, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x22, 0x1b, 0x0a, 0x19, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x48, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x46, 0x0a, 0x1a, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x14, 0x49, 0x6e, 0x76, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x22, 0x44, 0x0a, 0x16, 0x49, 0x6e, 0x76, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x03, 0x69, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, + 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x23, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x50, + 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x22, 0x4f, 0x0a, 0x12, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, 0x73, 0x68, + 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, + 0x68, 0x22, 0x0f, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x8d, 0x03, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, + 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x6c, 0x61, 0x79, 0x54, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x78, 0x12, 0x3b, 0x0a, 0x0c, 0x73, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x22, 0x27, 0x0a, 0x0d, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x24, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, 0x55, 0x54, 0x58, + 0x4f, 0x53, 0x65, 0x74, 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x69, 0x62, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x07, 0x69, 0x62, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x68, + 0x0a, 0x1d, 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, 0x55, 0x54, 0x58, 0x4f, 0x53, 0x65, 0x74, + 0x41, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x75, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x75, 0x74, 0x78, 0x6f, 0x53, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x42, 0x0a, 0x17, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x42, 0x44, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, + 0x49, 0x42, 0x44, 0x52, 0x6f, 0x6f, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x21, 0x0a, 0x1f, + 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x76, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x22, 0x48, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x40, 0x0a, + 0x1e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x8a, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x05, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x20, 0x0a, 0x1e, 0x47, - 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x9b, 0x01, - 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4d, + 0x0a, 0x1f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4e, 0x0a, + 0x1d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, 0x64, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, + 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x20, 0x0a, + 0x1e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x9b, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, + 0x23, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x39, 0x0a, 0x23, 0x47, - 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x4b, - 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x41, 0x64, 0x64, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x21, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, - 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7b, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x16, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x33, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x7b, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, - 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x24, 0x0a, 0x22, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x69, 0x6e, 0x66, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, - 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, - 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x4e, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x4e, - 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x3c, 0x0a, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x24, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x65, - 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, - 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x16, 0x41, 0x64, - 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, - 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0x70, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x12, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x62, 0x0a, 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x41, 0x64, 0x64, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x79, 0x0a, 0x21, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, + 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, + 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7b, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x59, 0x0a, 0x16, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x16, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x22, 0x33, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x7b, 0x0a, 0x1e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x21, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x1f, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x10, 0x61, 0x64, 0x64, - 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x10, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0x62, 0x0a, 0x0a, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x40, - 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, - 0x22, 0x49, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, - 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x44, - 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x22, 0xac, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x47, - 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, - 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x99, 0x04, 0x0a, 0x10, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, - 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x48, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, - 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x32, - 0x0a, 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, 0x72, 0x6b, - 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x61, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, - 0x6f, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x74, 0x78, 0x6f, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x16, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x16, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, - 0x69, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, - 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, - 0x6c, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x22, - 0x8f, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, - 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x21, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, + 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x20, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, + 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x70, + 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x24, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x69, + 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x2a, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x50, + 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x4e, + 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x53, 0x79, 0x6e, + 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4f, 0x75, 0x74, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, + 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x65, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, + 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x16, + 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, + 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x70, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4d, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x62, 0x0a, 0x20, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x22, 0x0a, 0x20, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x21, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, + 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9e, 0x01, + 0x0a, 0x1f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x10, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x10, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0x62, + 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x12, 0x40, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x22, 0x49, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x54, 0x78, 0x49, 0x64, 0x73, 0x22, 0x96, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, - 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x61, 0x73, - 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x5e, - 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, - 0x62, 0x6f, 0x73, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x52, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x61, - 0x0a, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, - 0x62, 0x6f, 0x73, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x69, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x69, 0x67, 0x52, 0x09, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x53, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0x2f, 0x0a, 0x09, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x69, 0x67, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, - 0x73, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x68, 0x65, 0x78, 0x22, 0x89, 0x01, 0x0a, 0x18, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x41, 0x0a, - 0x0c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, - 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x0c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, - 0x22, 0x66, 0x0a, 0x12, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x65, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x68, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x1c, 0x47, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, - 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, - 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, - 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x94, - 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x41, 0x0a, - 0x10, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x10, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xac, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x47, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xe1, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x11, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, - 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xd1, 0x01, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, - 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1d, 0x0a, - 0x1b, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x6a, 0x0a, 0x1c, - 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1f, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x1e, 0x47, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, - 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0e, - 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, - 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x25, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x26, 0x52, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x99, 0x04, 0x0a, 0x10, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, + 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x18, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x12, 0x32, 0x0a, 0x14, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, + 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x49, 0x44, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, + 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x74, 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x74, + 0x78, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x16, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, + 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x69, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x62, 0x69, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, + 0x6c, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, + 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x73, 0x22, 0x8f, 0x04, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x03, 0x67, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, + 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x5e, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, + 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, + 0x12, 0x61, 0x0a, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x78, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, + 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x69, 0x67, 0x52, 0x09, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x2f, 0x0a, 0x09, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, + 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x61, 0x73, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x68, 0x65, 0x78, 0x22, 0x89, 0x01, 0x0a, 0x18, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x41, 0x0a, 0x0c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, + 0x65, 0x79, 0x22, 0x66, 0x0a, 0x12, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x75, 0x62, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x65, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x68, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x22, 0x66, 0x0a, + 0x1c, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x94, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, + 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, + 0x41, 0x0a, 0x10, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x10, 0x61, 0x64, 0x64, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, + 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xe1, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x77, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, + 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xd1, 0x01, 0x0a, 0x18, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x78, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x27, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x26, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, - 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, - 0x0a, 0x23, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, - 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5b, 0x0a, 0x2b, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x6a, + 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1f, 0x0a, 0x1d, 0x47, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x1e, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x70, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x26, + 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x64, 0x69, + 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x13, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, 0x25, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x0a, 0x17, - 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, - 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x70, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, 0x50, 0x12, - 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, - 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, 0x52, 0x50, - 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x54, 0x0a, 0x26, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, + 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x27, 0x0a, 0x25, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x26, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x55, 0x0a, 0x23, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x22, 0x5b, 0x0a, 0x2b, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x48, 0x61, 0x73, 0x68, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, + 0x0a, 0x17, 0x53, 0x68, 0x75, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x70, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x63, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, + 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x61, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x32, 0x50, 0x0a, 0x03, 0x50, 0x32, + 0x50, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, 0x5a, 0x24, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, - 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x50, 0x0a, 0x03, + 0x52, 0x50, 0x43, 0x12, 0x49, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, + 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x2e, 0x4b, 0x61, 0x73, 0x70, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x26, + 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x61, 0x73, + 0x70, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x6b, 0x61, 0x73, 0x70, 0x61, 0x64, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x77, 0x69, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7150,7 +7455,7 @@ func file_messages_proto_rawDescGZIP() []byte { return file_messages_proto_rawDescData } -var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 90) +var file_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 94) var file_messages_proto_goTypes = []interface{}{ (*KaspadMessage)(nil), // 0: protowire.KaspadMessage (*AddressesMessage)(nil), // 1: protowire.AddressesMessage @@ -7163,13 +7468,13 @@ var file_messages_proto_goTypes = []interface{}{ (*TransactionID)(nil), // 8: protowire.TransactionID (*TransactionOutput)(nil), // 9: protowire.TransactionOutput (*BlockMessage)(nil), // 10: protowire.BlockMessage - (*BlockHeader)(nil), // 11: protowire.BlockHeader + (*BlockHeaderMessage)(nil), // 11: protowire.BlockHeaderMessage (*Hash)(nil), // 12: protowire.Hash (*RequestBlockLocatorMessage)(nil), // 13: protowire.RequestBlockLocatorMessage (*BlockLocatorMessage)(nil), // 14: protowire.BlockLocatorMessage - (*RequestIBDBlocksMessage)(nil), // 15: protowire.RequestIBDBlocksMessage - (*RequestNextIBDBlocksMessage)(nil), // 16: protowire.RequestNextIBDBlocksMessage - (*DoneIBDBlocksMessage)(nil), // 17: protowire.DoneIBDBlocksMessage + (*RequestHeadersMessage)(nil), // 15: protowire.RequestHeadersMessage + (*RequestNextHeadersMessage)(nil), // 16: protowire.RequestNextHeadersMessage + (*DoneHeadersMessage)(nil), // 17: protowire.DoneHeadersMessage (*RequestRelayBlocksMessage)(nil), // 18: protowire.RequestRelayBlocksMessage (*RequestSelectedTipMessage)(nil), // 19: protowire.RequestSelectedTipMessage (*RequestTransactionsMessage)(nil), // 20: protowire.RequestTransactionsMessage @@ -7182,66 +7487,70 @@ var file_messages_proto_goTypes = []interface{}{ (*VerackMessage)(nil), // 27: protowire.VerackMessage (*VersionMessage)(nil), // 28: protowire.VersionMessage (*RejectMessage)(nil), // 29: protowire.RejectMessage - (*RPCError)(nil), // 30: protowire.RPCError - (*GetCurrentNetworkRequestMessage)(nil), // 31: protowire.GetCurrentNetworkRequestMessage - (*GetCurrentNetworkResponseMessage)(nil), // 32: protowire.GetCurrentNetworkResponseMessage - (*SubmitBlockRequestMessage)(nil), // 33: protowire.SubmitBlockRequestMessage - (*SubmitBlockResponseMessage)(nil), // 34: protowire.SubmitBlockResponseMessage - (*GetBlockTemplateRequestMessage)(nil), // 35: protowire.GetBlockTemplateRequestMessage - (*GetBlockTemplateResponseMessage)(nil), // 36: protowire.GetBlockTemplateResponseMessage - (*NotifyBlockAddedRequestMessage)(nil), // 37: protowire.NotifyBlockAddedRequestMessage - (*NotifyBlockAddedResponseMessage)(nil), // 38: protowire.NotifyBlockAddedResponseMessage - (*BlockAddedNotificationMessage)(nil), // 39: protowire.BlockAddedNotificationMessage - (*GetPeerAddressesRequestMessage)(nil), // 40: protowire.GetPeerAddressesRequestMessage - (*GetPeerAddressesResponseMessage)(nil), // 41: protowire.GetPeerAddressesResponseMessage - (*GetPeerAddressesKnownAddressMessage)(nil), // 42: protowire.GetPeerAddressesKnownAddressMessage - (*GetSelectedTipHashRequestMessage)(nil), // 43: protowire.GetSelectedTipHashRequestMessage - (*GetSelectedTipHashResponseMessage)(nil), // 44: protowire.GetSelectedTipHashResponseMessage - (*MempoolEntry)(nil), // 45: protowire.MempoolEntry - (*GetMempoolEntryRequestMessage)(nil), // 46: protowire.GetMempoolEntryRequestMessage - (*GetMempoolEntryResponseMessage)(nil), // 47: protowire.GetMempoolEntryResponseMessage - (*GetMempoolEntriesRequestMessage)(nil), // 48: protowire.GetMempoolEntriesRequestMessage - (*GetMempoolEntriesResponseMessage)(nil), // 49: protowire.GetMempoolEntriesResponseMessage - (*GetConnectedPeerInfoRequestMessage)(nil), // 50: protowire.GetConnectedPeerInfoRequestMessage - (*GetConnectedPeerInfoResponseMessage)(nil), // 51: protowire.GetConnectedPeerInfoResponseMessage - (*GetConnectedPeerInfoMessage)(nil), // 52: protowire.GetConnectedPeerInfoMessage - (*AddPeerRequestMessage)(nil), // 53: protowire.AddPeerRequestMessage - (*AddPeerResponseMessage)(nil), // 54: protowire.AddPeerResponseMessage - (*SubmitTransactionRequestMessage)(nil), // 55: protowire.SubmitTransactionRequestMessage - (*SubmitTransactionResponseMessage)(nil), // 56: protowire.SubmitTransactionResponseMessage - (*NotifyChainChangedRequestMessage)(nil), // 57: protowire.NotifyChainChangedRequestMessage - (*NotifyChainChangedResponseMessage)(nil), // 58: protowire.NotifyChainChangedResponseMessage - (*ChainChangedNotificationMessage)(nil), // 59: protowire.ChainChangedNotificationMessage - (*ChainBlock)(nil), // 60: protowire.ChainBlock - (*AcceptedBlock)(nil), // 61: protowire.AcceptedBlock - (*GetBlockRequestMessage)(nil), // 62: protowire.GetBlockRequestMessage - (*GetBlockResponseMessage)(nil), // 63: protowire.GetBlockResponseMessage - (*BlockVerboseData)(nil), // 64: protowire.BlockVerboseData - (*TransactionVerboseData)(nil), // 65: protowire.TransactionVerboseData - (*TransactionVerboseInput)(nil), // 66: protowire.TransactionVerboseInput - (*ScriptSig)(nil), // 67: protowire.ScriptSig - (*TransactionVerboseOutput)(nil), // 68: protowire.TransactionVerboseOutput - (*ScriptPubKeyResult)(nil), // 69: protowire.ScriptPubKeyResult - (*GetSubnetworkRequestMessage)(nil), // 70: protowire.GetSubnetworkRequestMessage - (*GetSubnetworkResponseMessage)(nil), // 71: protowire.GetSubnetworkResponseMessage - (*GetChainFromBlockRequestMessage)(nil), // 72: protowire.GetChainFromBlockRequestMessage - (*GetChainFromBlockResponseMessage)(nil), // 73: protowire.GetChainFromBlockResponseMessage - (*GetBlocksRequestMessage)(nil), // 74: protowire.GetBlocksRequestMessage - (*GetBlocksResponseMessage)(nil), // 75: protowire.GetBlocksResponseMessage - (*GetBlockCountRequestMessage)(nil), // 76: protowire.GetBlockCountRequestMessage - (*GetBlockCountResponseMessage)(nil), // 77: protowire.GetBlockCountResponseMessage - (*GetBlockDagInfoRequestMessage)(nil), // 78: protowire.GetBlockDagInfoRequestMessage - (*GetBlockDagInfoResponseMessage)(nil), // 79: protowire.GetBlockDagInfoResponseMessage - (*ResolveFinalityConflictRequestMessage)(nil), // 80: protowire.ResolveFinalityConflictRequestMessage - (*ResolveFinalityConflictResponseMessage)(nil), // 81: protowire.ResolveFinalityConflictResponseMessage - (*NotifyFinalityConflictsRequestMessage)(nil), // 82: protowire.NotifyFinalityConflictsRequestMessage - (*NotifyFinalityConflictsResponseMessage)(nil), // 83: protowire.NotifyFinalityConflictsResponseMessage - (*FinalityConflictNotificationMessage)(nil), // 84: protowire.FinalityConflictNotificationMessage - (*FinalityConflictResolvedNotificationMessage)(nil), // 85: protowire.FinalityConflictResolvedNotificationMessage - (*ShutDownRequestMessage)(nil), // 86: protowire.ShutDownRequestMessage - (*ShutDownResponseMessage)(nil), // 87: protowire.ShutDownResponseMessage - (*GetHeadersRequestMessage)(nil), // 88: protowire.GetHeadersRequestMessage - (*GetHeadersResponseMessage)(nil), // 89: protowire.GetHeadersResponseMessage + (*RequestIBDRootUTXOSetAndBlockMessage)(nil), // 30: protowire.RequestIBDRootUTXOSetAndBlockMessage + (*IBDRootUTXOSetAndBlockMessage)(nil), // 31: protowire.IBDRootUTXOSetAndBlockMessage + (*RequestIBDBlocksMessage)(nil), // 32: protowire.RequestIBDBlocksMessage + (*IBDRootNotFoundMessage)(nil), // 33: protowire.IBDRootNotFoundMessage + (*RPCError)(nil), // 34: protowire.RPCError + (*GetCurrentNetworkRequestMessage)(nil), // 35: protowire.GetCurrentNetworkRequestMessage + (*GetCurrentNetworkResponseMessage)(nil), // 36: protowire.GetCurrentNetworkResponseMessage + (*SubmitBlockRequestMessage)(nil), // 37: protowire.SubmitBlockRequestMessage + (*SubmitBlockResponseMessage)(nil), // 38: protowire.SubmitBlockResponseMessage + (*GetBlockTemplateRequestMessage)(nil), // 39: protowire.GetBlockTemplateRequestMessage + (*GetBlockTemplateResponseMessage)(nil), // 40: protowire.GetBlockTemplateResponseMessage + (*NotifyBlockAddedRequestMessage)(nil), // 41: protowire.NotifyBlockAddedRequestMessage + (*NotifyBlockAddedResponseMessage)(nil), // 42: protowire.NotifyBlockAddedResponseMessage + (*BlockAddedNotificationMessage)(nil), // 43: protowire.BlockAddedNotificationMessage + (*GetPeerAddressesRequestMessage)(nil), // 44: protowire.GetPeerAddressesRequestMessage + (*GetPeerAddressesResponseMessage)(nil), // 45: protowire.GetPeerAddressesResponseMessage + (*GetPeerAddressesKnownAddressMessage)(nil), // 46: protowire.GetPeerAddressesKnownAddressMessage + (*GetSelectedTipHashRequestMessage)(nil), // 47: protowire.GetSelectedTipHashRequestMessage + (*GetSelectedTipHashResponseMessage)(nil), // 48: protowire.GetSelectedTipHashResponseMessage + (*MempoolEntry)(nil), // 49: protowire.MempoolEntry + (*GetMempoolEntryRequestMessage)(nil), // 50: protowire.GetMempoolEntryRequestMessage + (*GetMempoolEntryResponseMessage)(nil), // 51: protowire.GetMempoolEntryResponseMessage + (*GetMempoolEntriesRequestMessage)(nil), // 52: protowire.GetMempoolEntriesRequestMessage + (*GetMempoolEntriesResponseMessage)(nil), // 53: protowire.GetMempoolEntriesResponseMessage + (*GetConnectedPeerInfoRequestMessage)(nil), // 54: protowire.GetConnectedPeerInfoRequestMessage + (*GetConnectedPeerInfoResponseMessage)(nil), // 55: protowire.GetConnectedPeerInfoResponseMessage + (*GetConnectedPeerInfoMessage)(nil), // 56: protowire.GetConnectedPeerInfoMessage + (*AddPeerRequestMessage)(nil), // 57: protowire.AddPeerRequestMessage + (*AddPeerResponseMessage)(nil), // 58: protowire.AddPeerResponseMessage + (*SubmitTransactionRequestMessage)(nil), // 59: protowire.SubmitTransactionRequestMessage + (*SubmitTransactionResponseMessage)(nil), // 60: protowire.SubmitTransactionResponseMessage + (*NotifyChainChangedRequestMessage)(nil), // 61: protowire.NotifyChainChangedRequestMessage + (*NotifyChainChangedResponseMessage)(nil), // 62: protowire.NotifyChainChangedResponseMessage + (*ChainChangedNotificationMessage)(nil), // 63: protowire.ChainChangedNotificationMessage + (*ChainBlock)(nil), // 64: protowire.ChainBlock + (*AcceptedBlock)(nil), // 65: protowire.AcceptedBlock + (*GetBlockRequestMessage)(nil), // 66: protowire.GetBlockRequestMessage + (*GetBlockResponseMessage)(nil), // 67: protowire.GetBlockResponseMessage + (*BlockVerboseData)(nil), // 68: protowire.BlockVerboseData + (*TransactionVerboseData)(nil), // 69: protowire.TransactionVerboseData + (*TransactionVerboseInput)(nil), // 70: protowire.TransactionVerboseInput + (*ScriptSig)(nil), // 71: protowire.ScriptSig + (*TransactionVerboseOutput)(nil), // 72: protowire.TransactionVerboseOutput + (*ScriptPubKeyResult)(nil), // 73: protowire.ScriptPubKeyResult + (*GetSubnetworkRequestMessage)(nil), // 74: protowire.GetSubnetworkRequestMessage + (*GetSubnetworkResponseMessage)(nil), // 75: protowire.GetSubnetworkResponseMessage + (*GetChainFromBlockRequestMessage)(nil), // 76: protowire.GetChainFromBlockRequestMessage + (*GetChainFromBlockResponseMessage)(nil), // 77: protowire.GetChainFromBlockResponseMessage + (*GetBlocksRequestMessage)(nil), // 78: protowire.GetBlocksRequestMessage + (*GetBlocksResponseMessage)(nil), // 79: protowire.GetBlocksResponseMessage + (*GetBlockCountRequestMessage)(nil), // 80: protowire.GetBlockCountRequestMessage + (*GetBlockCountResponseMessage)(nil), // 81: protowire.GetBlockCountResponseMessage + (*GetBlockDagInfoRequestMessage)(nil), // 82: protowire.GetBlockDagInfoRequestMessage + (*GetBlockDagInfoResponseMessage)(nil), // 83: protowire.GetBlockDagInfoResponseMessage + (*ResolveFinalityConflictRequestMessage)(nil), // 84: protowire.ResolveFinalityConflictRequestMessage + (*ResolveFinalityConflictResponseMessage)(nil), // 85: protowire.ResolveFinalityConflictResponseMessage + (*NotifyFinalityConflictsRequestMessage)(nil), // 86: protowire.NotifyFinalityConflictsRequestMessage + (*NotifyFinalityConflictsResponseMessage)(nil), // 87: protowire.NotifyFinalityConflictsResponseMessage + (*FinalityConflictNotificationMessage)(nil), // 88: protowire.FinalityConflictNotificationMessage + (*FinalityConflictResolvedNotificationMessage)(nil), // 89: protowire.FinalityConflictResolvedNotificationMessage + (*ShutDownRequestMessage)(nil), // 90: protowire.ShutDownRequestMessage + (*ShutDownResponseMessage)(nil), // 91: protowire.ShutDownResponseMessage + (*GetHeadersRequestMessage)(nil), // 92: protowire.GetHeadersRequestMessage + (*GetHeadersResponseMessage)(nil), // 93: protowire.GetHeadersResponseMessage } var file_messages_proto_depIdxs = []int32{ 1, // 0: protowire.KaspadMessage.addresses:type_name -> protowire.AddressesMessage @@ -7250,9 +7559,9 @@ var file_messages_proto_depIdxs = []int32{ 13, // 3: protowire.KaspadMessage.requestBlockLocator:type_name -> protowire.RequestBlockLocatorMessage 14, // 4: protowire.KaspadMessage.blockLocator:type_name -> protowire.BlockLocatorMessage 4, // 5: protowire.KaspadMessage.requestAddresses:type_name -> protowire.RequestAddressesMessage - 15, // 6: protowire.KaspadMessage.requestIBDBlocks:type_name -> protowire.RequestIBDBlocksMessage - 16, // 7: protowire.KaspadMessage.requestNextIBDBlocks:type_name -> protowire.RequestNextIBDBlocksMessage - 17, // 8: protowire.KaspadMessage.DoneIBDBlocks:type_name -> protowire.DoneIBDBlocksMessage + 15, // 6: protowire.KaspadMessage.requestHeaders:type_name -> protowire.RequestHeadersMessage + 16, // 7: protowire.KaspadMessage.requestNextHeaders:type_name -> protowire.RequestNextHeadersMessage + 17, // 8: protowire.KaspadMessage.DoneHeaders:type_name -> protowire.DoneHeadersMessage 18, // 9: protowire.KaspadMessage.requestRelayBlocks:type_name -> protowire.RequestRelayBlocksMessage 19, // 10: protowire.KaspadMessage.requestSelectedTip:type_name -> protowire.RequestSelectedTipMessage 20, // 11: protowire.KaspadMessage.requestTransactions:type_name -> protowire.RequestTransactionsMessage @@ -7266,134 +7575,142 @@ var file_messages_proto_depIdxs = []int32{ 28, // 19: protowire.KaspadMessage.version:type_name -> protowire.VersionMessage 21, // 20: protowire.KaspadMessage.transactionNotFound:type_name -> protowire.TransactionNotFoundMessage 29, // 21: protowire.KaspadMessage.reject:type_name -> protowire.RejectMessage - 31, // 22: protowire.KaspadMessage.getCurrentNetworkRequest:type_name -> protowire.GetCurrentNetworkRequestMessage - 32, // 23: protowire.KaspadMessage.getCurrentNetworkResponse:type_name -> protowire.GetCurrentNetworkResponseMessage - 33, // 24: protowire.KaspadMessage.submitBlockRequest:type_name -> protowire.SubmitBlockRequestMessage - 34, // 25: protowire.KaspadMessage.submitBlockResponse:type_name -> protowire.SubmitBlockResponseMessage - 35, // 26: protowire.KaspadMessage.getBlockTemplateRequest:type_name -> protowire.GetBlockTemplateRequestMessage - 36, // 27: protowire.KaspadMessage.getBlockTemplateResponse:type_name -> protowire.GetBlockTemplateResponseMessage - 37, // 28: protowire.KaspadMessage.notifyBlockAddedRequest:type_name -> protowire.NotifyBlockAddedRequestMessage - 38, // 29: protowire.KaspadMessage.notifyBlockAddedResponse:type_name -> protowire.NotifyBlockAddedResponseMessage - 39, // 30: protowire.KaspadMessage.blockAddedNotification:type_name -> protowire.BlockAddedNotificationMessage - 40, // 31: protowire.KaspadMessage.getPeerAddressesRequest:type_name -> protowire.GetPeerAddressesRequestMessage - 41, // 32: protowire.KaspadMessage.getPeerAddressesResponse:type_name -> protowire.GetPeerAddressesResponseMessage - 43, // 33: protowire.KaspadMessage.getSelectedTipHashRequest:type_name -> protowire.GetSelectedTipHashRequestMessage - 44, // 34: protowire.KaspadMessage.getSelectedTipHashResponse:type_name -> protowire.GetSelectedTipHashResponseMessage - 46, // 35: protowire.KaspadMessage.getMempoolEntryRequest:type_name -> protowire.GetMempoolEntryRequestMessage - 47, // 36: protowire.KaspadMessage.getMempoolEntryResponse:type_name -> protowire.GetMempoolEntryResponseMessage - 50, // 37: protowire.KaspadMessage.getConnectedPeerInfoRequest:type_name -> protowire.GetConnectedPeerInfoRequestMessage - 51, // 38: protowire.KaspadMessage.getConnectedPeerInfoResponse:type_name -> protowire.GetConnectedPeerInfoResponseMessage - 53, // 39: protowire.KaspadMessage.addPeerRequest:type_name -> protowire.AddPeerRequestMessage - 54, // 40: protowire.KaspadMessage.addPeerResponse:type_name -> protowire.AddPeerResponseMessage - 55, // 41: protowire.KaspadMessage.submitTransactionRequest:type_name -> protowire.SubmitTransactionRequestMessage - 56, // 42: protowire.KaspadMessage.submitTransactionResponse:type_name -> protowire.SubmitTransactionResponseMessage - 57, // 43: protowire.KaspadMessage.notifyChainChangedRequest:type_name -> protowire.NotifyChainChangedRequestMessage - 58, // 44: protowire.KaspadMessage.notifyChainChangedResponse:type_name -> protowire.NotifyChainChangedResponseMessage - 59, // 45: protowire.KaspadMessage.chainChangedNotification:type_name -> protowire.ChainChangedNotificationMessage - 62, // 46: protowire.KaspadMessage.getBlockRequest:type_name -> protowire.GetBlockRequestMessage - 63, // 47: protowire.KaspadMessage.getBlockResponse:type_name -> protowire.GetBlockResponseMessage - 70, // 48: protowire.KaspadMessage.getSubnetworkRequest:type_name -> protowire.GetSubnetworkRequestMessage - 71, // 49: protowire.KaspadMessage.getSubnetworkResponse:type_name -> protowire.GetSubnetworkResponseMessage - 72, // 50: protowire.KaspadMessage.getChainFromBlockRequest:type_name -> protowire.GetChainFromBlockRequestMessage - 73, // 51: protowire.KaspadMessage.getChainFromBlockResponse:type_name -> protowire.GetChainFromBlockResponseMessage - 74, // 52: protowire.KaspadMessage.getBlocksRequest:type_name -> protowire.GetBlocksRequestMessage - 75, // 53: protowire.KaspadMessage.getBlocksResponse:type_name -> protowire.GetBlocksResponseMessage - 76, // 54: protowire.KaspadMessage.getBlockCountRequest:type_name -> protowire.GetBlockCountRequestMessage - 77, // 55: protowire.KaspadMessage.getBlockCountResponse:type_name -> protowire.GetBlockCountResponseMessage - 78, // 56: protowire.KaspadMessage.getBlockDagInfoRequest:type_name -> protowire.GetBlockDagInfoRequestMessage - 79, // 57: protowire.KaspadMessage.getBlockDagInfoResponse:type_name -> protowire.GetBlockDagInfoResponseMessage - 80, // 58: protowire.KaspadMessage.resolveFinalityConflictRequest:type_name -> protowire.ResolveFinalityConflictRequestMessage - 81, // 59: protowire.KaspadMessage.resolveFinalityConflictResponse:type_name -> protowire.ResolveFinalityConflictResponseMessage - 82, // 60: protowire.KaspadMessage.notifyFinalityConflictsRequest:type_name -> protowire.NotifyFinalityConflictsRequestMessage - 83, // 61: protowire.KaspadMessage.notifyFinalityConflictsResponse:type_name -> protowire.NotifyFinalityConflictsResponseMessage - 84, // 62: protowire.KaspadMessage.finalityConflictNotification:type_name -> protowire.FinalityConflictNotificationMessage - 85, // 63: protowire.KaspadMessage.finalityConflictResolvedNotification:type_name -> protowire.FinalityConflictResolvedNotificationMessage - 48, // 64: protowire.KaspadMessage.getMempoolEntriesRequest:type_name -> protowire.GetMempoolEntriesRequestMessage - 49, // 65: protowire.KaspadMessage.getMempoolEntriesResponse:type_name -> protowire.GetMempoolEntriesResponseMessage - 86, // 66: protowire.KaspadMessage.shutDownRequest:type_name -> protowire.ShutDownRequestMessage - 87, // 67: protowire.KaspadMessage.shutDownResponse:type_name -> protowire.ShutDownResponseMessage - 88, // 68: protowire.KaspadMessage.getHeadersRequest:type_name -> protowire.GetHeadersRequestMessage - 89, // 69: protowire.KaspadMessage.getHeadersResponse:type_name -> protowire.GetHeadersResponseMessage - 3, // 70: protowire.AddressesMessage.subnetworkID:type_name -> protowire.SubnetworkID - 2, // 71: protowire.AddressesMessage.addressList:type_name -> protowire.NetAddress - 3, // 72: protowire.RequestAddressesMessage.subnetworkID:type_name -> protowire.SubnetworkID - 6, // 73: protowire.TransactionMessage.inputs:type_name -> protowire.TransactionInput - 9, // 74: protowire.TransactionMessage.outputs:type_name -> protowire.TransactionOutput - 3, // 75: protowire.TransactionMessage.subnetworkID:type_name -> protowire.SubnetworkID - 12, // 76: protowire.TransactionMessage.payloadHash:type_name -> protowire.Hash - 7, // 77: protowire.TransactionInput.PreviousOutpoint:type_name -> protowire.Outpoint - 8, // 78: protowire.Outpoint.transactionID:type_name -> protowire.TransactionID - 11, // 79: protowire.BlockMessage.header:type_name -> protowire.BlockHeader - 5, // 80: protowire.BlockMessage.transactions:type_name -> protowire.TransactionMessage - 12, // 81: protowire.BlockHeader.parentHashes:type_name -> protowire.Hash - 12, // 82: protowire.BlockHeader.hashMerkleRoot:type_name -> protowire.Hash - 12, // 83: protowire.BlockHeader.acceptedIDMerkleRoot:type_name -> protowire.Hash - 12, // 84: protowire.BlockHeader.utxoCommitment:type_name -> protowire.Hash - 12, // 85: protowire.RequestBlockLocatorMessage.lowHash:type_name -> protowire.Hash - 12, // 86: protowire.RequestBlockLocatorMessage.highHash:type_name -> protowire.Hash - 12, // 87: protowire.BlockLocatorMessage.hashes:type_name -> protowire.Hash - 12, // 88: protowire.RequestIBDBlocksMessage.lowHash:type_name -> protowire.Hash - 12, // 89: protowire.RequestIBDBlocksMessage.highHash:type_name -> protowire.Hash - 12, // 90: protowire.RequestRelayBlocksMessage.hashes:type_name -> protowire.Hash - 8, // 91: protowire.RequestTransactionsMessage.ids:type_name -> protowire.TransactionID - 8, // 92: protowire.TransactionNotFoundMessage.id:type_name -> protowire.TransactionID - 12, // 93: protowire.InvRelayBlockMessage.hash:type_name -> protowire.Hash - 8, // 94: protowire.InvTransactionsMessage.ids:type_name -> protowire.TransactionID - 12, // 95: protowire.SelectedTipMessage.selectedTipHash:type_name -> protowire.Hash - 2, // 96: protowire.VersionMessage.address:type_name -> protowire.NetAddress - 12, // 97: protowire.VersionMessage.selectedTipHash:type_name -> protowire.Hash - 3, // 98: protowire.VersionMessage.subnetworkID:type_name -> protowire.SubnetworkID - 30, // 99: protowire.GetCurrentNetworkResponseMessage.error:type_name -> protowire.RPCError - 10, // 100: protowire.SubmitBlockRequestMessage.block:type_name -> protowire.BlockMessage - 30, // 101: protowire.SubmitBlockResponseMessage.error:type_name -> protowire.RPCError - 10, // 102: protowire.GetBlockTemplateResponseMessage.blockMessage:type_name -> protowire.BlockMessage - 30, // 103: protowire.GetBlockTemplateResponseMessage.error:type_name -> protowire.RPCError - 30, // 104: protowire.NotifyBlockAddedResponseMessage.error:type_name -> protowire.RPCError - 10, // 105: protowire.BlockAddedNotificationMessage.block:type_name -> protowire.BlockMessage - 42, // 106: protowire.GetPeerAddressesResponseMessage.addresses:type_name -> protowire.GetPeerAddressesKnownAddressMessage - 30, // 107: protowire.GetPeerAddressesResponseMessage.error:type_name -> protowire.RPCError - 30, // 108: protowire.GetSelectedTipHashResponseMessage.error:type_name -> protowire.RPCError - 65, // 109: protowire.MempoolEntry.transactionVerboseData:type_name -> protowire.TransactionVerboseData - 45, // 110: protowire.GetMempoolEntryResponseMessage.entry:type_name -> protowire.MempoolEntry - 30, // 111: protowire.GetMempoolEntryResponseMessage.error:type_name -> protowire.RPCError - 45, // 112: protowire.GetMempoolEntriesResponseMessage.entries:type_name -> protowire.MempoolEntry - 30, // 113: protowire.GetMempoolEntriesResponseMessage.error:type_name -> protowire.RPCError - 52, // 114: protowire.GetConnectedPeerInfoResponseMessage.infos:type_name -> protowire.GetConnectedPeerInfoMessage - 30, // 115: protowire.GetConnectedPeerInfoResponseMessage.error:type_name -> protowire.RPCError - 30, // 116: protowire.AddPeerResponseMessage.error:type_name -> protowire.RPCError - 5, // 117: protowire.SubmitTransactionRequestMessage.transactionMessage:type_name -> protowire.TransactionMessage - 30, // 118: protowire.SubmitTransactionResponseMessage.error:type_name -> protowire.RPCError - 30, // 119: protowire.NotifyChainChangedResponseMessage.error:type_name -> protowire.RPCError - 60, // 120: protowire.ChainChangedNotificationMessage.addedChainBlocks:type_name -> protowire.ChainBlock - 61, // 121: protowire.ChainBlock.acceptedBlocks:type_name -> protowire.AcceptedBlock - 64, // 122: protowire.GetBlockResponseMessage.blockVerboseData:type_name -> protowire.BlockVerboseData - 30, // 123: protowire.GetBlockResponseMessage.error:type_name -> protowire.RPCError - 65, // 124: protowire.BlockVerboseData.transactionVerboseData:type_name -> protowire.TransactionVerboseData - 66, // 125: protowire.TransactionVerboseData.transactionVerboseInputs:type_name -> protowire.TransactionVerboseInput - 68, // 126: protowire.TransactionVerboseData.transactionVerboseOutputs:type_name -> protowire.TransactionVerboseOutput - 67, // 127: protowire.TransactionVerboseInput.scriptSig:type_name -> protowire.ScriptSig - 69, // 128: protowire.TransactionVerboseOutput.scriptPubKey:type_name -> protowire.ScriptPubKeyResult - 30, // 129: protowire.GetSubnetworkResponseMessage.error:type_name -> protowire.RPCError - 60, // 130: protowire.GetChainFromBlockResponseMessage.addedChainBlocks:type_name -> protowire.ChainBlock - 64, // 131: protowire.GetChainFromBlockResponseMessage.blockVerboseData:type_name -> protowire.BlockVerboseData - 30, // 132: protowire.GetChainFromBlockResponseMessage.error:type_name -> protowire.RPCError - 64, // 133: protowire.GetBlocksResponseMessage.blockVerboseData:type_name -> protowire.BlockVerboseData - 30, // 134: protowire.GetBlocksResponseMessage.error:type_name -> protowire.RPCError - 30, // 135: protowire.GetBlockCountResponseMessage.error:type_name -> protowire.RPCError - 30, // 136: protowire.GetBlockDagInfoResponseMessage.error:type_name -> protowire.RPCError - 30, // 137: protowire.ResolveFinalityConflictResponseMessage.error:type_name -> protowire.RPCError - 30, // 138: protowire.NotifyFinalityConflictsResponseMessage.error:type_name -> protowire.RPCError - 30, // 139: protowire.ShutDownResponseMessage.error:type_name -> protowire.RPCError - 30, // 140: protowire.GetHeadersResponseMessage.error:type_name -> protowire.RPCError - 0, // 141: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage - 0, // 142: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage - 0, // 143: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage - 0, // 144: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage - 143, // [143:145] is the sub-list for method output_type - 141, // [141:143] is the sub-list for method input_type - 141, // [141:141] is the sub-list for extension type_name - 141, // [141:141] is the sub-list for extension extendee - 0, // [0:141] is the sub-list for field type_name + 11, // 22: protowire.KaspadMessage.blockHeader:type_name -> protowire.BlockHeaderMessage + 30, // 23: protowire.KaspadMessage.requestIBDRootUTXOSetAndBlock:type_name -> protowire.RequestIBDRootUTXOSetAndBlockMessage + 31, // 24: protowire.KaspadMessage.ibdRootUTXOSetAndBlock:type_name -> protowire.IBDRootUTXOSetAndBlockMessage + 32, // 25: protowire.KaspadMessage.requestIBDBlocks:type_name -> protowire.RequestIBDBlocksMessage + 33, // 26: protowire.KaspadMessage.ibdRootNotFound:type_name -> protowire.IBDRootNotFoundMessage + 35, // 27: protowire.KaspadMessage.getCurrentNetworkRequest:type_name -> protowire.GetCurrentNetworkRequestMessage + 36, // 28: protowire.KaspadMessage.getCurrentNetworkResponse:type_name -> protowire.GetCurrentNetworkResponseMessage + 37, // 29: protowire.KaspadMessage.submitBlockRequest:type_name -> protowire.SubmitBlockRequestMessage + 38, // 30: protowire.KaspadMessage.submitBlockResponse:type_name -> protowire.SubmitBlockResponseMessage + 39, // 31: protowire.KaspadMessage.getBlockTemplateRequest:type_name -> protowire.GetBlockTemplateRequestMessage + 40, // 32: protowire.KaspadMessage.getBlockTemplateResponse:type_name -> protowire.GetBlockTemplateResponseMessage + 41, // 33: protowire.KaspadMessage.notifyBlockAddedRequest:type_name -> protowire.NotifyBlockAddedRequestMessage + 42, // 34: protowire.KaspadMessage.notifyBlockAddedResponse:type_name -> protowire.NotifyBlockAddedResponseMessage + 43, // 35: protowire.KaspadMessage.blockAddedNotification:type_name -> protowire.BlockAddedNotificationMessage + 44, // 36: protowire.KaspadMessage.getPeerAddressesRequest:type_name -> protowire.GetPeerAddressesRequestMessage + 45, // 37: protowire.KaspadMessage.getPeerAddressesResponse:type_name -> protowire.GetPeerAddressesResponseMessage + 47, // 38: protowire.KaspadMessage.getSelectedTipHashRequest:type_name -> protowire.GetSelectedTipHashRequestMessage + 48, // 39: protowire.KaspadMessage.getSelectedTipHashResponse:type_name -> protowire.GetSelectedTipHashResponseMessage + 50, // 40: protowire.KaspadMessage.getMempoolEntryRequest:type_name -> protowire.GetMempoolEntryRequestMessage + 51, // 41: protowire.KaspadMessage.getMempoolEntryResponse:type_name -> protowire.GetMempoolEntryResponseMessage + 54, // 42: protowire.KaspadMessage.getConnectedPeerInfoRequest:type_name -> protowire.GetConnectedPeerInfoRequestMessage + 55, // 43: protowire.KaspadMessage.getConnectedPeerInfoResponse:type_name -> protowire.GetConnectedPeerInfoResponseMessage + 57, // 44: protowire.KaspadMessage.addPeerRequest:type_name -> protowire.AddPeerRequestMessage + 58, // 45: protowire.KaspadMessage.addPeerResponse:type_name -> protowire.AddPeerResponseMessage + 59, // 46: protowire.KaspadMessage.submitTransactionRequest:type_name -> protowire.SubmitTransactionRequestMessage + 60, // 47: protowire.KaspadMessage.submitTransactionResponse:type_name -> protowire.SubmitTransactionResponseMessage + 61, // 48: protowire.KaspadMessage.notifyChainChangedRequest:type_name -> protowire.NotifyChainChangedRequestMessage + 62, // 49: protowire.KaspadMessage.notifyChainChangedResponse:type_name -> protowire.NotifyChainChangedResponseMessage + 63, // 50: protowire.KaspadMessage.chainChangedNotification:type_name -> protowire.ChainChangedNotificationMessage + 66, // 51: protowire.KaspadMessage.getBlockRequest:type_name -> protowire.GetBlockRequestMessage + 67, // 52: protowire.KaspadMessage.getBlockResponse:type_name -> protowire.GetBlockResponseMessage + 74, // 53: protowire.KaspadMessage.getSubnetworkRequest:type_name -> protowire.GetSubnetworkRequestMessage + 75, // 54: protowire.KaspadMessage.getSubnetworkResponse:type_name -> protowire.GetSubnetworkResponseMessage + 76, // 55: protowire.KaspadMessage.getChainFromBlockRequest:type_name -> protowire.GetChainFromBlockRequestMessage + 77, // 56: protowire.KaspadMessage.getChainFromBlockResponse:type_name -> protowire.GetChainFromBlockResponseMessage + 78, // 57: protowire.KaspadMessage.getBlocksRequest:type_name -> protowire.GetBlocksRequestMessage + 79, // 58: protowire.KaspadMessage.getBlocksResponse:type_name -> protowire.GetBlocksResponseMessage + 80, // 59: protowire.KaspadMessage.getBlockCountRequest:type_name -> protowire.GetBlockCountRequestMessage + 81, // 60: protowire.KaspadMessage.getBlockCountResponse:type_name -> protowire.GetBlockCountResponseMessage + 82, // 61: protowire.KaspadMessage.getBlockDagInfoRequest:type_name -> protowire.GetBlockDagInfoRequestMessage + 83, // 62: protowire.KaspadMessage.getBlockDagInfoResponse:type_name -> protowire.GetBlockDagInfoResponseMessage + 84, // 63: protowire.KaspadMessage.resolveFinalityConflictRequest:type_name -> protowire.ResolveFinalityConflictRequestMessage + 85, // 64: protowire.KaspadMessage.resolveFinalityConflictResponse:type_name -> protowire.ResolveFinalityConflictResponseMessage + 86, // 65: protowire.KaspadMessage.notifyFinalityConflictsRequest:type_name -> protowire.NotifyFinalityConflictsRequestMessage + 87, // 66: protowire.KaspadMessage.notifyFinalityConflictsResponse:type_name -> protowire.NotifyFinalityConflictsResponseMessage + 88, // 67: protowire.KaspadMessage.finalityConflictNotification:type_name -> protowire.FinalityConflictNotificationMessage + 89, // 68: protowire.KaspadMessage.finalityConflictResolvedNotification:type_name -> protowire.FinalityConflictResolvedNotificationMessage + 52, // 69: protowire.KaspadMessage.getMempoolEntriesRequest:type_name -> protowire.GetMempoolEntriesRequestMessage + 53, // 70: protowire.KaspadMessage.getMempoolEntriesResponse:type_name -> protowire.GetMempoolEntriesResponseMessage + 90, // 71: protowire.KaspadMessage.shutDownRequest:type_name -> protowire.ShutDownRequestMessage + 91, // 72: protowire.KaspadMessage.shutDownResponse:type_name -> protowire.ShutDownResponseMessage + 92, // 73: protowire.KaspadMessage.getHeadersRequest:type_name -> protowire.GetHeadersRequestMessage + 93, // 74: protowire.KaspadMessage.getHeadersResponse:type_name -> protowire.GetHeadersResponseMessage + 3, // 75: protowire.AddressesMessage.subnetworkID:type_name -> protowire.SubnetworkID + 2, // 76: protowire.AddressesMessage.addressList:type_name -> protowire.NetAddress + 3, // 77: protowire.RequestAddressesMessage.subnetworkID:type_name -> protowire.SubnetworkID + 6, // 78: protowire.TransactionMessage.inputs:type_name -> protowire.TransactionInput + 9, // 79: protowire.TransactionMessage.outputs:type_name -> protowire.TransactionOutput + 3, // 80: protowire.TransactionMessage.subnetworkID:type_name -> protowire.SubnetworkID + 12, // 81: protowire.TransactionMessage.payloadHash:type_name -> protowire.Hash + 7, // 82: protowire.TransactionInput.PreviousOutpoint:type_name -> protowire.Outpoint + 8, // 83: protowire.Outpoint.transactionID:type_name -> protowire.TransactionID + 11, // 84: protowire.BlockMessage.header:type_name -> protowire.BlockHeaderMessage + 5, // 85: protowire.BlockMessage.transactions:type_name -> protowire.TransactionMessage + 12, // 86: protowire.BlockHeaderMessage.parentHashes:type_name -> protowire.Hash + 12, // 87: protowire.BlockHeaderMessage.hashMerkleRoot:type_name -> protowire.Hash + 12, // 88: protowire.BlockHeaderMessage.acceptedIDMerkleRoot:type_name -> protowire.Hash + 12, // 89: protowire.BlockHeaderMessage.utxoCommitment:type_name -> protowire.Hash + 12, // 90: protowire.RequestBlockLocatorMessage.lowHash:type_name -> protowire.Hash + 12, // 91: protowire.RequestBlockLocatorMessage.highHash:type_name -> protowire.Hash + 12, // 92: protowire.BlockLocatorMessage.hashes:type_name -> protowire.Hash + 12, // 93: protowire.RequestHeadersMessage.lowHash:type_name -> protowire.Hash + 12, // 94: protowire.RequestHeadersMessage.highHash:type_name -> protowire.Hash + 12, // 95: protowire.RequestRelayBlocksMessage.hashes:type_name -> protowire.Hash + 8, // 96: protowire.RequestTransactionsMessage.ids:type_name -> protowire.TransactionID + 8, // 97: protowire.TransactionNotFoundMessage.id:type_name -> protowire.TransactionID + 12, // 98: protowire.InvRelayBlockMessage.hash:type_name -> protowire.Hash + 8, // 99: protowire.InvTransactionsMessage.ids:type_name -> protowire.TransactionID + 12, // 100: protowire.SelectedTipMessage.selectedTipHash:type_name -> protowire.Hash + 2, // 101: protowire.VersionMessage.address:type_name -> protowire.NetAddress + 12, // 102: protowire.VersionMessage.selectedTipHash:type_name -> protowire.Hash + 3, // 103: protowire.VersionMessage.subnetworkID:type_name -> protowire.SubnetworkID + 12, // 104: protowire.RequestIBDRootUTXOSetAndBlockMessage.ibdRoot:type_name -> protowire.Hash + 10, // 105: protowire.IBDRootUTXOSetAndBlockMessage.block:type_name -> protowire.BlockMessage + 12, // 106: protowire.RequestIBDBlocksMessage.hashes:type_name -> protowire.Hash + 34, // 107: protowire.GetCurrentNetworkResponseMessage.error:type_name -> protowire.RPCError + 10, // 108: protowire.SubmitBlockRequestMessage.block:type_name -> protowire.BlockMessage + 34, // 109: protowire.SubmitBlockResponseMessage.error:type_name -> protowire.RPCError + 10, // 110: protowire.GetBlockTemplateResponseMessage.blockMessage:type_name -> protowire.BlockMessage + 34, // 111: protowire.GetBlockTemplateResponseMessage.error:type_name -> protowire.RPCError + 34, // 112: protowire.NotifyBlockAddedResponseMessage.error:type_name -> protowire.RPCError + 10, // 113: protowire.BlockAddedNotificationMessage.block:type_name -> protowire.BlockMessage + 46, // 114: protowire.GetPeerAddressesResponseMessage.addresses:type_name -> protowire.GetPeerAddressesKnownAddressMessage + 34, // 115: protowire.GetPeerAddressesResponseMessage.error:type_name -> protowire.RPCError + 34, // 116: protowire.GetSelectedTipHashResponseMessage.error:type_name -> protowire.RPCError + 69, // 117: protowire.MempoolEntry.transactionVerboseData:type_name -> protowire.TransactionVerboseData + 49, // 118: protowire.GetMempoolEntryResponseMessage.entry:type_name -> protowire.MempoolEntry + 34, // 119: protowire.GetMempoolEntryResponseMessage.error:type_name -> protowire.RPCError + 49, // 120: protowire.GetMempoolEntriesResponseMessage.entries:type_name -> protowire.MempoolEntry + 34, // 121: protowire.GetMempoolEntriesResponseMessage.error:type_name -> protowire.RPCError + 56, // 122: protowire.GetConnectedPeerInfoResponseMessage.infos:type_name -> protowire.GetConnectedPeerInfoMessage + 34, // 123: protowire.GetConnectedPeerInfoResponseMessage.error:type_name -> protowire.RPCError + 34, // 124: protowire.AddPeerResponseMessage.error:type_name -> protowire.RPCError + 5, // 125: protowire.SubmitTransactionRequestMessage.transactionMessage:type_name -> protowire.TransactionMessage + 34, // 126: protowire.SubmitTransactionResponseMessage.error:type_name -> protowire.RPCError + 34, // 127: protowire.NotifyChainChangedResponseMessage.error:type_name -> protowire.RPCError + 64, // 128: protowire.ChainChangedNotificationMessage.addedChainBlocks:type_name -> protowire.ChainBlock + 65, // 129: protowire.ChainBlock.acceptedBlocks:type_name -> protowire.AcceptedBlock + 68, // 130: protowire.GetBlockResponseMessage.blockVerboseData:type_name -> protowire.BlockVerboseData + 34, // 131: protowire.GetBlockResponseMessage.error:type_name -> protowire.RPCError + 69, // 132: protowire.BlockVerboseData.transactionVerboseData:type_name -> protowire.TransactionVerboseData + 70, // 133: protowire.TransactionVerboseData.transactionVerboseInputs:type_name -> protowire.TransactionVerboseInput + 72, // 134: protowire.TransactionVerboseData.transactionVerboseOutputs:type_name -> protowire.TransactionVerboseOutput + 71, // 135: protowire.TransactionVerboseInput.scriptSig:type_name -> protowire.ScriptSig + 73, // 136: protowire.TransactionVerboseOutput.scriptPubKey:type_name -> protowire.ScriptPubKeyResult + 34, // 137: protowire.GetSubnetworkResponseMessage.error:type_name -> protowire.RPCError + 64, // 138: protowire.GetChainFromBlockResponseMessage.addedChainBlocks:type_name -> protowire.ChainBlock + 68, // 139: protowire.GetChainFromBlockResponseMessage.blockVerboseData:type_name -> protowire.BlockVerboseData + 34, // 140: protowire.GetChainFromBlockResponseMessage.error:type_name -> protowire.RPCError + 68, // 141: protowire.GetBlocksResponseMessage.blockVerboseData:type_name -> protowire.BlockVerboseData + 34, // 142: protowire.GetBlocksResponseMessage.error:type_name -> protowire.RPCError + 34, // 143: protowire.GetBlockCountResponseMessage.error:type_name -> protowire.RPCError + 34, // 144: protowire.GetBlockDagInfoResponseMessage.error:type_name -> protowire.RPCError + 34, // 145: protowire.ResolveFinalityConflictResponseMessage.error:type_name -> protowire.RPCError + 34, // 146: protowire.NotifyFinalityConflictsResponseMessage.error:type_name -> protowire.RPCError + 34, // 147: protowire.ShutDownResponseMessage.error:type_name -> protowire.RPCError + 34, // 148: protowire.GetHeadersResponseMessage.error:type_name -> protowire.RPCError + 0, // 149: protowire.P2P.MessageStream:input_type -> protowire.KaspadMessage + 0, // 150: protowire.RPC.MessageStream:input_type -> protowire.KaspadMessage + 0, // 151: protowire.P2P.MessageStream:output_type -> protowire.KaspadMessage + 0, // 152: protowire.RPC.MessageStream:output_type -> protowire.KaspadMessage + 151, // [151:153] is the sub-list for method output_type + 149, // [149:151] is the sub-list for method input_type + 149, // [149:149] is the sub-list for extension type_name + 149, // [149:149] is the sub-list for extension extendee + 0, // [0:149] is the sub-list for field type_name } func init() { file_messages_proto_init() } @@ -7535,7 +7852,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockHeader); i { + switch v := v.(*BlockHeaderMessage); i { case 0: return &v.state case 1: @@ -7583,7 +7900,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestIBDBlocksMessage); i { + switch v := v.(*RequestHeadersMessage); i { case 0: return &v.state case 1: @@ -7595,7 +7912,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestNextIBDBlocksMessage); i { + switch v := v.(*RequestNextHeadersMessage); i { case 0: return &v.state case 1: @@ -7607,7 +7924,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DoneIBDBlocksMessage); i { + switch v := v.(*DoneHeadersMessage); i { case 0: return &v.state case 1: @@ -7763,7 +8080,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RPCError); i { + switch v := v.(*RequestIBDRootUTXOSetAndBlockMessage); i { case 0: return &v.state case 1: @@ -7775,7 +8092,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCurrentNetworkRequestMessage); i { + switch v := v.(*IBDRootUTXOSetAndBlockMessage); i { case 0: return &v.state case 1: @@ -7787,7 +8104,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCurrentNetworkResponseMessage); i { + switch v := v.(*RequestIBDBlocksMessage); i { case 0: return &v.state case 1: @@ -7799,7 +8116,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBlockRequestMessage); i { + switch v := v.(*IBDRootNotFoundMessage); i { case 0: return &v.state case 1: @@ -7811,7 +8128,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitBlockResponseMessage); i { + switch v := v.(*RPCError); i { case 0: return &v.state case 1: @@ -7823,7 +8140,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockTemplateRequestMessage); i { + switch v := v.(*GetCurrentNetworkRequestMessage); i { case 0: return &v.state case 1: @@ -7835,7 +8152,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockTemplateResponseMessage); i { + switch v := v.(*GetCurrentNetworkResponseMessage); i { case 0: return &v.state case 1: @@ -7847,7 +8164,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyBlockAddedRequestMessage); i { + switch v := v.(*SubmitBlockRequestMessage); i { case 0: return &v.state case 1: @@ -7859,7 +8176,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyBlockAddedResponseMessage); i { + switch v := v.(*SubmitBlockResponseMessage); i { case 0: return &v.state case 1: @@ -7871,7 +8188,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockAddedNotificationMessage); i { + switch v := v.(*GetBlockTemplateRequestMessage); i { case 0: return &v.state case 1: @@ -7883,7 +8200,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPeerAddressesRequestMessage); i { + switch v := v.(*GetBlockTemplateResponseMessage); i { case 0: return &v.state case 1: @@ -7895,7 +8212,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPeerAddressesResponseMessage); i { + switch v := v.(*NotifyBlockAddedRequestMessage); i { case 0: return &v.state case 1: @@ -7907,7 +8224,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPeerAddressesKnownAddressMessage); i { + switch v := v.(*NotifyBlockAddedResponseMessage); i { case 0: return &v.state case 1: @@ -7919,7 +8236,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSelectedTipHashRequestMessage); i { + switch v := v.(*BlockAddedNotificationMessage); i { case 0: return &v.state case 1: @@ -7931,7 +8248,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSelectedTipHashResponseMessage); i { + switch v := v.(*GetPeerAddressesRequestMessage); i { case 0: return &v.state case 1: @@ -7943,7 +8260,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MempoolEntry); i { + switch v := v.(*GetPeerAddressesResponseMessage); i { case 0: return &v.state case 1: @@ -7955,7 +8272,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntryRequestMessage); i { + switch v := v.(*GetPeerAddressesKnownAddressMessage); i { case 0: return &v.state case 1: @@ -7967,7 +8284,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntryResponseMessage); i { + switch v := v.(*GetSelectedTipHashRequestMessage); i { case 0: return &v.state case 1: @@ -7979,7 +8296,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesRequestMessage); i { + switch v := v.(*GetSelectedTipHashResponseMessage); i { case 0: return &v.state case 1: @@ -7991,7 +8308,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMempoolEntriesResponseMessage); i { + switch v := v.(*MempoolEntry); i { case 0: return &v.state case 1: @@ -8003,7 +8320,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectedPeerInfoRequestMessage); i { + switch v := v.(*GetMempoolEntryRequestMessage); i { case 0: return &v.state case 1: @@ -8015,7 +8332,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectedPeerInfoResponseMessage); i { + switch v := v.(*GetMempoolEntryResponseMessage); i { case 0: return &v.state case 1: @@ -8027,7 +8344,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectedPeerInfoMessage); i { + switch v := v.(*GetMempoolEntriesRequestMessage); i { case 0: return &v.state case 1: @@ -8039,7 +8356,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPeerRequestMessage); i { + switch v := v.(*GetMempoolEntriesResponseMessage); i { case 0: return &v.state case 1: @@ -8051,7 +8368,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPeerResponseMessage); i { + switch v := v.(*GetConnectedPeerInfoRequestMessage); i { case 0: return &v.state case 1: @@ -8063,7 +8380,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitTransactionRequestMessage); i { + switch v := v.(*GetConnectedPeerInfoResponseMessage); i { case 0: return &v.state case 1: @@ -8075,7 +8392,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitTransactionResponseMessage); i { + switch v := v.(*GetConnectedPeerInfoMessage); i { case 0: return &v.state case 1: @@ -8087,7 +8404,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyChainChangedRequestMessage); i { + switch v := v.(*AddPeerRequestMessage); i { case 0: return &v.state case 1: @@ -8099,7 +8416,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyChainChangedResponseMessage); i { + switch v := v.(*AddPeerResponseMessage); i { case 0: return &v.state case 1: @@ -8111,7 +8428,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainChangedNotificationMessage); i { + switch v := v.(*SubmitTransactionRequestMessage); i { case 0: return &v.state case 1: @@ -8123,7 +8440,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainBlock); i { + switch v := v.(*SubmitTransactionResponseMessage); i { case 0: return &v.state case 1: @@ -8135,7 +8452,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AcceptedBlock); i { + switch v := v.(*NotifyChainChangedRequestMessage); i { case 0: return &v.state case 1: @@ -8147,7 +8464,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockRequestMessage); i { + switch v := v.(*NotifyChainChangedResponseMessage); i { case 0: return &v.state case 1: @@ -8159,7 +8476,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockResponseMessage); i { + switch v := v.(*ChainChangedNotificationMessage); i { case 0: return &v.state case 1: @@ -8171,7 +8488,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockVerboseData); i { + switch v := v.(*ChainBlock); i { case 0: return &v.state case 1: @@ -8183,7 +8500,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionVerboseData); i { + switch v := v.(*AcceptedBlock); i { case 0: return &v.state case 1: @@ -8195,7 +8512,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionVerboseInput); i { + switch v := v.(*GetBlockRequestMessage); i { case 0: return &v.state case 1: @@ -8207,7 +8524,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScriptSig); i { + switch v := v.(*GetBlockResponseMessage); i { case 0: return &v.state case 1: @@ -8219,7 +8536,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionVerboseOutput); i { + switch v := v.(*BlockVerboseData); i { case 0: return &v.state case 1: @@ -8231,7 +8548,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScriptPubKeyResult); i { + switch v := v.(*TransactionVerboseData); i { case 0: return &v.state case 1: @@ -8243,7 +8560,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSubnetworkRequestMessage); i { + switch v := v.(*TransactionVerboseInput); i { case 0: return &v.state case 1: @@ -8255,7 +8572,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSubnetworkResponseMessage); i { + switch v := v.(*ScriptSig); i { case 0: return &v.state case 1: @@ -8267,7 +8584,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChainFromBlockRequestMessage); i { + switch v := v.(*TransactionVerboseOutput); i { case 0: return &v.state case 1: @@ -8279,7 +8596,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChainFromBlockResponseMessage); i { + switch v := v.(*ScriptPubKeyResult); i { case 0: return &v.state case 1: @@ -8291,7 +8608,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlocksRequestMessage); i { + switch v := v.(*GetSubnetworkRequestMessage); i { case 0: return &v.state case 1: @@ -8303,7 +8620,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlocksResponseMessage); i { + switch v := v.(*GetSubnetworkResponseMessage); i { case 0: return &v.state case 1: @@ -8315,7 +8632,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockCountRequestMessage); i { + switch v := v.(*GetChainFromBlockRequestMessage); i { case 0: return &v.state case 1: @@ -8327,7 +8644,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockCountResponseMessage); i { + switch v := v.(*GetChainFromBlockResponseMessage); i { case 0: return &v.state case 1: @@ -8339,7 +8656,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockDagInfoRequestMessage); i { + switch v := v.(*GetBlocksRequestMessage); i { case 0: return &v.state case 1: @@ -8351,7 +8668,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlockDagInfoResponseMessage); i { + switch v := v.(*GetBlocksResponseMessage); i { case 0: return &v.state case 1: @@ -8363,7 +8680,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveFinalityConflictRequestMessage); i { + switch v := v.(*GetBlockCountRequestMessage); i { case 0: return &v.state case 1: @@ -8375,7 +8692,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveFinalityConflictResponseMessage); i { + switch v := v.(*GetBlockCountResponseMessage); i { case 0: return &v.state case 1: @@ -8387,7 +8704,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyFinalityConflictsRequestMessage); i { + switch v := v.(*GetBlockDagInfoRequestMessage); i { case 0: return &v.state case 1: @@ -8399,7 +8716,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyFinalityConflictsResponseMessage); i { + switch v := v.(*GetBlockDagInfoResponseMessage); i { case 0: return &v.state case 1: @@ -8411,7 +8728,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinalityConflictNotificationMessage); i { + switch v := v.(*ResolveFinalityConflictRequestMessage); i { case 0: return &v.state case 1: @@ -8423,7 +8740,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinalityConflictResolvedNotificationMessage); i { + switch v := v.(*ResolveFinalityConflictResponseMessage); i { case 0: return &v.state case 1: @@ -8435,7 +8752,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ShutDownRequestMessage); i { + switch v := v.(*NotifyFinalityConflictsRequestMessage); i { case 0: return &v.state case 1: @@ -8447,7 +8764,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ShutDownResponseMessage); i { + switch v := v.(*NotifyFinalityConflictsResponseMessage); i { case 0: return &v.state case 1: @@ -8459,7 +8776,7 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHeadersRequestMessage); i { + switch v := v.(*FinalityConflictNotificationMessage); i { case 0: return &v.state case 1: @@ -8471,6 +8788,54 @@ func file_messages_proto_init() { } } file_messages_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalityConflictResolvedNotificationMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_messages_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutDownRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_messages_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutDownResponseMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_messages_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetHeadersRequestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_messages_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetHeadersResponseMessage); i { case 0: return &v.state @@ -8490,9 +8855,9 @@ func file_messages_proto_init() { (*KaspadMessage_RequestBlockLocator)(nil), (*KaspadMessage_BlockLocator)(nil), (*KaspadMessage_RequestAddresses)(nil), - (*KaspadMessage_RequestIBDBlocks)(nil), - (*KaspadMessage_RequestNextIBDBlocks)(nil), - (*KaspadMessage_DoneIBDBlocks)(nil), + (*KaspadMessage_RequestHeaders)(nil), + (*KaspadMessage_RequestNextHeaders)(nil), + (*KaspadMessage_DoneHeaders)(nil), (*KaspadMessage_RequestRelayBlocks)(nil), (*KaspadMessage_RequestSelectedTip)(nil), (*KaspadMessage_RequestTransactions)(nil), @@ -8506,6 +8871,11 @@ func file_messages_proto_init() { (*KaspadMessage_Version)(nil), (*KaspadMessage_TransactionNotFound)(nil), (*KaspadMessage_Reject)(nil), + (*KaspadMessage_BlockHeader)(nil), + (*KaspadMessage_RequestIBDRootUTXOSetAndBlock)(nil), + (*KaspadMessage_IbdRootUTXOSetAndBlock)(nil), + (*KaspadMessage_RequestIBDBlocks)(nil), + (*KaspadMessage_IbdRootNotFound)(nil), (*KaspadMessage_GetCurrentNetworkRequest)(nil), (*KaspadMessage_GetCurrentNetworkResponse)(nil), (*KaspadMessage_SubmitBlockRequest)(nil), @@ -8561,7 +8931,7 @@ func file_messages_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_messages_proto_rawDesc, NumEnums: 0, - NumMessages: 90, + NumMessages: 94, NumExtensions: 0, NumServices: 2, }, diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto index 3d3a9d7b0..1984055f4 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/messages.proto @@ -11,9 +11,9 @@ message KaspadMessage { RequestBlockLocatorMessage requestBlockLocator = 4; BlockLocatorMessage blockLocator = 5; RequestAddressesMessage requestAddresses = 6; - RequestIBDBlocksMessage requestIBDBlocks = 7; - RequestNextIBDBlocksMessage requestNextIBDBlocks = 8; - DoneIBDBlocksMessage DoneIBDBlocks = 9; + RequestHeadersMessage requestHeaders = 7; + RequestNextHeadersMessage requestNextHeaders = 8; + DoneHeadersMessage DoneHeaders = 9; RequestRelayBlocksMessage requestRelayBlocks = 10; RequestSelectedTipMessage requestSelectedTip = 11; RequestTransactionsMessage requestTransactions = 12; @@ -27,6 +27,11 @@ message KaspadMessage { VersionMessage version = 20; TransactionNotFoundMessage transactionNotFound = 21; RejectMessage reject = 22; + BlockHeaderMessage blockHeader = 23; + RequestIBDRootUTXOSetAndBlockMessage requestIBDRootUTXOSetAndBlock = 24; + IBDRootUTXOSetAndBlockMessage ibdRootUTXOSetAndBlock = 25; + RequestIBDBlocksMessage requestIBDBlocks = 26; + IBDRootNotFoundMessage ibdRootNotFound = 27; GetCurrentNetworkRequestMessage getCurrentNetworkRequest = 1001; GetCurrentNetworkResponseMessage getCurrentNetworkResponse = 1002; @@ -144,11 +149,11 @@ message TransactionOutput{ // BlockMessage start message BlockMessage{ - BlockHeader header = 1; + BlockHeaderMessage header = 1; repeated TransactionMessage transactions = 2; } -message BlockHeader{ +message BlockHeaderMessage{ int32 version = 1; repeated Hash parentHashes = 2; Hash hashMerkleRoot = 3; @@ -178,27 +183,27 @@ message BlockLocatorMessage{ // BlockLocatorMessage end // GetBlocksMessage start -message RequestIBDBlocksMessage{ +message RequestHeadersMessage{ Hash lowHash = 1; Hash highHash = 2; } // GetBlocksMessage end // RequestNextIBDBlocksMessage start -message RequestNextIBDBlocksMessage{ +message RequestNextHeadersMessage{ } // RequestNextIBDBlocksMessage end // DoneIBDBlocksMessage start -message DoneIBDBlocksMessage{ +message DoneHeadersMessage{ } // DoneIBDBlocksMessage end -// GetRelayBlocksMessage start +// RequestRelayBlocksMessage start message RequestRelayBlocksMessage{ repeated Hash hashes = 1; } -// GetRelayBlocksMessage end +// RequestRelayBlocksMessage end // GetSelectedTipMessage start message RequestSelectedTipMessage{ @@ -273,6 +278,30 @@ message RejectMessage{ } // RejectMessage end +// RequestIBDRootUTXOSetAndBlockMessage start +message RequestIBDRootUTXOSetAndBlockMessage{ + Hash ibdRoot = 1; +} +// RequestIBDRootUTXOSetAndBlockMessage end + +// IBDRootUTXOSetAndBlockMessage start +message IBDRootUTXOSetAndBlockMessage{ + bytes utxoSet = 1; + BlockMessage block = 2; +} +// IBDRootUTXOSetAndBlockMessage end + +// RequestIBDBlocksMessage start +message RequestIBDBlocksMessage{ + repeated Hash hashes = 1; +} +// RequestIBDBlocksMessage end + +// IBDRootNotFoundMessage start +message IBDRootNotFoundMessage{ +} +// IBDRootNotFoundMessage end + service P2P { rpc MessageStream (stream KaspadMessage) returns (stream KaspadMessage) {} } @@ -455,7 +484,7 @@ message BlockVerboseData{ double difficulty = 11; repeated string parentHashes = 12; string selectedParentHash = 13; - repeated string transactionIDs=14; + repeated string transactionIDs = 14; } message TransactionVerboseData{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_block.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_block.go index d3474a9fa..d82d38cc5 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_block.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_block.go @@ -2,7 +2,6 @@ package protowire import ( "github.com/kaspanet/kaspad/app/appmessage" - "github.com/kaspanet/kaspad/util/mstime" "github.com/pkg/errors" ) @@ -15,7 +14,7 @@ func (x *KaspadMessage_Block) fromAppMessage(msgBlock *appmessage.MsgBlock) erro return x.Block.fromAppMessage(msgBlock) } -func (x *BlockMessage) toAppMessage() (appmessage.Message, error) { +func (x *BlockMessage) toAppMessage() (*appmessage.MsgBlock, error) { if len(x.Transactions) > appmessage.MaxTxPerBlock { return nil, errors.Errorf("too many transactions to fit into a block "+ "[count %d, max %d]", len(x.Transactions), appmessage.MaxTxPerBlock) @@ -31,37 +30,11 @@ func (x *BlockMessage) toAppMessage() (appmessage.Message, error) { "is %d", len(protoBlockHeader.ParentHashes), appmessage.MaxBlockParents) } - parentHashes, err := protoHashesToDomain(protoBlockHeader.ParentHashes) + header, err := x.Header.toAppMessage() if err != nil { return nil, err } - hashMerkleRoot, err := protoBlockHeader.HashMerkleRoot.toDomain() - if err != nil { - return nil, err - } - - acceptedIDMerkleRoot, err := protoBlockHeader.AcceptedIDMerkleRoot.toDomain() - if err != nil { - return nil, err - } - - utxoCommitment, err := protoBlockHeader.UtxoCommitment.toDomain() - if err != nil { - return nil, err - } - - header := appmessage.BlockHeader{ - Version: protoBlockHeader.Version, - ParentHashes: parentHashes, - HashMerkleRoot: hashMerkleRoot, - AcceptedIDMerkleRoot: acceptedIDMerkleRoot, - UTXOCommitment: utxoCommitment, - Timestamp: mstime.UnixMilliseconds(protoBlockHeader.Timestamp), - Bits: protoBlockHeader.Bits, - Nonce: protoBlockHeader.Nonce, - } - transactions := make([]*appmessage.MsgTx, len(x.Transactions)) for i, protoTx := range x.Transactions { msgTx, err := protoTx.toAppMessage() @@ -72,7 +45,7 @@ func (x *BlockMessage) toAppMessage() (appmessage.Message, error) { } return &appmessage.MsgBlock{ - Header: header, + Header: *header, Transactions: transactions, }, nil } @@ -88,17 +61,12 @@ func (x *BlockMessage) fromAppMessage(msgBlock *appmessage.MsgBlock) error { "is %d", len(msgBlock.Header.ParentHashes), appmessage.MaxBlockParents) } - header := msgBlock.Header - protoHeader := &BlockHeader{ - Version: header.Version, - ParentHashes: domainHashesToProto(header.ParentHashes), - HashMerkleRoot: domainHashToProto(header.HashMerkleRoot), - AcceptedIDMerkleRoot: domainHashToProto(header.AcceptedIDMerkleRoot), - UtxoCommitment: domainHashToProto(header.UTXOCommitment), - Timestamp: header.Timestamp.UnixMilliseconds(), - Bits: header.Bits, - Nonce: header.Nonce, + protoHeader := new(BlockHeaderMessage) + err := protoHeader.fromAppMessage(&msgBlock.Header) + if err != nil { + return err } + protoTransactions := make([]*TransactionMessage, len(msgBlock.Transactions)) for i, tx := range msgBlock.Transactions { protoTx := new(TransactionMessage) diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_done_ibd_blocks.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_done_ibd_blocks.go index 5c12ba77f..566a7e673 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_done_ibd_blocks.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_done_ibd_blocks.go @@ -2,10 +2,10 @@ package protowire import "github.com/kaspanet/kaspad/app/appmessage" -func (x *KaspadMessage_DoneIBDBlocks) toAppMessage() (appmessage.Message, error) { - return &appmessage.MsgDoneIBDBlocks{}, nil +func (x *KaspadMessage_DoneHeaders) toAppMessage() (appmessage.Message, error) { + return &appmessage.MsgDoneHeaders{}, nil } -func (x *KaspadMessage_DoneIBDBlocks) fromAppMessage(_ *appmessage.MsgDoneIBDBlocks) error { +func (x *KaspadMessage_DoneHeaders) fromAppMessage(_ *appmessage.MsgDoneHeaders) error { return nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_header.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_header.go new file mode 100644 index 000000000..b95d5644d --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_header.go @@ -0,0 +1,73 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/kaspanet/kaspad/util/mstime" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_BlockHeader) toAppMessage() (appmessage.Message, error) { + return x.BlockHeader.toAppMessage() +} + +func (x *KaspadMessage_BlockHeader) fromAppMessage(msgBlockHeader *appmessage.MsgBlockHeader) error { + x.BlockHeader = new(BlockHeaderMessage) + return x.BlockHeader.fromAppMessage(msgBlockHeader) +} + +func (x *BlockHeaderMessage) toAppMessage() (*appmessage.MsgBlockHeader, error) { + if len(x.ParentHashes) > appmessage.MaxBlockParents { + return nil, errors.Errorf("block header has %d parents, but the maximum allowed amount "+ + "is %d", len(x.ParentHashes), appmessage.MaxBlockParents) + } + + parentHashes, err := protoHashesToDomain(x.ParentHashes) + if err != nil { + return nil, err + } + + hashMerkleRoot, err := x.HashMerkleRoot.toDomain() + if err != nil { + return nil, err + } + + acceptedIDMerkleRoot, err := x.AcceptedIDMerkleRoot.toDomain() + if err != nil { + return nil, err + } + + utxoCommitment, err := x.UtxoCommitment.toDomain() + if err != nil { + return nil, err + } + + return &appmessage.MsgBlockHeader{ + Version: x.Version, + ParentHashes: parentHashes, + HashMerkleRoot: hashMerkleRoot, + AcceptedIDMerkleRoot: acceptedIDMerkleRoot, + UTXOCommitment: utxoCommitment, + Timestamp: mstime.UnixMilliseconds(x.Timestamp), + Bits: x.Bits, + Nonce: x.Nonce, + }, nil +} + +func (x *BlockHeaderMessage) fromAppMessage(msgBlockHeader *appmessage.MsgBlockHeader) error { + if len(msgBlockHeader.ParentHashes) > appmessage.MaxBlockParents { + return errors.Errorf("block header has %d parents, but the maximum allowed amount "+ + "is %d", len(msgBlockHeader.ParentHashes), appmessage.MaxBlockParents) + } + + *x = BlockHeaderMessage{ + Version: msgBlockHeader.Version, + ParentHashes: domainHashesToProto(msgBlockHeader.ParentHashes), + HashMerkleRoot: domainHashToProto(msgBlockHeader.HashMerkleRoot), + AcceptedIDMerkleRoot: domainHashToProto(msgBlockHeader.AcceptedIDMerkleRoot), + UtxoCommitment: domainHashToProto(msgBlockHeader.UTXOCommitment), + Timestamp: msgBlockHeader.Timestamp.UnixMilliseconds(), + Bits: msgBlockHeader.Bits, + Nonce: msgBlockHeader.Nonce, + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_block.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_block.go index 1841a9c9f..192524c0e 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_block.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_block.go @@ -7,7 +7,7 @@ func (x *KaspadMessage_IbdBlock) toAppMessage() (appmessage.Message, error) { if err != nil { return nil, err } - return &appmessage.MsgIBDBlock{MsgBlock: msgBlock.(*appmessage.MsgBlock)}, nil + return &appmessage.MsgIBDBlock{MsgBlock: msgBlock}, nil } func (x *KaspadMessage_IbdBlock) fromAppMessage(msgIBDBlock *appmessage.MsgIBDBlock) error { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_not_found.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_not_found.go new file mode 100644 index 000000000..b22b3eecb --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_not_found.go @@ -0,0 +1,11 @@ +package protowire + +import "github.com/kaspanet/kaspad/app/appmessage" + +func (x *KaspadMessage_IbdRootNotFound) toAppMessage() (appmessage.Message, error) { + return &appmessage.MsgIBDRootNotFound{}, nil +} + +func (x *KaspadMessage_IbdRootNotFound) fromAppMessage(_ *appmessage.MsgIBDRootNotFound) error { + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_utxo_set_and_block.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_utxo_set_and_block.go new file mode 100644 index 000000000..895615b22 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_ibd_root_utxo_set_and_block.go @@ -0,0 +1,19 @@ +package protowire + +import "github.com/kaspanet/kaspad/app/appmessage" + +func (x *KaspadMessage_IbdRootUTXOSetAndBlock) toAppMessage() (appmessage.Message, error) { + msgBlock, err := x.IbdRootUTXOSetAndBlock.Block.toAppMessage() + if err != nil { + return nil, err + } + return &appmessage.MsgIBDRootUTXOSetAndBlock{ + UTXOSet: x.IbdRootUTXOSetAndBlock.UtxoSet, + Block: msgBlock, + }, nil +} + +func (x *KaspadMessage_IbdRootUTXOSetAndBlock) fromAppMessage(msgIBDRootUTXOSetAndBlock *appmessage.MsgIBDRootUTXOSetAndBlock) error { + x.IbdRootUTXOSetAndBlock.UtxoSet = msgIBDRootUTXOSetAndBlock.UTXOSet + return x.IbdRootUTXOSetAndBlock.Block.fromAppMessage(msgIBDRootUTXOSetAndBlock.Block) +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_headers.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_headers.go new file mode 100644 index 000000000..afea5d02b --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_headers.go @@ -0,0 +1,28 @@ +package protowire + +import "github.com/kaspanet/kaspad/app/appmessage" + +func (x *KaspadMessage_RequestHeaders) toAppMessage() (appmessage.Message, error) { + lowHash, err := x.RequestHeaders.LowHash.toDomain() + if err != nil { + return nil, err + } + + highHash, err := x.RequestHeaders.HighHash.toDomain() + if err != nil { + return nil, err + } + + return &appmessage.MsgRequestHeaders{ + LowHash: lowHash, + HighHash: highHash, + }, nil +} + +func (x *KaspadMessage_RequestHeaders) fromAppMessage(msgRequestHeaders *appmessage.MsgRequestHeaders) error { + x.RequestHeaders = &RequestHeadersMessage{ + LowHash: domainHashToProto(msgRequestHeaders.LowHash), + HighHash: domainHashToProto(msgRequestHeaders.HighHash), + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_blocks.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_blocks.go index bcf81bc39..1f8784f33 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_blocks.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_blocks.go @@ -1,28 +1,31 @@ package protowire -import "github.com/kaspanet/kaspad/app/appmessage" +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) func (x *KaspadMessage_RequestIBDBlocks) toAppMessage() (appmessage.Message, error) { - lowHash, err := x.RequestIBDBlocks.LowHash.toDomain() + if len(x.RequestIBDBlocks.Hashes) > appmessage.MaxRequestIBDBlocksHashes { + return nil, errors.Errorf("too many hashes for message "+ + "[count %d, max %d]", len(x.RequestIBDBlocks.Hashes), appmessage.MaxRequestIBDBlocksHashes) + } + hashes, err := protoHashesToDomain(x.RequestIBDBlocks.Hashes) if err != nil { return nil, err } - - highHash, err := x.RequestIBDBlocks.HighHash.toDomain() - if err != nil { - return nil, err - } - - return &appmessage.MsgRequestIBDBlocks{ - LowHash: lowHash, - HighHash: highHash, - }, nil + return &appmessage.MsgRequestRelayBlocks{Hashes: hashes}, nil } -func (x *KaspadMessage_RequestIBDBlocks) fromAppMessage(msgGetBlocks *appmessage.MsgRequestIBDBlocks) error { - x.RequestIBDBlocks = &RequestIBDBlocksMessage{ - LowHash: domainHashToProto(msgGetBlocks.LowHash), - HighHash: domainHashToProto(msgGetBlocks.HighHash), +func (x *KaspadMessage_RequestIBDBlocks) fromAppMessage(msgRequestIBDBlocks *appmessage.MsgRequestIBDBlocks) error { + if len(msgRequestIBDBlocks.Hashes) > appmessage.MaxRequestIBDBlocksHashes { + return errors.Errorf("too many hashes for message "+ + "[count %d, max %d]", len(msgRequestIBDBlocks.Hashes), appmessage.MaxRequestIBDBlocksHashes) } + + x.RequestIBDBlocks = &RequestIBDBlocksMessage{ + Hashes: domainHashesToProto(msgRequestIBDBlocks.Hashes), + } + return nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_root_utxo_set_and_block.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_root_utxo_set_and_block.go new file mode 100644 index 000000000..934d36c72 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_ibd_root_utxo_set_and_block.go @@ -0,0 +1,18 @@ +package protowire + +import "github.com/kaspanet/kaspad/app/appmessage" + +func (x *KaspadMessage_RequestIBDRootUTXOSetAndBlock) toAppMessage() (appmessage.Message, error) { + ibdRoot, err := x.RequestIBDRootUTXOSetAndBlock.IbdRoot.toDomain() + if err != nil { + return nil, err + } + + return &appmessage.MsgRequestIBDRootUTXOSetAndBlock{IBDRoot: ibdRoot}, nil +} + +func (x *KaspadMessage_RequestIBDRootUTXOSetAndBlock) fromAppMessage( + msgRequestIBDRootUTXOSetAndBlock *appmessage.MsgRequestIBDRootUTXOSetAndBlock) error { + x.RequestIBDRootUTXOSetAndBlock.IbdRoot = domainHashToProto(msgRequestIBDRootUTXOSetAndBlock.IBDRoot) + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_headers.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_headers.go new file mode 100644 index 000000000..1e9689f91 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_headers.go @@ -0,0 +1,11 @@ +package protowire + +import "github.com/kaspanet/kaspad/app/appmessage" + +func (x *KaspadMessage_RequestNextHeaders) toAppMessage() (appmessage.Message, error) { + return &appmessage.MsgRequestNextHeaders{}, nil +} + +func (x *KaspadMessage_RequestNextHeaders) fromAppMessage(_ *appmessage.MsgRequestNextHeaders) error { + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_ibd_blocks.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_ibd_blocks.go deleted file mode 100644 index 4ef579ed3..000000000 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_next_ibd_blocks.go +++ /dev/null @@ -1,11 +0,0 @@ -package protowire - -import "github.com/kaspanet/kaspad/app/appmessage" - -func (x *KaspadMessage_RequestNextIBDBlocks) toAppMessage() (appmessage.Message, error) { - return &appmessage.MsgRequestNextIBDBlocks{}, nil -} - -func (x *KaspadMessage_RequestNextIBDBlocks) fromAppMessage(_ *appmessage.MsgRequestNextIBDBlocks) error { - return nil -} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_relay_blocks.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_relay_blocks.go index b394aa721..ea8779b13 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_relay_blocks.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_relay_blocks.go @@ -6,9 +6,9 @@ import ( ) func (x *KaspadMessage_RequestRelayBlocks) toAppMessage() (appmessage.Message, error) { - if len(x.RequestRelayBlocks.Hashes) > appmessage.MsgRequestRelayBlocksHashes { + if len(x.RequestRelayBlocks.Hashes) > appmessage.MaxRequestRelayBlocksHashes { return nil, errors.Errorf("too many hashes for message "+ - "[count %d, max %d]", len(x.RequestRelayBlocks.Hashes), appmessage.MsgRequestRelayBlocksHashes) + "[count %d, max %d]", len(x.RequestRelayBlocks.Hashes), appmessage.MaxRequestRelayBlocksHashes) } hashes, err := protoHashesToDomain(x.RequestRelayBlocks.Hashes) if err != nil { @@ -18,9 +18,9 @@ func (x *KaspadMessage_RequestRelayBlocks) toAppMessage() (appmessage.Message, e } func (x *KaspadMessage_RequestRelayBlocks) fromAppMessage(msgGetRelayBlocks *appmessage.MsgRequestRelayBlocks) error { - if len(msgGetRelayBlocks.Hashes) > appmessage.MsgRequestRelayBlocksHashes { + if len(msgGetRelayBlocks.Hashes) > appmessage.MaxRequestRelayBlocksHashes { return errors.Errorf("too many hashes for message "+ - "[count %d, max %d]", len(msgGetRelayBlocks.Hashes), appmessage.MsgRequestRelayBlocksHashes) + "[count %d, max %d]", len(msgGetRelayBlocks.Hashes), appmessage.MaxRequestRelayBlocksHashes) } x.RequestRelayBlocks = &RequestRelayBlocksMessage{ diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_block_template.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_block_template.go index 1d4aa418d..d45c3b3af 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_block_template.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_get_block_template.go @@ -22,7 +22,7 @@ func (x *KaspadMessage_GetBlockTemplateResponse) toAppMessage() (appmessage.Mess if err != nil { return nil, err } - return appmessage.NewGetBlockTemplateResponseMessage(msgBlock.(*appmessage.MsgBlock)), nil + return appmessage.NewGetBlockTemplateResponseMessage(msgBlock), nil } func (x *KaspadMessage_GetBlockTemplateResponse) fromAppMessage(message *appmessage.GetBlockTemplateResponseMessage) error { diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_block_added.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_block_added.go index 2e08fb26b..b4b718dc1 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_block_added.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_notify_block_added.go @@ -38,7 +38,7 @@ func (x *KaspadMessage_BlockAddedNotification) toAppMessage() (appmessage.Messag return nil, err } return &appmessage.BlockAddedNotificationMessage{ - Block: block.(*appmessage.MsgBlock), + Block: block, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_block.go b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_block.go index fe8be232d..4ba9bd747 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_block.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/rpc_submit_block.go @@ -9,7 +9,7 @@ func (x *KaspadMessage_SubmitBlockRequest) toAppMessage() (appmessage.Message, e } return &appmessage.SubmitBlockRequestMessage{ - Block: blockAppMessage.(*appmessage.MsgBlock), + Block: blockAppMessage, }, nil } diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index f386de8ca..c690ac9a3 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -93,15 +93,15 @@ func toP2PPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil - case *appmessage.MsgRequestNextIBDBlocks: - payload := new(KaspadMessage_RequestNextIBDBlocks) + case *appmessage.MsgRequestNextHeaders: + payload := new(KaspadMessage_RequestNextHeaders) err := payload.fromAppMessage(message) if err != nil { return nil, err } return payload, nil - case *appmessage.MsgDoneIBDBlocks: - payload := new(KaspadMessage_DoneIBDBlocks) + case *appmessage.MsgDoneHeaders: + payload := new(KaspadMessage_DoneHeaders) err := payload.fromAppMessage(message) if err != nil { return nil, err @@ -205,6 +205,47 @@ func toP2PPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil + + case *appmessage.MsgBlockHeader: + payload := new(KaspadMessage_BlockHeader) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + + case *appmessage.MsgRequestIBDRootUTXOSetAndBlock: + payload := new(KaspadMessage_RequestIBDRootUTXOSetAndBlock) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + + case *appmessage.MsgIBDRootUTXOSetAndBlock: + payload := new(KaspadMessage_IbdRootUTXOSetAndBlock) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + + case *appmessage.MsgRequestHeaders: + payload := new(KaspadMessage_RequestHeaders) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + + case *appmessage.MsgIBDRootNotFound: + payload := new(KaspadMessage_IbdRootNotFound) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil + default: return nil, nil }