mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-03 23:57:26 +00:00 
			
		
		
		
	v1.4.0 (#86)
This commit is contained in:
		
							parent
							
								
									ae7c14fc2a
								
							
						
					
					
						commit
						7ad553fd62
					
				@ -868,29 +868,30 @@ func logoVersion(width int) string {
 | 
			
		||||
		out += " ###########                     ##############                      ##########&\n"
 | 
			
		||||
		out += " ##########                      ##############                       ##########\n"
 | 
			
		||||
		out += "%##########                        ##########                         ##########\n"
 | 
			
		||||
		out += "##########&                                                           ##########\n"
 | 
			
		||||
		out += "##########                                                            ##########\n"
 | 
			
		||||
		out += "##########                                                            &#########\n"
 | 
			
		||||
		out += "##########&                   #######      #######                    ##########\n"
 | 
			
		||||
		out += " ##########                &#########################                 ##########\n"
 | 
			
		||||
		out += "##########                    #######      #######                    ##########\n"
 | 
			
		||||
		out += "%#########                 &#########################                 ##########\n"
 | 
			
		||||
		out += " ##########              ##############% ##############              &##########\n"
 | 
			
		||||
		out += " %##########          &##############      ###############           ##########\n"
 | 
			
		||||
		out += "  ###########       ###############           ##############%       ###########\n"
 | 
			
		||||
		out += "   ###########&       ##########                ###############       ########\n"
 | 
			
		||||
		out += "    ############         #####                     ##############%       ####\n"
 | 
			
		||||
		out += "      ############                                   ###############\n"
 | 
			
		||||
		out += "       ##############                                   ##############%\n"
 | 
			
		||||
		out += "         ###############                                  ###############\n"
 | 
			
		||||
		out += "           #################&                                ##############%\n"
 | 
			
		||||
		out += "              #########################&&&#############        ###############\n"
 | 
			
		||||
		out += "                 ########################################%        ############\n"
 | 
			
		||||
		out += "                     #######################################        ########\n"
 | 
			
		||||
		out += "                          #############################                ##\n"
 | 
			
		||||
		out += " '         '          &##############      ###############           ##########\n"
 | 
			
		||||
		out += "  '         '       ###############           ##############%       ###########\n"
 | 
			
		||||
		out += "   '         '.       ##########                ###############       ########\n"
 | 
			
		||||
		out += "    '.         .         #####                     ##############%       ####\n"
 | 
			
		||||
		out += "      '         '.                                   ###############\n"
 | 
			
		||||
		out += "       '.         '..                                   ##############%\n"
 | 
			
		||||
		out += "         '.          '-.                                  ###############\n"
 | 
			
		||||
		out += "           '-.          ''-..                      ..        ##############%\n"
 | 
			
		||||
		out += "              '-.            ''---............----'  '.        ###############\n"
 | 
			
		||||
		out += "                 '-..                                  '.        ############\n"
 | 
			
		||||
		out += "                     ''-..                             ..'         ########\n"
 | 
			
		||||
		out += "                          ''---..              ...---''               ##\n"
 | 
			
		||||
		out += "                                 ''----------''\n"
 | 
			
		||||
		out += " \n"
 | 
			
		||||
		out += "                         Quilibrium Node - v1.3.0 – Dawn\n"
 | 
			
		||||
		out += "                        Quilibrium Node - v1.4.0 – Sunset\n"
 | 
			
		||||
		out += " \n"
 | 
			
		||||
		out += "                                   DB Console\n"
 | 
			
		||||
	} else {
 | 
			
		||||
		out = "Quilibrium Node - v1.3.0 – Dawn - DB Console\n"
 | 
			
		||||
		out = "Quilibrium Node - v1.4.0 – Sunset - DB Console\n"
 | 
			
		||||
	}
 | 
			
		||||
	return out
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ import (
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -72,7 +73,7 @@ var consensusSet = wire.NewSet(
 | 
			
		||||
	),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func NewNode(*config.Config) (*Node, error) {
 | 
			
		||||
func NewNode(*config.Config, *protobufs.SelfTestReport) (*Node, error) {
 | 
			
		||||
	panic(wire.Build(
 | 
			
		||||
		loggerSet,
 | 
			
		||||
		keyManagerSet,
 | 
			
		||||
 | 
			
		||||
@ -17,12 +17,13 @@ import (
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Injectors from wire.go:
 | 
			
		||||
 | 
			
		||||
func NewNode(configConfig *config.Config) (*Node, error) {
 | 
			
		||||
func NewNode(configConfig *config.Config, selfTestReport *protobufs.SelfTestReport) (*Node, error) {
 | 
			
		||||
	zapLogger := logger()
 | 
			
		||||
	dbConfig := configConfig.DB
 | 
			
		||||
	pebbleDB := store.NewPebbleDB(dbConfig)
 | 
			
		||||
@ -37,7 +38,7 @@ func NewNode(configConfig *config.Config) (*Node, error) {
 | 
			
		||||
	masterTimeReel := time.NewMasterTimeReel(zapLogger, pebbleClockStore, engineConfig, wesolowskiFrameProver)
 | 
			
		||||
	pebbleKeyStore := store.NewPebbleKeyStore(pebbleDB, zapLogger)
 | 
			
		||||
	ceremonyExecutionEngine := ceremony.NewCeremonyExecutionEngine(zapLogger, engineConfig, fileKeyManager, blossomSub, wesolowskiFrameProver, kzgInclusionProver, pebbleClockStore, masterTimeReel, pebbleKeyStore)
 | 
			
		||||
	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel)
 | 
			
		||||
	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub, wesolowskiFrameProver, masterTimeReel, selfTestReport)
 | 
			
		||||
	node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
 | 
			
		||||
@ -282,6 +282,7 @@ func (e *CeremonyDataClockConsensusEngine) Start() <-chan error {
 | 
			
		||||
 | 
			
		||||
		if err := e.pubSub.StartDirectChannelListener(
 | 
			
		||||
			e.pubSub.GetPeerID(),
 | 
			
		||||
			"",
 | 
			
		||||
			server,
 | 
			
		||||
		); err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
 | 
			
		||||
@ -185,7 +185,7 @@ func (e *CeremonyDataClockConsensusEngine) sync(
 | 
			
		||||
) (*protobufs.ClockFrame, error) {
 | 
			
		||||
	latest := currentLatest
 | 
			
		||||
	e.logger.Info("polling peer for new frames", zap.Binary("peer_id", peerId))
 | 
			
		||||
	cc, err := e.pubSub.GetDirectChannel(peerId)
 | 
			
		||||
	cc, err := e.pubSub.GetDirectChannel(peerId, "")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		e.logger.Error(
 | 
			
		||||
			"could not establish direct channel",
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ import (
 | 
			
		||||
	"io"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/mr-tron/base58"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
@ -645,6 +646,7 @@ func (e *svr) GetPublicChannel(
 | 
			
		||||
 | 
			
		||||
func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
			
		||||
	initiator bool,
 | 
			
		||||
	peerID []byte,
 | 
			
		||||
	provingKey []byte,
 | 
			
		||||
) (p2p.PublicChannelClient, error) {
 | 
			
		||||
	if initiator {
 | 
			
		||||
@ -664,7 +666,8 @@ func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
			
		||||
			protobufs.RegisterCeremonyServiceServer(server, s)
 | 
			
		||||
 | 
			
		||||
			if err := e.pubSub.StartDirectChannelListener(
 | 
			
		||||
				provingKey,
 | 
			
		||||
				peerID,
 | 
			
		||||
				base58.Encode(provingKey),
 | 
			
		||||
				server,
 | 
			
		||||
			); err != nil {
 | 
			
		||||
				e.logger.Error(
 | 
			
		||||
@ -684,7 +687,7 @@ func (e *CeremonyDataClockConsensusEngine) GetPublicChannelForProvingKey(
 | 
			
		||||
			)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		cc, err := e.pubSub.GetDirectChannel(provingKey)
 | 
			
		||||
		cc, err := e.pubSub.GetDirectChannel(peerID, base58.Encode(provingKey))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			e.logger.Error(
 | 
			
		||||
				"could not get public channel for proving key",
 | 
			
		||||
 | 
			
		||||
@ -51,13 +51,13 @@ type DataConsensusEngine interface {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetMinimumVersionCutoff() time.Time {
 | 
			
		||||
	return time.Date(2024, time.February, 28, 7, 0, 0, 0, time.UTC)
 | 
			
		||||
	return time.Date(2024, time.March, 1, 7, 0, 0, 0, time.UTC)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetMinimumVersion() []byte {
 | 
			
		||||
	return []byte{0x01, 0x03, 0x00}
 | 
			
		||||
	return []byte{0x01, 0x04, 0x00}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetVersion() []byte {
 | 
			
		||||
	return []byte{0x01, 0x03, 0x00}
 | 
			
		||||
	return []byte{0x01, 0x04, 0x00}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,15 @@
 | 
			
		||||
package master
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"context"
 | 
			
		||||
	"crypto/rand"
 | 
			
		||||
	"encoding/binary"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/iden3/go-iden3-crypto/poseidon"
 | 
			
		||||
	"github.com/mr-tron/base58"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"golang.org/x/sync/errgroup"
 | 
			
		||||
@ -76,6 +82,13 @@ func (e *MasterClockConsensusEngine) handleMessage(message *pb.Message) error {
 | 
			
		||||
		); err != nil {
 | 
			
		||||
			return errors.Wrap(err, "handle message")
 | 
			
		||||
		}
 | 
			
		||||
	case protobufs.SelfTestReportType:
 | 
			
		||||
		if err := e.handleSelfTestReport(
 | 
			
		||||
			message.From,
 | 
			
		||||
			any,
 | 
			
		||||
		); err != nil {
 | 
			
		||||
			return errors.Wrap(err, "handle message")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
@ -119,6 +132,154 @@ func (e *MasterClockConsensusEngine) handleClockFrameData(
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *MasterClockConsensusEngine) handleSelfTestReport(
 | 
			
		||||
	peerID []byte,
 | 
			
		||||
	any *anypb.Any,
 | 
			
		||||
) error {
 | 
			
		||||
	if bytes.Equal(peerID, e.pubSub.GetPeerID()) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	report := &protobufs.SelfTestReport{}
 | 
			
		||||
	if err := any.UnmarshalTo(report); err != nil {
 | 
			
		||||
		return errors.Wrap(err, "handle self test report")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	e.peerMapMx.Lock()
 | 
			
		||||
	if _, ok := e.peerMap[string(peerID)]; !ok {
 | 
			
		||||
		e.peerMapMx.Unlock()
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	e.peerMap[string(peerID)] = report
 | 
			
		||||
	e.peerMapMx.Unlock()
 | 
			
		||||
 | 
			
		||||
	memory := binary.BigEndian.Uint64(report.Memory)
 | 
			
		||||
	e.logger.Info(
 | 
			
		||||
		"received self test report",
 | 
			
		||||
		zap.String("peer_id", base58.Encode(peerID)),
 | 
			
		||||
		zap.Uint32("difficulty", report.Difficulty),
 | 
			
		||||
		zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
			
		||||
		zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
			
		||||
		zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
			
		||||
		zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
			
		||||
		zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
			
		||||
		zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
			
		||||
		zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
			
		||||
		zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
			
		||||
		zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
			
		||||
		zap.Uint32("cores", report.Cores),
 | 
			
		||||
		zap.Uint64("memory", memory),
 | 
			
		||||
		zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if report.Cores < 3 || memory < 16000000000 {
 | 
			
		||||
		e.logger.Info(
 | 
			
		||||
			"peer reported invalid configuration",
 | 
			
		||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
			
		||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
			
		||||
			zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
			
		||||
			zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
			
		||||
			zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
			
		||||
			zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
			
		||||
			zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
			
		||||
			zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
			
		||||
			zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
			
		||||
			zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
			
		||||
			zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
			
		||||
			zap.Uint32("cores", report.Cores),
 | 
			
		||||
			zap.Uint64("memory", memory),
 | 
			
		||||
			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		// tag: dusk – nuke this peer for now
 | 
			
		||||
		e.pubSub.SetPeerScore(peerID, -1000)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cc, err := e.pubSub.GetDirectChannel(peerID, "validation")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		e.logger.Error(
 | 
			
		||||
			"could not connect for validation",
 | 
			
		||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
			
		||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
			
		||||
			zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
			
		||||
			zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
			
		||||
			zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
			
		||||
			zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
			
		||||
			zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
			
		||||
			zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
			
		||||
			zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
			
		||||
			zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
			
		||||
			zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
			
		||||
			zap.Uint32("cores", report.Cores),
 | 
			
		||||
			zap.Uint64("memory", memory),
 | 
			
		||||
			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
			
		||||
		)
 | 
			
		||||
		return errors.Wrap(err, "handle self test report")
 | 
			
		||||
	}
 | 
			
		||||
	client := protobufs.NewValidationServiceClient(cc)
 | 
			
		||||
	verification := make([]byte, 1048576)
 | 
			
		||||
	rand.Read(verification)
 | 
			
		||||
	start := time.Now().UnixMilli()
 | 
			
		||||
	validation, err := client.PerformValidation(
 | 
			
		||||
		context.Background(),
 | 
			
		||||
		&protobufs.ValidationMessage{
 | 
			
		||||
			Validation: verification,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	end := time.Now().UnixMilli()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		cc.Close()
 | 
			
		||||
		return errors.Wrap(err, "handle self test report")
 | 
			
		||||
	}
 | 
			
		||||
	cc.Close()
 | 
			
		||||
 | 
			
		||||
	if !bytes.Equal(verification, validation.Validation) {
 | 
			
		||||
		e.logger.Error(
 | 
			
		||||
			"provided invalid verification",
 | 
			
		||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
			
		||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
			
		||||
			zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
			
		||||
			zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
			
		||||
			zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
			
		||||
			zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
			
		||||
			zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
			
		||||
			zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
			
		||||
			zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
			
		||||
			zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
			
		||||
			zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
			
		||||
			zap.Uint32("cores", report.Cores),
 | 
			
		||||
			zap.Uint64("memory", memory),
 | 
			
		||||
			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
			
		||||
		)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if end-start > 2000 {
 | 
			
		||||
		e.logger.Error(
 | 
			
		||||
			"slow bandwidth, scoring out",
 | 
			
		||||
			zap.String("peer_id", base58.Encode(peerID)),
 | 
			
		||||
			zap.Uint32("difficulty", report.Difficulty),
 | 
			
		||||
			zap.Int64("difficulty_metric", report.DifficultyMetric),
 | 
			
		||||
			zap.Int64("commit_16_metric", report.Commit_16Metric),
 | 
			
		||||
			zap.Int64("commit_128_metric", report.Commit_128Metric),
 | 
			
		||||
			zap.Int64("commit_1024_metric", report.Commit_1024Metric),
 | 
			
		||||
			zap.Int64("commit_65536_metric", report.Commit_65536Metric),
 | 
			
		||||
			zap.Int64("proof_16_metric", report.Proof_16Metric),
 | 
			
		||||
			zap.Int64("proof_128_metric", report.Proof_128Metric),
 | 
			
		||||
			zap.Int64("proof_1024_metric", report.Proof_1024Metric),
 | 
			
		||||
			zap.Int64("proof_65536_metric", report.Proof_65536Metric),
 | 
			
		||||
			zap.Uint32("cores", report.Cores),
 | 
			
		||||
			zap.Uint64("memory", memory),
 | 
			
		||||
			zap.Uint64("storage", binary.BigEndian.Uint64(report.Storage)),
 | 
			
		||||
		)
 | 
			
		||||
		// tag: dusk – nuke this peer for now
 | 
			
		||||
		e.pubSub.SetPeerScore(peerID, -1000)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *MasterClockConsensusEngine) publishProof(
 | 
			
		||||
	frame *protobufs.ClockFrame,
 | 
			
		||||
) error {
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,14 @@
 | 
			
		||||
package master
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/config"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/consensus"
 | 
			
		||||
	qtime "source.quilibrium.com/quilibrium/monorepo/node/consensus/time"
 | 
			
		||||
@ -27,6 +29,8 @@ const (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type MasterClockConsensusEngine struct {
 | 
			
		||||
	*protobufs.UnimplementedValidationServiceServer
 | 
			
		||||
 | 
			
		||||
	difficulty          uint32
 | 
			
		||||
	logger              *zap.Logger
 | 
			
		||||
	state               consensus.EngineState
 | 
			
		||||
@ -48,6 +52,9 @@ type MasterClockConsensusEngine struct {
 | 
			
		||||
	historicFrames   []*protobufs.ClockFrame
 | 
			
		||||
	clockStore       store.ClockStore
 | 
			
		||||
	masterTimeReel   *qtime.MasterTimeReel
 | 
			
		||||
	report           *protobufs.SelfTestReport
 | 
			
		||||
	peerMapMx        sync.Mutex
 | 
			
		||||
	peerMap          map[string]*protobufs.SelfTestReport
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ consensus.ConsensusEngine = (*MasterClockConsensusEngine)(nil)
 | 
			
		||||
@ -60,6 +67,7 @@ func NewMasterClockConsensusEngine(
 | 
			
		||||
	pubSub p2p.PubSub,
 | 
			
		||||
	frameProver crypto.FrameProver,
 | 
			
		||||
	masterTimeReel *qtime.MasterTimeReel,
 | 
			
		||||
	report *protobufs.SelfTestReport,
 | 
			
		||||
) *MasterClockConsensusEngine {
 | 
			
		||||
	if logger == nil {
 | 
			
		||||
		panic(errors.New("logger is nil"))
 | 
			
		||||
@ -104,8 +112,12 @@ func NewMasterClockConsensusEngine(
 | 
			
		||||
		clockStore:          clockStore,
 | 
			
		||||
		frameProver:         frameProver,
 | 
			
		||||
		masterTimeReel:      masterTimeReel,
 | 
			
		||||
		report:              report,
 | 
			
		||||
		peerMap:             map[string]*protobufs.SelfTestReport{},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	e.peerMap[string(e.pubSub.GetPeerID())] = report
 | 
			
		||||
 | 
			
		||||
	if e.filter, err = hex.DecodeString(engineConfig.Filter); err != nil {
 | 
			
		||||
		panic(errors.Wrap(err, "could not parse filter value"))
 | 
			
		||||
	}
 | 
			
		||||
@ -141,6 +153,22 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
			
		||||
 | 
			
		||||
	e.state = consensus.EngineStateCollecting
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		server := grpc.NewServer(
 | 
			
		||||
			grpc.MaxSendMsgSize(600*1024*1024),
 | 
			
		||||
			grpc.MaxRecvMsgSize(600*1024*1024),
 | 
			
		||||
		)
 | 
			
		||||
		protobufs.RegisterValidationServiceServer(server, e)
 | 
			
		||||
 | 
			
		||||
		if err := e.pubSub.StartDirectChannelListener(
 | 
			
		||||
			e.pubSub.GetPeerID(),
 | 
			
		||||
			"validation",
 | 
			
		||||
			server,
 | 
			
		||||
		); err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		for {
 | 
			
		||||
			e.logger.Info(
 | 
			
		||||
@ -152,6 +180,18 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		for {
 | 
			
		||||
			time.Sleep(30 * time.Second)
 | 
			
		||||
 | 
			
		||||
			e.logger.Info("broadcasting self-test info")
 | 
			
		||||
 | 
			
		||||
			if err := e.publishMessage(e.filter, e.report); err != nil {
 | 
			
		||||
				e.logger.Debug("error publishing message", zap.Error(err))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		newFrameCh := e.masterTimeReel.NewFrameCh()
 | 
			
		||||
 | 
			
		||||
@ -197,6 +237,13 @@ func (e *MasterClockConsensusEngine) Start() <-chan error {
 | 
			
		||||
	return errChan
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *MasterClockConsensusEngine) PerformValidation(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	msg *protobufs.ValidationMessage,
 | 
			
		||||
) (*protobufs.ValidationMessage, error) {
 | 
			
		||||
	return msg, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *MasterClockConsensusEngine) Stop(force bool) <-chan error {
 | 
			
		||||
	e.logger.Info("stopping consensus engine")
 | 
			
		||||
	e.state = consensus.EngineStateStopping
 | 
			
		||||
 | 
			
		||||
@ -88,6 +88,7 @@ func TestCeremonyTransitions(t *testing.T) {
 | 
			
		||||
		SignedPreKey: &protobufs.X448PublicKey{
 | 
			
		||||
			KeyValue: spkPub,
 | 
			
		||||
		},
 | 
			
		||||
		PeerId: []byte{},
 | 
			
		||||
	}
 | 
			
		||||
	sig, err := join.SignWithProverKey(proverKey)
 | 
			
		||||
	require.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
@ -893,6 +893,7 @@ func (e *CeremonyExecutionEngine) announceJoin(
 | 
			
		||||
		SignedPreKey: &protobufs.X448PublicKey{
 | 
			
		||||
			KeyValue: g.Mul(spk).ToAffineCompressed(),
 | 
			
		||||
		},
 | 
			
		||||
		PeerId: e.pubSub.GetPeerID(),
 | 
			
		||||
	}
 | 
			
		||||
	sig, err := join.SignWithProverKey(e.provingKey)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -949,6 +950,7 @@ func (e *CeremonyExecutionEngine) connectToActivePeers(
 | 
			
		||||
 | 
			
		||||
			client, err := e.clock.GetPublicChannelForProvingKey(
 | 
			
		||||
				i > position,
 | 
			
		||||
				p.PeerId,
 | 
			
		||||
				p.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
			
		||||
			)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
@ -1052,6 +1054,7 @@ func (e *CeremonyExecutionEngine) participateRound(
 | 
			
		||||
			)]; !ok {
 | 
			
		||||
				client, err := e.clock.GetPublicChannelForProvingKey(
 | 
			
		||||
					initiator,
 | 
			
		||||
					p.PeerId,
 | 
			
		||||
					p.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
			
		||||
				)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										221
									
								
								node/main.go
									
									
									
									
									
								
							
							
						
						
									
										221
									
								
								node/main.go
									
									
									
									
									
								
							@ -3,6 +3,8 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/rand"
 | 
			
		||||
	"encoding/binary"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
@ -11,17 +13,23 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/signal"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"runtime/pprof"
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"google.golang.org/protobuf/proto"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/libp2p/go-libp2p/core/crypto"
 | 
			
		||||
	"github.com/libp2p/go-libp2p/core/peer"
 | 
			
		||||
	"github.com/pbnjay/memory"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/app"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/config"
 | 
			
		||||
	qcrypto "source.quilibrium.com/quilibrium/monorepo/node/crypto"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/crypto/kzg"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/ceremony/application"
 | 
			
		||||
	"source.quilibrium.com/quilibrium/monorepo/node/rpc"
 | 
			
		||||
@ -157,7 +165,9 @@ func main() {
 | 
			
		||||
	fmt.Println("Loading ceremony state and starting node...")
 | 
			
		||||
	kzg.Init()
 | 
			
		||||
 | 
			
		||||
	node, err := app.NewNode(nodeConfig)
 | 
			
		||||
	report := RunSelfTestIfNeeded(*configDirectory, nodeConfig)
 | 
			
		||||
 | 
			
		||||
	node, err := app.NewNode(nodeConfig, report)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
@ -190,6 +200,182 @@ func main() {
 | 
			
		||||
	node.Stop()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RunSelfTestIfNeeded(
 | 
			
		||||
	configDir string,
 | 
			
		||||
	nodeConfig *config.Config,
 | 
			
		||||
) *protobufs.SelfTestReport {
 | 
			
		||||
	logger, _ := zap.NewProduction()
 | 
			
		||||
 | 
			
		||||
	cores := runtime.GOMAXPROCS(0)
 | 
			
		||||
	memory := memory.TotalMemory()
 | 
			
		||||
	f, err := os.Stat(filepath.Join(configDir, "SELF_TEST"))
 | 
			
		||||
 | 
			
		||||
	if f != nil {
 | 
			
		||||
		if f.Size() != 0 {
 | 
			
		||||
			report := &protobufs.SelfTestReport{}
 | 
			
		||||
 | 
			
		||||
			selfTestBytes, err := os.ReadFile(filepath.Join(configDir, "SELF_TEST"))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				panic(err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			err = proto.Unmarshal(selfTestBytes, report)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				panic(err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if report.Cores == uint32(cores) &&
 | 
			
		||||
				binary.BigEndian.Uint64(report.Memory) == memory {
 | 
			
		||||
				return report
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		logger.Info("no self-test report found, generating")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	report := &protobufs.SelfTestReport{}
 | 
			
		||||
	difficulty := nodeConfig.Engine.Difficulty
 | 
			
		||||
	if difficulty == 0 {
 | 
			
		||||
		difficulty = 10000
 | 
			
		||||
	}
 | 
			
		||||
	report.Difficulty = difficulty
 | 
			
		||||
 | 
			
		||||
	frameProver := qcrypto.NewWesolowskiFrameProver(logger)
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating difficulty metric")
 | 
			
		||||
 | 
			
		||||
	start := time.Now().UnixMilli()
 | 
			
		||||
	_, err = frameProver.ProveMasterClockFrame(
 | 
			
		||||
		&protobufs.ClockFrame{
 | 
			
		||||
			Filter:         []byte{0x00},
 | 
			
		||||
			FrameNumber:    0,
 | 
			
		||||
			Timestamp:      0,
 | 
			
		||||
			Difficulty:     difficulty,
 | 
			
		||||
			ParentSelector: []byte{0x00},
 | 
			
		||||
			Input:          make([]byte, 516),
 | 
			
		||||
			Output:         make([]byte, 516),
 | 
			
		||||
		},
 | 
			
		||||
		0,
 | 
			
		||||
		difficulty,
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end := time.Now().UnixMilli()
 | 
			
		||||
	report.DifficultyMetric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating entropy for commit/proof sizes")
 | 
			
		||||
 | 
			
		||||
	p16bytes := make([]byte, 1024)
 | 
			
		||||
	p128bytes := make([]byte, 8192)
 | 
			
		||||
	p1024bytes := make([]byte, 65536)
 | 
			
		||||
	p65536bytes := make([]byte, 4194304)
 | 
			
		||||
	rand.Read(p16bytes)
 | 
			
		||||
	rand.Read(p128bytes)
 | 
			
		||||
	rand.Read(p1024bytes)
 | 
			
		||||
	rand.Read(p65536bytes)
 | 
			
		||||
	kzgProver := kzg.DefaultKZGProver()
 | 
			
		||||
 | 
			
		||||
	p16, _ := kzgProver.BytesToPolynomial(p16bytes)
 | 
			
		||||
	p128, _ := kzgProver.BytesToPolynomial(p128bytes)
 | 
			
		||||
	p1024, _ := kzgProver.BytesToPolynomial(p1024bytes)
 | 
			
		||||
	p65536, _ := kzgProver.BytesToPolynomial(p65536bytes)
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 16 degree commitment metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	c16, err := kzgProver.Commit(p16)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Commit_16Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 128 degree commitment metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	c128, err := kzgProver.Commit(p128)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Commit_128Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 1024 degree commitment metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	c1024, err := kzgProver.Commit(p1024)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Commit_1024Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 65536 degree commitment metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	c65536, err := kzgProver.Commit(p65536)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Commit_65536Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 16 degree proof metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	_, err = kzgProver.Prove(p16, c16, p16[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Proof_16Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 128 degree proof metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	_, err = kzgProver.Prove(p128, c128, p128[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Proof_128Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 1024 degree proof metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	_, err = kzgProver.Prove(p1024, c1024, p1024[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Proof_1024Metric = end - start
 | 
			
		||||
 | 
			
		||||
	logger.Info("generating 65536 degree proof metric")
 | 
			
		||||
	start = time.Now().UnixMilli()
 | 
			
		||||
	_, err = kzgProver.Prove(p65536, c65536, p65536[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	end = time.Now().UnixMilli()
 | 
			
		||||
	report.Proof_65536Metric = end - start
 | 
			
		||||
 | 
			
		||||
	report.Cores = uint32(cores)
 | 
			
		||||
	report.Memory = binary.BigEndian.AppendUint64([]byte{}, memory)
 | 
			
		||||
	disk := utils.GetDiskSpace(nodeConfig.DB.Path)
 | 
			
		||||
	report.Storage = binary.BigEndian.AppendUint64([]byte{}, disk)
 | 
			
		||||
	logger.Info("writing report")
 | 
			
		||||
 | 
			
		||||
	// tag: dusk – capabilities report in v1.5
 | 
			
		||||
	reportBytes, err := proto.Marshal(report)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = os.WriteFile(
 | 
			
		||||
		filepath.Join(configDir, "SELF_TEST"),
 | 
			
		||||
		reportBytes,
 | 
			
		||||
		fs.FileMode(0600),
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return report
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func clearIfTestData(configDir string, nodeConfig *config.Config) {
 | 
			
		||||
	_, err := os.Stat(filepath.Join(configDir, "RELEASE_VERSION"))
 | 
			
		||||
	if os.IsNotExist(err) {
 | 
			
		||||
@ -286,26 +472,27 @@ func printLogo() {
 | 
			
		||||
	fmt.Println(" ###########                     ##############                      ##########&")
 | 
			
		||||
	fmt.Println(" ##########                      ##############                       ##########")
 | 
			
		||||
	fmt.Println("%##########                        ##########                         ##########")
 | 
			
		||||
	fmt.Println("##########&                                                           ##########")
 | 
			
		||||
	fmt.Println("##########                                                            ##########")
 | 
			
		||||
	fmt.Println("##########                                                            &#########")
 | 
			
		||||
	fmt.Println("##########&                   #######      #######                    ##########")
 | 
			
		||||
	fmt.Println(" ##########                &#########################                 ##########")
 | 
			
		||||
	fmt.Println("##########                    #######      #######                    ##########")
 | 
			
		||||
	fmt.Println("%#########                 &#########################                 ##########")
 | 
			
		||||
	fmt.Println(" ##########              ##############% ##############              &##########")
 | 
			
		||||
	fmt.Println(" %##########          &##############      ###############           ##########")
 | 
			
		||||
	fmt.Println("  ###########       ###############           ##############%       ###########")
 | 
			
		||||
	fmt.Println("   ###########&       ##########                ###############       ########")
 | 
			
		||||
	fmt.Println("    ############         #####                     ##############%       ####")
 | 
			
		||||
	fmt.Println("      ############                                   ###############")
 | 
			
		||||
	fmt.Println("       ##############                                   ##############%")
 | 
			
		||||
	fmt.Println("         ###############                                  ###############")
 | 
			
		||||
	fmt.Println("           #################&                                ##############%")
 | 
			
		||||
	fmt.Println("              #########################&&&#############        ###############")
 | 
			
		||||
	fmt.Println("                 ########################################%        ############")
 | 
			
		||||
	fmt.Println("                     #######################################        ########")
 | 
			
		||||
	fmt.Println("                          #############################                ##")
 | 
			
		||||
	fmt.Println(" '         '          &##############      ###############           ##########")
 | 
			
		||||
	fmt.Println("  '         '       ###############           ##############%       ###########")
 | 
			
		||||
	fmt.Println("   '         '.       ##########                ###############       ########")
 | 
			
		||||
	fmt.Println("    '.         .         #####                     ##############%       ####")
 | 
			
		||||
	fmt.Println("      '         '.                                   ###############")
 | 
			
		||||
	fmt.Println("       '.         '..                                   ##############%")
 | 
			
		||||
	fmt.Println("         '.          '-.                                  ###############")
 | 
			
		||||
	fmt.Println("           '-.          ''-..                      ..        ##############%")
 | 
			
		||||
	fmt.Println("              '-.            ''---............----'  '.        ###############")
 | 
			
		||||
	fmt.Println("                 '-..                                  '.        ############")
 | 
			
		||||
	fmt.Println("                     ''-..                             ..'         ########")
 | 
			
		||||
	fmt.Println("                          ''---..              ...---''               ##")
 | 
			
		||||
	fmt.Println("                                 ''----------''")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func printVersion() {
 | 
			
		||||
	fmt.Println(" ")
 | 
			
		||||
	fmt.Println("                         Quilibrium Node - v1.3.0 – Dawn")
 | 
			
		||||
	fmt.Println("                       Quilibrium Node - v1.4.0 – Sunset")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -297,7 +297,7 @@ func initDHT(
 | 
			
		||||
	logger.Info("establishing dht")
 | 
			
		||||
	var kademliaDHT *dht.IpfsDHT
 | 
			
		||||
	var err error
 | 
			
		||||
	if isBootstrapPeer {
 | 
			
		||||
	if !isBootstrapPeer {
 | 
			
		||||
		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeServer))
 | 
			
		||||
	} else {
 | 
			
		||||
		kademliaDHT, err = dht.New(ctx, h, dht.Mode(dht.ModeAuto))
 | 
			
		||||
@ -328,12 +328,13 @@ func initDHT(
 | 
			
		||||
			go func() {
 | 
			
		||||
				defer wg.Done()
 | 
			
		||||
				if err := h.Connect(ctx, *peerinfo); err != nil {
 | 
			
		||||
					logger.Debug("error while connecting to dht peer", zap.Error(err))
 | 
			
		||||
				}
 | 
			
		||||
					logger.Info("error while connecting to dht peer", zap.Error(err))
 | 
			
		||||
				} else {
 | 
			
		||||
					logger.Info(
 | 
			
		||||
						"connected to peer",
 | 
			
		||||
						zap.String("peer_id", peerinfo.ID.String()),
 | 
			
		||||
					)
 | 
			
		||||
				}
 | 
			
		||||
			}()
 | 
			
		||||
		}
 | 
			
		||||
		wg.Wait()
 | 
			
		||||
@ -422,12 +423,13 @@ func (b *BlossomSub) GetMultiaddrOfPeer(peerId []byte) string {
 | 
			
		||||
 | 
			
		||||
func (b *BlossomSub) StartDirectChannelListener(
 | 
			
		||||
	key []byte,
 | 
			
		||||
	purpose string,
 | 
			
		||||
	server *grpc.Server,
 | 
			
		||||
) error {
 | 
			
		||||
	bind, err := gostream.Listen(
 | 
			
		||||
		b.h,
 | 
			
		||||
		protocol.ID(
 | 
			
		||||
			"/p2p/direct-channel/"+base58.Encode(key),
 | 
			
		||||
			"/p2p/direct-channel/"+base58.Encode(key)+purpose,
 | 
			
		||||
		),
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -437,7 +439,7 @@ func (b *BlossomSub) StartDirectChannelListener(
 | 
			
		||||
	return errors.Wrap(server.Serve(bind), "start direct channel listener")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *BlossomSub) GetDirectChannel(key []byte) (
 | 
			
		||||
func (b *BlossomSub) GetDirectChannel(key []byte, purpose string) (
 | 
			
		||||
	dialCtx *grpc.ClientConn,
 | 
			
		||||
	err error,
 | 
			
		||||
) {
 | 
			
		||||
@ -468,7 +470,7 @@ func (b *BlossomSub) GetDirectChannel(key []byte) (
 | 
			
		||||
					b.h,
 | 
			
		||||
					peer.ID(key),
 | 
			
		||||
					protocol.ID(
 | 
			
		||||
						"/p2p/direct-channel/"+peer.ID(id).String(),
 | 
			
		||||
						"/p2p/direct-channel/"+peer.ID(id).String()+purpose,
 | 
			
		||||
					),
 | 
			
		||||
				)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,9 +19,10 @@ type PubSub interface {
 | 
			
		||||
	GetMultiaddrOfPeer(peerId []byte) string
 | 
			
		||||
	StartDirectChannelListener(
 | 
			
		||||
		key []byte,
 | 
			
		||||
		purpose string,
 | 
			
		||||
		server *grpc.Server,
 | 
			
		||||
	) error
 | 
			
		||||
	GetDirectChannel(peerId []byte) (*grpc.ClientConn, error)
 | 
			
		||||
	GetDirectChannel(peerId []byte, purpose string) (*grpc.ClientConn, error)
 | 
			
		||||
	GetNetworkInfo() *protobufs.NetworkInfoResponse
 | 
			
		||||
	SignMessage(msg []byte) ([]byte, error)
 | 
			
		||||
	GetPublicKey() []byte
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ func (j *CeremonyLobbyJoin) VerifySignature() error {
 | 
			
		||||
	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber)
 | 
			
		||||
	b = append(b, j.IdentityKey.KeyValue...)
 | 
			
		||||
	b = append(b, j.SignedPreKey.KeyValue...)
 | 
			
		||||
	b = append(b, j.PeerId...)
 | 
			
		||||
 | 
			
		||||
	if !ed448.Verify(
 | 
			
		||||
		j.PublicKeySignatureEd448.PublicKey.KeyValue,
 | 
			
		||||
@ -33,6 +34,7 @@ func (j *CeremonyLobbyJoin) SignWithProverKey(
 | 
			
		||||
	b := binary.BigEndian.AppendUint64([]byte("join"), j.FrameNumber)
 | 
			
		||||
	b = append(b, j.IdentityKey.KeyValue...)
 | 
			
		||||
	b = append(b, j.SignedPreKey.KeyValue...)
 | 
			
		||||
	b = append(b, j.PeerId...)
 | 
			
		||||
 | 
			
		||||
	// Non edwards signing variants need support to specify hash, edwards variants
 | 
			
		||||
	// demand Hash(0) because it does SHA512 under the hood.
 | 
			
		||||
 | 
			
		||||
@ -571,6 +571,7 @@ type CeremonyLobbyJoin struct {
 | 
			
		||||
	IdentityKey             *X448PublicKey  `protobuf:"bytes,2,opt,name=identity_key,json=identityKey,proto3" json:"identity_key,omitempty"`
 | 
			
		||||
	SignedPreKey            *X448PublicKey  `protobuf:"bytes,3,opt,name=signed_pre_key,json=signedPreKey,proto3" json:"signed_pre_key,omitempty"`
 | 
			
		||||
	PublicKeySignatureEd448 *Ed448Signature `protobuf:"bytes,4,opt,name=public_key_signature_ed448,json=publicKeySignatureEd448,proto3" json:"public_key_signature_ed448,omitempty"`
 | 
			
		||||
	PeerId                  []byte          `protobuf:"bytes,5,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CeremonyLobbyJoin) Reset() {
 | 
			
		||||
@ -633,6 +634,13 @@ func (x *CeremonyLobbyJoin) GetPublicKeySignatureEd448() *Ed448Signature {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CeremonyLobbyJoin) GetPeerId() []byte {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.PeerId
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CeremonyLobbyStateTransition struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
@ -1701,7 +1709,7 @@ var file_ceremony_proto_rawDesc = []byte{
 | 
			
		||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54,
 | 
			
		||||
	0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52,
 | 
			
		||||
	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x11, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x11, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x21,
 | 
			
		||||
	0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65,
 | 
			
		||||
@ -1721,250 +1729,252 @@ var file_ceremony_proto_rawDesc = []byte{
 | 
			
		||||
	0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x53, 0x69,
 | 
			
		||||
	0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x17, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x45, 0x64, 0x34, 0x34, 0x38,
 | 
			
		||||
	0x22, 0x68, 0x0a, 0x1c, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62,
 | 
			
		||||
	0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
 | 
			
		||||
	0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20,
 | 
			
		||||
	0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2b, 0x0a,
 | 
			
		||||
	0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75,
 | 
			
		||||
	0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x43,
 | 
			
		||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69,
 | 
			
		||||
	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x6a,
 | 
			
		||||
	0x6f, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
 | 
			
		||||
	0x73, 0x12, 0x5e, 0x0a, 0x16, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70,
 | 
			
		||||
	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34,
 | 
			
		||||
	0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x70, 0x72, 0x65, 0x66,
 | 
			
		||||
	0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
 | 
			
		||||
	0x73, 0x22, 0xe5, 0x04, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e,
 | 
			
		||||
	0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a,
 | 
			
		||||
	0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
			
		||||
	0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69,
 | 
			
		||||
	0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81,
 | 
			
		||||
	0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53,
 | 
			
		||||
	0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e,
 | 
			
		||||
	0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70,
 | 
			
		||||
	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65,
 | 
			
		||||
	0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72,
 | 
			
		||||
	0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
 | 
			
		||||
	0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7a, 0x0a, 0x20,
 | 
			
		||||
	0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64,
 | 
			
		||||
	0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73,
 | 
			
		||||
	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1c, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54,
 | 
			
		||||
	0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70,
 | 
			
		||||
	0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79,
 | 
			
		||||
	0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x70,
 | 
			
		||||
	0x75, 0x74, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x6a, 0x6f, 0x69,
 | 
			
		||||
	0x6e, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73,
 | 
			
		||||
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x41, 0x64, 0x76,
 | 
			
		||||
	0x61, 0x6e, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x1d, 0x74, 0x72, 0x61, 0x6e, 0x73,
 | 
			
		||||
	0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63,
 | 
			
		||||
	0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74,
 | 
			
		||||
	0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
 | 
			
		||||
	0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72,
 | 
			
		||||
	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x88, 0x05, 0x0a, 0x17, 0x43, 0x65,
 | 
			
		||||
	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67,
 | 
			
		||||
	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f,
 | 
			
		||||
	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62,
 | 
			
		||||
	0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f,
 | 
			
		||||
	0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
 | 
			
		||||
	0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74,
 | 
			
		||||
	0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
 | 
			
		||||
	0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43,
 | 
			
		||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65,
 | 
			
		||||
	0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61,
 | 
			
		||||
	0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74,
 | 
			
		||||
	0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64,
 | 
			
		||||
	0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
 | 
			
		||||
	0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
 | 
			
		||||
	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70,
 | 
			
		||||
	0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72,
 | 
			
		||||
	0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74,
 | 
			
		||||
	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18,
 | 
			
		||||
	0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e,
 | 
			
		||||
	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f,
 | 
			
		||||
	0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18,
 | 
			
		||||
	0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e,
 | 
			
		||||
	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x06, 0x73, 0x68, 0x61,
 | 
			
		||||
	0x72, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e,
 | 
			
		||||
	0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06,
 | 
			
		||||
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45,
 | 
			
		||||
	0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e,
 | 
			
		||||
	0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
			
		||||
	0x61, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62,
 | 
			
		||||
	0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x61,
 | 
			
		||||
	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x16, 0x70, 0x72,
 | 
			
		||||
	0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
			
		||||
	0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79,
 | 
			
		||||
	0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x52, 0x15, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x50, 0x61,
 | 
			
		||||
	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xe5, 0x04, 0x0a, 0x17, 0x43,
 | 
			
		||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73,
 | 
			
		||||
	0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65,
 | 
			
		||||
	0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20,
 | 
			
		||||
	0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a,
 | 
			
		||||
	0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69,
 | 
			
		||||
	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61,
 | 
			
		||||
	0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
 | 
			
		||||
	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69,
 | 
			
		||||
	0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
			
		||||
	0x73, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61,
 | 
			
		||||
	0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x11,
 | 
			
		||||
	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70,
 | 
			
		||||
	0x74, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f,
 | 
			
		||||
	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03,
 | 
			
		||||
	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c,
 | 
			
		||||
	0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41,
 | 
			
		||||
	0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20,
 | 
			
		||||
	0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
 | 
			
		||||
	0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f,
 | 
			
		||||
	0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61,
 | 
			
		||||
	0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7a, 0x0a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72,
 | 
			
		||||
	0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63,
 | 
			
		||||
	0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
 | 
			
		||||
	0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65,
 | 
			
		||||
	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x6f, 0x75,
 | 
			
		||||
	0x6e, 0x64, 0x52, 0x1d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x6f,
 | 
			
		||||
	0x75, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
			
		||||
	0x73, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f,
 | 
			
		||||
	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34,
 | 
			
		||||
	0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78,
 | 
			
		||||
	0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
 | 
			
		||||
	0x74, 0x73, 0x22, 0x62, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65,
 | 
			
		||||
	0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x46,
 | 
			
		||||
	0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
 | 
			
		||||
	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x08, 0x70, 0x65,
 | 
			
		||||
	0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfe, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f,
 | 
			
		||||
	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64,
 | 
			
		||||
	0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1b,
 | 
			
		||||
	0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74,
 | 
			
		||||
	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
 | 
			
		||||
	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72,
 | 
			
		||||
	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
 | 
			
		||||
	0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
 | 
			
		||||
	0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18,
 | 
			
		||||
	0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
 | 
			
		||||
	0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e,
 | 
			
		||||
	0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44,
 | 
			
		||||
	0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xe0, 0x02, 0x0a, 0x16, 0x43, 0x65, 0x72, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79,
 | 
			
		||||
	0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x66,
 | 
			
		||||
	0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26,
 | 
			
		||||
	0x0a, 0x0f, 0x74, 0x6f, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
 | 
			
		||||
	0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x16, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61,
 | 
			
		||||
	0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73,
 | 
			
		||||
	0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72,
 | 
			
		||||
	0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x04, 0x20, 0x03,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62,
 | 
			
		||||
	0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73,
 | 
			
		||||
	0x4d, 0x61, 0x70, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x73,
 | 
			
		||||
	0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c,
 | 
			
		||||
	0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70,
 | 
			
		||||
	0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x24, 0x43,
 | 
			
		||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65,
 | 
			
		||||
	0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73,
 | 
			
		||||
	0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74,
 | 
			
		||||
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x72, 0x65,
 | 
			
		||||
	0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69,
 | 
			
		||||
	0x67, 0x68, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e,
 | 
			
		||||
	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a,
 | 
			
		||||
	0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xda, 0x01,
 | 
			
		||||
	0x0a, 0x25, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c,
 | 
			
		||||
	0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
 | 
			
		||||
	0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x73, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72,
 | 
			
		||||
	0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x74, 0x73, 0x22, 0x88, 0x05, 0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x46,
 | 
			
		||||
	0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5f,
 | 
			
		||||
	0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
 | 
			
		||||
	0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75,
 | 
			
		||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65,
 | 
			
		||||
	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f,
 | 
			
		||||
	0x6e, 0x79, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x12, 0x61, 0x63, 0x74,
 | 
			
		||||
	0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12,
 | 
			
		||||
	0x81, 0x01, 0x0a, 0x1f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f,
 | 
			
		||||
	0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x00,
 | 
			
		||||
	0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79,
 | 
			
		||||
	0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x49,
 | 
			
		||||
	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61,
 | 
			
		||||
	0x70, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
 | 
			
		||||
	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f,
 | 
			
		||||
	0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x6f,
 | 
			
		||||
	0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
 | 
			
		||||
	0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e,
 | 
			
		||||
	0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e,
 | 
			
		||||
	0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e,
 | 
			
		||||
	0x74, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53,
 | 
			
		||||
	0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61,
 | 
			
		||||
	0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12,
 | 
			
		||||
	0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
 | 
			
		||||
	0x74, 0x61, 0x22, 0x7b, 0x0a, 0x17, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43,
 | 
			
		||||
	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x1e, 0x0a,
 | 
			
		||||
	0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a,
 | 
			
		||||
	0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x67, 0x6d,
 | 
			
		||||
	0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c,
 | 
			
		||||
	0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x32,
 | 
			
		||||
	0xb6, 0x03, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x72, 0x76,
 | 
			
		||||
	0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2c,
 | 
			
		||||
	0x53, 0x65, 0x65, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x53, 0x65, 0x65,
 | 
			
		||||
	0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f,
 | 
			
		||||
	0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46,
 | 
			
		||||
	0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x71,
 | 
			
		||||
	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63,
 | 
			
		||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76,
 | 
			
		||||
	0x65, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x64,
 | 
			
		||||
	0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
 | 
			
		||||
	0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a,
 | 
			
		||||
	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43,
 | 
			
		||||
	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x4c,
 | 
			
		||||
	0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x53,
 | 
			
		||||
	0x68, 0x61, 0x72, 0x65, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x17,
 | 
			
		||||
	0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69,
 | 
			
		||||
	0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62,
 | 
			
		||||
	0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e,
 | 
			
		||||
	0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02,
 | 
			
		||||
	0x0a, 0x17, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
 | 
			
		||||
	0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x07, 0x63, 0x6f, 0x6d,
 | 
			
		||||
	0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69,
 | 
			
		||||
	0x74, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x70,
 | 
			
		||||
	0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
 | 
			
		||||
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x54, 0x72, 0x61,
 | 
			
		||||
	0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
 | 
			
		||||
	0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x5f, 0x0a, 0x17, 0x6e, 0x65,
 | 
			
		||||
	0x78, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
 | 
			
		||||
	0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x71, 0x75,
 | 
			
		||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6b, 0x65,
 | 
			
		||||
	0x79, 0x73, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x64, 0x34, 0x34, 0x38, 0x50, 0x75, 0x62, 0x6c, 0x69,
 | 
			
		||||
	0x63, 0x4b, 0x65, 0x79, 0x52, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x50,
 | 
			
		||||
	0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x62, 0x0a, 0x18, 0x43,
 | 
			
		||||
	0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x41,
 | 
			
		||||
	0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f,
 | 
			
		||||
	0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22,
 | 
			
		||||
	0xfe, 0x01, 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x50, 0x65, 0x65, 0x72,
 | 
			
		||||
	0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c,
 | 
			
		||||
	0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75,
 | 
			
		||||
	0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x66,
 | 
			
		||||
	0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x46,
 | 
			
		||||
	0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
 | 
			
		||||
	0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
 | 
			
		||||
	0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x0c, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09,
 | 
			
		||||
	0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52,
 | 
			
		||||
	0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75,
 | 
			
		||||
	0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09,
 | 
			
		||||
	0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74,
 | 
			
		||||
	0x61, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
 | 
			
		||||
	0x22, 0xe0, 0x02, 0x0a, 0x16, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d,
 | 
			
		||||
	0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x66,
 | 
			
		||||
	0x72, 0x6f, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
 | 
			
		||||
	0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x66, 0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x5f, 0x66, 0x72,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
 | 
			
		||||
	0x52, 0x0d, 0x74, 0x6f, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12,
 | 
			
		||||
	0x5a, 0x0a, 0x16, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x6f,
 | 
			
		||||
	0x63, 0x6b, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
 | 
			
		||||
	0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
 | 
			
		||||
	0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x14, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64,
 | 
			
		||||
	0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x06, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x71, 0x75,
 | 
			
		||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65,
 | 
			
		||||
	0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73,
 | 
			
		||||
	0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x06, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x6f, 0x66, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73,
 | 
			
		||||
	0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65,
 | 
			
		||||
	0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65,
 | 
			
		||||
	0x6e, 0x74, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x24, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
 | 
			
		||||
	0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x09,
 | 
			
		||||
	0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
 | 
			
		||||
	0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b,
 | 
			
		||||
	0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x48,
 | 
			
		||||
	0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x12, 0x48, 0x0a, 0x07,
 | 
			
		||||
	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d,
 | 
			
		||||
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x25, 0x43, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e,
 | 
			
		||||
	0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a, 0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74,
 | 
			
		||||
	0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46,
 | 
			
		||||
	0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
			
		||||
	0x12, 0x4e, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x62, 0x2e, 0x43,
 | 
			
		||||
	0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x72, 0x65, 0x66, 0x6c, 0x69,
 | 
			
		||||
	0x67, 0x68, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74,
 | 
			
		||||
	0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62,
 | 
			
		||||
	0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73,
 | 
			
		||||
	0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x6d, 0x65, 0x73, 0x73,
 | 
			
		||||
	0x61, 0x67, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f,
 | 
			
		||||
	0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
 | 
			
		||||
	0x52, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a,
 | 
			
		||||
	0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x6f, 0x66, 0x12, 0x56, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e,
 | 
			
		||||
	0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e,
 | 
			
		||||
	0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x52, 0x0b,
 | 
			
		||||
	0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x49,
 | 
			
		||||
	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73,
 | 
			
		||||
	0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18,
 | 
			
		||||
	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7b, 0x0a, 0x17, 0x49,
 | 
			
		||||
	0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65,
 | 
			
		||||
	0x6e, 0x74, 0x73, 0x4d, 0x61, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
			
		||||
	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d,
 | 
			
		||||
	0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75,
 | 
			
		||||
	0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72,
 | 
			
		||||
	0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73,
 | 
			
		||||
	0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65,
 | 
			
		||||
	0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x32, 0xb6, 0x03, 0x0a, 0x0f, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7e, 0x0a, 0x17,
 | 
			
		||||
	0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e,
 | 
			
		||||
	0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
 | 
			
		||||
	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2e,
 | 
			
		||||
	0x70, 0x62, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65,
 | 
			
		||||
	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70,
 | 
			
		||||
	0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43,
 | 
			
		||||
	0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01,
 | 
			
		||||
	0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61,
 | 
			
		||||
	0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65,
 | 
			
		||||
	0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65,
 | 
			
		||||
	0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72,
 | 
			
		||||
	0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f,
 | 
			
		||||
	0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 | 
			
		||||
	0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x30, 0x01, 0x12, 0xaa, 0x01, 0x0a,
 | 
			
		||||
	0x1d, 0x4e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x41,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x65, 0x72,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53,
 | 
			
		||||
	0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
 | 
			
		||||
	0x65, 0x1a, 0x42, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x2e, 0x70, 0x62, 0x2e,
 | 
			
		||||
	0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73,
 | 
			
		||||
	0x65, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65,
 | 
			
		||||
	0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x76, 0x0a, 0x10, 0x47, 0x65, 0x74,
 | 
			
		||||
	0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68,
 | 
			
		||||
	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x1a, 0x2e, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x32, 0x50, 0x43, 0x68,
 | 
			
		||||
	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x28, 0x01, 0x30,
 | 
			
		||||
	0x01, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
 | 
			
		||||
@ -92,6 +92,7 @@ message CeremonyLobbyJoin {
 | 
			
		||||
  quilibrium.node.keys.pb.X448PublicKey identity_key = 2;
 | 
			
		||||
  quilibrium.node.keys.pb.X448PublicKey signed_pre_key = 3;
 | 
			
		||||
  quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 4;
 | 
			
		||||
  bytes peer_id = 5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message CeremonyLobbyStateTransition {
 | 
			
		||||
 | 
			
		||||
@ -974,6 +974,295 @@ func (x *TokenInfoResponse) GetUnconfirmedOwnedTokens() []byte {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Capability struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	// A general protocol identifier as a uint32 – this is expected to rarely
 | 
			
		||||
	// iterate, and should be uniquely identifying both protocol and version.
 | 
			
		||||
	// Pragmatically speaking, this implies that the least significant byte
 | 
			
		||||
	// specifies version (which should iterate most minimally), and the three most
 | 
			
		||||
	// significant bytes should specify protocol. Recipients SHOULD ignore
 | 
			
		||||
	// messages with incompatible protocol identifiers, but also SHOULD warn on
 | 
			
		||||
	// identifiers with versions higher than the supported protocol. A large
 | 
			
		||||
	// number of unsupported protocol messages may indicate spam/some other
 | 
			
		||||
	// attack, whereas a large number of unsupported protocol versions may
 | 
			
		||||
	// indicate an out of date client, respective to which side is the maximum of
 | 
			
		||||
	// the version number.
 | 
			
		||||
	ProtocolIdentifier uint32 `protobuf:"varint,1,opt,name=protocol_identifier,json=protocolIdentifier,proto3" json:"protocol_identifier,omitempty"`
 | 
			
		||||
	// An optional bundle of information specific to the capability – used for
 | 
			
		||||
	// extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet
 | 
			
		||||
	// but only for certain curve types.
 | 
			
		||||
	AdditionalMetadata []byte `protobuf:"bytes,2,opt,name=additional_metadata,json=additionalMetadata,proto3" json:"additional_metadata,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Capability) Reset() {
 | 
			
		||||
	*x = Capability{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_node_proto_msgTypes[17]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Capability) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*Capability) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *Capability) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_node_proto_msgTypes[17]
 | 
			
		||||
	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 Capability.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*Capability) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_node_proto_rawDescGZIP(), []int{17}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Capability) GetProtocolIdentifier() uint32 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.ProtocolIdentifier
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Capability) GetAdditionalMetadata() []byte {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.AdditionalMetadata
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type SelfTestReport struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	// The difficulty the self test was conducted under
 | 
			
		||||
	Difficulty uint32 `protobuf:"varint,1,opt,name=difficulty,proto3" json:"difficulty,omitempty"`
 | 
			
		||||
	// The resulting local time of computing the VDF test under the difficulty
 | 
			
		||||
	DifficultyMetric int64 `protobuf:"varint,2,opt,name=difficulty_metric,json=difficultyMetric,proto3" json:"difficulty_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG commitment for a 16 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Commit_16Metric int64 `protobuf:"varint,3,opt,name=commit_16_metric,json=commit16Metric,proto3" json:"commit_16_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG commitment for a 128 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Commit_128Metric int64 `protobuf:"varint,4,opt,name=commit_128_metric,json=commit128Metric,proto3" json:"commit_128_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG commitment for a 1024 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Commit_1024Metric int64 `protobuf:"varint,5,opt,name=commit_1024_metric,json=commit1024Metric,proto3" json:"commit_1024_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG commitment for a 65536 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Commit_65536Metric int64 `protobuf:"varint,6,opt,name=commit_65536_metric,json=commit65536Metric,proto3" json:"commit_65536_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG proof for a 16 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Proof_16Metric int64 `protobuf:"varint,7,opt,name=proof_16_metric,json=proof16Metric,proto3" json:"proof_16_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG proof for a 128 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Proof_128Metric int64 `protobuf:"varint,8,opt,name=proof_128_metric,json=proof128Metric,proto3" json:"proof_128_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG proof for a 1024 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Proof_1024Metric int64 `protobuf:"varint,9,opt,name=proof_1024_metric,json=proof1024Metric,proto3" json:"proof_1024_metric,omitempty"`
 | 
			
		||||
	// The resulting local time of computing a KZG proof for a 65536 degree
 | 
			
		||||
	// polynomial
 | 
			
		||||
	Proof_65536Metric int64 `protobuf:"varint,10,opt,name=proof_65536_metric,json=proof65536Metric,proto3" json:"proof_65536_metric,omitempty"`
 | 
			
		||||
	// The number of reported accessible cores
 | 
			
		||||
	Cores uint32 `protobuf:"varint,11,opt,name=cores,proto3" json:"cores,omitempty"`
 | 
			
		||||
	// The total available memory
 | 
			
		||||
	Memory []byte `protobuf:"bytes,12,opt,name=memory,proto3" json:"memory,omitempty"`
 | 
			
		||||
	// The total available storage
 | 
			
		||||
	Storage []byte `protobuf:"bytes,13,opt,name=storage,proto3" json:"storage,omitempty"`
 | 
			
		||||
	// The list of supported capabilities
 | 
			
		||||
	Capabilities []*Capability `protobuf:"bytes,14,rep,name=capabilities,proto3" json:"capabilities,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) Reset() {
 | 
			
		||||
	*x = SelfTestReport{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_node_proto_msgTypes[18]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*SelfTestReport) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_node_proto_msgTypes[18]
 | 
			
		||||
	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 SelfTestReport.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*SelfTestReport) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_node_proto_rawDescGZIP(), []int{18}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetDifficulty() uint32 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Difficulty
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetDifficultyMetric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.DifficultyMetric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetCommit_16Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Commit_16Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetCommit_128Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Commit_128Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetCommit_1024Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Commit_1024Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetCommit_65536Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Commit_65536Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetProof_16Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Proof_16Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetProof_128Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Proof_128Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetProof_1024Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Proof_1024Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetProof_65536Metric() int64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Proof_65536Metric
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetCores() uint32 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Cores
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetMemory() []byte {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Memory
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetStorage() []byte {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Storage
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SelfTestReport) GetCapabilities() []*Capability {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Capabilities
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ValidationMessage struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Validation []byte `protobuf:"bytes,1,opt,name=validation,proto3" json:"validation,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ValidationMessage) Reset() {
 | 
			
		||||
	*x = ValidationMessage{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_node_proto_msgTypes[19]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ValidationMessage) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*ValidationMessage) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ValidationMessage) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_node_proto_msgTypes[19]
 | 
			
		||||
	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 ValidationMessage.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*ValidationMessage) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_node_proto_rawDescGZIP(), []int{19}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ValidationMessage) GetValidation() []byte {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Validation
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var File_node_proto protoreflect.FileDescriptor
 | 
			
		||||
 | 
			
		||||
var file_node_proto_rawDesc = []byte{
 | 
			
		||||
@ -1097,64 +1386,120 @@ var file_node_proto_rawDesc = []byte{
 | 
			
		||||
	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74,
 | 
			
		||||
	0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63,
 | 
			
		||||
	0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b,
 | 
			
		||||
	0x65, 0x6e, 0x73, 0x32, 0x80, 0x05, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76,
 | 
			
		||||
	0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73,
 | 
			
		||||
	0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75,
 | 
			
		||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61,
 | 
			
		||||
	0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65,
 | 
			
		||||
	0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e,
 | 
			
		||||
	0x65, 0x6e, 0x73, 0x22, 0x6e, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74,
 | 
			
		||||
	0x79, 0x12, 0x2f, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x69, 0x64,
 | 
			
		||||
	0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12,
 | 
			
		||||
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
 | 
			
		||||
	0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
 | 
			
		||||
	0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
 | 
			
		||||
	0x12, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64,
 | 
			
		||||
	0x61, 0x74, 0x61, 0x22, 0xce, 0x04, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63,
 | 
			
		||||
	0x75, 0x6c, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66,
 | 
			
		||||
	0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63,
 | 
			
		||||
	0x75, 0x6c, 0x74, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x03, 0x52, 0x10, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x4d, 0x65, 0x74,
 | 
			
		||||
	0x72, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x36,
 | 
			
		||||
	0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63,
 | 
			
		||||
	0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a,
 | 
			
		||||
	0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74, 0x72,
 | 
			
		||||
	0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
 | 
			
		||||
	0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d,
 | 
			
		||||
	0x6d, 0x69, 0x74, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18,
 | 
			
		||||
	0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x31, 0x30, 0x32,
 | 
			
		||||
	0x34, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
 | 
			
		||||
	0x74, 0x5f, 0x36, 0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x06,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x36, 0x35, 0x35, 0x33,
 | 
			
		||||
	0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66,
 | 
			
		||||
	0x5f, 0x31, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
 | 
			
		||||
	0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x36, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12,
 | 
			
		||||
	0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x6d, 0x65, 0x74,
 | 
			
		||||
	0x72, 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66,
 | 
			
		||||
	0x31, 0x32, 0x38, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x6f,
 | 
			
		||||
	0x6f, 0x66, 0x5f, 0x31, 0x30, 0x32, 0x34, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x09,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x31, 0x30, 0x32, 0x34, 0x4d,
 | 
			
		||||
	0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x36,
 | 
			
		||||
	0x35, 0x35, 0x33, 0x36, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x03, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x36, 0x35, 0x35, 0x33, 0x36, 0x4d, 0x65, 0x74,
 | 
			
		||||
	0x72, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72,
 | 
			
		||||
	0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x0c, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x63,
 | 
			
		||||
	0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x23, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70, 0x61,
 | 
			
		||||
	0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69,
 | 
			
		||||
	0x74, 0x69, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
 | 
			
		||||
	0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x61, 0x6c,
 | 
			
		||||
	0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x76,
 | 
			
		||||
	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x80, 0x01, 0x0a, 0x11, 0x56, 0x61,
 | 
			
		||||
	0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
 | 
			
		||||
	0x6b, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
 | 
			
		||||
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56,
 | 
			
		||||
	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 | 
			
		||||
	0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64,
 | 
			
		||||
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x80, 0x05, 0x0a,
 | 
			
		||||
	0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x09,
 | 
			
		||||
	0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46,
 | 
			
		||||
	0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a,
 | 
			
		||||
	0x0c, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75,
 | 
			
		||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x65,
 | 
			
		||||
	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72,
 | 
			
		||||
	0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62,
 | 
			
		||||
	0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75,
 | 
			
		||||
	0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65,
 | 
			
		||||
	0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65,
 | 
			
		||||
	0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e,
 | 
			
		||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49,
 | 
			
		||||
	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
			
		||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x1a, 0x29, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e,
 | 
			
		||||
	0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77,
 | 
			
		||||
	0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
 | 
			
		||||
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c,
 | 
			
		||||
	0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71,
 | 
			
		||||
	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49,
 | 
			
		||||
	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69,
 | 
			
		||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53,
 | 
			
		||||
	0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49,
 | 
			
		||||
	0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75,
 | 
			
		||||
	0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65,
 | 
			
		||||
	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77,
 | 
			
		||||
	0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
 | 
			
		||||
	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
 | 
			
		||||
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62,
 | 
			
		||||
	0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
 | 
			
		||||
	0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65,
 | 
			
		||||
	0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69,
 | 
			
		||||
	0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e,
 | 
			
		||||
	0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74,
 | 
			
		||||
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72,
 | 
			
		||||
	0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f,
 | 
			
		||||
	0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e,
 | 
			
		||||
	0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 | 
			
		||||
	0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75,
 | 
			
		||||
	0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f,
 | 
			
		||||
	0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32,
 | 
			
		||||
	0xcf, 0x01, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x60, 0x0a,
 | 
			
		||||
	0x0b, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x71,
 | 
			
		||||
	0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e,
 | 
			
		||||
	0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
 | 
			
		||||
	0x60, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b,
 | 
			
		||||
	0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x65, 0x65, 0x72,
 | 
			
		||||
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x71, 0x75,
 | 
			
		||||
	0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c,
 | 
			
		||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69,
 | 
			
		||||
	0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -1169,7 +1514,7 @@ func file_node_proto_rawDescGZIP() []byte {
 | 
			
		||||
	return file_node_proto_rawDescData
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
 | 
			
		||||
var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
 | 
			
		||||
var file_node_proto_goTypes = []interface{}{
 | 
			
		||||
	(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | 
			
		||||
	(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | 
			
		||||
@ -1188,37 +1533,43 @@ var file_node_proto_goTypes = []interface{}{
 | 
			
		||||
	(*NetworkInfoResponse)(nil),   // 14: quilibrium.node.node.pb.NetworkInfoResponse
 | 
			
		||||
	(*GetTokenInfoRequest)(nil),   // 15: quilibrium.node.node.pb.GetTokenInfoRequest
 | 
			
		||||
	(*TokenInfoResponse)(nil),     // 16: quilibrium.node.node.pb.TokenInfoResponse
 | 
			
		||||
	(*ClockFrame)(nil),            // 17: quilibrium.node.clock.pb.ClockFrame
 | 
			
		||||
	(*Capability)(nil),            // 17: quilibrium.node.node.pb.Capability
 | 
			
		||||
	(*SelfTestReport)(nil),        // 18: quilibrium.node.node.pb.SelfTestReport
 | 
			
		||||
	(*ValidationMessage)(nil),     // 19: quilibrium.node.node.pb.ValidationMessage
 | 
			
		||||
	(*ClockFrame)(nil),            // 20: quilibrium.node.clock.pb.ClockFrame
 | 
			
		||||
}
 | 
			
		||||
var file_node_proto_depIdxs = []int32{
 | 
			
		||||
	17, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
			
		||||
	17, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
			
		||||
	20, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
			
		||||
	20, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
			
		||||
	7,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
			
		||||
	7,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
			
		||||
	7,  // 4: quilibrium.node.node.pb.PutPeerInfoRequest.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
			
		||||
	7,  // 5: quilibrium.node.node.pb.PutPeerInfoRequest.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
			
		||||
	9,  // 6: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | 
			
		||||
	0,  // 7: quilibrium.node.node.pb.NodeService.GetFrames:input_type -> quilibrium.node.node.pb.GetFramesRequest
 | 
			
		||||
	1,  // 8: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 
			
		||||
	2,  // 9: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 
			
		||||
	3,  // 10: quilibrium.node.node.pb.NodeService.GetNodeInfo:input_type -> quilibrium.node.node.pb.GetNodeInfoRequest
 | 
			
		||||
	4,  // 11: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 
			
		||||
	15, // 12: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | 
			
		||||
	12, // 13: quilibrium.node.node.pb.NodeStats.PutNodeInfo:input_type -> quilibrium.node.node.pb.PutNodeInfoRequest
 | 
			
		||||
	11, // 14: quilibrium.node.node.pb.NodeStats.PutPeerInfo:input_type -> quilibrium.node.node.pb.PutPeerInfoRequest
 | 
			
		||||
	5,  // 15: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 
			
		||||
	6,  // 16: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 
			
		||||
	8,  // 17: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 
			
		||||
	10, // 18: quilibrium.node.node.pb.NodeService.GetNodeInfo:output_type -> quilibrium.node.node.pb.NodeInfoResponse
 | 
			
		||||
	14, // 19: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 
			
		||||
	16, // 20: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | 
			
		||||
	13, // 21: quilibrium.node.node.pb.NodeStats.PutNodeInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
			
		||||
	13, // 22: quilibrium.node.node.pb.NodeStats.PutPeerInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
			
		||||
	15, // [15:23] is the sub-list for method output_type
 | 
			
		||||
	7,  // [7:15] is the sub-list for method input_type
 | 
			
		||||
	7,  // [7:7] is the sub-list for extension type_name
 | 
			
		||||
	7,  // [7:7] is the sub-list for extension extendee
 | 
			
		||||
	0,  // [0:7] is the sub-list for field type_name
 | 
			
		||||
	17, // 7: quilibrium.node.node.pb.SelfTestReport.capabilities:type_name -> quilibrium.node.node.pb.Capability
 | 
			
		||||
	19, // 8: quilibrium.node.node.pb.ValidationService.PerformValidation:input_type -> quilibrium.node.node.pb.ValidationMessage
 | 
			
		||||
	0,  // 9: quilibrium.node.node.pb.NodeService.GetFrames:input_type -> quilibrium.node.node.pb.GetFramesRequest
 | 
			
		||||
	1,  // 10: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 
			
		||||
	2,  // 11: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 
			
		||||
	3,  // 12: quilibrium.node.node.pb.NodeService.GetNodeInfo:input_type -> quilibrium.node.node.pb.GetNodeInfoRequest
 | 
			
		||||
	4,  // 13: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 
			
		||||
	15, // 14: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | 
			
		||||
	12, // 15: quilibrium.node.node.pb.NodeStats.PutNodeInfo:input_type -> quilibrium.node.node.pb.PutNodeInfoRequest
 | 
			
		||||
	11, // 16: quilibrium.node.node.pb.NodeStats.PutPeerInfo:input_type -> quilibrium.node.node.pb.PutPeerInfoRequest
 | 
			
		||||
	19, // 17: quilibrium.node.node.pb.ValidationService.PerformValidation:output_type -> quilibrium.node.node.pb.ValidationMessage
 | 
			
		||||
	5,  // 18: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 
			
		||||
	6,  // 19: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 
			
		||||
	8,  // 20: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 
			
		||||
	10, // 21: quilibrium.node.node.pb.NodeService.GetNodeInfo:output_type -> quilibrium.node.node.pb.NodeInfoResponse
 | 
			
		||||
	14, // 22: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 
			
		||||
	16, // 23: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | 
			
		||||
	13, // 24: quilibrium.node.node.pb.NodeStats.PutNodeInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
			
		||||
	13, // 25: quilibrium.node.node.pb.NodeStats.PutPeerInfo:output_type -> quilibrium.node.node.pb.PutResponse
 | 
			
		||||
	17, // [17:26] is the sub-list for method output_type
 | 
			
		||||
	8,  // [8:17] is the sub-list for method input_type
 | 
			
		||||
	8,  // [8:8] is the sub-list for extension type_name
 | 
			
		||||
	8,  // [8:8] is the sub-list for extension extendee
 | 
			
		||||
	0,  // [0:8] is the sub-list for field type_name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() { file_node_proto_init() }
 | 
			
		||||
@ -1432,6 +1783,42 @@ func file_node_proto_init() {
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_node_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*Capability); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_node_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*SelfTestReport); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_node_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*ValidationMessage); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
@ -1439,9 +1826,9 @@ func file_node_proto_init() {
 | 
			
		||||
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
			
		||||
			RawDescriptor: file_node_proto_rawDesc,
 | 
			
		||||
			NumEnums:      0,
 | 
			
		||||
			NumMessages:   17,
 | 
			
		||||
			NumMessages:   20,
 | 
			
		||||
			NumExtensions: 0,
 | 
			
		||||
			NumServices:   2,
 | 
			
		||||
			NumServices:   3,
 | 
			
		||||
		},
 | 
			
		||||
		GoTypes:           file_node_proto_goTypes,
 | 
			
		||||
		DependencyIndexes: file_node_proto_depIdxs,
 | 
			
		||||
 | 
			
		||||
@ -31,6 +31,40 @@ var _ = runtime.String
 | 
			
		||||
var _ = utilities.NewDoubleArray
 | 
			
		||||
var _ = metadata.Join
 | 
			
		||||
 | 
			
		||||
func request_ValidationService_PerformValidation_0(ctx context.Context, marshaler runtime.Marshaler, client ValidationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
			
		||||
	var protoReq ValidationMessage
 | 
			
		||||
	var metadata runtime.ServerMetadata
 | 
			
		||||
 | 
			
		||||
	newReader, berr := utilities.IOReaderFactory(req.Body)
 | 
			
		||||
	if berr != nil {
 | 
			
		||||
		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
 | 
			
		||||
	}
 | 
			
		||||
	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
 | 
			
		||||
		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	msg, err := client.PerformValidation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
 | 
			
		||||
	return msg, metadata, err
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func local_request_ValidationService_PerformValidation_0(ctx context.Context, marshaler runtime.Marshaler, server ValidationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
			
		||||
	var protoReq ValidationMessage
 | 
			
		||||
	var metadata runtime.ServerMetadata
 | 
			
		||||
 | 
			
		||||
	newReader, berr := utilities.IOReaderFactory(req.Body)
 | 
			
		||||
	if berr != nil {
 | 
			
		||||
		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
 | 
			
		||||
	}
 | 
			
		||||
	if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
 | 
			
		||||
		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	msg, err := server.PerformValidation(ctx, &protoReq)
 | 
			
		||||
	return msg, metadata, err
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func request_NodeService_GetFrames_0(ctx context.Context, marshaler runtime.Marshaler, client NodeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
			
		||||
	var protoReq GetFramesRequest
 | 
			
		||||
	var metadata runtime.ServerMetadata
 | 
			
		||||
@ -303,6 +337,40 @@ func local_request_NodeStats_PutPeerInfo_0(ctx context.Context, marshaler runtim
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RegisterValidationServiceHandlerServer registers the http handlers for service ValidationService to "mux".
 | 
			
		||||
// UnaryRPC     :call ValidationServiceServer directly.
 | 
			
		||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
			
		||||
// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterValidationServiceHandlerFromEndpoint instead.
 | 
			
		||||
func RegisterValidationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ValidationServiceServer) error {
 | 
			
		||||
 | 
			
		||||
	mux.Handle("POST", pattern_ValidationService_PerformValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 | 
			
		||||
		ctx, cancel := context.WithCancel(req.Context())
 | 
			
		||||
		defer cancel()
 | 
			
		||||
		var stream runtime.ServerTransportStream
 | 
			
		||||
		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
 | 
			
		||||
		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
 | 
			
		||||
		var err error
 | 
			
		||||
		var annotatedContext context.Context
 | 
			
		||||
		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/quilibrium.node.node.pb.ValidationService/PerformValidation", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.ValidationService/PerformValidation"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		resp, md, err := local_request_ValidationService_PerformValidation_0(annotatedContext, inboundMarshaler, server, req, pathParams)
 | 
			
		||||
		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
 | 
			
		||||
		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		forward_ValidationService_PerformValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 | 
			
		||||
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | 
			
		||||
// UnaryRPC     :call NodeServiceServer directly.
 | 
			
		||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
			
		||||
@ -521,6 +589,77 @@ func RegisterNodeStatsHandlerServer(ctx context.Context, mux *runtime.ServeMux,
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RegisterValidationServiceHandlerFromEndpoint is same as RegisterValidationServiceHandler but
 | 
			
		||||
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | 
			
		||||
func RegisterValidationServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
 | 
			
		||||
	conn, err := grpc.DialContext(ctx, endpoint, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if cerr := conn.Close(); cerr != nil {
 | 
			
		||||
				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
 | 
			
		||||
			}
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		go func() {
 | 
			
		||||
			<-ctx.Done()
 | 
			
		||||
			if cerr := conn.Close(); cerr != nil {
 | 
			
		||||
				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
 | 
			
		||||
			}
 | 
			
		||||
		}()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	return RegisterValidationServiceHandler(ctx, mux, conn)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RegisterValidationServiceHandler registers the http handlers for service ValidationService to "mux".
 | 
			
		||||
// The handlers forward requests to the grpc endpoint over "conn".
 | 
			
		||||
func RegisterValidationServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
 | 
			
		||||
	return RegisterValidationServiceHandlerClient(ctx, mux, NewValidationServiceClient(conn))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RegisterValidationServiceHandlerClient registers the http handlers for service ValidationService
 | 
			
		||||
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ValidationServiceClient".
 | 
			
		||||
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ValidationServiceClient"
 | 
			
		||||
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
 | 
			
		||||
// "ValidationServiceClient" to call the correct interceptors.
 | 
			
		||||
func RegisterValidationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ValidationServiceClient) error {
 | 
			
		||||
 | 
			
		||||
	mux.Handle("POST", pattern_ValidationService_PerformValidation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 | 
			
		||||
		ctx, cancel := context.WithCancel(req.Context())
 | 
			
		||||
		defer cancel()
 | 
			
		||||
		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
 | 
			
		||||
		var err error
 | 
			
		||||
		var annotatedContext context.Context
 | 
			
		||||
		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/quilibrium.node.node.pb.ValidationService/PerformValidation", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.ValidationService/PerformValidation"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		resp, md, err := request_ValidationService_PerformValidation_0(annotatedContext, inboundMarshaler, client, req, pathParams)
 | 
			
		||||
		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		forward_ValidationService_PerformValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 | 
			
		||||
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	pattern_ValidationService_PerformValidation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.ValidationService", "PerformValidation"}, ""))
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	forward_ValidationService_PerformValidation_0 = runtime.ForwardResponseMessage
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// RegisterNodeServiceHandlerFromEndpoint is same as RegisterNodeServiceHandler but
 | 
			
		||||
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | 
			
		||||
func RegisterNodeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
 | 
			
		||||
 | 
			
		||||
@ -96,6 +96,72 @@ message TokenInfoResponse {
 | 
			
		||||
  bytes unconfirmed_owned_tokens = 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message Capability {
 | 
			
		||||
  // A general protocol identifier as a uint32 – this is expected to rarely
 | 
			
		||||
  // iterate, and should be uniquely identifying both protocol and version.
 | 
			
		||||
  // Pragmatically speaking, this implies that the least significant byte
 | 
			
		||||
  // specifies version (which should iterate most minimally), and the three most
 | 
			
		||||
  // significant bytes should specify protocol. Recipients SHOULD ignore
 | 
			
		||||
  // messages with incompatible protocol identifiers, but also SHOULD warn on
 | 
			
		||||
  // identifiers with versions higher than the supported protocol. A large
 | 
			
		||||
  // number of unsupported protocol messages may indicate spam/some other
 | 
			
		||||
  // attack, whereas a large number of unsupported protocol versions may
 | 
			
		||||
  // indicate an out of date client, respective to which side is the maximum of
 | 
			
		||||
  // the version number.
 | 
			
		||||
  uint32 protocol_identifier = 1;
 | 
			
		||||
  // An optional bundle of information specific to the capability – used for
 | 
			
		||||
  // extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet
 | 
			
		||||
  // but only for certain curve types.
 | 
			
		||||
  bytes additional_metadata = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message SelfTestReport {
 | 
			
		||||
  // The difficulty the self test was conducted under
 | 
			
		||||
  uint32 difficulty = 1;
 | 
			
		||||
  // The resulting local time of computing the VDF test under the difficulty
 | 
			
		||||
  int64 difficulty_metric = 2;
 | 
			
		||||
  // The resulting local time of computing a KZG commitment for a 16 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 commit_16_metric = 3;
 | 
			
		||||
  // The resulting local time of computing a KZG commitment for a 128 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 commit_128_metric = 4;
 | 
			
		||||
  // The resulting local time of computing a KZG commitment for a 1024 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 commit_1024_metric = 5;
 | 
			
		||||
  // The resulting local time of computing a KZG commitment for a 65536 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 commit_65536_metric = 6;
 | 
			
		||||
  // The resulting local time of computing a KZG proof for a 16 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 proof_16_metric = 7;
 | 
			
		||||
  // The resulting local time of computing a KZG proof for a 128 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 proof_128_metric = 8;
 | 
			
		||||
  // The resulting local time of computing a KZG proof for a 1024 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 proof_1024_metric = 9;
 | 
			
		||||
  // The resulting local time of computing a KZG proof for a 65536 degree
 | 
			
		||||
  // polynomial
 | 
			
		||||
  int64 proof_65536_metric = 10;
 | 
			
		||||
  // The number of reported accessible cores
 | 
			
		||||
  uint32 cores = 11;
 | 
			
		||||
  // The total available memory
 | 
			
		||||
  bytes memory = 12;
 | 
			
		||||
  // The total available storage
 | 
			
		||||
  bytes storage = 13;
 | 
			
		||||
  // The list of supported capabilities
 | 
			
		||||
  repeated Capability capabilities = 14;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ValidationMessage {
 | 
			
		||||
  bytes validation = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
service ValidationService {
 | 
			
		||||
  rpc PerformValidation(ValidationMessage) returns (ValidationMessage);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
service NodeService {
 | 
			
		||||
  rpc GetFrames(GetFramesRequest) returns (FramesResponse);
 | 
			
		||||
  rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse);
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,96 @@ import (
 | 
			
		||||
// Requires gRPC-Go v1.32.0 or later.
 | 
			
		||||
const _ = grpc.SupportPackageIsVersion7
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	ValidationService_PerformValidation_FullMethodName = "/quilibrium.node.node.pb.ValidationService/PerformValidation"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ValidationServiceClient is the client API for ValidationService service.
 | 
			
		||||
//
 | 
			
		||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 | 
			
		||||
type ValidationServiceClient interface {
 | 
			
		||||
	PerformValidation(ctx context.Context, in *ValidationMessage, opts ...grpc.CallOption) (*ValidationMessage, error)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type validationServiceClient struct {
 | 
			
		||||
	cc grpc.ClientConnInterface
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewValidationServiceClient(cc grpc.ClientConnInterface) ValidationServiceClient {
 | 
			
		||||
	return &validationServiceClient{cc}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *validationServiceClient) PerformValidation(ctx context.Context, in *ValidationMessage, opts ...grpc.CallOption) (*ValidationMessage, error) {
 | 
			
		||||
	out := new(ValidationMessage)
 | 
			
		||||
	err := c.cc.Invoke(ctx, ValidationService_PerformValidation_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidationServiceServer is the server API for ValidationService service.
 | 
			
		||||
// All implementations must embed UnimplementedValidationServiceServer
 | 
			
		||||
// for forward compatibility
 | 
			
		||||
type ValidationServiceServer interface {
 | 
			
		||||
	PerformValidation(context.Context, *ValidationMessage) (*ValidationMessage, error)
 | 
			
		||||
	mustEmbedUnimplementedValidationServiceServer()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnimplementedValidationServiceServer must be embedded to have forward compatible implementations.
 | 
			
		||||
type UnimplementedValidationServiceServer struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (UnimplementedValidationServiceServer) PerformValidation(context.Context, *ValidationMessage) (*ValidationMessage, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method PerformValidation not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedValidationServiceServer) mustEmbedUnimplementedValidationServiceServer() {}
 | 
			
		||||
 | 
			
		||||
// UnsafeValidationServiceServer may be embedded to opt out of forward compatibility for this service.
 | 
			
		||||
// Use of this interface is not recommended, as added methods to ValidationServiceServer will
 | 
			
		||||
// result in compilation errors.
 | 
			
		||||
type UnsafeValidationServiceServer interface {
 | 
			
		||||
	mustEmbedUnimplementedValidationServiceServer()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RegisterValidationServiceServer(s grpc.ServiceRegistrar, srv ValidationServiceServer) {
 | 
			
		||||
	s.RegisterService(&ValidationService_ServiceDesc, srv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _ValidationService_PerformValidation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(ValidationMessage)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(ValidationServiceServer).PerformValidation(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: ValidationService_PerformValidation_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(ValidationServiceServer).PerformValidation(ctx, req.(*ValidationMessage))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValidationService_ServiceDesc is the grpc.ServiceDesc for ValidationService service.
 | 
			
		||||
// It's only intended for direct use with grpc.RegisterService,
 | 
			
		||||
// and not to be introspected or modified (even as a copy)
 | 
			
		||||
var ValidationService_ServiceDesc = grpc.ServiceDesc{
 | 
			
		||||
	ServiceName: "quilibrium.node.node.pb.ValidationService",
 | 
			
		||||
	HandlerType: (*ValidationServiceServer)(nil),
 | 
			
		||||
	Methods: []grpc.MethodDesc{
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "PerformValidation",
 | 
			
		||||
			Handler:    _ValidationService_PerformValidation_Handler,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	Streams:  []grpc.StreamDesc{},
 | 
			
		||||
	Metadata: "node.proto",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	NodeService_GetFrames_FullMethodName      = "/quilibrium.node.node.pb.NodeService/GetFrames"
 | 
			
		||||
	NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo"
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@ const (
 | 
			
		||||
	ClockPrefix                          = NamespacePrefix + "clock.pb."
 | 
			
		||||
	KeysPrefix                           = NamespacePrefix + "keys.pb."
 | 
			
		||||
	CeremonyPrefix                       = NamespacePrefix + "ceremony.pb."
 | 
			
		||||
	NodePrefix                           = NamespacePrefix + "node.pb"
 | 
			
		||||
	CeremonyTranscriptType               = CeremonyPrefix + "CeremonyTranscript"
 | 
			
		||||
	CeremonyLobbyStateType               = CeremonyPrefix + "CeremonyLobbyState"
 | 
			
		||||
	CeremonySeenProverAttestationType    = CeremonyPrefix + "CeremonySeenProverAttestation"
 | 
			
		||||
@ -54,4 +55,5 @@ const (
 | 
			
		||||
	BLS48581G1PrivateKeyType             = KeysPrefix + "BLS48581G1PrivateKey"
 | 
			
		||||
	BLS48581G2PublicKeyType              = KeysPrefix + "BLS48581G2PublicKey"
 | 
			
		||||
	BLS48581G2PrivateKeyType             = KeysPrefix + "BLS48581G2PrivateKey"
 | 
			
		||||
	SelfTestReportType                   = NodePrefix + "SelfTestReport"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,6 @@ type DataProofStore interface {
 | 
			
		||||
		filter []byte,
 | 
			
		||||
		commitment []byte,
 | 
			
		||||
		frameNumber uint64,
 | 
			
		||||
		inclusionReassembler func(typeUrl string, data [][]byte) ([]byte, error),
 | 
			
		||||
	) (
 | 
			
		||||
		*protobufs.InclusionAggregateProof,
 | 
			
		||||
		error,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								node/utils/selftest_intrinsics_unix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node/utils/selftest_intrinsics_unix.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
//go:build !windows
 | 
			
		||||
// +build !windows
 | 
			
		||||
 | 
			
		||||
package utils
 | 
			
		||||
 | 
			
		||||
import "golang.org/x/sys/unix"
 | 
			
		||||
 | 
			
		||||
func GetDiskSpace(dir string) uint64 {
 | 
			
		||||
	var stat unix.Statfs_t
 | 
			
		||||
 | 
			
		||||
	err := unix.Statfs(dir, &stat)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stat.Bavail * uint64(stat.Bsize)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								node/utils/selftest_intrinsics_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								node/utils/selftest_intrinsics_windows.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
//go:build windows
 | 
			
		||||
// +build windows
 | 
			
		||||
 | 
			
		||||
package utils
 | 
			
		||||
 | 
			
		||||
import "golang.org/x/sys/windows"
 | 
			
		||||
 | 
			
		||||
func GetDiskSpace(dir string) uint64 {
 | 
			
		||||
	var freeBytesAvailable uint64
 | 
			
		||||
	var totalNumberOfBytes uint64
 | 
			
		||||
	var totalNumberOfFreeBytes uint64
 | 
			
		||||
 | 
			
		||||
	err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr(dir),
 | 
			
		||||
		&freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return totalNumberOfBytes
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user