From 0b54e398e12090cdc84011033862899b47e28138 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Mon, 27 May 2024 17:26:51 +1000 Subject: [PATCH 01/22] refactor: Update dependencies and improve code readability (#324) --- go.mod | 4 +- go.sum | 8 ++-- pkg/clmimicry/gossipsub_attestation.go | 63 ++++++++++++++++--------- pkg/clmimicry/gossipsub_beacon_block.go | 18 ++----- 4 files changed, 51 insertions(+), 42 deletions(-) diff --git a/go.mod b/go.mod index 8e719e3b..c0d9dc83 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/ethpandaops/xatu go 1.22.0 -replace github.com/probe-lab/hermes => github.com/ethpandaops/hermes v0.0.0-20240501013510-f8170ec5da4d +replace github.com/probe-lab/hermes => github.com/ethpandaops/hermes v0.0.0-20240527060557-ae23464cdc41 require ( github.com/IBM/sarama v1.43.0 @@ -12,7 +12,7 @@ require ( github.com/cenkalti/backoff/v4 v4.2.1 github.com/chuckpreslar/emission v0.0.0-20170206194824-a7ddd980baf9 github.com/creasty/defaults v1.7.0 - github.com/ethereum/go-ethereum v1.13.14 + github.com/ethereum/go-ethereum v1.13.15 github.com/ethpandaops/beacon v0.35.0 github.com/ethpandaops/ethcore v0.0.0-20240422023000-2a5727b18756 github.com/ethpandaops/ethwallclock v0.3.0 diff --git a/go.sum b/go.sum index 010468fe..5f71e1e4 100644 --- a/go.sum +++ b/go.sum @@ -258,16 +258,16 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.14 h1:EwiY3FZP94derMCIam1iW4HFVrSgIcpsu0HwTQtm6CQ= -github.com/ethereum/go-ethereum v1.13.14/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= +github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= +github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= github.com/ethpandaops/beacon v0.35.0 h1:ZkHfxm41N0wkv503Xdb6rFxLuEnIonClUQWUPFHS5VU= github.com/ethpandaops/beacon v0.35.0/go.mod h1:B+SLxj1gnDd/Ia7cl/uuhzo1wyVf2p2puL6lmzPdPro= github.com/ethpandaops/ethcore v0.0.0-20240422023000-2a5727b18756 h1:8JWjrRfP14m0oxOk03m11n/xgdY5ceyUf/ZxYdOs5gE= github.com/ethpandaops/ethcore v0.0.0-20240422023000-2a5727b18756/go.mod h1:ZvKqL6CKxiraefdXPHeJurV2pDD/f2HF2uklDVdrry8= github.com/ethpandaops/ethwallclock v0.3.0 h1:xF5fwtBf+bHFHZKBnwiPFEuelW3sMM7SD3ZNFq1lJY4= github.com/ethpandaops/ethwallclock v0.3.0/go.mod h1:y0Cu+mhGLlem19vnAV2x0hpFS5KZ7oOi2SWYayv9l24= -github.com/ethpandaops/hermes v0.0.0-20240501013510-f8170ec5da4d h1:mWBuU7mhpN11c2bbcImFyLSl+TJ208N4aGhMhadflIw= -github.com/ethpandaops/hermes v0.0.0-20240501013510-f8170ec5da4d/go.mod h1:WOtvdP1zl53vuoOX6PRZ9oAbbJUiDso50efmAjoUZzI= +github.com/ethpandaops/hermes v0.0.0-20240527060557-ae23464cdc41 h1:KM07rlGX9EQm6ZawvL0BDMJ5Rf3brZIJKsmiFS92wI0= +github.com/ethpandaops/hermes v0.0.0-20240527060557-ae23464cdc41/go.mod h1:uMPOUopuxLk1Qktn66udTjRBLqJJ+CNfiCyxNQda4Ow= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= diff --git a/pkg/clmimicry/gossipsub_attestation.go b/pkg/clmimicry/gossipsub_attestation.go index b23e43d9..05c1565c 100644 --- a/pkg/clmimicry/gossipsub_attestation.go +++ b/pkg/clmimicry/gossipsub_attestation.go @@ -3,7 +3,6 @@ package clmimicry import ( "context" "fmt" - "time" "github.com/attestantio/go-eth2-client/spec/phase0" v1 "github.com/ethpandaops/xatu/pkg/proto/eth/v1" @@ -11,6 +10,7 @@ import ( "github.com/ethpandaops/xatu/pkg/proto/xatu" "github.com/google/uuid" "github.com/probe-lab/hermes/host" + "github.com/prysmaticlabs/prysm/v5/consensus-types/primitives" ethtypes "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" @@ -21,9 +21,38 @@ func (m *Mimicry) handleGossipAttestation(ctx context.Context, clientMeta *xatu.ClientMeta, event *host.TraceEvent, payload map[string]any) error { // Extract attestation data - eAttestation, ok := payload["Attestation"].(*ethtypes.Attestation) - if !ok { - return fmt.Errorf("invalid attestation") + eAttestation := ðtypes.Attestation{ + Data: ðtypes.AttestationData{}, + } + + if slot, ok := payload["Slot"].(primitives.Slot); ok { + eAttestation.Data.Slot = slot + } else { + return fmt.Errorf("invalid slot") + } + + if committeeIndex, ok := payload["CommIdx"].(primitives.CommitteeIndex); ok { + eAttestation.Data.CommitteeIndex = committeeIndex + } else { + return fmt.Errorf("invalid committee index") + } + + if beaconBlockRoot, ok := payload["BeaconBlockRoot"].([]byte); ok { + eAttestation.Data.BeaconBlockRoot = beaconBlockRoot + } else { + return fmt.Errorf("invalid beacon block root") + } + + if source, ok := payload["Source"].(*ethtypes.Checkpoint); ok { + eAttestation.Data.Source = source + } else { + return fmt.Errorf("invalid source") + } + + if target, ok := payload["Target"].(*ethtypes.Checkpoint); ok { + eAttestation.Data.Target = target + } else { + return fmt.Errorf("invalid target") } attestation := &v1.Attestation{ @@ -48,7 +77,7 @@ func (m *Mimicry) handleGossipAttestation(ctx context.Context, return fmt.Errorf("failed to clone client metadata") } - additionalData, err := m.createAdditionalGossipSubAttestationData(ctx, payload, eAttestation) + additionalData, err := m.createAdditionalGossipSubAttestationData(ctx, payload, eAttestation, event) if err != nil { return fmt.Errorf("failed to create additional data: %w", err) } @@ -57,15 +86,10 @@ func (m *Mimicry) handleGossipAttestation(ctx context.Context, Libp2PTraceGossipsubBeaconAttestation: additionalData, } - timestamp, ok := payload["Timestamp"].(time.Time) - if !ok { - return fmt.Errorf("invalid timestamp") - } - decoratedEvent := &xatu.DecoratedEvent{ Event: &xatu.Event{ Name: xatu.Event_LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION, - DateTime: timestamppb.New(timestamp.Add(m.clockDrift)), + DateTime: timestamppb.New(event.Timestamp.Add(m.clockDrift)), Id: uuid.New().String(), }, Meta: &xatu.Meta{ @@ -82,19 +106,15 @@ func (m *Mimicry) handleGossipAttestation(ctx context.Context, func (m *Mimicry) createAdditionalGossipSubAttestationData(ctx context.Context, payload map[string]any, attestation *ethtypes.Attestation, + event *host.TraceEvent, ) (*xatu.ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData, error) { wallclockSlot, wallclockEpoch, err := m.ethereum.Metadata().Wallclock().Now() if err != nil { return nil, fmt.Errorf("failed to get wallclock time: %w", err) } - timestamp, ok := payload["Timestamp"].(time.Time) - if !ok { - return nil, fmt.Errorf("invalid timestamp") - } - // Add Clock Drift - timestampAdjusted := timestamp.Add(m.clockDrift) + timestampAdjusted := event.Timestamp.Add(m.clockDrift) attestionSlot := m.ethereum.Metadata().Wallclock().Slots().FromNumber(uint64(attestation.Data.Slot)) epoch := m.ethereum.Metadata().Wallclock().Epochs().FromSlot(uint64(attestation.Data.Slot)) @@ -162,18 +182,17 @@ func (m *Mimicry) createAdditionalGossipSubAttestationData(ctx context.Context, } // If the attestation is unaggreated, we can append the validator position within the committee - if attestation.AggregationBits.Count() == 1 { - position := uint64(attestation.AggregationBits.BitIndices()[0]) - + position, ok := payload["AggregatePos"].(int) + if ok { validatorIndex, err := m.ethereum.Duties().GetValidatorIndex( phase0.Epoch(epoch.Number()), phase0.Slot(attestation.Data.Slot), phase0.CommitteeIndex(attestation.Data.CommitteeIndex), - position, + uint64(position), ) if err == nil { extra.AttestingValidator = &xatu.AttestingValidatorV2{ - CommitteeIndex: &wrapperspb.UInt64Value{Value: position}, + CommitteeIndex: &wrapperspb.UInt64Value{Value: uint64(attestation.Data.CommitteeIndex)}, Index: &wrapperspb.UInt64Value{Value: uint64(validatorIndex)}, } } diff --git a/pkg/clmimicry/gossipsub_beacon_block.go b/pkg/clmimicry/gossipsub_beacon_block.go index 8be26bbb..719be104 100644 --- a/pkg/clmimicry/gossipsub_beacon_block.go +++ b/pkg/clmimicry/gossipsub_beacon_block.go @@ -3,7 +3,6 @@ package clmimicry import ( "context" "fmt" - "time" "github.com/ethpandaops/xatu/pkg/proto/libp2p" "github.com/ethpandaops/xatu/pkg/proto/libp2p/gossipsub" @@ -34,11 +33,6 @@ func (m *Mimicry) handleGossipBeaconBlock(ctx context.Context, return fmt.Errorf("invalid proposer index") } - timestamp, ok := payload["Timestamp"].(time.Time) - if !ok { - return fmt.Errorf("invalid timestamp") - } - data := &gossipsub.BeaconBlock{ Slot: wrapperspb.UInt64(uint64(slot)), Block: wrapperspb.String(fmt.Sprintf("0x%x", blockRoot)), @@ -50,7 +44,7 @@ func (m *Mimicry) handleGossipBeaconBlock(ctx context.Context, return fmt.Errorf("failed to clone client metadata") } - additionalData, err := m.createAdditionalGossipSubBeaconBlockData(ctx, payload, slot) + additionalData, err := m.createAdditionalGossipSubBeaconBlockData(ctx, payload, slot, event) if err != nil { return fmt.Errorf("failed to create additional data: %w", err) } @@ -62,7 +56,7 @@ func (m *Mimicry) handleGossipBeaconBlock(ctx context.Context, decoratedEvent := &xatu.DecoratedEvent{ Event: &xatu.Event{ Name: xatu.Event_LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK, - DateTime: timestamppb.New(timestamp.Add(m.clockDrift)), + DateTime: timestamppb.New(event.Timestamp.Add(m.clockDrift)), Id: uuid.New().String(), }, Meta: &xatu.Meta{ @@ -79,6 +73,7 @@ func (m *Mimicry) handleGossipBeaconBlock(ctx context.Context, func (m *Mimicry) createAdditionalGossipSubBeaconBlockData(ctx context.Context, payload map[string]any, slotNumber primitives.Slot, + event *host.TraceEvent, ) (*xatu.ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData, error) { wallclockSlot, wallclockEpoch, err := m.ethereum.Metadata().Wallclock().Now() if err != nil { @@ -96,13 +91,8 @@ func (m *Mimicry) createAdditionalGossipSubBeaconBlockData(ctx context.Context, }, } - timestamp, ok := payload["Timestamp"].(time.Time) - if !ok { - return nil, fmt.Errorf("invalid timestamp") - } - // Add Clock Drift - timestampAdjusted := timestamp.Add(m.clockDrift) + timestampAdjusted := event.Timestamp.Add(m.clockDrift) slot := m.ethereum.Metadata().Wallclock().Slots().FromNumber(uint64(slotNumber)) epoch := m.ethereum.Metadata().Wallclock().Epochs().FromSlot(uint64(slotNumber)) From d0a85d4df75025e027a1bffec6183a61e8e334c9 Mon Sep 17 00:00:00 2001 From: Francis Li Date: Sun, 2 Jun 2024 19:56:47 -0700 Subject: [PATCH 02/22] feat(cl-mimicry): Add LIBP2P_GOSSIPSUB_BLOB_SIDECAR (#323) * Finish coding * Finish configurations * bug fixes --- .../docker-compose/vector-http-kafka.yaml | 21 +- .../vector-kafka-clickhouse-libp2p.yaml | 126 +- ...037_libp2p_gossipsub_blob_sidecar.down.sql | 2 + .../037_libp2p_gossipsub_blob_sidecar.up.sql | 88 + docker-compose.yml | 1 + pkg/clmimicry/config.go | 6 +- pkg/clmimicry/event.go | 29 +- pkg/clmimicry/gossipsub_blob_sidecar.go | 144 + pkg/proto/libp2p/gossipsub/eth.pb.go | 125 +- pkg/proto/libp2p/gossipsub/eth.proto | 5 + pkg/proto/xatu/event_ingester.pb.go | 3400 +++++++++-------- pkg/proto/xatu/event_ingester.proto | 34 + .../service/event-ingester/event/event.go | 6 +- .../libp2p/trace_gossipsub_blob_sidecar.go | 50 + 14 files changed, 2412 insertions(+), 1625 deletions(-) create mode 100644 deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.down.sql create mode 100644 deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql create mode 100644 pkg/clmimicry/gossipsub_blob_sidecar.go create mode 100644 pkg/server/service/event-ingester/event/libp2p/trace_gossipsub_blob_sidecar.go diff --git a/deploy/local/docker-compose/vector-http-kafka.yaml b/deploy/local/docker-compose/vector-http-kafka.yaml index d9b8aac6..71fdb64b 100644 --- a/deploy/local/docker-compose/vector-http-kafka.yaml +++ b/deploy/local/docker-compose/vector-http-kafka.yaml @@ -63,8 +63,9 @@ transforms: libp2p_trace_join: .event.name == "LIBP2P_TRACE_JOIN" libp2p_trace_handle_metadata: .event.name == "LIBP2P_TRACE_HANDLE_METADATA" libp2p_trace_handle_status: .event.name == "LIBP2P_TRACE_HANDLE_STATUS" - libp2p_trace_gossipsub_beacon_block : .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK" - libp2p_trace_gossipsub_beacon_attestation : .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" + libp2p_trace_gossipsub_beacon_block: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK" + libp2p_trace_gossipsub_beacon_attestation: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" + libp2p_trace_gossipsub_blob_sidecar: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" sinks: metrics: type: prometheus_exporter @@ -856,3 +857,19 @@ sinks: enabled: true encoding: codec: json + libp2p_trace_gossipsub_blob_sidecar_kafka: + type: kafka + buffer: + max_events: 500000 + batch: + timeout_secs: 0.5 + inputs: + - xatu_server_events_router.libp2p_trace_gossipsub_blob_sidecar + bootstrap_servers: "${KAFKA_BROKERS}" + key_field: "event.id" + topic: libp2p-trace-gossipsub-blob-sidecar + compression: snappy + healthcheck: + enabled: true + encoding: + codec: json diff --git a/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml b/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml index 232decac..b5f52986 100644 --- a/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml +++ b/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml @@ -215,6 +215,7 @@ transforms: libp2p_trace_handle_status: .event.name == "LIBP2P_TRACE_HANDLE_STATUS" libp2p_trace_gossipsub_beacon_block: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK" libp2p_trace_gossipsub_beacon_attestation: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" + libp2p_trace_gossipsub_blob_sidecar: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" xatu_server_events_router_matched: type: log_to_metric inputs: @@ -229,6 +230,7 @@ transforms: - xatu_server_events_router.libp2p_trace_handle_status - xatu_server_events_router.libp2p_trace_gossipsub_beacon_block - xatu_server_events_router.libp2p_trace_gossipsub_beacon_attestation + - xatu_server_events_router.libp2p_trace_gossipsub_blob_sidecar metrics: - type: counter field: event.name @@ -652,7 +654,6 @@ transforms: .message_size = .meta.client.additional_data.message_size .message_id = .meta.client.additional_data.message_id - .updated_date_time = to_unix_timestamp(now()) del(.event) @@ -769,13 +770,106 @@ transforms: .message_size = .meta.client.additional_data.message_size .message_id = .meta.client.additional_data.message_id - .updated_date_time = to_unix_timestamp(now()) del(.event) del(.meta) del(.data) del(.path) + + libp2p_trace_gossipsub_blob_sidecar_formatted: + type: remap + inputs: + - xatu_server_events_router.libp2p_trace_gossipsub_blob_sidecar + source: |- + .unique_key = seahash(.event.id) + .updated_date_time = to_unix_timestamp(now()) + event_date_time, err = parse_timestamp(.event.date_time, format: "%+"); + if err == null { + .event_date_time = to_unix_timestamp(event_date_time, unit: "milliseconds") + } else { + .error = err + .error_description = "failed to parse event date time" + log(., level: "error", rate_limit_secs: 60) + } + + .slot = .data.slot + slot_start_date_time, err = parse_timestamp(.meta.client.additional_data.slot.start_date_time, format: "%+"); + if err == null { + .slot_start_date_time = to_unix_timestamp(slot_start_date_time) + } else { + .error = err + .error_description = "failed to parse slot start date time" + log(., level: "error", rate_limit_secs: 60) + } + + .epoch = .meta.client.additional_data.epoch.number + epoch_start_date_time, err = parse_timestamp(.meta.client.additional_data.epoch.start_date_time, format: "%+"); + if err == null { + .epoch_start_date_time = to_unix_timestamp(epoch_start_date_time) + } else { + .error = err + .error_description = "failed to parse epoch start date time" + log(., level: "error", rate_limit_secs: 60) + } + + .wallclock_slot = .meta.client.additional_data.wallclock_slot.number + wallclock_slot_start_date_time, err = parse_timestamp(.meta.client.additional_data.wallclock_slot.start_date_time, format: "%+"); + if err == null { + .wallclock_slot_start_date_time = to_unix_timestamp(wallclock_slot_start_date_time) + } else { + .error = err + .error_description = "failed to parse wallclock slot start date time" + log(., level: "error", rate_limit_secs: 60) + } + .wallclock_epoch = .meta.client.additional_data.epoch.number + wallclock_epoch_start_date_time, err = parse_timestamp(.meta.client.additional_data.wallclock_epoch.start_date_time, format: "%+"); + if err == null { + .wallclock_epoch_start_date_time = to_unix_timestamp(wallclock_epoch_start_date_time) + } else { + .error = err + .error_description = "failed to parse wallclock epoch start date time" + log(., level: "error", rate_limit_secs: 60) + } + + .propagation_slot_start_diff = .meta.client.additional_data.propagation.slot_start_diff + .proposer_index = .data.proposer_index + .blob_index = .data.index + + peer_id_key, err = .meta.client.additional_data.metadata.peer_id + .meta.ethereum.network.name + if err != null { + .error = err + .error_description = "failed to generate peer id unique key" + log(., level: "error", rate_limit_secs: 60) + } + .peer_id_unique_key = seahash(peer_id_key) + .message_id = .meta.client.additional_data.message_id + .message_size = .meta.client.additional_data.message_size + + topicParts, err = split(.meta.client.additional_data.topic, "/") + if err != null { + .error = err + .error_description = "failed to split topic" + } else { + if length(topicParts) != 5 { + .errDebug = { + "topic": .meta.client.additional_data.topic, + } + .error_description = "failed to split topic" + log(., level: "error", rate_limit_secs: 60) + } + } + + .topic_layer = topicParts[1] + .topic_fork_digest_value = topicParts[2] + .topic_name = topicParts[3] + .topic_encoding = topicParts[4] + + del(.event) + del(.meta) + del(.data) + del(.path) + libp2p_trace_rpc_exploder: type: remap inputs: @@ -796,7 +890,6 @@ transforms: # Emit the main RPC event record events = [] - peer_id_key, err = .data.meta.peer_id + .meta_network_name if err != null { .error = err @@ -1344,9 +1437,8 @@ transforms: .error_description = "failed to convert latency to millseconds" log(., level: "error", rate_limit_secs: 60) } - - .protocol = .data.protocol_id + .protocol = .data.protocol_id .updated_date_time = to_unix_timestamp(now()) del(.event) @@ -1380,7 +1472,7 @@ sinks: max_events: 200000 healthcheck: enabled: true - skip_unknown_fields: false + skip_unknown_fields: false libp2p_trace_connected_clickhouse: type: clickhouse inputs: @@ -1400,7 +1492,7 @@ sinks: max_events: 200000 healthcheck: enabled: true - skip_unknown_fields: false + skip_unknown_fields: false libp2p_trace_disconnected_clickhouse: type: clickhouse inputs: @@ -1721,3 +1813,23 @@ sinks: healthcheck: enabled: true skip_unknown_fields: false + libp2p_trace_gossipsub_blob_sidecar_clickhouse: + type: clickhouse + inputs: + - libp2p_trace_gossipsub_blob_sidecar_formatted + database: default + endpoint: "${CLICKHOUSE_ENDPOINT}" + table: libp2p_gossipsub_blob_sidecar + auth: + strategy: basic + user: "${CLICKHOUSE_USER}" + password: "${CLICKHOUSE_PASSWORD}" + batch: + max_bytes: 52428800 + max_events: 200000 + timeout_secs: 1 + buffer: + max_events: 200000 + healthcheck: + enabled: true + skip_unknown_fields: false diff --git a/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.down.sql b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.down.sql new file mode 100644 index 00000000..14b2d5e9 --- /dev/null +++ b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.down.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS libp2p_gossipsub_blob_sidecar ON CLUSTER '{cluster}'; +DROP TABLE IF EXISTS libp2p_gossipsub_blob_sidecar_local ON CLUSTER '{cluster}'; \ No newline at end of file diff --git a/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql new file mode 100644 index 00000000..9e277fd4 --- /dev/null +++ b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql @@ -0,0 +1,88 @@ +CREATE TABLE libp2p_gossipsub_blob_sidecar_local +ON CLUSTER '{cluster}' ( + unique_key Int64, + updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + event_date_time DateTime64(3) Codec(DoubleDelta, ZSTD(1)), + slot UInt32 Codec(DoubleDelta, ZSTD(1)), + slot_start_date_time DateTime Codec(DoubleDelta, ZSTD(1)), + epoch UInt32 Codec(DoubleDelta, ZSTD(1)), + epoch_start_date_time DateTime Codec(DoubleDelta, ZSTD(1)), + wallclock_slot UInt32 Codec(DoubleDelta, ZSTD(1)), + wallclock_slot_start_date_time DateTime Codec(DoubleDelta, ZSTD(1)), + wallclock_epoch UInt32 Codec(DoubleDelta, ZSTD(1)), + wallclock_epoch_start_date_time DateTime Codec(DoubleDelta, ZSTD(1)), + propagation_slot_start_diff UInt32 Codec(ZSTD(1)), + proposer_index UInt32 CODEC(ZSTD(1)), + blob_index UInt32 CODEC(ZSTD(1)), + peer_id_unique_key Int64, + message_id String CODEC(ZSTD(1)), + message_size UInt32 Codec(ZSTD(1)), + topic_layer LowCardinality(String), + topic_fork_digest_value LowCardinality(String), + topic_name LowCardinality(String), + topic_encoding LowCardinality(String), + meta_client_name LowCardinality(String), + meta_client_id String Codec(ZSTD(1)), + meta_client_version LowCardinality(String), + meta_client_implementation LowCardinality(String), + meta_client_os LowCardinality(String), + meta_client_ip Nullable(IPv6) Codec(ZSTD(1)), + meta_client_geo_city LowCardinality(String) Codec(ZSTD(1)), + meta_client_geo_country LowCardinality(String) Codec(ZSTD(1)), + meta_client_geo_country_code LowCardinality(String) Codec(ZSTD(1)), + meta_client_geo_continent_code LowCardinality(String) Codec(ZSTD(1)), + meta_client_geo_longitude Nullable(Float64) Codec(ZSTD(1)), + meta_client_geo_latitude Nullable(Float64) Codec(ZSTD(1)), + meta_client_geo_autonomous_system_number Nullable(UInt32) Codec(ZSTD(1)), + meta_client_geo_autonomous_system_organization Nullable(String) Codec(ZSTD(1)), + meta_network_id Int32 Codec(DoubleDelta, ZSTD(1)), + meta_network_name LowCardinality(String) +) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', updated_date_time) +PARTITION BY toStartOfMonth(slot_start_date_time) +ORDER BY (slot_start_date_time, unique_key, meta_network_name, meta_client_name); + +ALTER TABLE libp2p_gossipsub_blob_sidecar_local +ON CLUSTER '{cluster}' +MODIFY COMMENT 'Table for libp2p gossipsub blob sidecar data', +COMMENT COLUMN unique_key 'Unique identifier for each record', +COMMENT COLUMN updated_date_time 'Timestamp when the record was last updated', +COMMENT COLUMN event_date_time 'Timestamp of the event with millisecond precision', +COMMENT COLUMN slot 'Slot number associated with the event', +COMMENT COLUMN slot_start_date_time 'Start date and time of the slot', +COMMENT COLUMN epoch 'Epoch number associated with the event', +COMMENT COLUMN epoch_start_date_time 'Start date and time of the epoch', +COMMENT COLUMN wallclock_slot 'Slot number of the wall clock when the event was received', +COMMENT COLUMN wallclock_slot_start_date_time 'Start date and time of the wall clock slot when the event was received', +COMMENT COLUMN wallclock_epoch 'Epoch number of the wall clock when the event was received', +COMMENT COLUMN wallclock_epoch_start_date_time 'Start date and time of the wall clock epoch when the event was received', +COMMENT COLUMN propagation_slot_start_diff 'Difference in slot start time for propagation', +COMMENT COLUMN proposer_index 'The proposer index of the beacon block', +COMMENT COLUMN blob_index 'Blob index associated with the record', +COMMENT COLUMN peer_id_unique_key 'Unique key associated with the identifier of the peer', +COMMENT COLUMN message_id 'Identifier of the message', +COMMENT COLUMN message_size 'Size of the message in bytes', +COMMENT COLUMN topic_layer 'Layer of the topic in the gossipsub protocol', +COMMENT COLUMN topic_fork_digest_value 'Fork digest value of the topic', +COMMENT COLUMN topic_name 'Name of the topic', +COMMENT COLUMN topic_encoding 'Encoding used for the topic', +COMMENT COLUMN meta_client_name 'Name of the client that generated the event', +COMMENT COLUMN meta_client_id 'Unique Session ID of the client that generated the event. This changes every time the client is restarted.', +COMMENT COLUMN meta_client_version 'Version of the client that generated the event', +COMMENT COLUMN meta_client_implementation 'Implementation of the client that generated the event', +COMMENT COLUMN meta_client_os 'Operating system of the client that generated the event', +COMMENT COLUMN meta_client_ip 'IP address of the client that generated the event', +COMMENT COLUMN meta_client_geo_city 'City of the client that generated the event', +COMMENT COLUMN meta_client_geo_country 'Country of the client that generated the event', +COMMENT COLUMN meta_client_geo_country_code 'Country code of the client that generated the event', +COMMENT COLUMN meta_client_geo_continent_code 'Continent code of the client that generated the event', +COMMENT COLUMN meta_client_geo_longitude 'Longitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_latitude 'Latitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_number 'Autonomous system number of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_organization 'Autonomous system organization of the client that generated the event', +COMMENT COLUMN meta_network_id 'Network ID associated with the client', +COMMENT COLUMN meta_network_name 'Name of the network associated with the client'; + +CREATE TABLE libp2p_gossipsub_blob_sidecar +ON CLUSTER '{cluster}' +AS libp2p_gossipsub_blob_sidecar_local +ENGINE = Distributed('{cluster}', default, libp2p_gossipsub_blob_sidecar_local, unique_key); \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index eef56856..27928209 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -264,6 +264,7 @@ services: "libp2p-trace-handle-status" "libp2p-trace-gossipsub-beacon-block" "libp2p-trace-gossipsub-beacon-attestation" + "libp2p-trace-gossipsub-blob-sidecar" ) for topic in "$${topics[@]}"; do echo "Creating topic: $$topic"; diff --git a/pkg/clmimicry/config.go b/pkg/clmimicry/config.go index c6d2e93e..b588959f 100644 --- a/pkg/clmimicry/config.go +++ b/pkg/clmimicry/config.go @@ -5,11 +5,12 @@ import ( "fmt" "time" + hermes "github.com/probe-lab/hermes/eth" + "github.com/sirupsen/logrus" + "github.com/ethpandaops/xatu/pkg/clmimicry/ethereum" "github.com/ethpandaops/xatu/pkg/output" "github.com/ethpandaops/xatu/pkg/processor" - hermes "github.com/probe-lab/hermes/eth" - "github.com/sirupsen/logrus" ) type Config struct { @@ -142,6 +143,7 @@ type EventConfig struct { HandleStatusEnabled bool `yaml:"handleStatusEnabled" default:"true"` GossipSubBeaconBlockEnabled bool `yaml:"gossipSubBeaconBlockEnabled" default:"true"` GossipSubAttestationEnabled bool `yaml:"gossipSubAttestationEnabled" default:"true"` + GossipSubBlobSidecarEnabled bool `yaml:"gossipSubBlobSidecarEnabled" default:"true"` } func (e *EventConfig) Validate() error { diff --git a/pkg/clmimicry/event.go b/pkg/clmimicry/event.go index e4256410..fd43f77b 100644 --- a/pkg/clmimicry/event.go +++ b/pkg/clmimicry/event.go @@ -5,14 +5,16 @@ import ( "fmt" "strings" - "github.com/ethpandaops/xatu/pkg/proto/libp2p" - "github.com/ethpandaops/xatu/pkg/proto/xatu" "github.com/google/uuid" "github.com/pkg/errors" "github.com/probe-lab/hermes/host" + "github.com/prysmaticlabs/prysm/v5/beacon-chain/p2p" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/wrapperspb" + + "github.com/ethpandaops/xatu/pkg/proto/libp2p" + "github.com/ethpandaops/xatu/pkg/proto/xatu" ) func (m *Mimicry) handleHermesEvent(ctx context.Context, event *host.TraceEvent) error { @@ -445,7 +447,8 @@ func (m *Mimicry) handleHandleMessageEvent(ctx context.Context, return errors.New("missing topic in HandleMessage event") } - if strings.Contains(topic, "beacon_attestation") { + switch { + case strings.Contains(topic, p2p.GossipAttestationMessage): if !m.Config.Events.GossipSubAttestationEnabled { return nil } @@ -453,11 +456,7 @@ func (m *Mimicry) handleHandleMessageEvent(ctx context.Context, if err := m.handleGossipAttestation(ctx, clientMeta, event, payload); err != nil { return errors.Wrap(err, "failed to handle gossipsub beacon attestation") } - - return nil - } - - if strings.Contains(topic, "beacon_block") { + case strings.Contains(topic, p2p.GossipBlockMessage): if !m.Config.Events.GossipSubBeaconBlockEnabled { return nil } @@ -465,11 +464,17 @@ func (m *Mimicry) handleHandleMessageEvent(ctx context.Context, if err := m.handleGossipBeaconBlock(ctx, clientMeta, event, payload); err != nil { return errors.Wrap(err, "failed to handle gossipsub beacon block") } + case strings.Contains(topic, p2p.GossipBlobSidecarMessage): + if !m.Config.Events.GossipSubBlobSidecarEnabled { + return nil + } - return nil - } else { + if err := m.handleGossipBlobSidecar(ctx, clientMeta, event, payload); err != nil { + return errors.Wrap(err, "failed to handle gossipsub blob sidecar") + } + default: m.log.WithField("topic", topic).Trace("Unsupported topic in HandleMessage event") - - return nil } + + return nil } diff --git a/pkg/clmimicry/gossipsub_blob_sidecar.go b/pkg/clmimicry/gossipsub_blob_sidecar.go new file mode 100644 index 00000000..ab47b2f6 --- /dev/null +++ b/pkg/clmimicry/gossipsub_blob_sidecar.go @@ -0,0 +1,144 @@ +package clmimicry + +import ( + "context" + "fmt" + "time" + + "github.com/google/uuid" + "github.com/probe-lab/hermes/host" + "github.com/prysmaticlabs/prysm/v5/consensus-types/primitives" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" + + "github.com/ethpandaops/xatu/pkg/proto/libp2p" + "github.com/ethpandaops/xatu/pkg/proto/libp2p/gossipsub" + "github.com/ethpandaops/xatu/pkg/proto/xatu" +) + +func (m *Mimicry) handleGossipBlobSidecar( + ctx context.Context, + clientMeta *xatu.ClientMeta, + event *host.TraceEvent, + payload map[string]any, +) error { + slot, ok := payload["Slot"].(primitives.Slot) + if !ok { + return fmt.Errorf("invalid slot") + } + + blobIndex, ok := payload["index"].(uint64) + if !ok { + return fmt.Errorf("invalid blob index") + } + + proposerIndex, ok := payload["ValIdx"].(primitives.ValidatorIndex) + if !ok { + return fmt.Errorf("invalid proposer index") + } + + data := &gossipsub.BlobSidecar{ + Index: wrapperspb.UInt64(blobIndex), + Slot: wrapperspb.UInt64(uint64(slot)), + ProposerIndex: wrapperspb.UInt64(uint64(proposerIndex)), + } + + metadata, ok := proto.Clone(clientMeta).(*xatu.ClientMeta) + if !ok { + return fmt.Errorf("failed to clone client metadata") + } + + additionalData, err := m.createAdditionalGossipSubBlobSidecarData(ctx, payload, event.Timestamp, slot) + if err != nil { + return fmt.Errorf("failed to create additional data: %w", err) + } + + metadata.AdditionalData = &xatu.ClientMeta_Libp2PTraceGossipsubBlobSidecar{ + Libp2PTraceGossipsubBlobSidecar: additionalData, + } + + decoratedEvent := &xatu.DecoratedEvent{ + Event: &xatu.Event{ + Name: xatu.Event_LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR, + DateTime: timestamppb.New(event.Timestamp.Add(m.clockDrift)), + Id: uuid.New().String(), + }, + Meta: &xatu.Meta{ + Client: metadata, + }, + Data: &xatu.DecoratedEvent_Libp2PTraceGossipsubBlobSidecar{ + Libp2PTraceGossipsubBlobSidecar: data, + }, + } + + return m.handleNewDecoratedEvent(ctx, decoratedEvent) +} + +func (m *Mimicry) createAdditionalGossipSubBlobSidecarData( + ctx context.Context, + payload map[string]any, + timestamp time.Time, + slotNumber primitives.Slot, +) (*xatu.ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData, error) { + wallclockSlot, wallclockEpoch, err := m.ethereum.Metadata().Wallclock().Now() + if err != nil { + return nil, fmt.Errorf("failed to get wallclock time: %w", err) + } + + slot := m.ethereum.Metadata().Wallclock().Slots().FromNumber(uint64(slotNumber)) + epoch := m.ethereum.Metadata().Wallclock().Epochs().FromSlot(uint64(slotNumber)) + timestampAdjusted := timestamp.Add(m.clockDrift) + + peerID, ok := payload["PeerID"].(string) + if !ok { + return nil, fmt.Errorf("invalid peer ID") + } + + topic, ok := payload["Topic"].(string) + if !ok { + return nil, fmt.Errorf("invalid topic") + } + + msgID, ok := payload["MsgID"].(string) + if !ok { + return nil, fmt.Errorf("invalid message ID") + } + + msgSize, ok := payload["MsgSize"].(int) + if !ok { + return nil, fmt.Errorf("invalid message size") + } + + data := &xatu.ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData{ + WallclockSlot: &xatu.SlotV2{ + Number: wrapperspb.UInt64(wallclockSlot.Number()), + StartDateTime: timestamppb.New(wallclockSlot.TimeWindow().Start()), + }, + WallclockEpoch: &xatu.EpochV2{ + Number: wrapperspb.UInt64(wallclockEpoch.Number()), + StartDateTime: timestamppb.New(wallclockEpoch.TimeWindow().Start()), + }, + Epoch: &xatu.EpochV2{ + Number: wrapperspb.UInt64(epoch.Number()), + StartDateTime: timestamppb.New(epoch.TimeWindow().Start()), + }, + Slot: &xatu.SlotV2{ + Number: wrapperspb.UInt64(uint64(slotNumber)), + StartDateTime: timestamppb.New(slot.TimeWindow().Start()), + }, + Propagation: &xatu.PropagationV2{ + SlotStartDiff: &wrapperspb.UInt64Value{ + Value: uint64(timestampAdjusted.Sub(slot.TimeWindow().Start()).Milliseconds()), + }, + }, + Metadata: &libp2p.TraceEventMetadata{ + PeerId: wrapperspb.String(peerID), + }, + Topic: wrapperspb.String(topic), + MessageSize: wrapperspb.UInt32(uint32(msgSize)), + MessageId: wrapperspb.String(msgID), + } + + return data, nil +} diff --git a/pkg/proto/libp2p/gossipsub/eth.pb.go b/pkg/proto/libp2p/gossipsub/eth.pb.go index 50bd9479..dac9a171 100644 --- a/pkg/proto/libp2p/gossipsub/eth.pb.go +++ b/pkg/proto/libp2p/gossipsub/eth.pb.go @@ -84,6 +84,69 @@ func (x *BeaconBlock) GetProposerIndex() *wrapperspb.UInt64Value { return nil } +type BlobSidecar struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index *wrapperspb.UInt64Value `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` + Slot *wrapperspb.UInt64Value `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"` + ProposerIndex *wrapperspb.UInt64Value `protobuf:"bytes,3,opt,name=proposer_index,proto3" json:"proposer_index,omitempty"` +} + +func (x *BlobSidecar) Reset() { + *x = BlobSidecar{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_libp2p_gossipsub_eth_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlobSidecar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlobSidecar) ProtoMessage() {} + +func (x *BlobSidecar) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_libp2p_gossipsub_eth_proto_msgTypes[1] + 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 BlobSidecar.ProtoReflect.Descriptor instead. +func (*BlobSidecar) Descriptor() ([]byte, []int) { + return file_pkg_proto_libp2p_gossipsub_eth_proto_rawDescGZIP(), []int{1} +} + +func (x *BlobSidecar) GetIndex() *wrapperspb.UInt64Value { + if x != nil { + return x.Index + } + return nil +} + +func (x *BlobSidecar) GetSlot() *wrapperspb.UInt64Value { + if x != nil { + return x.Slot + } + return nil +} + +func (x *BlobSidecar) GetProposerIndex() *wrapperspb.UInt64Value { + if x != nil { + return x.ProposerIndex + } + return nil +} + var File_pkg_proto_libp2p_gossipsub_eth_proto protoreflect.FileDescriptor var file_pkg_proto_libp2p_gossipsub_eth_proto_rawDesc = []byte{ @@ -104,11 +167,23 @@ var file_pkg_proto_libp2p_gossipsub_eth_proto_rawDesc = []byte{ 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x38, 0x5a, - 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, - 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2f, 0x67, 0x6f, - 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb9, 0x01, + 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x32, 0x0a, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x30, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x12, 0x44, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, + 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, + 0x73, 0x75, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -123,21 +198,25 @@ func file_pkg_proto_libp2p_gossipsub_eth_proto_rawDescGZIP() []byte { return file_pkg_proto_libp2p_gossipsub_eth_proto_rawDescData } -var file_pkg_proto_libp2p_gossipsub_eth_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_pkg_proto_libp2p_gossipsub_eth_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_pkg_proto_libp2p_gossipsub_eth_proto_goTypes = []interface{}{ (*BeaconBlock)(nil), // 0: xatu.libp2p.gossipsub.eth.BeaconBlock - (*wrapperspb.StringValue)(nil), // 1: google.protobuf.StringValue - (*wrapperspb.UInt64Value)(nil), // 2: google.protobuf.UInt64Value + (*BlobSidecar)(nil), // 1: xatu.libp2p.gossipsub.eth.BlobSidecar + (*wrapperspb.StringValue)(nil), // 2: google.protobuf.StringValue + (*wrapperspb.UInt64Value)(nil), // 3: google.protobuf.UInt64Value } var file_pkg_proto_libp2p_gossipsub_eth_proto_depIdxs = []int32{ - 1, // 0: xatu.libp2p.gossipsub.eth.BeaconBlock.block:type_name -> google.protobuf.StringValue - 2, // 1: xatu.libp2p.gossipsub.eth.BeaconBlock.slot:type_name -> google.protobuf.UInt64Value - 2, // 2: xatu.libp2p.gossipsub.eth.BeaconBlock.proposer_index:type_name -> google.protobuf.UInt64Value - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 2, // 0: xatu.libp2p.gossipsub.eth.BeaconBlock.block:type_name -> google.protobuf.StringValue + 3, // 1: xatu.libp2p.gossipsub.eth.BeaconBlock.slot:type_name -> google.protobuf.UInt64Value + 3, // 2: xatu.libp2p.gossipsub.eth.BeaconBlock.proposer_index:type_name -> google.protobuf.UInt64Value + 3, // 3: xatu.libp2p.gossipsub.eth.BlobSidecar.index:type_name -> google.protobuf.UInt64Value + 3, // 4: xatu.libp2p.gossipsub.eth.BlobSidecar.slot:type_name -> google.protobuf.UInt64Value + 3, // 5: xatu.libp2p.gossipsub.eth.BlobSidecar.proposer_index:type_name -> google.protobuf.UInt64Value + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_pkg_proto_libp2p_gossipsub_eth_proto_init() } @@ -158,6 +237,18 @@ func file_pkg_proto_libp2p_gossipsub_eth_proto_init() { return nil } } + file_pkg_proto_libp2p_gossipsub_eth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlobSidecar); 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{ @@ -165,7 +256,7 @@ func file_pkg_proto_libp2p_gossipsub_eth_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_proto_libp2p_gossipsub_eth_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/proto/libp2p/gossipsub/eth.proto b/pkg/proto/libp2p/gossipsub/eth.proto index f4b7dfdf..eebc55fc 100644 --- a/pkg/proto/libp2p/gossipsub/eth.proto +++ b/pkg/proto/libp2p/gossipsub/eth.proto @@ -12,3 +12,8 @@ message BeaconBlock { google.protobuf.UInt64Value proposer_index = 3 [json_name = "proposer_index"]; } +message BlobSidecar { + google.protobuf.UInt64Value index = 1 [json_name = "index"]; + google.protobuf.UInt64Value slot = 2 [json_name = "slot"]; + google.protobuf.UInt64Value proposer_index = 3 [json_name = "proposer_index"]; +} \ No newline at end of file diff --git a/pkg/proto/xatu/event_ingester.pb.go b/pkg/proto/xatu/event_ingester.pb.go index facf8d8f..d062ffb1 100644 --- a/pkg/proto/xatu/event_ingester.pb.go +++ b/pkg/proto/xatu/event_ingester.pb.go @@ -81,6 +81,7 @@ const ( Event_LIBP2P_TRACE_HANDLE_STATUS Event_Name = 48 Event_LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK Event_Name = 49 Event_LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION Event_Name = 50 + Event_LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR Event_Name = 51 ) // Enum value maps for Event_Name. @@ -137,6 +138,7 @@ var ( 48: "LIBP2P_TRACE_HANDLE_STATUS", 49: "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK", 50: "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION", + 51: "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR", } Event_Name_value = map[string]int32{ "BEACON_API_ETH_V1_EVENTS_UNKNOWN": 0, @@ -190,6 +192,7 @@ var ( "LIBP2P_TRACE_HANDLE_STATUS": 48, "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK": 49, "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION": 50, + "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR": 51, } ) @@ -1075,6 +1078,7 @@ type ClientMeta struct { // *ClientMeta_Libp2PTraceHandleStatus // *ClientMeta_Libp2PTraceGossipsubBeaconBlock // *ClientMeta_Libp2PTraceGossipsubBeaconAttestation + // *ClientMeta_Libp2PTraceGossipsubBlobSidecar AdditionalData isClientMeta_AdditionalData `protobuf_oneof:"AdditionalData"` } @@ -1509,6 +1513,13 @@ func (x *ClientMeta) GetLibp2PTraceGossipsubBeaconAttestation() *ClientMeta_Addi return nil } +func (x *ClientMeta) GetLibp2PTraceGossipsubBlobSidecar() *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData { + if x, ok := x.GetAdditionalData().(*ClientMeta_Libp2PTraceGossipsubBlobSidecar); ok { + return x.Libp2PTraceGossipsubBlobSidecar + } + return nil +} + type isClientMeta_AdditionalData interface { isClientMeta_AdditionalData() } @@ -1782,6 +1793,11 @@ type ClientMeta_Libp2PTraceGossipsubBeaconAttestation struct { Libp2PTraceGossipsubBeaconAttestation *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData `protobuf:"bytes,58,opt,name=libp2p_trace_gossipsub_beacon_attestation,json=LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION,proto3,oneof"` } +type ClientMeta_Libp2PTraceGossipsubBlobSidecar struct { + // AdditionalLibP2PTraceGossipSubBlobSidecarData contains additional data about the gossip sub blob sidecar event. + Libp2PTraceGossipsubBlobSidecar *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData `protobuf:"bytes,59,opt,name=libp2p_trace_gossipsub_blob_sidecar,json=LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR,proto3,oneof"` +} + func (*ClientMeta_EthV1EventsAttestation) isClientMeta_AdditionalData() {} func (*ClientMeta_EthV1EventsHead) isClientMeta_AdditionalData() {} @@ -1878,6 +1894,8 @@ func (*ClientMeta_Libp2PTraceGossipsubBeaconBlock) isClientMeta_AdditionalData() func (*ClientMeta_Libp2PTraceGossipsubBeaconAttestation) isClientMeta_AdditionalData() {} +func (*ClientMeta_Libp2PTraceGossipsubBlobSidecar) isClientMeta_AdditionalData() {} + type ServerMeta struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2182,6 +2200,7 @@ type DecoratedEvent struct { // *DecoratedEvent_Libp2PTraceHandleStatus // *DecoratedEvent_Libp2PTraceGossipsubBeaconBlock // *DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation + // *DecoratedEvent_Libp2PTraceGossipsubBlobSidecar Data isDecoratedEvent_Data `protobuf_oneof:"data"` } @@ -2585,6 +2604,13 @@ func (x *DecoratedEvent) GetLibp2PTraceGossipsubBeaconAttestation() *v1.Attestat return nil } +func (x *DecoratedEvent) GetLibp2PTraceGossipsubBlobSidecar() *gossipsub.BlobSidecar { + if x, ok := x.GetData().(*DecoratedEvent_Libp2PTraceGossipsubBlobSidecar); ok { + return x.Libp2PTraceGossipsubBlobSidecar + } + return nil +} + type isDecoratedEvent_Data interface { isDecoratedEvent_Data() } @@ -2792,6 +2818,10 @@ type DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation struct { Libp2PTraceGossipsubBeaconAttestation *v1.Attestation `protobuf:"bytes,50,opt,name=libp2p_trace_gossipsub_beacon_attestation,json=LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION,proto3,oneof"` } +type DecoratedEvent_Libp2PTraceGossipsubBlobSidecar struct { + Libp2PTraceGossipsubBlobSidecar *gossipsub.BlobSidecar `protobuf:"bytes,51,opt,name=libp2p_trace_gossipsub_blob_sidecar,json=LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR,proto3,oneof"` +} + func (*DecoratedEvent_EthV1EventsAttestation) isDecoratedEvent_Data() {} func (*DecoratedEvent_EthV1EventsBlock) isDecoratedEvent_Data() {} @@ -2888,6 +2918,8 @@ func (*DecoratedEvent_Libp2PTraceGossipsubBeaconBlock) isDecoratedEvent_Data() { func (*DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation) isDecoratedEvent_Data() {} +func (*DecoratedEvent_Libp2PTraceGossipsubBlobSidecar) isDecoratedEvent_Data() {} + type ClientMeta_Ethereum struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6964,6 +6996,126 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) GetMess return nil } +type ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Epoch contains the epoch information for the blob sidecar. + Epoch *EpochV2 `protobuf:"bytes,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + // Slot contains the slot information for the blob sidecar. + Slot *SlotV2 `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"` + // WallclockEpoch contains the epoch information for the blob sidecar in the wall clock time. + WallclockEpoch *EpochV2 `protobuf:"bytes,3,opt,name=wallclock_epoch,proto3" json:"wallclock_epoch,omitempty"` + // WallclockSlot contains the slot information for the blob sidecar in the wall clock time. + WallclockSlot *SlotV2 `protobuf:"bytes,4,opt,name=wallclock_slot,proto3" json:"wallclock_slot,omitempty"` + // Propagation contains information about the propagation of the blob sidecar. + Propagation *PropagationV2 `protobuf:"bytes,5,opt,name=propagation,proto3" json:"propagation,omitempty"` + // Metadata contains additional trace event metadata. + Metadata *libp2p.TraceEventMetadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Topic is the gossip sub topic the blob sidecar was received on. + Topic *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=topic,proto3" json:"topic,omitempty"` + // MessageSize is the size of the blob sidecar message in bytes. + MessageSize *wrapperspb.UInt32Value `protobuf:"bytes,8,opt,name=message_size,proto3" json:"message_size,omitempty"` + // MessageID is a unique identifier for the blob sidecar message. + MessageId *wrapperspb.StringValue `protobuf:"bytes,9,opt,name=message_id,proto3" json:"message_id,omitempty"` +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) Reset() { + *x = ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) ProtoMessage() {} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] + 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 ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData.ProtoReflect.Descriptor instead. +func (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) Descriptor() ([]byte, []int) { + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 61} +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetEpoch() *EpochV2 { + if x != nil { + return x.Epoch + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetSlot() *SlotV2 { + if x != nil { + return x.Slot + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetWallclockEpoch() *EpochV2 { + if x != nil { + return x.WallclockEpoch + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetWallclockSlot() *SlotV2 { + if x != nil { + return x.WallclockSlot + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetPropagation() *PropagationV2 { + if x != nil { + return x.Propagation + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetMetadata() *libp2p.TraceEventMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetTopic() *wrapperspb.StringValue { + if x != nil { + return x.Topic + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetMessageSize() *wrapperspb.UInt32Value { + if x != nil { + return x.MessageSize + } + return nil +} + +func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetMessageId() *wrapperspb.StringValue { + if x != nil { + return x.MessageId + } + return nil +} + type ClientMeta_Ethereum_Network struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6978,7 +7130,7 @@ type ClientMeta_Ethereum_Network struct { func (x *ClientMeta_Ethereum_Network) Reset() { *x = ClientMeta_Ethereum_Network{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6991,7 +7143,7 @@ func (x *ClientMeta_Ethereum_Network) String() string { func (*ClientMeta_Ethereum_Network) ProtoMessage() {} func (x *ClientMeta_Ethereum_Network) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7033,7 +7185,7 @@ type ClientMeta_Ethereum_Execution struct { func (x *ClientMeta_Ethereum_Execution) Reset() { *x = ClientMeta_Ethereum_Execution{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7046,7 +7198,7 @@ func (x *ClientMeta_Ethereum_Execution) String() string { func (*ClientMeta_Ethereum_Execution) ProtoMessage() {} func (x *ClientMeta_Ethereum_Execution) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7083,7 +7235,7 @@ type ClientMeta_Ethereum_Consensus struct { func (x *ClientMeta_Ethereum_Consensus) Reset() { *x = ClientMeta_Ethereum_Consensus{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7096,7 +7248,7 @@ func (x *ClientMeta_Ethereum_Consensus) String() string { func (*ClientMeta_Ethereum_Consensus) ProtoMessage() {} func (x *ClientMeta_Ethereum_Consensus) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7138,7 +7290,7 @@ type ServerMeta_Event struct { func (x *ServerMeta_Event) Reset() { *x = ServerMeta_Event{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7151,7 +7303,7 @@ func (x *ServerMeta_Event) String() string { func (*ServerMeta_Event) ProtoMessage() {} func (x *ServerMeta_Event) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7206,7 +7358,7 @@ type ServerMeta_Geo struct { func (x *ServerMeta_Geo) Reset() { *x = ServerMeta_Geo{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7219,7 +7371,7 @@ func (x *ServerMeta_Geo) String() string { func (*ServerMeta_Geo) ProtoMessage() {} func (x *ServerMeta_Geo) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7306,7 +7458,7 @@ type ServerMeta_Client struct { func (x *ServerMeta_Client) Reset() { *x = ServerMeta_Client{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7319,7 +7471,7 @@ func (x *ServerMeta_Client) String() string { func (*ServerMeta_Client) ProtoMessage() {} func (x *ServerMeta_Client) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7361,7 +7513,7 @@ type ServerMeta_Peer struct { func (x *ServerMeta_Peer) Reset() { *x = ServerMeta_Peer{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7374,7 +7526,7 @@ func (x *ServerMeta_Peer) String() string { func (*ServerMeta_Peer) ProtoMessage() {} func (x *ServerMeta_Peer) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7408,7 +7560,7 @@ type ServerMeta_AdditionalBeaconP2PAttestationData struct { func (x *ServerMeta_AdditionalBeaconP2PAttestationData) Reset() { *x = ServerMeta_AdditionalBeaconP2PAttestationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7421,7 +7573,7 @@ func (x *ServerMeta_AdditionalBeaconP2PAttestationData) String() string { func (*ServerMeta_AdditionalBeaconP2PAttestationData) ProtoMessage() {} func (x *ServerMeta_AdditionalBeaconP2PAttestationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7455,7 +7607,7 @@ type ServerMeta_AdditionalLibp2PTraceConnectedData struct { func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) Reset() { *x = ServerMeta_AdditionalLibp2PTraceConnectedData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7468,7 +7620,7 @@ func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) String() string { func (*ServerMeta_AdditionalLibp2PTraceConnectedData) ProtoMessage() {} func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7502,7 +7654,7 @@ type ServerMeta_AdditionalLibp2PTraceDisconnectedData struct { func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) Reset() { *x = ServerMeta_AdditionalLibp2PTraceDisconnectedData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7515,7 +7667,7 @@ func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) String() string { func (*ServerMeta_AdditionalLibp2PTraceDisconnectedData) ProtoMessage() {} func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7671,7 +7823,7 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0xa2, 0x95, 0x01, 0x0a, 0x0a, 0x43, 0x6c, 0x69, + 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0xc7, 0x9a, 0x01, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, @@ -8093,126 +8245,176 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x1a, - 0x80, 0x03, 0x0a, 0x08, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x12, 0x3b, 0x0a, 0x07, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, + 0x92, 0x01, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, + 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, + 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, - 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x1a, - 0x2d, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x33, - 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x07, 0x66, - 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6b, - 0x5f, 0x69, 0x64, 0x1a, 0x4d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, - 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a, - 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4d, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x49, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x1a, 0x4d, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x6c, + 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, + 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, + 0x45, 0x43, 0x41, 0x52, 0x1a, 0x80, 0x03, 0x0a, 0x08, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x12, 0x3b, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x41, + 0x0a, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x65, + 0x6e, 0x73, 0x75, 0x73, 0x1a, 0x2d, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x69, 0x64, 0x1a, 0x33, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x26, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, + 0x07, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x1a, 0x4d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, + 0x65, 0x6e, 0x73, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x1a, 0x88, 0x03, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, - 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x33, 0x0a, 0x0b, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4a, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x96, 0x03, 0x0a, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4d, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x49, 0x0a, 0x24, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4d, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, - 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, - 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x97, 0x01, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, - 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0x9f, 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x56, 0x32, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, - 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, - 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0x98, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x88, 0x03, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x4d, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, + 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4d, + 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1e, 0x0a, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x21, 0x0a, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x13, 0x61, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x1a, 0x96, 0x03, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, + 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, + 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, + 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x97, 0x01, 0x0a, 0x1d, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, + 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x9f, 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, + 0x61, 0x64, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, + 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x98, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0xa0, 0x01, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x4b, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, + 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x1a, 0x4f, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, + 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x1a, 0x51, 0x0a, 0x2c, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x55, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x9d, 0x01, 0x0a, + 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, @@ -8220,332 +8422,436 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa0, 0x01, 0x0a, - 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, - 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0x4b, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, - 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4f, 0x0a, 0x28, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, - 0x69, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x51, 0x0a, - 0x2c, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x1a, 0x55, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x56, 0x32, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x9d, 0x01, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa5, 0x01, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa5, 0x01, 0x0a, + 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb3, 0x01, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbb, 0x01, 0x0a, 0x3b, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x9f, 0x01, 0x0a, 0x2d, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, + 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x6e, 0x0a, 0x0c, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa3, 0x01, 0x0a, 0x2f, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x70, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0xad, 0x02, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x31, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x0d, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x0c, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x0c, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x48, 0x0a, 0x1f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, + 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x1a, 0xef, 0x02, 0x0a, 0x14, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x12, 0x33, 0x0a, 0x0d, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, + 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x30, + 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, - 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0xb3, 0x01, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, - 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbb, 0x01, 0x0a, 0x3b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x9f, 0x01, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x6e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa3, 0x01, 0x0a, 0x2f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x70, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x4c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, - 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xad, 0x02, 0x0a, 0x12, - 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x12, 0x31, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x48, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, - 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, - 0x30, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, - 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0xef, 0x02, 0x0a, 0x14, - 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x56, 0x32, 0x12, 0x33, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x30, 0x0a, 0x0c, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0c, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x66, 0x0a, 0x1f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, - 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x56, 0x32, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, + 0x12, 0x66, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, - 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x65, 0x0a, - 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, - 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x69, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, - 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x08, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, - 0xa1, 0x01, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x06, 0x62, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, - 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, - 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x05, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x1a, 0xa7, 0x01, 0x0a, 0x29, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, - 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x12, 0x3b, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x1a, 0x6b, 0x0a, - 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, - 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, - 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x1a, 0xf2, 0x01, 0x0a, 0x20, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, - 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, - 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, - 0x9a, 0x05, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, + 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x1a, 0x65, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, + 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, + 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x69, 0x0a, 0x24, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x41, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x1a, 0xa1, 0x01, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, + 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x3b, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, + 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x1a, 0xa7, 0x01, 0x0a, 0x29, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, + 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x06, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x05, 0x61, 0x66, 0x74, + 0x65, 0x72, 0x1a, 0x6b, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x1a, + 0xf2, 0x01, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, - 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, - 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x32, - 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, + 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, + 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x2e, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x67, 0x61, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, - 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x70, 0x5f, - 0x63, 0x61, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x74, - 0x69, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, - 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x73, - 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x38, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, - 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, - 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x66, - 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x6c, - 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x20, - 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x0f, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x6c, - 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x12, 0x3a, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x89, 0x02, 0x0a, - 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x12, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x18, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x1a, 0x8d, 0x05, 0x0a, 0x20, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, - 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, - 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x4c, - 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x58, 0x0a, 0x18, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, + 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, + 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x9a, 0x05, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, + 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x74, 0x6f, 0x12, 0x32, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x73, 0x5f, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x73, + 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x67, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x67, + 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x38, 0x0a, + 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x62, + 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, + 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, + 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, + 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, + 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, + 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x1a, 0x89, 0x02, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, + 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x1a, 0x8d, 0x05, + 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, + 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, + 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, + 0x6f, 0x6f, 0x74, 0x12, 0x4c, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x58, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x65, 0x52, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x23, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x16, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x18, - 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x65, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, - 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x65, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x5d, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, - 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x64, 0x12, 0x3a, 0x0a, 0x18, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, + 0x68, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x18, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, + 0x68, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x5d, 0x0a, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5d, 0x0a, 0x2e, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, + 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5a, 0x0a, 0x2b, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, + 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5d, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x54, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5a, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x1a, 0x54, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x61, 0x0a, 0x32, 0x41, 0x64, 0x64, 0x69, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x61, 0x0a, + 0x32, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x4c, 0x53, 0x54, 0x6f, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x1a, 0xd5, 0x02, 0x0a, 0x32, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4a, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, + 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2e, 0x0a, 0x12, + 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, + 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x18, + 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, + 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x57, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, - 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0xd5, 0x02, 0x0a, 0x32, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x1a, 0x74, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, + 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x1a, 0x8b, 0x02, 0x0a, 0x17, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x12, 0x66, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, + 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0xdc, 0x02, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x44, + 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x1a, 0xa4, 0x01, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, + 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, + 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x99, 0x02, 0x0a, 0x24, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, + 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x09, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, 0x61, + 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x12, + 0x46, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0xa9, 0x04, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, + 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, + 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, + 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x04, + 0x70, 0x65, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, + 0x65, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x1a, 0x84, 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, + 0x75, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x97, 0x03, 0x0a, 0x33, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, @@ -8553,874 +8859,773 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, - 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, - 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x1a, 0x57, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x74, 0x0a, 0x2b, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, - 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, + 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x1a, 0x8b, 0x02, 0x0a, 0x17, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x66, - 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, - 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, - 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x1a, 0xdc, 0x02, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, - 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x44, 0x0a, 0x08, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, - 0xa4, 0x01, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, - 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, - 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x99, 0x02, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, - 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x12, 0x46, 0x0a, 0x0f, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x1a, 0xa9, 0x04, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, - 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, - 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x12, 0x34, - 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x84, - 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x97, 0x03, 0x0a, 0x33, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, - 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4a, 0x0a, 0x11, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, - 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x4f, 0x0a, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, - 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, - 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, - 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x1a, 0x62, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, - 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x63, - 0x76, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, - 0x6e, 0x64, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5c, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x4a, - 0x6f, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x1a, 0x61, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, - 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x66, 0x0a, - 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, - 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x6f, 0x74, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x64, 0x64, + 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x62, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x63, 0x76, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x8d, 0x04, 0x0a, 0x2d, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5c, 0x0a, 0x1d, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x61, 0x0a, 0x22, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, + 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, + 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x1a, 0x8d, 0x04, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, + 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, + 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, + 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, + 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, + 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x1a, 0x60, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, + 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, + 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, - 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, - 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, - 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, - 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3c, 0x0a, - 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x60, 0x0a, 0x39, 0x41, + 0x63, 0x68, 0x1a, 0x60, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, + 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x1a, 0xa9, 0x06, 0x0a, 0x33, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, + 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x62, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x60, 0x0a, - 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, - 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, - 0xa9, 0x06, 0x0a, 0x33, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, - 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x62, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, - 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, - 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, - 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x0f, 0x77, - 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, - 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x62, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, + 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, + 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, + 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, + 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, + 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, + 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3c, 0x0a, - 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0xca, 0x09, - 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x6d, 0x0a, 0x16, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, - 0x50, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x48, 0x00, 0x52, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, 0x50, 0x5f, 0x41, - 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6d, 0x0a, 0x16, 0x4c, 0x49, - 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, - 0x43, 0x54, 0x45, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x70, 0x32, 0x50, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, - 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x76, 0x0a, 0x19, 0x4c, 0x49, 0x42, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x1a, 0x8d, 0x04, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, + 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, + 0x53, 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, + 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, + 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, + 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x42, 0x10, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x61, + 0x74, 0x61, 0x22, 0xca, 0x09, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x2f, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x12, 0x6d, 0x0a, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, 0x50, 0x5f, 0x41, + 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x50, 0x32, 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, + 0x6d, 0x0a, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, + 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x70, + 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, + 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x76, + 0x0a, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, + 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, + 0x62, 0x70, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, - 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x70, 0x32, 0x50, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, - 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, - 0x44, 0x1a, 0x53, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x12, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x12, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0xb7, 0x02, 0x0a, 0x03, 0x47, 0x65, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, - 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x0b, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x25, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, - 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x61, 0x74, 0x69, 0x74, 0x75, - 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, - 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, - 0x12, 0x38, 0x0a, 0x16, 0x41, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x18, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x5f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x1c, 0x41, 0x75, - 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4f, 0x72, - 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x1e, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x5f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x5f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x40, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x50, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x26, 0x0a, 0x03, 0x67, 0x65, - 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x6f, 0x52, 0x03, 0x67, - 0x65, 0x6f, 0x1a, 0x2e, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x03, 0x67, 0x65, - 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x47, 0x65, 0x6f, 0x52, 0x03, 0x67, - 0x65, 0x6f, 0x1a, 0x4f, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, - 0x65, 0x65, 0x72, 0x1a, 0x4f, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4c, 0x69, 0x62, 0x70, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x04, 0x70, 0x65, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, - 0x70, 0x65, 0x65, 0x72, 0x1a, 0x52, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x70, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, + 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x1a, 0x53, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x4a, 0x0a, 0x12, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0xb7, 0x02, 0x0a, 0x03, + 0x47, 0x65, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x21, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, + 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, + 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, + 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x6e, 0x67, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, + 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x16, 0x41, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, + 0x6f, 0x75, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, + 0x73, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x44, 0x0a, 0x1c, 0x41, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1e, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, + 0x73, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x40, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x50, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, + 0x26, 0x0a, 0x03, 0x67, 0x65, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x47, + 0x65, 0x6f, 0x52, 0x03, 0x67, 0x65, 0x6f, 0x1a, 0x2e, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x26, 0x0a, 0x03, 0x67, 0x65, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x47, + 0x65, 0x6f, 0x52, 0x03, 0x67, 0x65, 0x6f, 0x1a, 0x4f, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x50, 0x65, - 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x5a, 0x0a, 0x04, 0x4d, 0x65, - 0x74, 0x61, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x06, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x06, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xa2, 0x11, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x22, 0xa8, 0x10, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, - 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x10, 0x02, 0x12, 0x31, 0x0a, - 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, - 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x10, 0x03, - 0x12, 0x21, 0x0a, 0x1d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, - 0x44, 0x10, 0x04, 0x12, 0x2b, 0x0a, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, - 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x10, 0x05, - 0x12, 0x28, 0x0a, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, - 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x33, 0x0a, 0x2f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x10, 0x07, 0x12, - 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x09, 0x12, 0x27, 0x0a, 0x23, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, - 0x49, 0x43, 0x45, 0x10, 0x0a, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, - 0x52, 0x47, 0x10, 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, 0x10, 0x0c, 0x12, 0x30, 0x0a, 0x2c, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x45, - 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x0d, 0x12, 0x25, - 0x0a, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x56, 0x32, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, - 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, - 0x10, 0x0f, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x1a, 0x4f, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x70, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, + 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x50, + 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x1a, 0x52, 0x0a, 0x25, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x70, 0x32, 0x50, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x29, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x42, 0x10, 0x0a, + 0x0e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x5a, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, + 0x65, 0x74, 0x61, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xcb, 0x11, 0x0a, 0x05, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd1, 0x10, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, + 0x0a, 0x20, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, + 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, + 0x10, 0x02, 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, - 0x49, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x10, 0x10, 0x12, 0x24, 0x0a, 0x20, 0x42, 0x45, 0x41, 0x43, + 0x49, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x10, 0x04, 0x12, 0x2b, 0x0a, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x56, 0x32, 0x10, 0x11, 0x12, 0x2e, - 0x0a, 0x2a, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, - 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x5f, 0x56, 0x32, 0x10, 0x12, 0x12, 0x2b, - 0x0a, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x10, 0x13, 0x12, 0x36, 0x0a, 0x32, 0x42, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, + 0x58, 0x49, 0x54, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x06, 0x12, + 0x33, 0x0a, 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, + 0x4f, 0x46, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x22, 0x0a, + 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, + 0x09, 0x12, 0x27, 0x0a, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, + 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x10, 0x0a, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, + 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, + 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x10, 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, 0x10, + 0x0c, 0x12, 0x30, 0x0a, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, + 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x10, 0x0d, 0x12, 0x25, 0x0a, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, + 0x52, 0x47, 0x5f, 0x56, 0x32, 0x10, 0x0f, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, + 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, + 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x10, 0x10, 0x12, 0x24, 0x0a, + 0x20, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x56, + 0x32, 0x10, 0x11, 0x12, 0x2e, 0x0a, 0x2a, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, + 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x5f, 0x56, + 0x32, 0x10, 0x12, 0x12, 0x2b, 0x0a, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, + 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x10, 0x13, + 0x12, 0x36, 0x0a, 0x32, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, + 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, + 0x4f, 0x4f, 0x46, 0x5f, 0x56, 0x32, 0x10, 0x14, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x45, 0x4d, 0x50, + 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x56, 0x32, 0x10, 0x15, 0x12, 0x25, 0x0a, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x10, 0x16, 0x12, 0x2a, 0x0a, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x56, - 0x32, 0x10, 0x14, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, - 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x10, 0x15, 0x12, - 0x25, 0x0a, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, + 0x43, 0x45, 0x5f, 0x56, 0x32, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, + 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, + 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x10, 0x18, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, + 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x19, 0x12, + 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x56, 0x32, 0x10, 0x16, 0x12, 0x2a, 0x0a, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, - 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x56, 0x32, - 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, - 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, - 0x56, 0x32, 0x10, 0x18, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, + 0x49, 0x4e, 0x47, 0x10, 0x1a, 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, + 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, + 0x49, 0x54, 0x10, 0x1c, 0x12, 0x3a, 0x0a, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, - 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x19, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, - 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x1a, - 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, + 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x1d, + 0x12, 0x38, 0x0a, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, - 0x54, 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x10, 0x1c, 0x12, - 0x3a, 0x0a, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x1d, 0x12, 0x38, 0x0a, 0x34, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, - 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, - 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, - 0x49, 0x4f, 0x4e, 0x10, 0x1e, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x1e, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, + 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x10, 0x1f, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, + 0x41, 0x52, 0x10, 0x20, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, + 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x21, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, + 0x41, 0x52, 0x10, 0x22, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, + 0x32, 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x23, + 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, + 0x55, 0x54, 0x59, 0x10, 0x24, 0x12, 0x39, 0x0a, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, - 0x41, 0x4c, 0x10, 0x1f, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, - 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x10, 0x20, 0x12, - 0x23, 0x0a, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x10, 0x21, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x10, 0x22, 0x12, - 0x1a, 0x0a, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, 0x50, 0x5f, 0x41, 0x54, - 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x23, 0x12, 0x23, 0x0a, 0x1f, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x10, 0x24, - 0x12, 0x39, 0x0a, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, - 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x1a, 0x0a, 0x16, 0x4c, - 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x26, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, - 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, - 0x43, 0x54, 0x45, 0x44, 0x10, 0x27, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, - 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, - 0x28, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, - 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x10, 0x29, 0x12, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, + 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, + 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x26, 0x12, 0x1d, 0x0a, 0x19, + 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x27, 0x12, 0x19, 0x0a, 0x15, 0x4c, + 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, + 0x50, 0x45, 0x45, 0x52, 0x10, 0x28, 0x12, 0x1c, 0x0a, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, + 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, + 0x45, 0x52, 0x10, 0x29, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, + 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x10, 0x2a, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, - 0x52, 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x10, 0x2a, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, - 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, - 0x52, 0x50, 0x43, 0x10, 0x2b, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x5f, 0x52, 0x50, 0x43, 0x10, 0x2c, - 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, - 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x10, 0x2d, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x49, 0x42, 0x50, 0x32, - 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x2e, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, - 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, - 0x41, 0x10, 0x2f, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, - 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x10, 0x30, 0x12, 0x27, 0x0a, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, - 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x31, 0x12, 0x2d, 0x0a, 0x29, - 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, - 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, - 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x32, 0x22, 0xce, 0x28, 0x0a, 0x0e, - 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, - 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, - 0x61, 0x12, 0x67, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, - 0x18, 0x01, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, - 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, 0x13, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x6b, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, - 0x6f, 0x72, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x24, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, - 0x4f, 0x52, 0x47, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x2d, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, - 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x12, 0x57, 0x0a, 0x12, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, - 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, - 0x5f, 0x48, 0x45, 0x41, 0x44, 0x12, 0x74, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, - 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, - 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x42, 0x02, 0x18, 0x01, - 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, - 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x8b, 0x01, 0x0a, 0x24, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, - 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x12, 0x36, 0x0a, 0x13, 0x6d, 0x65, 0x6d, - 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x13, 0x4d, 0x45, - 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x12, 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, - 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x5e, 0x0a, - 0x12, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, - 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, - 0x63, 0x65, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, - 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x12, 0x6d, 0x0a, - 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, - 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, - 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, - 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, - 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x5d, 0x0a, 0x17, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x48, 0x00, 0x52, 0x22, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, 0x12, 0x79, 0x0a, 0x21, 0x65, - 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x12, 0x6b, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x56, 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, - 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x56, 0x32, 0x12, 0x6f, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, - 0x5f, 0x76, 0x32, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, + 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x50, 0x43, 0x10, 0x2b, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, + 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x5f, + 0x52, 0x50, 0x43, 0x10, 0x2c, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x10, 0x2d, 0x12, 0x18, 0x0a, 0x14, + 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x2e, 0x12, 0x20, 0x0a, 0x1c, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, + 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x45, + 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x2f, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x49, 0x42, 0x50, + 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x30, 0x12, 0x27, 0x0a, 0x23, 0x4c, 0x49, 0x42, 0x50, + 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, + 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, + 0x31, 0x12, 0x2d, 0x0a, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, + 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x32, + 0x12, 0x27, 0x0a, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, + 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x10, 0x33, 0x22, 0xca, 0x29, 0x0a, 0x0e, 0x44, 0x65, + 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x05, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x1e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, + 0x67, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, + 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, + 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x6b, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, + 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, - 0x47, 0x5f, 0x56, 0x32, 0x12, 0x8a, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, - 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, - 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x56, - 0x32, 0x12, 0x5b, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x56, 0x32, 0x48, 0x00, 0x52, 0x20, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x56, 0x32, 0x12, 0x78, - 0x0a, 0x1f, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, - 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x76, - 0x32, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6e, - 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2a, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, - 0x5f, 0x45, 0x58, 0x49, 0x54, 0x5f, 0x56, 0x32, 0x12, 0x8f, 0x01, 0x0a, 0x27, 0x65, 0x74, 0x68, - 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, - 0x66, 0x5f, 0x76, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x56, 0x32, 0x48, 0x00, 0x52, 0x32, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x47, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, + 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x12, 0x57, 0x0a, 0x12, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x1d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, + 0x45, 0x41, 0x44, 0x12, 0x74, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, + 0x78, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, + 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, + 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, + 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x8b, 0x01, 0x0a, 0x24, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x6f, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, - 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x56, 0x32, 0x12, 0x38, 0x0a, 0x16, 0x6d, 0x65, - 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x4d, 0x45, - 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, - 0x00, 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x56, 0x32, 0x12, 0x62, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, - 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x48, 0x00, - 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, - 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x56, 0x32, 0x12, 0x71, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, - 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, - 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x12, 0x36, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x13, 0x4d, 0x45, 0x4d, 0x50, + 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, + 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x5e, 0x0a, 0x12, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, + 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x12, 0x6d, 0x0a, 0x18, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, - 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, + 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, + 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, + 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x5d, 0x0a, 0x17, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x74, 0x65, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x65, 0x48, 0x00, 0x52, 0x22, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, 0x12, 0x79, 0x0a, 0x21, 0x65, 0x74, 0x68, + 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, + 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x12, 0x6b, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, + 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, 0x21, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, + 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, + 0x32, 0x12, 0x6f, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, + 0x32, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, + 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, + 0x56, 0x32, 0x12, 0x8a, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, - 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x12, 0x82, 0x01, 0x0a, 0x25, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, + 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x12, + 0x5b, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x56, 0x32, 0x48, 0x00, 0x52, 0x20, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x56, 0x32, 0x12, 0x78, 0x0a, 0x1f, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, + 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x76, 0x32, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, + 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2a, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, + 0x58, 0x49, 0x54, 0x5f, 0x56, 0x32, 0x12, 0x8f, 0x01, 0x0a, 0x27, 0x65, 0x74, 0x68, 0x5f, 0x76, + 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, + 0x76, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x56, 0x32, 0x48, 0x00, 0x52, 0x32, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, + 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x56, 0x32, 0x12, 0x38, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x70, + 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x76, 0x32, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x4d, 0x45, 0x4d, 0x50, + 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x56, 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x18, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, + 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x56, 0x32, 0x12, 0x62, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, + 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, - 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, - 0x12, 0x82, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, - 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, - 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, - 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x7f, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, - 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, - 0x78, 0x69, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, - 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x65, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, + 0x49, 0x43, 0x45, 0x5f, 0x56, 0x32, 0x12, 0x71, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, + 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, + 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, + 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, + 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x12, 0x82, 0x01, 0x0a, 0x25, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, + 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, + 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x82, + 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x32, 0x48, + 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, + 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, + 0x49, 0x4e, 0x47, 0x12, 0x7f, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, + 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, + 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0x98, 0x01, - 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x32, 0x48, 0x00, - 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, 0x83, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, - 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6e, - 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x56, - 0x32, 0x48, 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, + 0x45, 0x58, 0x49, 0x54, 0x12, 0x65, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x56, + 0x32, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x6a, - 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, - 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x22, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, - 0x72, 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, - 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x70, 0x0a, 0x1f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, - 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6b, 0x0a, 0x20, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, - 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x54, 0x0a, 0x16, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x50, 0x32, 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, - 0x5a, 0x0a, 0x14, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, - 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0x8f, 0x01, 0x0a, 0x2a, + 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x36, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, + 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, + 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, 0x83, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, + 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, - 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x4c, 0x0a, - 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, - 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, - 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, - 0x43, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x55, 0x0a, 0x18, 0x6c, - 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, - 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, - 0x45, 0x52, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x2a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, - 0x52, 0x65, 0x63, 0x76, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, - 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, + 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6e, 0x0a, 0x1e, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x21, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x56, 0x32, 0x48, + 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, + 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x6a, 0x0a, 0x1a, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, + 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, + 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x42, + 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x70, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, + 0x69, 0x6e, 0x74, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, + 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, + 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6b, 0x0a, 0x20, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x24, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, + 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, + 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x54, 0x0a, 0x16, 0x62, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, + 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, + 0x14, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, + 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0x8f, 0x01, 0x0a, 0x2a, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6c, 0x61, + 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, + 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x4c, 0x0a, 0x15, 0x6c, + 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x5f, + 0x70, 0x65, 0x65, 0x72, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x55, 0x0a, 0x18, 0x6c, 0x69, 0x62, + 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, + 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x53, 0x65, - 0x6e, 0x64, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x41, - 0x0a, 0x11, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x6a, - 0x6f, 0x69, 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x11, - 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, - 0x4e, 0x12, 0x50, 0x0a, 0x16, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, - 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, - 0x54, 0x45, 0x44, 0x12, 0x59, 0x0a, 0x19, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, - 0x61, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, - 0x62, 0x70, 0x32, 0x70, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x48, 0x00, 0x52, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, - 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x61, - 0x0a, 0x1c, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x2f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x32, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x1c, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, - 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, - 0x41, 0x12, 0x5b, 0x0a, 0x1a, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x48, 0x00, 0x52, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, - 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x7a, - 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, - 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, - 0x73, 0x75, 0x62, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, - 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x78, 0x0a, 0x29, 0x6c, 0x69, - 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, - 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, + 0x5f, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x52, 0x65, + 0x63, 0x76, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x4c, + 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, + 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, + 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x41, 0x0a, 0x11, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x6a, 0x6f, 0x69, + 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, + 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x4c, 0x49, + 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x12, + 0x50, 0x0a, 0x16, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, + 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, + 0x44, 0x12, 0x59, 0x0a, 0x19, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x2e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x61, 0x0a, 0x1c, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x2f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, + 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, + 0x00, 0x52, 0x1c, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, + 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x12, + 0x5b, 0x0a, 0x1a, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x30, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, + 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, + 0x52, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, + 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x7a, 0x0a, 0x23, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, + 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, + 0x62, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, + 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x78, 0x0a, 0x29, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, + 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x12, 0x7a, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x6c, 0x6f, + 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x67, 0x6f, + 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, - 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x58, 0x0a, 0x0d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, - 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, - 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x42, 0x06, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x58, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, + 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, + 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9436,7 +9641,7 @@ func file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP() []byte { } var file_pkg_proto_xatu_event_ingester_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pkg_proto_xatu_event_ingester_proto_msgTypes = make([]protoimpl.MessageInfo, 90) +var file_pkg_proto_xatu_event_ingester_proto_msgTypes = make([]protoimpl.MessageInfo, 91) var file_pkg_proto_xatu_event_ingester_proto_goTypes = []interface{}{ (Event_Name)(0), // 0: xatu.Event.Name (*CreateEventsRequest)(nil), // 1: xatu.CreateEventsRequest @@ -9519,83 +9724,85 @@ var file_pkg_proto_xatu_event_ingester_proto_goTypes = []interface{}{ (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData)(nil), // 78: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData)(nil), // 79: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData)(nil), // 80: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData - (*ClientMeta_Ethereum_Network)(nil), // 81: xatu.ClientMeta.Ethereum.Network - (*ClientMeta_Ethereum_Execution)(nil), // 82: xatu.ClientMeta.Ethereum.Execution - (*ClientMeta_Ethereum_Consensus)(nil), // 83: xatu.ClientMeta.Ethereum.Consensus - (*ServerMeta_Event)(nil), // 84: xatu.ServerMeta.Event - (*ServerMeta_Geo)(nil), // 85: xatu.ServerMeta.Geo - (*ServerMeta_Client)(nil), // 86: xatu.ServerMeta.Client - (*ServerMeta_Peer)(nil), // 87: xatu.ServerMeta.Peer - (*ServerMeta_AdditionalBeaconP2PAttestationData)(nil), // 88: xatu.ServerMeta.AdditionalBeaconP2PAttestationData - (*ServerMeta_AdditionalLibp2PTraceConnectedData)(nil), // 89: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData - (*ServerMeta_AdditionalLibp2PTraceDisconnectedData)(nil), // 90: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData - (*timestamppb.Timestamp)(nil), // 91: google.protobuf.Timestamp - (*wrapperspb.UInt64Value)(nil), // 92: google.protobuf.UInt64Value - (*v1.ForkChoice)(nil), // 93: xatu.eth.v1.ForkChoice - (*v1.EventChainReorg)(nil), // 94: xatu.eth.v1.EventChainReorg - (*v1.ForkChoiceV2)(nil), // 95: xatu.eth.v1.ForkChoiceV2 - (*v1.EventChainReorgV2)(nil), // 96: xatu.eth.v1.EventChainReorgV2 - (*v1.Attestation)(nil), // 97: xatu.eth.v1.Attestation - (*v1.EventBlock)(nil), // 98: xatu.eth.v1.EventBlock - (*v1.EventFinalizedCheckpoint)(nil), // 99: xatu.eth.v1.EventFinalizedCheckpoint - (*v1.EventHead)(nil), // 100: xatu.eth.v1.EventHead - (*v1.EventVoluntaryExit)(nil), // 101: xatu.eth.v1.EventVoluntaryExit - (*v1.EventContributionAndProof)(nil), // 102: xatu.eth.v1.EventContributionAndProof - (*v2.EventBlock)(nil), // 103: xatu.eth.v2.EventBlock - (*v1.Committee)(nil), // 104: xatu.eth.v1.Committee - (*v1.AttestationDataV2)(nil), // 105: xatu.eth.v1.AttestationDataV2 - (*v1.AttestationV2)(nil), // 106: xatu.eth.v1.AttestationV2 - (*v1.EventBlockV2)(nil), // 107: xatu.eth.v1.EventBlockV2 - (*v1.EventFinalizedCheckpointV2)(nil), // 108: xatu.eth.v1.EventFinalizedCheckpointV2 - (*v1.EventHeadV2)(nil), // 109: xatu.eth.v1.EventHeadV2 - (*v1.EventVoluntaryExitV2)(nil), // 110: xatu.eth.v1.EventVoluntaryExitV2 - (*v1.EventContributionAndProofV2)(nil), // 111: xatu.eth.v1.EventContributionAndProofV2 - (*v2.EventBlockV2)(nil), // 112: xatu.eth.v2.EventBlockV2 - (*v1.AttesterSlashingV2)(nil), // 113: xatu.eth.v1.AttesterSlashingV2 - (*v1.ProposerSlashingV2)(nil), // 114: xatu.eth.v1.ProposerSlashingV2 - (*v1.SignedVoluntaryExitV2)(nil), // 115: xatu.eth.v1.SignedVoluntaryExitV2 - (*v1.DepositV2)(nil), // 116: xatu.eth.v1.DepositV2 - (*v2.SignedBLSToExecutionChangeV2)(nil), // 117: xatu.eth.v2.SignedBLSToExecutionChangeV2 - (*v1.Transaction)(nil), // 118: xatu.eth.v1.Transaction - (*v1.WithdrawalV2)(nil), // 119: xatu.eth.v1.WithdrawalV2 - (*v1.EventBlobSidecar)(nil), // 120: xatu.eth.v1.EventBlobSidecar - (*blockprint.BlockClassification)(nil), // 121: xatu.blockprint.BlockClassification - (*v1.BlobSidecar)(nil), // 122: xatu.eth.v1.BlobSidecar - (*v1.ProposerDuty)(nil), // 123: xatu.eth.v1.ProposerDuty - (*v1.ElaboratedAttestation)(nil), // 124: xatu.eth.v1.ElaboratedAttestation - (*libp2p.AddPeer)(nil), // 125: xatu.libp2p.AddPeer - (*libp2p.RemovePeer)(nil), // 126: xatu.libp2p.RemovePeer - (*libp2p.RecvRPC)(nil), // 127: xatu.libp2p.RecvRPC - (*libp2p.SendRPC)(nil), // 128: xatu.libp2p.SendRPC - (*libp2p.Join)(nil), // 129: xatu.libp2p.Join - (*libp2p.Connected)(nil), // 130: xatu.libp2p.Connected - (*libp2p.Disconnected)(nil), // 131: xatu.libp2p.Disconnected - (*libp2p.HandleMetadata)(nil), // 132: xatu.libp2p.HandleMetadata - (*libp2p.HandleStatus)(nil), // 133: xatu.libp2p.HandleStatus - (*gossipsub.BeaconBlock)(nil), // 134: xatu.libp2p.gossipsub.eth.BeaconBlock - (*wrapperspb.UInt32Value)(nil), // 135: google.protobuf.UInt32Value - (*libp2p.Peer)(nil), // 136: xatu.libp2p.Peer - (*wrapperspb.BoolValue)(nil), // 137: google.protobuf.BoolValue - (*libp2p.TraceEventMetadata)(nil), // 138: xatu.libp2p.TraceEventMetadata - (*wrapperspb.StringValue)(nil), // 139: google.protobuf.StringValue + (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData)(nil), // 81: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData + (*ClientMeta_Ethereum_Network)(nil), // 82: xatu.ClientMeta.Ethereum.Network + (*ClientMeta_Ethereum_Execution)(nil), // 83: xatu.ClientMeta.Ethereum.Execution + (*ClientMeta_Ethereum_Consensus)(nil), // 84: xatu.ClientMeta.Ethereum.Consensus + (*ServerMeta_Event)(nil), // 85: xatu.ServerMeta.Event + (*ServerMeta_Geo)(nil), // 86: xatu.ServerMeta.Geo + (*ServerMeta_Client)(nil), // 87: xatu.ServerMeta.Client + (*ServerMeta_Peer)(nil), // 88: xatu.ServerMeta.Peer + (*ServerMeta_AdditionalBeaconP2PAttestationData)(nil), // 89: xatu.ServerMeta.AdditionalBeaconP2PAttestationData + (*ServerMeta_AdditionalLibp2PTraceConnectedData)(nil), // 90: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData + (*ServerMeta_AdditionalLibp2PTraceDisconnectedData)(nil), // 91: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData + (*timestamppb.Timestamp)(nil), // 92: google.protobuf.Timestamp + (*wrapperspb.UInt64Value)(nil), // 93: google.protobuf.UInt64Value + (*v1.ForkChoice)(nil), // 94: xatu.eth.v1.ForkChoice + (*v1.EventChainReorg)(nil), // 95: xatu.eth.v1.EventChainReorg + (*v1.ForkChoiceV2)(nil), // 96: xatu.eth.v1.ForkChoiceV2 + (*v1.EventChainReorgV2)(nil), // 97: xatu.eth.v1.EventChainReorgV2 + (*v1.Attestation)(nil), // 98: xatu.eth.v1.Attestation + (*v1.EventBlock)(nil), // 99: xatu.eth.v1.EventBlock + (*v1.EventFinalizedCheckpoint)(nil), // 100: xatu.eth.v1.EventFinalizedCheckpoint + (*v1.EventHead)(nil), // 101: xatu.eth.v1.EventHead + (*v1.EventVoluntaryExit)(nil), // 102: xatu.eth.v1.EventVoluntaryExit + (*v1.EventContributionAndProof)(nil), // 103: xatu.eth.v1.EventContributionAndProof + (*v2.EventBlock)(nil), // 104: xatu.eth.v2.EventBlock + (*v1.Committee)(nil), // 105: xatu.eth.v1.Committee + (*v1.AttestationDataV2)(nil), // 106: xatu.eth.v1.AttestationDataV2 + (*v1.AttestationV2)(nil), // 107: xatu.eth.v1.AttestationV2 + (*v1.EventBlockV2)(nil), // 108: xatu.eth.v1.EventBlockV2 + (*v1.EventFinalizedCheckpointV2)(nil), // 109: xatu.eth.v1.EventFinalizedCheckpointV2 + (*v1.EventHeadV2)(nil), // 110: xatu.eth.v1.EventHeadV2 + (*v1.EventVoluntaryExitV2)(nil), // 111: xatu.eth.v1.EventVoluntaryExitV2 + (*v1.EventContributionAndProofV2)(nil), // 112: xatu.eth.v1.EventContributionAndProofV2 + (*v2.EventBlockV2)(nil), // 113: xatu.eth.v2.EventBlockV2 + (*v1.AttesterSlashingV2)(nil), // 114: xatu.eth.v1.AttesterSlashingV2 + (*v1.ProposerSlashingV2)(nil), // 115: xatu.eth.v1.ProposerSlashingV2 + (*v1.SignedVoluntaryExitV2)(nil), // 116: xatu.eth.v1.SignedVoluntaryExitV2 + (*v1.DepositV2)(nil), // 117: xatu.eth.v1.DepositV2 + (*v2.SignedBLSToExecutionChangeV2)(nil), // 118: xatu.eth.v2.SignedBLSToExecutionChangeV2 + (*v1.Transaction)(nil), // 119: xatu.eth.v1.Transaction + (*v1.WithdrawalV2)(nil), // 120: xatu.eth.v1.WithdrawalV2 + (*v1.EventBlobSidecar)(nil), // 121: xatu.eth.v1.EventBlobSidecar + (*blockprint.BlockClassification)(nil), // 122: xatu.blockprint.BlockClassification + (*v1.BlobSidecar)(nil), // 123: xatu.eth.v1.BlobSidecar + (*v1.ProposerDuty)(nil), // 124: xatu.eth.v1.ProposerDuty + (*v1.ElaboratedAttestation)(nil), // 125: xatu.eth.v1.ElaboratedAttestation + (*libp2p.AddPeer)(nil), // 126: xatu.libp2p.AddPeer + (*libp2p.RemovePeer)(nil), // 127: xatu.libp2p.RemovePeer + (*libp2p.RecvRPC)(nil), // 128: xatu.libp2p.RecvRPC + (*libp2p.SendRPC)(nil), // 129: xatu.libp2p.SendRPC + (*libp2p.Join)(nil), // 130: xatu.libp2p.Join + (*libp2p.Connected)(nil), // 131: xatu.libp2p.Connected + (*libp2p.Disconnected)(nil), // 132: xatu.libp2p.Disconnected + (*libp2p.HandleMetadata)(nil), // 133: xatu.libp2p.HandleMetadata + (*libp2p.HandleStatus)(nil), // 134: xatu.libp2p.HandleStatus + (*gossipsub.BeaconBlock)(nil), // 135: xatu.libp2p.gossipsub.eth.BeaconBlock + (*gossipsub.BlobSidecar)(nil), // 136: xatu.libp2p.gossipsub.eth.BlobSidecar + (*wrapperspb.UInt32Value)(nil), // 137: google.protobuf.UInt32Value + (*libp2p.Peer)(nil), // 138: xatu.libp2p.Peer + (*wrapperspb.BoolValue)(nil), // 139: google.protobuf.BoolValue + (*libp2p.TraceEventMetadata)(nil), // 140: xatu.libp2p.TraceEventMetadata + (*wrapperspb.StringValue)(nil), // 141: google.protobuf.StringValue } var file_pkg_proto_xatu_event_ingester_proto_depIdxs = []int32{ 19, // 0: xatu.CreateEventsRequest.events:type_name -> xatu.DecoratedEvent - 91, // 1: xatu.Epoch.start_date_time:type_name -> google.protobuf.Timestamp - 92, // 2: xatu.EpochV2.number:type_name -> google.protobuf.UInt64Value - 91, // 3: xatu.EpochV2.start_date_time:type_name -> google.protobuf.Timestamp - 91, // 4: xatu.Slot.start_date_time:type_name -> google.protobuf.Timestamp - 92, // 5: xatu.SlotV2.number:type_name -> google.protobuf.UInt64Value - 91, // 6: xatu.SlotV2.start_date_time:type_name -> google.protobuf.Timestamp - 92, // 7: xatu.PropagationV2.slot_start_diff:type_name -> google.protobuf.UInt64Value - 92, // 8: xatu.AttestingValidatorV2.committee_index:type_name -> google.protobuf.UInt64Value - 92, // 9: xatu.AttestingValidatorV2.index:type_name -> google.protobuf.UInt64Value - 93, // 10: xatu.DebugForkChoiceReorg.before:type_name -> xatu.eth.v1.ForkChoice - 93, // 11: xatu.DebugForkChoiceReorg.after:type_name -> xatu.eth.v1.ForkChoice - 94, // 12: xatu.DebugForkChoiceReorg.event:type_name -> xatu.eth.v1.EventChainReorg - 95, // 13: xatu.DebugForkChoiceReorgV2.before:type_name -> xatu.eth.v1.ForkChoiceV2 - 95, // 14: xatu.DebugForkChoiceReorgV2.after:type_name -> xatu.eth.v1.ForkChoiceV2 - 96, // 15: xatu.DebugForkChoiceReorgV2.event:type_name -> xatu.eth.v1.EventChainReorgV2 + 92, // 1: xatu.Epoch.start_date_time:type_name -> google.protobuf.Timestamp + 93, // 2: xatu.EpochV2.number:type_name -> google.protobuf.UInt64Value + 92, // 3: xatu.EpochV2.start_date_time:type_name -> google.protobuf.Timestamp + 92, // 4: xatu.Slot.start_date_time:type_name -> google.protobuf.Timestamp + 93, // 5: xatu.SlotV2.number:type_name -> google.protobuf.UInt64Value + 92, // 6: xatu.SlotV2.start_date_time:type_name -> google.protobuf.Timestamp + 93, // 7: xatu.PropagationV2.slot_start_diff:type_name -> google.protobuf.UInt64Value + 93, // 8: xatu.AttestingValidatorV2.committee_index:type_name -> google.protobuf.UInt64Value + 93, // 9: xatu.AttestingValidatorV2.index:type_name -> google.protobuf.UInt64Value + 94, // 10: xatu.DebugForkChoiceReorg.before:type_name -> xatu.eth.v1.ForkChoice + 94, // 11: xatu.DebugForkChoiceReorg.after:type_name -> xatu.eth.v1.ForkChoice + 95, // 12: xatu.DebugForkChoiceReorg.event:type_name -> xatu.eth.v1.EventChainReorg + 96, // 13: xatu.DebugForkChoiceReorgV2.before:type_name -> xatu.eth.v1.ForkChoiceV2 + 96, // 14: xatu.DebugForkChoiceReorgV2.after:type_name -> xatu.eth.v1.ForkChoiceV2 + 97, // 15: xatu.DebugForkChoiceReorgV2.event:type_name -> xatu.eth.v1.EventChainReorgV2 4, // 16: xatu.BlockIdentifier.epoch:type_name -> xatu.EpochV2 6, // 17: xatu.BlockIdentifier.slot:type_name -> xatu.SlotV2 20, // 18: xatu.ClientMeta.ethereum:type_name -> xatu.ClientMeta.Ethereum @@ -9648,229 +9855,240 @@ var file_pkg_proto_xatu_event_ingester_proto_depIdxs = []int32{ 76, // 65: xatu.ClientMeta.libp2p_trace_handle_status:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData 77, // 66: xatu.ClientMeta.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData 80, // 67: xatu.ClientMeta.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData - 84, // 68: xatu.ServerMeta.event:type_name -> xatu.ServerMeta.Event - 86, // 69: xatu.ServerMeta.client:type_name -> xatu.ServerMeta.Client - 88, // 70: xatu.ServerMeta.BEACON_P2P_ATTESTATION:type_name -> xatu.ServerMeta.AdditionalBeaconP2PAttestationData - 89, // 71: xatu.ServerMeta.LIBP2P_TRACE_CONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceConnectedData - 90, // 72: xatu.ServerMeta.LIBP2P_TRACE_DISCONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData - 15, // 73: xatu.Meta.client:type_name -> xatu.ClientMeta - 16, // 74: xatu.Meta.server:type_name -> xatu.ServerMeta - 0, // 75: xatu.Event.name:type_name -> xatu.Event.Name - 91, // 76: xatu.Event.date_time:type_name -> google.protobuf.Timestamp - 18, // 77: xatu.DecoratedEvent.event:type_name -> xatu.Event - 17, // 78: xatu.DecoratedEvent.meta:type_name -> xatu.Meta - 97, // 79: xatu.DecoratedEvent.eth_v1_events_attestation:type_name -> xatu.eth.v1.Attestation - 98, // 80: xatu.DecoratedEvent.eth_v1_events_block:type_name -> xatu.eth.v1.EventBlock - 94, // 81: xatu.DecoratedEvent.eth_v1_events_chain_reorg:type_name -> xatu.eth.v1.EventChainReorg - 99, // 82: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint:type_name -> xatu.eth.v1.EventFinalizedCheckpoint - 100, // 83: xatu.DecoratedEvent.eth_v1_events_head:type_name -> xatu.eth.v1.EventHead - 101, // 84: xatu.DecoratedEvent.eth_v1_events_voluntary_exit:type_name -> xatu.eth.v1.EventVoluntaryExit - 102, // 85: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof:type_name -> xatu.eth.v1.EventContributionAndProof - 103, // 86: xatu.DecoratedEvent.eth_v2_beacon_block:type_name -> xatu.eth.v2.EventBlock - 93, // 87: xatu.DecoratedEvent.eth_v1_fork_choice:type_name -> xatu.eth.v1.ForkChoice - 12, // 88: xatu.DecoratedEvent.eth_v1_fork_choice_reorg:type_name -> xatu.DebugForkChoiceReorg - 104, // 89: xatu.DecoratedEvent.eth_v1_beacon_committee:type_name -> xatu.eth.v1.Committee - 105, // 90: xatu.DecoratedEvent.eth_v1_validator_attestation_data:type_name -> xatu.eth.v1.AttestationDataV2 - 106, // 91: xatu.DecoratedEvent.eth_v1_events_attestation_v2:type_name -> xatu.eth.v1.AttestationV2 - 107, // 92: xatu.DecoratedEvent.eth_v1_events_block_v2:type_name -> xatu.eth.v1.EventBlockV2 - 96, // 93: xatu.DecoratedEvent.eth_v1_events_chain_reorg_v2:type_name -> xatu.eth.v1.EventChainReorgV2 - 108, // 94: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint_v2:type_name -> xatu.eth.v1.EventFinalizedCheckpointV2 - 109, // 95: xatu.DecoratedEvent.eth_v1_events_head_v2:type_name -> xatu.eth.v1.EventHeadV2 - 110, // 96: xatu.DecoratedEvent.eth_v1_events_voluntary_exit_v2:type_name -> xatu.eth.v1.EventVoluntaryExitV2 - 111, // 97: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof_v2:type_name -> xatu.eth.v1.EventContributionAndProofV2 - 112, // 98: xatu.DecoratedEvent.eth_v2_beacon_block_v2:type_name -> xatu.eth.v2.EventBlockV2 - 95, // 99: xatu.DecoratedEvent.eth_v1_fork_choice_v2:type_name -> xatu.eth.v1.ForkChoiceV2 - 13, // 100: xatu.DecoratedEvent.eth_v1_fork_choice_reorg_v2:type_name -> xatu.DebugForkChoiceReorgV2 - 113, // 101: xatu.DecoratedEvent.eth_v2_beacon_block_attester_slashing:type_name -> xatu.eth.v1.AttesterSlashingV2 - 114, // 102: xatu.DecoratedEvent.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.eth.v1.ProposerSlashingV2 - 115, // 103: xatu.DecoratedEvent.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.eth.v1.SignedVoluntaryExitV2 - 116, // 104: xatu.DecoratedEvent.eth_v2_beacon_block_deposit:type_name -> xatu.eth.v1.DepositV2 - 117, // 105: xatu.DecoratedEvent.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.eth.v2.SignedBLSToExecutionChangeV2 - 118, // 106: xatu.DecoratedEvent.eth_v2_beacon_block_execution_transaction:type_name -> xatu.eth.v1.Transaction - 119, // 107: xatu.DecoratedEvent.eth_v2_beacon_block_withdrawal:type_name -> xatu.eth.v1.WithdrawalV2 - 120, // 108: xatu.DecoratedEvent.eth_v1_events_blob_sidecar:type_name -> xatu.eth.v1.EventBlobSidecar - 121, // 109: xatu.DecoratedEvent.blockprint_block_classification:type_name -> xatu.blockprint.BlockClassification - 122, // 110: xatu.DecoratedEvent.eth_v1_beacon_block_blob_sidecar:type_name -> xatu.eth.v1.BlobSidecar - 106, // 111: xatu.DecoratedEvent.beacon_p2p_attestation:type_name -> xatu.eth.v1.AttestationV2 - 123, // 112: xatu.DecoratedEvent.eth_v1_proposer_duty:type_name -> xatu.eth.v1.ProposerDuty - 124, // 113: xatu.DecoratedEvent.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.eth.v1.ElaboratedAttestation - 125, // 114: xatu.DecoratedEvent.libp2p_trace_add_peer:type_name -> xatu.libp2p.AddPeer - 126, // 115: xatu.DecoratedEvent.libp2p_trace_remove_peer:type_name -> xatu.libp2p.RemovePeer - 127, // 116: xatu.DecoratedEvent.libp2p_trace_recv_rpc:type_name -> xatu.libp2p.RecvRPC - 128, // 117: xatu.DecoratedEvent.libp2p_trace_send_rpc:type_name -> xatu.libp2p.SendRPC - 129, // 118: xatu.DecoratedEvent.libp2p_trace_join:type_name -> xatu.libp2p.Join - 130, // 119: xatu.DecoratedEvent.libp2p_trace_connected:type_name -> xatu.libp2p.Connected - 131, // 120: xatu.DecoratedEvent.libp2p_trace_disconnected:type_name -> xatu.libp2p.Disconnected - 132, // 121: xatu.DecoratedEvent.libp2p_trace_handle_metadata:type_name -> xatu.libp2p.HandleMetadata - 133, // 122: xatu.DecoratedEvent.libp2p_trace_handle_status:type_name -> xatu.libp2p.HandleStatus - 134, // 123: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.libp2p.gossipsub.eth.BeaconBlock - 97, // 124: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.eth.v1.Attestation - 81, // 125: xatu.ClientMeta.Ethereum.network:type_name -> xatu.ClientMeta.Ethereum.Network - 82, // 126: xatu.ClientMeta.Ethereum.execution:type_name -> xatu.ClientMeta.Ethereum.Execution - 83, // 127: xatu.ClientMeta.Ethereum.consensus:type_name -> xatu.ClientMeta.Ethereum.Consensus - 3, // 128: xatu.ClientMeta.AdditionalEthV1AttestationSourceData.epoch:type_name -> xatu.Epoch - 4, // 129: xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data.epoch:type_name -> xatu.EpochV2 - 3, // 130: xatu.ClientMeta.AdditionalEthV1AttestationTargetData.epoch:type_name -> xatu.Epoch - 4, // 131: xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data.epoch:type_name -> xatu.EpochV2 - 22, // 132: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceData - 24, // 133: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetData - 5, // 134: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.slot:type_name -> xatu.Slot - 3, // 135: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.epoch:type_name -> xatu.Epoch - 8, // 136: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.propagation:type_name -> xatu.Propagation - 10, // 137: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.attesting_validator:type_name -> xatu.AttestingValidator - 23, // 138: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 139: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 6, // 140: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.slot:type_name -> xatu.SlotV2 - 4, // 141: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.epoch:type_name -> xatu.EpochV2 - 9, // 142: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.propagation:type_name -> xatu.PropagationV2 - 11, // 143: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.attesting_validator:type_name -> xatu.AttestingValidatorV2 - 3, // 144: xatu.ClientMeta.AdditionalEthV1EventsHeadData.epoch:type_name -> xatu.Epoch - 5, // 145: xatu.ClientMeta.AdditionalEthV1EventsHeadData.slot:type_name -> xatu.Slot - 8, // 146: xatu.ClientMeta.AdditionalEthV1EventsHeadData.propagation:type_name -> xatu.Propagation - 4, // 147: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 148: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.slot:type_name -> xatu.SlotV2 - 9, // 149: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.propagation:type_name -> xatu.PropagationV2 - 3, // 150: xatu.ClientMeta.AdditionalEthV1EventsBlockData.epoch:type_name -> xatu.Epoch - 5, // 151: xatu.ClientMeta.AdditionalEthV1EventsBlockData.slot:type_name -> xatu.Slot - 8, // 152: xatu.ClientMeta.AdditionalEthV1EventsBlockData.propagation:type_name -> xatu.Propagation - 4, // 153: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 154: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.slot:type_name -> xatu.SlotV2 - 9, // 155: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.propagation:type_name -> xatu.PropagationV2 - 3, // 156: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData.epoch:type_name -> xatu.Epoch - 4, // 157: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data.epoch:type_name -> xatu.EpochV2 - 3, // 158: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData.epoch:type_name -> xatu.Epoch - 4, // 159: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data.epoch:type_name -> xatu.EpochV2 - 3, // 160: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.epoch:type_name -> xatu.Epoch - 5, // 161: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.slot:type_name -> xatu.Slot - 8, // 162: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.propagation:type_name -> xatu.Propagation - 4, // 163: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 164: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.slot:type_name -> xatu.SlotV2 - 9, // 165: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.propagation:type_name -> xatu.PropagationV2 - 3, // 166: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.epoch:type_name -> xatu.Epoch - 5, // 167: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.slot:type_name -> xatu.Slot - 8, // 168: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.propagation:type_name -> xatu.Propagation - 4, // 169: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 170: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.slot:type_name -> xatu.SlotV2 - 9, // 171: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.propagation:type_name -> xatu.PropagationV2 - 38, // 172: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData - 39, // 173: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data - 3, // 174: xatu.ClientMeta.ForkChoiceSnapshot.request_epoch:type_name -> xatu.Epoch - 5, // 175: xatu.ClientMeta.ForkChoiceSnapshot.request_slot:type_name -> xatu.Slot - 91, // 176: xatu.ClientMeta.ForkChoiceSnapshot.timestamp:type_name -> google.protobuf.Timestamp - 4, // 177: xatu.ClientMeta.ForkChoiceSnapshotV2.request_epoch:type_name -> xatu.EpochV2 - 6, // 178: xatu.ClientMeta.ForkChoiceSnapshotV2.request_slot:type_name -> xatu.SlotV2 - 92, // 179: xatu.ClientMeta.ForkChoiceSnapshotV2.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value - 92, // 180: xatu.ClientMeta.ForkChoiceSnapshotV2.request_duration_ms:type_name -> google.protobuf.UInt64Value - 91, // 181: xatu.ClientMeta.ForkChoiceSnapshotV2.timestamp:type_name -> google.protobuf.Timestamp - 42, // 182: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshot - 43, // 183: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 - 42, // 184: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshot - 42, // 185: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshot - 43, // 186: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 - 43, // 187: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 - 4, // 188: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.epoch:type_name -> xatu.EpochV2 - 6, // 189: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.slot:type_name -> xatu.SlotV2 - 92, // 190: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.nonce:type_name -> google.protobuf.UInt64Value - 92, // 191: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.gas:type_name -> google.protobuf.UInt64Value - 135, // 192: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.type:type_name -> google.protobuf.UInt32Value - 92, // 193: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.blob_gas:type_name -> google.protobuf.UInt64Value - 3, // 194: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.epoch:type_name -> xatu.Epoch - 5, // 195: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.slot:type_name -> xatu.Slot - 4, // 196: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 197: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.slot:type_name -> xatu.SlotV2 - 92, // 198: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_count:type_name -> google.protobuf.UInt64Value - 92, // 199: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes:type_name -> google.protobuf.UInt64Value - 92, // 200: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes_compressed:type_name -> google.protobuf.UInt64Value - 92, // 201: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes:type_name -> google.protobuf.UInt64Value - 92, // 202: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes_compressed:type_name -> google.protobuf.UInt64Value - 14, // 203: xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData.block:type_name -> xatu.BlockIdentifier - 14, // 204: xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData.block:type_name -> xatu.BlockIdentifier - 14, // 205: xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData.block:type_name -> xatu.BlockIdentifier - 14, // 206: xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData.block:type_name -> xatu.BlockIdentifier - 14, // 207: xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData.block:type_name -> xatu.BlockIdentifier - 14, // 208: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.block:type_name -> xatu.BlockIdentifier - 92, // 209: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.position_in_block:type_name -> google.protobuf.UInt64Value - 14, // 210: xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData.block:type_name -> xatu.BlockIdentifier - 4, // 211: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.epoch:type_name -> xatu.EpochV2 - 6, // 212: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.slot:type_name -> xatu.SlotV2 - 92, // 213: xatu.ClientMeta.AttestationDataSnapshot.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value - 92, // 214: xatu.ClientMeta.AttestationDataSnapshot.request_duration_ms:type_name -> google.protobuf.UInt64Value - 91, // 215: xatu.ClientMeta.AttestationDataSnapshot.timestamp:type_name -> google.protobuf.Timestamp - 23, // 216: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 217: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 4, // 218: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.epoch:type_name -> xatu.EpochV2 - 6, // 219: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.slot:type_name -> xatu.SlotV2 - 61, // 220: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.Snapshot:type_name -> xatu.ClientMeta.AttestationDataSnapshot - 4, // 221: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.epoch:type_name -> xatu.EpochV2 - 6, // 222: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.slot:type_name -> xatu.SlotV2 - 9, // 223: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.propagation:type_name -> xatu.PropagationV2 - 4, // 224: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.epoch:type_name -> xatu.EpochV2 - 6, // 225: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.slot:type_name -> xatu.SlotV2 - 92, // 226: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_size:type_name -> google.protobuf.UInt64Value - 92, // 227: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_empty_size:type_name -> google.protobuf.UInt64Value - 23, // 228: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 229: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 6, // 230: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.slot:type_name -> xatu.SlotV2 - 4, // 231: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.epoch:type_name -> xatu.EpochV2 - 9, // 232: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.propagation:type_name -> xatu.PropagationV2 - 11, // 233: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 - 136, // 234: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.libp2p.Peer - 135, // 235: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.subnet:type_name -> google.protobuf.UInt32Value - 137, // 236: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.validated:type_name -> google.protobuf.BoolValue - 4, // 237: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.epoch:type_name -> xatu.EpochV2 - 6, // 238: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.slot:type_name -> xatu.SlotV2 - 14, // 239: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.block:type_name -> xatu.BlockIdentifier - 92, // 240: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.position_in_block:type_name -> google.protobuf.UInt64Value - 4, // 241: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.epoch:type_name -> xatu.EpochV2 - 6, // 242: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.slot:type_name -> xatu.SlotV2 - 23, // 243: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 244: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 138, // 245: xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 246: xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 247: xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 248: xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 249: xatu.ClientMeta.AdditionalLibP2PTraceJoinData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 250: xatu.ClientMeta.AdditionalLibP2PTraceConnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 251: xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 252: xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 138, // 253: xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 4, // 254: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.epoch:type_name -> xatu.EpochV2 - 6, // 255: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.slot:type_name -> xatu.SlotV2 - 4, // 256: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_epoch:type_name -> xatu.EpochV2 - 6, // 257: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_slot:type_name -> xatu.SlotV2 - 9, // 258: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.propagation:type_name -> xatu.PropagationV2 - 138, // 259: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 139, // 260: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.topic:type_name -> google.protobuf.StringValue - 135, // 261: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_size:type_name -> google.protobuf.UInt32Value - 139, // 262: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_id:type_name -> google.protobuf.StringValue - 4, // 263: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData.epoch:type_name -> xatu.EpochV2 - 4, // 264: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData.epoch:type_name -> xatu.EpochV2 - 78, // 265: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.source:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData - 79, // 266: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.target:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData - 6, // 267: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.slot:type_name -> xatu.SlotV2 - 4, // 268: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.epoch:type_name -> xatu.EpochV2 - 9, // 269: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.propagation:type_name -> xatu.PropagationV2 - 11, // 270: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 - 4, // 271: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_epoch:type_name -> xatu.EpochV2 - 6, // 272: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_slot:type_name -> xatu.SlotV2 - 138, // 273: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 139, // 274: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.topic:type_name -> google.protobuf.StringValue - 135, // 275: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_size:type_name -> google.protobuf.UInt32Value - 139, // 276: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_id:type_name -> google.protobuf.StringValue - 7, // 277: xatu.ClientMeta.Ethereum.Execution.fork_id:type_name -> xatu.ForkID - 91, // 278: xatu.ServerMeta.Event.received_date_time:type_name -> google.protobuf.Timestamp - 85, // 279: xatu.ServerMeta.Client.geo:type_name -> xatu.ServerMeta.Geo - 85, // 280: xatu.ServerMeta.Peer.geo:type_name -> xatu.ServerMeta.Geo - 87, // 281: xatu.ServerMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.ServerMeta.Peer - 87, // 282: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData.peer:type_name -> xatu.ServerMeta.Peer - 87, // 283: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData.peer:type_name -> xatu.ServerMeta.Peer - 1, // 284: xatu.EventIngester.CreateEvents:input_type -> xatu.CreateEventsRequest - 2, // 285: xatu.EventIngester.CreateEvents:output_type -> xatu.CreateEventsResponse - 285, // [285:286] is the sub-list for method output_type - 284, // [284:285] is the sub-list for method input_type - 284, // [284:284] is the sub-list for extension type_name - 284, // [284:284] is the sub-list for extension extendee - 0, // [0:284] is the sub-list for field type_name + 81, // 68: xatu.ClientMeta.libp2p_trace_gossipsub_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData + 85, // 69: xatu.ServerMeta.event:type_name -> xatu.ServerMeta.Event + 87, // 70: xatu.ServerMeta.client:type_name -> xatu.ServerMeta.Client + 89, // 71: xatu.ServerMeta.BEACON_P2P_ATTESTATION:type_name -> xatu.ServerMeta.AdditionalBeaconP2PAttestationData + 90, // 72: xatu.ServerMeta.LIBP2P_TRACE_CONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceConnectedData + 91, // 73: xatu.ServerMeta.LIBP2P_TRACE_DISCONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData + 15, // 74: xatu.Meta.client:type_name -> xatu.ClientMeta + 16, // 75: xatu.Meta.server:type_name -> xatu.ServerMeta + 0, // 76: xatu.Event.name:type_name -> xatu.Event.Name + 92, // 77: xatu.Event.date_time:type_name -> google.protobuf.Timestamp + 18, // 78: xatu.DecoratedEvent.event:type_name -> xatu.Event + 17, // 79: xatu.DecoratedEvent.meta:type_name -> xatu.Meta + 98, // 80: xatu.DecoratedEvent.eth_v1_events_attestation:type_name -> xatu.eth.v1.Attestation + 99, // 81: xatu.DecoratedEvent.eth_v1_events_block:type_name -> xatu.eth.v1.EventBlock + 95, // 82: xatu.DecoratedEvent.eth_v1_events_chain_reorg:type_name -> xatu.eth.v1.EventChainReorg + 100, // 83: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint:type_name -> xatu.eth.v1.EventFinalizedCheckpoint + 101, // 84: xatu.DecoratedEvent.eth_v1_events_head:type_name -> xatu.eth.v1.EventHead + 102, // 85: xatu.DecoratedEvent.eth_v1_events_voluntary_exit:type_name -> xatu.eth.v1.EventVoluntaryExit + 103, // 86: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof:type_name -> xatu.eth.v1.EventContributionAndProof + 104, // 87: xatu.DecoratedEvent.eth_v2_beacon_block:type_name -> xatu.eth.v2.EventBlock + 94, // 88: xatu.DecoratedEvent.eth_v1_fork_choice:type_name -> xatu.eth.v1.ForkChoice + 12, // 89: xatu.DecoratedEvent.eth_v1_fork_choice_reorg:type_name -> xatu.DebugForkChoiceReorg + 105, // 90: xatu.DecoratedEvent.eth_v1_beacon_committee:type_name -> xatu.eth.v1.Committee + 106, // 91: xatu.DecoratedEvent.eth_v1_validator_attestation_data:type_name -> xatu.eth.v1.AttestationDataV2 + 107, // 92: xatu.DecoratedEvent.eth_v1_events_attestation_v2:type_name -> xatu.eth.v1.AttestationV2 + 108, // 93: xatu.DecoratedEvent.eth_v1_events_block_v2:type_name -> xatu.eth.v1.EventBlockV2 + 97, // 94: xatu.DecoratedEvent.eth_v1_events_chain_reorg_v2:type_name -> xatu.eth.v1.EventChainReorgV2 + 109, // 95: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint_v2:type_name -> xatu.eth.v1.EventFinalizedCheckpointV2 + 110, // 96: xatu.DecoratedEvent.eth_v1_events_head_v2:type_name -> xatu.eth.v1.EventHeadV2 + 111, // 97: xatu.DecoratedEvent.eth_v1_events_voluntary_exit_v2:type_name -> xatu.eth.v1.EventVoluntaryExitV2 + 112, // 98: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof_v2:type_name -> xatu.eth.v1.EventContributionAndProofV2 + 113, // 99: xatu.DecoratedEvent.eth_v2_beacon_block_v2:type_name -> xatu.eth.v2.EventBlockV2 + 96, // 100: xatu.DecoratedEvent.eth_v1_fork_choice_v2:type_name -> xatu.eth.v1.ForkChoiceV2 + 13, // 101: xatu.DecoratedEvent.eth_v1_fork_choice_reorg_v2:type_name -> xatu.DebugForkChoiceReorgV2 + 114, // 102: xatu.DecoratedEvent.eth_v2_beacon_block_attester_slashing:type_name -> xatu.eth.v1.AttesterSlashingV2 + 115, // 103: xatu.DecoratedEvent.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.eth.v1.ProposerSlashingV2 + 116, // 104: xatu.DecoratedEvent.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.eth.v1.SignedVoluntaryExitV2 + 117, // 105: xatu.DecoratedEvent.eth_v2_beacon_block_deposit:type_name -> xatu.eth.v1.DepositV2 + 118, // 106: xatu.DecoratedEvent.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.eth.v2.SignedBLSToExecutionChangeV2 + 119, // 107: xatu.DecoratedEvent.eth_v2_beacon_block_execution_transaction:type_name -> xatu.eth.v1.Transaction + 120, // 108: xatu.DecoratedEvent.eth_v2_beacon_block_withdrawal:type_name -> xatu.eth.v1.WithdrawalV2 + 121, // 109: xatu.DecoratedEvent.eth_v1_events_blob_sidecar:type_name -> xatu.eth.v1.EventBlobSidecar + 122, // 110: xatu.DecoratedEvent.blockprint_block_classification:type_name -> xatu.blockprint.BlockClassification + 123, // 111: xatu.DecoratedEvent.eth_v1_beacon_block_blob_sidecar:type_name -> xatu.eth.v1.BlobSidecar + 107, // 112: xatu.DecoratedEvent.beacon_p2p_attestation:type_name -> xatu.eth.v1.AttestationV2 + 124, // 113: xatu.DecoratedEvent.eth_v1_proposer_duty:type_name -> xatu.eth.v1.ProposerDuty + 125, // 114: xatu.DecoratedEvent.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.eth.v1.ElaboratedAttestation + 126, // 115: xatu.DecoratedEvent.libp2p_trace_add_peer:type_name -> xatu.libp2p.AddPeer + 127, // 116: xatu.DecoratedEvent.libp2p_trace_remove_peer:type_name -> xatu.libp2p.RemovePeer + 128, // 117: xatu.DecoratedEvent.libp2p_trace_recv_rpc:type_name -> xatu.libp2p.RecvRPC + 129, // 118: xatu.DecoratedEvent.libp2p_trace_send_rpc:type_name -> xatu.libp2p.SendRPC + 130, // 119: xatu.DecoratedEvent.libp2p_trace_join:type_name -> xatu.libp2p.Join + 131, // 120: xatu.DecoratedEvent.libp2p_trace_connected:type_name -> xatu.libp2p.Connected + 132, // 121: xatu.DecoratedEvent.libp2p_trace_disconnected:type_name -> xatu.libp2p.Disconnected + 133, // 122: xatu.DecoratedEvent.libp2p_trace_handle_metadata:type_name -> xatu.libp2p.HandleMetadata + 134, // 123: xatu.DecoratedEvent.libp2p_trace_handle_status:type_name -> xatu.libp2p.HandleStatus + 135, // 124: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.libp2p.gossipsub.eth.BeaconBlock + 98, // 125: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.eth.v1.Attestation + 136, // 126: xatu.DecoratedEvent.libp2p_trace_gossipsub_blob_sidecar:type_name -> xatu.libp2p.gossipsub.eth.BlobSidecar + 82, // 127: xatu.ClientMeta.Ethereum.network:type_name -> xatu.ClientMeta.Ethereum.Network + 83, // 128: xatu.ClientMeta.Ethereum.execution:type_name -> xatu.ClientMeta.Ethereum.Execution + 84, // 129: xatu.ClientMeta.Ethereum.consensus:type_name -> xatu.ClientMeta.Ethereum.Consensus + 3, // 130: xatu.ClientMeta.AdditionalEthV1AttestationSourceData.epoch:type_name -> xatu.Epoch + 4, // 131: xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data.epoch:type_name -> xatu.EpochV2 + 3, // 132: xatu.ClientMeta.AdditionalEthV1AttestationTargetData.epoch:type_name -> xatu.Epoch + 4, // 133: xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data.epoch:type_name -> xatu.EpochV2 + 22, // 134: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceData + 24, // 135: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetData + 5, // 136: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.slot:type_name -> xatu.Slot + 3, // 137: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.epoch:type_name -> xatu.Epoch + 8, // 138: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.propagation:type_name -> xatu.Propagation + 10, // 139: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.attesting_validator:type_name -> xatu.AttestingValidator + 23, // 140: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 25, // 141: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 6, // 142: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.slot:type_name -> xatu.SlotV2 + 4, // 143: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.epoch:type_name -> xatu.EpochV2 + 9, // 144: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.propagation:type_name -> xatu.PropagationV2 + 11, // 145: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.attesting_validator:type_name -> xatu.AttestingValidatorV2 + 3, // 146: xatu.ClientMeta.AdditionalEthV1EventsHeadData.epoch:type_name -> xatu.Epoch + 5, // 147: xatu.ClientMeta.AdditionalEthV1EventsHeadData.slot:type_name -> xatu.Slot + 8, // 148: xatu.ClientMeta.AdditionalEthV1EventsHeadData.propagation:type_name -> xatu.Propagation + 4, // 149: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 150: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.slot:type_name -> xatu.SlotV2 + 9, // 151: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.propagation:type_name -> xatu.PropagationV2 + 3, // 152: xatu.ClientMeta.AdditionalEthV1EventsBlockData.epoch:type_name -> xatu.Epoch + 5, // 153: xatu.ClientMeta.AdditionalEthV1EventsBlockData.slot:type_name -> xatu.Slot + 8, // 154: xatu.ClientMeta.AdditionalEthV1EventsBlockData.propagation:type_name -> xatu.Propagation + 4, // 155: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 156: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.slot:type_name -> xatu.SlotV2 + 9, // 157: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.propagation:type_name -> xatu.PropagationV2 + 3, // 158: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData.epoch:type_name -> xatu.Epoch + 4, // 159: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data.epoch:type_name -> xatu.EpochV2 + 3, // 160: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData.epoch:type_name -> xatu.Epoch + 4, // 161: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data.epoch:type_name -> xatu.EpochV2 + 3, // 162: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.epoch:type_name -> xatu.Epoch + 5, // 163: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.slot:type_name -> xatu.Slot + 8, // 164: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.propagation:type_name -> xatu.Propagation + 4, // 165: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 166: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.slot:type_name -> xatu.SlotV2 + 9, // 167: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.propagation:type_name -> xatu.PropagationV2 + 3, // 168: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.epoch:type_name -> xatu.Epoch + 5, // 169: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.slot:type_name -> xatu.Slot + 8, // 170: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.propagation:type_name -> xatu.Propagation + 4, // 171: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 172: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.slot:type_name -> xatu.SlotV2 + 9, // 173: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.propagation:type_name -> xatu.PropagationV2 + 38, // 174: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData + 39, // 175: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data + 3, // 176: xatu.ClientMeta.ForkChoiceSnapshot.request_epoch:type_name -> xatu.Epoch + 5, // 177: xatu.ClientMeta.ForkChoiceSnapshot.request_slot:type_name -> xatu.Slot + 92, // 178: xatu.ClientMeta.ForkChoiceSnapshot.timestamp:type_name -> google.protobuf.Timestamp + 4, // 179: xatu.ClientMeta.ForkChoiceSnapshotV2.request_epoch:type_name -> xatu.EpochV2 + 6, // 180: xatu.ClientMeta.ForkChoiceSnapshotV2.request_slot:type_name -> xatu.SlotV2 + 93, // 181: xatu.ClientMeta.ForkChoiceSnapshotV2.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value + 93, // 182: xatu.ClientMeta.ForkChoiceSnapshotV2.request_duration_ms:type_name -> google.protobuf.UInt64Value + 92, // 183: xatu.ClientMeta.ForkChoiceSnapshotV2.timestamp:type_name -> google.protobuf.Timestamp + 42, // 184: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshot + 43, // 185: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 + 42, // 186: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshot + 42, // 187: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshot + 43, // 188: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 + 43, // 189: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 + 4, // 190: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.epoch:type_name -> xatu.EpochV2 + 6, // 191: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.slot:type_name -> xatu.SlotV2 + 93, // 192: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.nonce:type_name -> google.protobuf.UInt64Value + 93, // 193: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.gas:type_name -> google.protobuf.UInt64Value + 137, // 194: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.type:type_name -> google.protobuf.UInt32Value + 93, // 195: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.blob_gas:type_name -> google.protobuf.UInt64Value + 3, // 196: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.epoch:type_name -> xatu.Epoch + 5, // 197: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.slot:type_name -> xatu.Slot + 4, // 198: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 199: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.slot:type_name -> xatu.SlotV2 + 93, // 200: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_count:type_name -> google.protobuf.UInt64Value + 93, // 201: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes:type_name -> google.protobuf.UInt64Value + 93, // 202: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes_compressed:type_name -> google.protobuf.UInt64Value + 93, // 203: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes:type_name -> google.protobuf.UInt64Value + 93, // 204: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes_compressed:type_name -> google.protobuf.UInt64Value + 14, // 205: xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData.block:type_name -> xatu.BlockIdentifier + 14, // 206: xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData.block:type_name -> xatu.BlockIdentifier + 14, // 207: xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData.block:type_name -> xatu.BlockIdentifier + 14, // 208: xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData.block:type_name -> xatu.BlockIdentifier + 14, // 209: xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData.block:type_name -> xatu.BlockIdentifier + 14, // 210: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.block:type_name -> xatu.BlockIdentifier + 93, // 211: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.position_in_block:type_name -> google.protobuf.UInt64Value + 14, // 212: xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData.block:type_name -> xatu.BlockIdentifier + 4, // 213: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.epoch:type_name -> xatu.EpochV2 + 6, // 214: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.slot:type_name -> xatu.SlotV2 + 93, // 215: xatu.ClientMeta.AttestationDataSnapshot.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value + 93, // 216: xatu.ClientMeta.AttestationDataSnapshot.request_duration_ms:type_name -> google.protobuf.UInt64Value + 92, // 217: xatu.ClientMeta.AttestationDataSnapshot.timestamp:type_name -> google.protobuf.Timestamp + 23, // 218: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 25, // 219: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 4, // 220: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.epoch:type_name -> xatu.EpochV2 + 6, // 221: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.slot:type_name -> xatu.SlotV2 + 61, // 222: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.Snapshot:type_name -> xatu.ClientMeta.AttestationDataSnapshot + 4, // 223: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.epoch:type_name -> xatu.EpochV2 + 6, // 224: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.slot:type_name -> xatu.SlotV2 + 9, // 225: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.propagation:type_name -> xatu.PropagationV2 + 4, // 226: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.epoch:type_name -> xatu.EpochV2 + 6, // 227: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.slot:type_name -> xatu.SlotV2 + 93, // 228: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_size:type_name -> google.protobuf.UInt64Value + 93, // 229: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_empty_size:type_name -> google.protobuf.UInt64Value + 23, // 230: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 25, // 231: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 6, // 232: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.slot:type_name -> xatu.SlotV2 + 4, // 233: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.epoch:type_name -> xatu.EpochV2 + 9, // 234: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.propagation:type_name -> xatu.PropagationV2 + 11, // 235: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 + 138, // 236: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.libp2p.Peer + 137, // 237: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.subnet:type_name -> google.protobuf.UInt32Value + 139, // 238: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.validated:type_name -> google.protobuf.BoolValue + 4, // 239: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.epoch:type_name -> xatu.EpochV2 + 6, // 240: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.slot:type_name -> xatu.SlotV2 + 14, // 241: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.block:type_name -> xatu.BlockIdentifier + 93, // 242: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.position_in_block:type_name -> google.protobuf.UInt64Value + 4, // 243: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.epoch:type_name -> xatu.EpochV2 + 6, // 244: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.slot:type_name -> xatu.SlotV2 + 23, // 245: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 25, // 246: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 140, // 247: xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 248: xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 249: xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 250: xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 251: xatu.ClientMeta.AdditionalLibP2PTraceJoinData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 252: xatu.ClientMeta.AdditionalLibP2PTraceConnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 253: xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 254: xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 140, // 255: xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 4, // 256: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.epoch:type_name -> xatu.EpochV2 + 6, // 257: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.slot:type_name -> xatu.SlotV2 + 4, // 258: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_epoch:type_name -> xatu.EpochV2 + 6, // 259: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_slot:type_name -> xatu.SlotV2 + 9, // 260: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.propagation:type_name -> xatu.PropagationV2 + 140, // 261: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 141, // 262: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.topic:type_name -> google.protobuf.StringValue + 137, // 263: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_size:type_name -> google.protobuf.UInt32Value + 141, // 264: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_id:type_name -> google.protobuf.StringValue + 4, // 265: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData.epoch:type_name -> xatu.EpochV2 + 4, // 266: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData.epoch:type_name -> xatu.EpochV2 + 78, // 267: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.source:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData + 79, // 268: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.target:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData + 6, // 269: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.slot:type_name -> xatu.SlotV2 + 4, // 270: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.epoch:type_name -> xatu.EpochV2 + 9, // 271: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.propagation:type_name -> xatu.PropagationV2 + 11, // 272: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 + 4, // 273: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_epoch:type_name -> xatu.EpochV2 + 6, // 274: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_slot:type_name -> xatu.SlotV2 + 140, // 275: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 141, // 276: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.topic:type_name -> google.protobuf.StringValue + 137, // 277: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_size:type_name -> google.protobuf.UInt32Value + 141, // 278: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_id:type_name -> google.protobuf.StringValue + 4, // 279: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.epoch:type_name -> xatu.EpochV2 + 6, // 280: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.slot:type_name -> xatu.SlotV2 + 4, // 281: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.wallclock_epoch:type_name -> xatu.EpochV2 + 6, // 282: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.wallclock_slot:type_name -> xatu.SlotV2 + 9, // 283: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.propagation:type_name -> xatu.PropagationV2 + 140, // 284: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 141, // 285: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.topic:type_name -> google.protobuf.StringValue + 137, // 286: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.message_size:type_name -> google.protobuf.UInt32Value + 141, // 287: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.message_id:type_name -> google.protobuf.StringValue + 7, // 288: xatu.ClientMeta.Ethereum.Execution.fork_id:type_name -> xatu.ForkID + 92, // 289: xatu.ServerMeta.Event.received_date_time:type_name -> google.protobuf.Timestamp + 86, // 290: xatu.ServerMeta.Client.geo:type_name -> xatu.ServerMeta.Geo + 86, // 291: xatu.ServerMeta.Peer.geo:type_name -> xatu.ServerMeta.Geo + 88, // 292: xatu.ServerMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.ServerMeta.Peer + 88, // 293: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData.peer:type_name -> xatu.ServerMeta.Peer + 88, // 294: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData.peer:type_name -> xatu.ServerMeta.Peer + 1, // 295: xatu.EventIngester.CreateEvents:input_type -> xatu.CreateEventsRequest + 2, // 296: xatu.EventIngester.CreateEvents:output_type -> xatu.CreateEventsResponse + 296, // [296:297] is the sub-list for method output_type + 295, // [295:296] is the sub-list for method input_type + 295, // [295:295] is the sub-list for extension type_name + 295, // [295:295] is the sub-list for extension extendee + 0, // [0:295] is the sub-list for field type_name } func init() { file_pkg_proto_xatu_event_ingester_proto_init() } @@ -10828,7 +11046,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientMeta_Ethereum_Network); i { + switch v := v.(*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData); i { case 0: return &v.state case 1: @@ -10840,7 +11058,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientMeta_Ethereum_Execution); i { + switch v := v.(*ClientMeta_Ethereum_Network); i { case 0: return &v.state case 1: @@ -10852,7 +11070,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientMeta_Ethereum_Consensus); i { + switch v := v.(*ClientMeta_Ethereum_Execution); i { case 0: return &v.state case 1: @@ -10864,7 +11082,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta_Event); i { + switch v := v.(*ClientMeta_Ethereum_Consensus); i { case 0: return &v.state case 1: @@ -10876,7 +11094,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta_Geo); i { + switch v := v.(*ServerMeta_Event); i { case 0: return &v.state case 1: @@ -10888,7 +11106,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta_Client); i { + switch v := v.(*ServerMeta_Geo); i { case 0: return &v.state case 1: @@ -10900,7 +11118,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta_Peer); i { + switch v := v.(*ServerMeta_Client); i { case 0: return &v.state case 1: @@ -10912,7 +11130,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta_AdditionalBeaconP2PAttestationData); i { + switch v := v.(*ServerMeta_Peer); i { case 0: return &v.state case 1: @@ -10924,7 +11142,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta_AdditionalLibp2PTraceConnectedData); i { + switch v := v.(*ServerMeta_AdditionalBeaconP2PAttestationData); i { case 0: return &v.state case 1: @@ -10936,6 +11154,18 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerMeta_AdditionalLibp2PTraceConnectedData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_xatu_event_ingester_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_AdditionalLibp2PTraceDisconnectedData); i { case 0: return &v.state @@ -10997,6 +11227,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { (*ClientMeta_Libp2PTraceHandleStatus)(nil), (*ClientMeta_Libp2PTraceGossipsubBeaconBlock)(nil), (*ClientMeta_Libp2PTraceGossipsubBeaconAttestation)(nil), + (*ClientMeta_Libp2PTraceGossipsubBlobSidecar)(nil), } file_pkg_proto_xatu_event_ingester_proto_msgTypes[15].OneofWrappers = []interface{}{ (*ServerMeta_BEACON_P2P_ATTESTATION)(nil), @@ -11052,6 +11283,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { (*DecoratedEvent_Libp2PTraceHandleStatus)(nil), (*DecoratedEvent_Libp2PTraceGossipsubBeaconBlock)(nil), (*DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation)(nil), + (*DecoratedEvent_Libp2PTraceGossipsubBlobSidecar)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -11059,7 +11291,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_proto_xatu_event_ingester_proto_rawDesc, NumEnums: 1, - NumMessages: 90, + NumMessages: 91, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/proto/xatu/event_ingester.proto b/pkg/proto/xatu/event_ingester.proto index 0e1b8586..3d16942d 100644 --- a/pkg/proto/xatu/event_ingester.proto +++ b/pkg/proto/xatu/event_ingester.proto @@ -893,6 +893,35 @@ message ClientMeta { // MessageID is a unique identifier for the beacon block message. google.protobuf.StringValue message_id = 12 [ json_name = "message_id" ]; } + + message AdditionalLibP2PTraceGossipSubBlobSidecarData { + // Epoch contains the epoch information for the blob sidecar. + EpochV2 epoch = 1; + + // Slot contains the slot information for the blob sidecar. + SlotV2 slot = 2; + + // WallclockEpoch contains the epoch information for the blob sidecar in the wall clock time. + EpochV2 wallclock_epoch = 3 [ json_name = "wallclock_epoch" ]; + + // WallclockSlot contains the slot information for the blob sidecar in the wall clock time. + SlotV2 wallclock_slot = 4 [ json_name = "wallclock_slot" ]; + + // Propagation contains information about the propagation of the blob sidecar. + PropagationV2 propagation = 5; + + // Metadata contains additional trace event metadata. + xatu.libp2p.TraceEventMetadata metadata = 6; + + // Topic is the gossip sub topic the blob sidecar was received on. + google.protobuf.StringValue topic = 7; + + // MessageSize is the size of the blob sidecar message in bytes. + google.protobuf.UInt32Value message_size = 8 [ json_name = "message_size" ]; + + // MessageID is a unique identifier for the blob sidecar message. + google.protobuf.StringValue message_id = 9 [ json_name = "message_id" ]; + } // AdditionalData contains additional, computed data as set by the client // about the event. @@ -1075,6 +1104,8 @@ message ClientMeta { AdditionalLibP2PTraceGossipSubBeaconBlockData libp2p_trace_gossipsub_beacon_block = 57 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK" ]; // AdditionalLibP2PTraceGossipSubBeaconAttestationData contains additional data about the gossip sub beacon attestation event. AdditionalLibP2PTraceGossipSubBeaconAttestationData libp2p_trace_gossipsub_beacon_attestation = 58 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" ]; + // AdditionalLibP2PTraceGossipSubBlobSidecarData contains additional data about the gossip sub blob sidecar event. + AdditionalLibP2PTraceGossipSubBlobSidecarData libp2p_trace_gossipsub_blob_sidecar = 59 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" ]; } } @@ -1216,6 +1247,7 @@ message Event { LIBP2P_TRACE_HANDLE_STATUS = 48; LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK = 49; LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION = 50; + LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR = 51; } // Name is the name of the event. Name name = 1; @@ -1347,5 +1379,7 @@ message DecoratedEvent { [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK" ]; xatu.eth.v1.Attestation libp2p_trace_gossipsub_beacon_attestation = 50 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" ]; + xatu.libp2p.gossipsub.eth.BlobSidecar libp2p_trace_gossipsub_blob_sidecar = 51 + [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" ]; }; } diff --git a/pkg/server/service/event-ingester/event/event.go b/pkg/server/service/event-ingester/event/event.go index 301d9e45..5d032358 100644 --- a/pkg/server/service/event-ingester/event/event.go +++ b/pkg/server/service/event-ingester/event/event.go @@ -5,6 +5,8 @@ import ( "errors" "fmt" + "github.com/sirupsen/logrus" + "github.com/ethpandaops/xatu/pkg/proto/xatu" "github.com/ethpandaops/xatu/pkg/server/geoip" v1 "github.com/ethpandaops/xatu/pkg/server/service/event-ingester/event/beacon/eth/v1" @@ -13,7 +15,6 @@ import ( "github.com/ethpandaops/xatu/pkg/server/service/event-ingester/event/libp2p" "github.com/ethpandaops/xatu/pkg/server/service/event-ingester/event/mempool" "github.com/ethpandaops/xatu/pkg/server/store" - "github.com/sirupsen/logrus" ) type Type string @@ -68,6 +69,7 @@ var ( TypeLibP2PTraceHandleMetadata Type = Type(libp2p.TraceHandleMetadataType) TypeLibP2PTraceGossipSubBeaconBlock Type = Type(libp2p.TraceGossipSubBeaconBlockType) TypeLibP2PTraceGossipSubBeaconAttestation Type = Type(libp2p.TraceGossipSubBeaconAttestationType) + TypeLibP2PTraceGossipSubBlobSidecar Type = Type(libp2p.TraceGossipSubBlobSidecarType) ) type Event interface { @@ -180,6 +182,8 @@ func New(eventType Type, log logrus.FieldLogger, event *xatu.DecoratedEvent, cac return libp2p.NewTraceGossipSubBeaconBlock(log, event), nil case TypeLibP2PTraceGossipSubBeaconAttestation: return libp2p.NewTraceGossipSubBeaconAttestation(log, event), nil + case TypeLibP2PTraceGossipSubBlobSidecar: + return libp2p.NewTraceGossipSubBlobSidecar(log, event), nil default: return nil, fmt.Errorf("event type %s is unknown", eventType) } diff --git a/pkg/server/service/event-ingester/event/libp2p/trace_gossipsub_blob_sidecar.go b/pkg/server/service/event-ingester/event/libp2p/trace_gossipsub_blob_sidecar.go new file mode 100644 index 00000000..64086d61 --- /dev/null +++ b/pkg/server/service/event-ingester/event/libp2p/trace_gossipsub_blob_sidecar.go @@ -0,0 +1,50 @@ +package libp2p + +import ( + "context" + "errors" + + "github.com/sirupsen/logrus" + + "github.com/ethpandaops/xatu/pkg/proto/xatu" +) + +var ( + TraceGossipSubBlobSidecarType = xatu.Event_LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR.String() +) + +type TraceGossipSubBlobSidecar struct { + log logrus.FieldLogger + event *xatu.DecoratedEvent +} + +func NewTraceGossipSubBlobSidecar(log logrus.FieldLogger, event *xatu.DecoratedEvent) *TraceGossipSubBlobSidecar { + return &TraceGossipSubBlobSidecar{ + log: log.WithField("event", TraceGossipSubBlobSidecarType), + event: event, + } +} + +// AppendServerMeta implements event.Event. +func (t *TraceGossipSubBlobSidecar) AppendServerMeta(ctx context.Context, meta *xatu.ServerMeta) *xatu.ServerMeta { + return meta +} + +// Filter implements event.Event. +func (t *TraceGossipSubBlobSidecar) Filter(ctx context.Context) bool { + return false +} + +// Type implements event.Event. +func (t *TraceGossipSubBlobSidecar) Type() string { + return TraceGossipSubBlobSidecarType +} + +// Validate implements event.Event. +func (t *TraceGossipSubBlobSidecar) Validate(ctx context.Context) error { + if _, ok := t.event.Data.(*xatu.DecoratedEvent_Libp2PTraceGossipsubBlobSidecar); !ok { + return errors.New("failed to cast event data to TraceGossipSubBlobSidecar") + } + + return nil +} From 0b52747d01ff7f55873a18ad9af4f665ba3dd9e7 Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:47:00 +1000 Subject: [PATCH 03/22] feat(cl-mimicry): add block fields to blob sidecar events --- pkg/clmimicry/gossipsub_blob_sidecar.go | 12 +++++ .../blockprint/block_classification.pb.go | 4 +- pkg/proto/eth/v1/attestation.pb.go | 4 +- pkg/proto/eth/v1/beacon_block.pb.go | 4 +- pkg/proto/eth/v1/blob.pb.go | 4 +- pkg/proto/eth/v1/checkpoint.pb.go | 4 +- pkg/proto/eth/v1/committee.pb.go | 4 +- pkg/proto/eth/v1/duties.pb.go | 4 +- pkg/proto/eth/v1/events.pb.go | 4 +- pkg/proto/eth/v1/execution_engine.pb.go | 4 +- pkg/proto/eth/v1/fork_choice.pb.go | 4 +- pkg/proto/eth/v1/sync_committee.pb.go | 4 +- pkg/proto/eth/v2/beacon_block.pb.go | 4 +- pkg/proto/eth/v2/events.pb.go | 4 +- pkg/proto/eth/v2/withdrawals.pb.go | 4 +- pkg/proto/libp2p/eth.pb.go | 4 +- pkg/proto/libp2p/gossipsub/eth.pb.go | 52 ++++++++++++++----- pkg/proto/libp2p/gossipsub/eth.proto | 5 +- pkg/proto/libp2p/peer.pb.go | 4 +- pkg/proto/libp2p/trace.pb.go | 4 +- pkg/proto/xatu/coordinator.pb.go | 4 +- pkg/proto/xatu/coordinator_grpc.pb.go | 2 +- pkg/proto/xatu/event_ingester.pb.go | 4 +- pkg/proto/xatu/event_ingester_grpc.pb.go | 2 +- 24 files changed, 95 insertions(+), 54 deletions(-) diff --git a/pkg/clmimicry/gossipsub_blob_sidecar.go b/pkg/clmimicry/gossipsub_blob_sidecar.go index ab47b2f6..df0cec96 100644 --- a/pkg/clmimicry/gossipsub_blob_sidecar.go +++ b/pkg/clmimicry/gossipsub_blob_sidecar.go @@ -38,10 +38,22 @@ func (m *Mimicry) handleGossipBlobSidecar( return fmt.Errorf("invalid proposer index") } + stateRoot, ok := payload["StateRoot"].(string) + if !ok { + return fmt.Errorf("invalid state root") + } + + parentRoot, ok := payload["ParentRoot"].(string) + if !ok { + return fmt.Errorf("invalid parent root") + } + data := &gossipsub.BlobSidecar{ Index: wrapperspb.UInt64(blobIndex), Slot: wrapperspb.UInt64(uint64(slot)), ProposerIndex: wrapperspb.UInt64(uint64(proposerIndex)), + StateRoot: wrapperspb.String(stateRoot), + ParentRoot: wrapperspb.String(parentRoot), } metadata, ok := proto.Clone(clientMeta).(*xatu.ClientMeta) diff --git a/pkg/proto/blockprint/block_classification.pb.go b/pkg/proto/blockprint/block_classification.pb.go index 7dacf5a3..59877567 100644 --- a/pkg/proto/blockprint/block_classification.pb.go +++ b/pkg/proto/blockprint/block_classification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/blockprint/block_classification.proto package blockprint diff --git a/pkg/proto/eth/v1/attestation.pb.go b/pkg/proto/eth/v1/attestation.pb.go index e88179b6..a48218b7 100644 --- a/pkg/proto/eth/v1/attestation.pb.go +++ b/pkg/proto/eth/v1/attestation.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/attestation.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/beacon_block.pb.go b/pkg/proto/eth/v1/beacon_block.pb.go index 6bd7c4cc..7f1e0cbd 100644 --- a/pkg/proto/eth/v1/beacon_block.pb.go +++ b/pkg/proto/eth/v1/beacon_block.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/beacon_block.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/blob.pb.go b/pkg/proto/eth/v1/blob.pb.go index 4eacdc89..708e16f0 100644 --- a/pkg/proto/eth/v1/blob.pb.go +++ b/pkg/proto/eth/v1/blob.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/blob.proto package v1 diff --git a/pkg/proto/eth/v1/checkpoint.pb.go b/pkg/proto/eth/v1/checkpoint.pb.go index 8eb4e410..de681c73 100644 --- a/pkg/proto/eth/v1/checkpoint.pb.go +++ b/pkg/proto/eth/v1/checkpoint.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/checkpoint.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/committee.pb.go b/pkg/proto/eth/v1/committee.pb.go index 8108585b..7a07a4f1 100644 --- a/pkg/proto/eth/v1/committee.pb.go +++ b/pkg/proto/eth/v1/committee.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/committee.proto // Note: largely inspired by https://github.com/prysmaticlabs/prysm/tree/develop/proto/eth/v1 diff --git a/pkg/proto/eth/v1/duties.pb.go b/pkg/proto/eth/v1/duties.pb.go index 31987514..a5502f64 100644 --- a/pkg/proto/eth/v1/duties.pb.go +++ b/pkg/proto/eth/v1/duties.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/duties.proto package v1 diff --git a/pkg/proto/eth/v1/events.pb.go b/pkg/proto/eth/v1/events.pb.go index 45e146e5..533039ec 100644 --- a/pkg/proto/eth/v1/events.pb.go +++ b/pkg/proto/eth/v1/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/events.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/execution_engine.pb.go b/pkg/proto/eth/v1/execution_engine.pb.go index b0ec27c7..d86ea3a6 100644 --- a/pkg/proto/eth/v1/execution_engine.pb.go +++ b/pkg/proto/eth/v1/execution_engine.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/execution_engine.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/fork_choice.pb.go b/pkg/proto/eth/v1/fork_choice.pb.go index 73108ac4..6aa08831 100644 --- a/pkg/proto/eth/v1/fork_choice.pb.go +++ b/pkg/proto/eth/v1/fork_choice.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/fork_choice.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/sync_committee.pb.go b/pkg/proto/eth/v1/sync_committee.pb.go index 43123452..fef4b82c 100644 --- a/pkg/proto/eth/v1/sync_committee.pb.go +++ b/pkg/proto/eth/v1/sync_committee.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v1/sync_committee.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v2/beacon_block.pb.go b/pkg/proto/eth/v2/beacon_block.pb.go index 70987c38..3b70d032 100644 --- a/pkg/proto/eth/v2/beacon_block.pb.go +++ b/pkg/proto/eth/v2/beacon_block.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v2/beacon_block.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v2/events.pb.go b/pkg/proto/eth/v2/events.pb.go index 709a88d1..e89aa4f1 100644 --- a/pkg/proto/eth/v2/events.pb.go +++ b/pkg/proto/eth/v2/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v2/events.proto package v2 diff --git a/pkg/proto/eth/v2/withdrawals.pb.go b/pkg/proto/eth/v2/withdrawals.pb.go index c934b761..19ab86f8 100644 --- a/pkg/proto/eth/v2/withdrawals.pb.go +++ b/pkg/proto/eth/v2/withdrawals.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/eth/v2/withdrawals.proto // Note: largely inspired by diff --git a/pkg/proto/libp2p/eth.pb.go b/pkg/proto/libp2p/eth.pb.go index 80d817c0..4c550365 100644 --- a/pkg/proto/libp2p/eth.pb.go +++ b/pkg/proto/libp2p/eth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/libp2p/eth.proto package libp2p diff --git a/pkg/proto/libp2p/gossipsub/eth.pb.go b/pkg/proto/libp2p/gossipsub/eth.pb.go index dac9a171..8e7da525 100644 --- a/pkg/proto/libp2p/gossipsub/eth.pb.go +++ b/pkg/proto/libp2p/gossipsub/eth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/libp2p/gossipsub/eth.proto package gossipsub @@ -92,6 +92,8 @@ type BlobSidecar struct { Index *wrapperspb.UInt64Value `protobuf:"bytes,1,opt,name=index,proto3" json:"index,omitempty"` Slot *wrapperspb.UInt64Value `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"` ProposerIndex *wrapperspb.UInt64Value `protobuf:"bytes,3,opt,name=proposer_index,proto3" json:"proposer_index,omitempty"` + StateRoot *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=state_root,proto3" json:"state_root,omitempty"` + ParentRoot *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=parent_root,proto3" json:"parent_root,omitempty"` } func (x *BlobSidecar) Reset() { @@ -147,6 +149,20 @@ func (x *BlobSidecar) GetProposerIndex() *wrapperspb.UInt64Value { return nil } +func (x *BlobSidecar) GetStateRoot() *wrapperspb.StringValue { + if x != nil { + return x.StateRoot + } + return nil +} + +func (x *BlobSidecar) GetParentRoot() *wrapperspb.StringValue { + if x != nil { + return x.ParentRoot + } + return nil +} + var File_pkg_proto_libp2p_gossipsub_eth_proto protoreflect.FileDescriptor var file_pkg_proto_libp2p_gossipsub_eth_proto_rawDesc = []byte{ @@ -167,7 +183,7 @@ var file_pkg_proto_libp2p_gossipsub_eth_proto_rawDesc = []byte{ 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb9, 0x01, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xb7, 0x02, 0x0a, 0x0b, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, @@ -179,11 +195,19 @@ var file_pkg_proto_libp2p_gossipsub_eth_proto_rawDesc = []byte{ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, - 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, - 0x73, 0x75, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3c, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, + 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -212,11 +236,13 @@ var file_pkg_proto_libp2p_gossipsub_eth_proto_depIdxs = []int32{ 3, // 3: xatu.libp2p.gossipsub.eth.BlobSidecar.index:type_name -> google.protobuf.UInt64Value 3, // 4: xatu.libp2p.gossipsub.eth.BlobSidecar.slot:type_name -> google.protobuf.UInt64Value 3, // 5: xatu.libp2p.gossipsub.eth.BlobSidecar.proposer_index:type_name -> google.protobuf.UInt64Value - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 2, // 6: xatu.libp2p.gossipsub.eth.BlobSidecar.state_root:type_name -> google.protobuf.StringValue + 2, // 7: xatu.libp2p.gossipsub.eth.BlobSidecar.parent_root:type_name -> google.protobuf.StringValue + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] 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_pkg_proto_libp2p_gossipsub_eth_proto_init() } diff --git a/pkg/proto/libp2p/gossipsub/eth.proto b/pkg/proto/libp2p/gossipsub/eth.proto index eebc55fc..fdf77c04 100644 --- a/pkg/proto/libp2p/gossipsub/eth.proto +++ b/pkg/proto/libp2p/gossipsub/eth.proto @@ -16,4 +16,7 @@ message BlobSidecar { google.protobuf.UInt64Value index = 1 [json_name = "index"]; google.protobuf.UInt64Value slot = 2 [json_name = "slot"]; google.protobuf.UInt64Value proposer_index = 3 [json_name = "proposer_index"]; -} \ No newline at end of file + google.protobuf.StringValue state_root = 4 [json_name = "state_root"]; + google.protobuf.StringValue parent_root = 5 [json_name = "parent_root"]; +} + diff --git a/pkg/proto/libp2p/peer.pb.go b/pkg/proto/libp2p/peer.pb.go index 5770fb45..6d6eec44 100644 --- a/pkg/proto/libp2p/peer.pb.go +++ b/pkg/proto/libp2p/peer.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/libp2p/peer.proto package libp2p diff --git a/pkg/proto/libp2p/trace.pb.go b/pkg/proto/libp2p/trace.pb.go index 0063ba32..59bb9d5d 100644 --- a/pkg/proto/libp2p/trace.pb.go +++ b/pkg/proto/libp2p/trace.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/libp2p/trace.proto package libp2p diff --git a/pkg/proto/xatu/coordinator.pb.go b/pkg/proto/xatu/coordinator.pb.go index d9893cd8..9b4dab36 100644 --- a/pkg/proto/xatu/coordinator.pb.go +++ b/pkg/proto/xatu/coordinator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/xatu/coordinator.proto package xatu diff --git a/pkg/proto/xatu/coordinator_grpc.pb.go b/pkg/proto/xatu/coordinator_grpc.pb.go index 2bfbdc1d..62dd61d1 100644 --- a/pkg/proto/xatu/coordinator_grpc.pb.go +++ b/pkg/proto/xatu/coordinator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.2 +// - protoc v4.25.3 // source: pkg/proto/xatu/coordinator.proto package xatu diff --git a/pkg/proto/xatu/event_ingester.pb.go b/pkg/proto/xatu/event_ingester.pb.go index d062ffb1..7562b9ce 100644 --- a/pkg/proto/xatu/event_ingester.pb.go +++ b/pkg/proto/xatu/event_ingester.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.2 +// protoc-gen-go v1.32.0 +// protoc v4.25.3 // source: pkg/proto/xatu/event_ingester.proto package xatu diff --git a/pkg/proto/xatu/event_ingester_grpc.pb.go b/pkg/proto/xatu/event_ingester_grpc.pb.go index 5b52401f..4b45748c 100644 --- a/pkg/proto/xatu/event_ingester_grpc.pb.go +++ b/pkg/proto/xatu/event_ingester_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.2 +// - protoc v4.25.3 // source: pkg/proto/xatu/event_ingester.proto package xatu From da4a24748376a8bfeba0453e70536e9af5138aaf Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:50:30 +1000 Subject: [PATCH 04/22] update deploy --- .../local/docker-compose/vector-kafka-clickhouse-libp2p.yaml | 2 ++ .../clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml b/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml index b5f52986..5616c438 100644 --- a/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml +++ b/deploy/local/docker-compose/vector-kafka-clickhouse-libp2p.yaml @@ -835,6 +835,8 @@ transforms: .propagation_slot_start_diff = .meta.client.additional_data.propagation.slot_start_diff .proposer_index = .data.proposer_index .blob_index = .data.index + .state_root = .data.state_root + .parent_root = .data.parent_root peer_id_key, err = .meta.client.additional_data.metadata.peer_id + .meta.ethereum.network.name if err != null { diff --git a/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql index 9e277fd4..7c0e913e 100644 --- a/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql +++ b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql @@ -14,6 +14,8 @@ ON CLUSTER '{cluster}' ( propagation_slot_start_diff UInt32 Codec(ZSTD(1)), proposer_index UInt32 CODEC(ZSTD(1)), blob_index UInt32 CODEC(ZSTD(1)), + parent_root FixedString(66) Codec(ZSTD(1)), + state_root FixedString(66) Codec(ZSTD(1)), peer_id_unique_key Int64, message_id String CODEC(ZSTD(1)), message_size UInt32 Codec(ZSTD(1)), @@ -59,6 +61,8 @@ COMMENT COLUMN propagation_slot_start_diff 'Difference in slot start time for pr COMMENT COLUMN proposer_index 'The proposer index of the beacon block', COMMENT COLUMN blob_index 'Blob index associated with the record', COMMENT COLUMN peer_id_unique_key 'Unique key associated with the identifier of the peer', +COMMENT COLUMN parent_root 'Parent root of the beacon block', +COMMENT COLUMN state_root 'State root of the beacon block', COMMENT COLUMN message_id 'Identifier of the message', COMMENT COLUMN message_size 'Size of the message in bytes', COMMENT COLUMN topic_layer 'Layer of the topic in the gossipsub protocol', From 1fc8a0afefc7993070d61d39761047e17ca1ffc7 Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:55:49 +1000 Subject: [PATCH 05/22] add migration --- .../037_libp2p_gossipsub_blob_sidecar.up.sql | 4 ---- ...ssipsub_blob_sidecar_block_fields.down.sql | 11 +++++++++ ...gossipsub_blob_sidecar_block_fields.up.sql | 23 +++++++++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.down.sql create mode 100644 deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.up.sql diff --git a/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql index 7c0e913e..9e277fd4 100644 --- a/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql +++ b/deploy/migrations/clickhouse/037_libp2p_gossipsub_blob_sidecar.up.sql @@ -14,8 +14,6 @@ ON CLUSTER '{cluster}' ( propagation_slot_start_diff UInt32 Codec(ZSTD(1)), proposer_index UInt32 CODEC(ZSTD(1)), blob_index UInt32 CODEC(ZSTD(1)), - parent_root FixedString(66) Codec(ZSTD(1)), - state_root FixedString(66) Codec(ZSTD(1)), peer_id_unique_key Int64, message_id String CODEC(ZSTD(1)), message_size UInt32 Codec(ZSTD(1)), @@ -61,8 +59,6 @@ COMMENT COLUMN propagation_slot_start_diff 'Difference in slot start time for pr COMMENT COLUMN proposer_index 'The proposer index of the beacon block', COMMENT COLUMN blob_index 'Blob index associated with the record', COMMENT COLUMN peer_id_unique_key 'Unique key associated with the identifier of the peer', -COMMENT COLUMN parent_root 'Parent root of the beacon block', -COMMENT COLUMN state_root 'State root of the beacon block', COMMENT COLUMN message_id 'Identifier of the message', COMMENT COLUMN message_size 'Size of the message in bytes', COMMENT COLUMN topic_layer 'Layer of the topic in the gossipsub protocol', diff --git a/deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.down.sql b/deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.down.sql new file mode 100644 index 00000000..adb64a28 --- /dev/null +++ b/deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.down.sql @@ -0,0 +1,11 @@ +ALTER TABLE libp2p_gossipsub_blob_sidecar_local on cluster '{cluster}' + DROP COLUMN parent_root; + +ALTER TABLE libp2p_gossipsub_blob_sidecar on cluster '{cluster}' + DROP COLUMN parent_root; + +ALTER TABLE libp2p_gossipsub_blob_sidecar_local on cluster '{cluster}' + DROP COLUMN state_root; + +ALTER TABLE libp2p_gossipsub_blob_sidecar on cluster '{cluster}' + DROP COLUMN state_root; diff --git a/deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.up.sql b/deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.up.sql new file mode 100644 index 00000000..3418f78c --- /dev/null +++ b/deploy/migrations/clickhouse/038_libp2p_gossipsub_blob_sidecar_block_fields.up.sql @@ -0,0 +1,23 @@ +ALTER TABLE libp2p_gossipsub_blob_sidecar_local on cluster '{cluster}' +ADD COLUMN parent_root FixedString(66) Codec(ZSTD(1)) AFTER blob_index; + +ALTER TABLE libp2p_gossipsub_blob_sidecar on cluster '{cluster}' +ADD COLUMN parent_root FixedString(66) Codec(ZSTD(1)) AFTER blob_index; + +ALTER TABLE libp2p_gossipsub_blob_sidecar_local on cluster '{cluster}' +COMMENT COLUMN parent_root 'Parent root of the beacon block'; + +ALTER TABLE libp2p_gossipsub_blob_sidecar on cluster '{cluster}' +COMMENT COLUMN parent_root 'Parent root of the beacon block'; + +ALTER TABLE libp2p_gossipsub_blob_sidecar_local on cluster '{cluster}' +ADD COLUMN state_root FixedString(66) Codec(ZSTD(1)) AFTER parent_root; + +ALTER TABLE libp2p_gossipsub_blob_sidecar on cluster '{cluster}' +ADD COLUMN state_root FixedString(66) Codec(ZSTD(1)) AFTER parent_root; + +ALTER TABLE libp2p_gossipsub_blob_sidecar_local on cluster '{cluster}' +COMMENT COLUMN state_root 'State root of the beacon block'; + +ALTER TABLE libp2p_gossipsub_blob_sidecar on cluster '{cluster}' +COMMENT COLUMN state_root 'State root of the beacon block'; From 57d07e76d75bdcb89a092bd242947305f69375f8 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Tue, 4 Jun 2024 16:40:07 +1000 Subject: [PATCH 06/22] fix(ci): Fix Xatu Sentry smoke test (#327) * ci: Update GitHub Actions workflow for Xatu stack * ci: Update wait-on command in smoke test workflow * feat: Update Kurtosis config file path * chore: Remove unnecessary GitHub workflow step * fix: Update ClickHouse container name in smoke test workflow --- .github/workflows/sentry-smoke-test.yaml | 55 ++++++++---------------- 1 file changed, 17 insertions(+), 38 deletions(-) diff --git a/.github/workflows/sentry-smoke-test.yaml b/.github/workflows/sentry-smoke-test.yaml index db64e19a..2d1a4a94 100644 --- a/.github/workflows/sentry-smoke-test.yaml +++ b/.github/workflows/sentry-smoke-test.yaml @@ -18,18 +18,12 @@ jobs: run: | docker build -t ethpandaops/xatu:local . echo "Xatu image is built." - - name: Install Kurtosis - run: | - echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list - sudo apt update - sudo apt install kurtosis-cli - name: Create Kurtosis config file run: | - cat < network_params.yaml + cat < /tmp/network_params.yaml participants: - el_type: geth cl_type: teku - cl_image: ethpandaops/teku:master-16c4354 - el_type: nethermind cl_type: prysm - el_type: erigon @@ -56,38 +50,23 @@ jobs: - voluntary_exit - contribution_and_proof < Date: Fri, 7 Jun 2024 17:11:03 +1000 Subject: [PATCH 07/22] feat(cannon): Add BEACON_API_ETH_V1_BEACON_VALIDATORS (#329) * feat(cannon): Add BEACON_API_ETH_V1_BEACON_VALIDATORS * add clickhouse migrations * Add vector * add clickhouse migrations * refactor: Remove unnecessary code and optimize event generation --------- Co-authored-by: Andrew Davis <1709934+Savid@users.noreply.github.com> --- .../docker-compose/vector-http-kafka.yaml | 17 + .../vector-kafka-clickhouse.yaml | 99 + .../039_canonical_beacon_validators.down.sql | 2 + .../039_canonical_beacon_validators.up.sql | 85 + docker-compose.yml | 1 + go.mod | 2 +- go.sum | 4 +- pkg/cannon/cannon.go | 17 + .../beacon/eth/v1/beacon_validators.go | 354 ++ pkg/cannon/deriver/config.go | 1 + pkg/cannon/deriver/event_deriver.go | 1 + .../backfilling_checkpoint_iterator.go | 11 + .../blockprint/block_classification.pb.go | 4 +- pkg/proto/eth/v1/attestation.pb.go | 4 +- pkg/proto/eth/v1/beacon_block.pb.go | 4 +- pkg/proto/eth/v1/blob.pb.go | 4 +- pkg/proto/eth/v1/checkpoint.pb.go | 4 +- pkg/proto/eth/v1/committee.pb.go | 4 +- pkg/proto/eth/v1/duties.pb.go | 4 +- pkg/proto/eth/v1/events.pb.go | 4 +- pkg/proto/eth/v1/execution_engine.pb.go | 4 +- pkg/proto/eth/v1/fork_choice.pb.go | 4 +- pkg/proto/eth/v1/sync_committee.pb.go | 4 +- pkg/proto/eth/v1/validator.pb.go | 352 ++ pkg/proto/eth/v1/validator.proto | 26 + pkg/proto/eth/v2/beacon_block.pb.go | 4 +- pkg/proto/eth/v2/events.pb.go | 4 +- pkg/proto/eth/v2/withdrawals.pb.go | 4 +- pkg/proto/libp2p/eth.pb.go | 4 +- pkg/proto/libp2p/gossipsub/eth.pb.go | 4 +- pkg/proto/libp2p/peer.pb.go | 4 +- pkg/proto/libp2p/trace.pb.go | 4 +- pkg/proto/xatu/coordinator.pb.go | 667 ++- pkg/proto/xatu/coordinator.proto | 7 + pkg/proto/xatu/coordinator_grpc.pb.go | 2 +- pkg/proto/xatu/event_ingester.pb.go | 4852 +++++++++-------- pkg/proto/xatu/event_ingester.proto | 17 +- pkg/proto/xatu/event_ingester_grpc.pb.go | 2 +- pkg/server/persistence/cannon/location.go | 24 + .../event/beacon/eth/v1/beacon_validators.go | 50 + .../service/event-ingester/event/event.go | 7 +- 41 files changed, 4011 insertions(+), 2661 deletions(-) create mode 100644 deploy/migrations/clickhouse/039_canonical_beacon_validators.down.sql create mode 100644 deploy/migrations/clickhouse/039_canonical_beacon_validators.up.sql create mode 100644 pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go create mode 100644 pkg/proto/eth/v1/validator.pb.go create mode 100644 pkg/proto/eth/v1/validator.proto create mode 100644 pkg/server/service/event-ingester/event/beacon/eth/v1/beacon_validators.go diff --git a/deploy/local/docker-compose/vector-http-kafka.yaml b/deploy/local/docker-compose/vector-http-kafka.yaml index 71fdb64b..d450710c 100644 --- a/deploy/local/docker-compose/vector-http-kafka.yaml +++ b/deploy/local/docker-compose/vector-http-kafka.yaml @@ -66,6 +66,7 @@ transforms: libp2p_trace_gossipsub_beacon_block: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK" libp2p_trace_gossipsub_beacon_attestation: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" libp2p_trace_gossipsub_blob_sidecar: .event.name == "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" + beacon_api_eth_v1_beacon_validators: .event.name == "BEACON_API_ETH_V1_BEACON_VALIDATORS" sinks: metrics: type: prometheus_exporter @@ -873,3 +874,19 @@ sinks: enabled: true encoding: codec: json + beacon_api_eth_v1_beacon_validators_kafka: + type: kafka + buffer: + max_events: 500000 + batch: + timeout_secs: 0.5 + inputs: + - xatu_server_events_router.beacon_api_eth_v1_beacon_validators + bootstrap_servers: "${KAFKA_BROKERS}" + key_field: "event.id" + topic: beacon-api-eth-v1-beacon-validators + compression: snappy + healthcheck: + enabled: true + encoding: + codec: json \ No newline at end of file diff --git a/deploy/local/docker-compose/vector-kafka-clickhouse.yaml b/deploy/local/docker-compose/vector-kafka-clickhouse.yaml index b6f8cd88..2f9808f7 100644 --- a/deploy/local/docker-compose/vector-kafka-clickhouse.yaml +++ b/deploy/local/docker-compose/vector-kafka-clickhouse.yaml @@ -109,6 +109,18 @@ sources: - "^beacon-api-eth-v1-proposer-.+" librdkafka_options: message.max.bytes: "10485760" # 10MB + beacon_api_eth_v1_beacon_validators_kafka: + type: kafka + bootstrap_servers: "${KAFKA_BROKERS}" + auto_offset_reset: earliest + group_id: xatu-vector-kafka-clickhouse-beacon-api-eth-v1-beacon-validators + key_field: "event.id" + decoding: + codec: json + topics: + - "beacon-api-eth-v1-beacon-validators" + librdkafka_options: + message.max.bytes: "10485760" # 10MB transforms: xatu_server_events_meta: type: remap @@ -122,6 +134,7 @@ transforms: - beacon_api_eth_v1_beacon_blob_sidecar_kafka - beacon_p2p_events_kafka - beacon_api_eth_v1_proposer_kafka + - beacon_api_eth_v1_beacon_validators_kafka source: |- .meta_client_name = .meta.client.name .meta_client_id = .meta.client.id @@ -312,6 +325,7 @@ transforms: canonical_beacon_block_execution_transaction: .event.name == "BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION" canonical_beacon_block_proposer_slashing: .event.name == "BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING" canonical_beacon_block_voluntary_exit: .event.name == "BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT" + canonical_beacon_validators: .event.name == "BEACON_API_ETH_V1_BEACON_VALIDATORS" canonical_beacon_block_withdrawal: .event.name == "BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL" canonical_beacon_block: .event.name == "BEACON_API_ETH_V2_BEACON_BLOCK_V2" && .meta.client.additional_data.finalized_when_requested == true canonical_beacon_proposer_duty: .event.name == "BEACON_API_ETH_V1_PROPOSER_DUTY" && .meta.client.additional_data.state_id == "finalized" @@ -343,6 +357,7 @@ transforms: - xatu_server_events_router.beacon_p2p_attestation - xatu_server_events_router.blockprint_block_classification - xatu_server_events_router.canonical_beacon_blob_sidecar + - xatu_server_events_router.canonical_beacon_validators - xatu_server_events_router.canonical_beacon_block - xatu_server_events_router.canonical_beacon_block_attester_slashing - xatu_server_events_router.canonical_beacon_block_elaborated_attestation @@ -1455,6 +1470,70 @@ transforms: del(.event) del(.meta) del(.data) + canonical_beacon_validators_formatted: + type: remap + inputs: + - xatu_server_events_router.canonical_beacon_validators + source: |- + event_date_time, err = parse_timestamp(.event.date_time, format: "%+"); + if err == null { + .event_date_time = to_unix_timestamp(event_date_time, unit: "milliseconds") + } else { + .error = err + .error_description = "failed to parse event date time" + log(., level: "error", rate_limit_secs: 60) + } + + epoch_start_date_time, err = parse_timestamp(.meta.client.additional_data.epoch.start_date_time, format: "%+"); + if err == null { + .epoch_start_date_time = to_unix_timestamp(epoch_start_date_time) + } else { + .error = err + .error_description = "failed to parse epoch start date time" + log(., level: "error", rate_limit_secs: 60) + } + + events = [] + + .updated_date_time = to_unix_timestamp(now()) + + for_each(array!(.data.validators)) -> |_index, validator| { + events = push(events, { + "key": .event.id, + "event_date_time": .event_date_time, + "updated_date_time": .updated_date_time, + "meta_client_name": .meta_client_name, + "meta_client_id": .meta_client_id, + "meta_client_version": .meta_client_version, + "meta_client_implementation": .meta_client_implementation, + "meta_client_os": .meta_client_os, + "meta_client_ip": .meta_client_ip, + "meta_network_id": .meta_network_id, + "meta_network_name": .meta_network_name, + "meta_client_geo_city": .meta_client_geo_city, + "meta_client_geo_country": .meta_client_geo_country, + "meta_client_geo_country_code": .meta_client_geo_country_code, + "meta_client_geo_continent_code": .meta_client_geo_continent_code, + "meta_client_geo_longitude": .meta_client_geo_longitude, + "meta_client_geo_latitude": .meta_client_geo_latitude, + "meta_client_geo_autonomous_system_number": .meta_client_geo_autonomous_system_number, + "meta_client_geo_autonomous_system_organization": .meta_client_geo_autonomous_system_organization, + "epoch": .meta.client.additional_data.epoch.number, + "epoch_start_date_time": .epoch_start_date_time, + "index": validator.index, + "balance": validator.balance, + "status": validator.status, + "activation_eligibility_epoch": validator.data.activation_eligibility_epoch, + "activation_epoch": validator.data.activation_epoch, + "effective_balance": validator.data.effective_balance, + "exit_epoch": validator.data.exit_epoch, + "pubkey": validator.data.pubkey, + "slashed": validator.data.slashed, + "withdrawable_epoch": validator.data.withdrawable_epoch, + "withdrawal_credentials": validator.data.withdrawal_credentials + }) + } + . = events blockprint_block_classification_formatted: type: remap inputs: @@ -2288,3 +2367,23 @@ sinks: healthcheck: enabled: true skip_unknown_fields: false + canonical_beacon_validators_clickhouse: + type: clickhouse + inputs: + - canonical_beacon_validators_formatted + database: default + endpoint: "${CLICKHOUSE_ENDPOINT}" + table: canonical_beacon_validators + auth: + strategy: basic + user: "${CLICKHOUSE_USER}" + password: "${CLICKHOUSE_PASSWORD}" + batch: + max_bytes: 52428800 + max_events: 200000 + timeout_secs: 1 + buffer: + max_events: 200000 + healthcheck: + enabled: true + skip_unknown_fields: false \ No newline at end of file diff --git a/deploy/migrations/clickhouse/039_canonical_beacon_validators.down.sql b/deploy/migrations/clickhouse/039_canonical_beacon_validators.down.sql new file mode 100644 index 00000000..9c64079f --- /dev/null +++ b/deploy/migrations/clickhouse/039_canonical_beacon_validators.down.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS canonical_beacon_validators on cluster '{cluster}' SYNC; +DROP TABLE IF EXISTS canonical_beacon_validators_local on cluster '{cluster}' SYNC; diff --git a/deploy/migrations/clickhouse/039_canonical_beacon_validators.up.sql b/deploy/migrations/clickhouse/039_canonical_beacon_validators.up.sql new file mode 100644 index 00000000..32067185 --- /dev/null +++ b/deploy/migrations/clickhouse/039_canonical_beacon_validators.up.sql @@ -0,0 +1,85 @@ +CREATE TABLE default.canonical_beacon_validators_local on cluster '{cluster}' +( + updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), + epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), + epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + `index` UInt32 CODEC(ZSTD(1)), + balance UInt64 CODEC(ZSTD(1)), + `status` LowCardinality(String), + pubkey String CODEC(ZSTD(1)), + withdrawal_credentials String CODEC(ZSTD(1)), + effective_balance UInt64 CODEC(ZSTD(1)), + slashed Bool, + activation_epoch UInt64 CODEC(ZSTD(1)), + activation_eligibility_epoch UInt64 CODEC(ZSTD(1)), + exit_epoch UInt64 CODEC(ZSTD(1)), + withdrawable_epoch UInt64 CODEC(ZSTD(1)), + meta_client_name LowCardinality(String), + meta_client_id String CODEC(ZSTD(1)), + meta_client_version LowCardinality(String), + meta_client_implementation LowCardinality(String), + meta_client_os LowCardinality(String), + meta_client_ip Nullable(IPv6) CODEC(ZSTD(1)), + meta_client_geo_city LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_continent_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_longitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_latitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_number Nullable(UInt32) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_organization Nullable(String) CODEC(ZSTD(1)), + meta_network_id Int32 CODEC(DoubleDelta, ZSTD(1)), + meta_network_name LowCardinality(String), + meta_consensus_version LowCardinality(String), + meta_consensus_version_major LowCardinality(String), + meta_consensus_version_minor LowCardinality(String), + meta_consensus_version_patch LowCardinality(String), + meta_consensus_implementation LowCardinality(String), + meta_labels Map(String, String) CODEC(ZSTD(1)) +) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', updated_date_time) +PARTITION BY toStartOfMonth(epoch_start_date_time) +ORDER BY (epoch_start_date_time, index, meta_network_name); + +ALTER TABLE default.canonical_beacon_validators_local ON CLUSTER '{cluster}' +MODIFY COMMENT 'Contains a validator state for an epoch.', +COMMENT COLUMN updated_date_time 'When this row was last updated', +COMMENT COLUMN event_date_time 'When the client fetched the beacon block from a beacon node', +COMMENT COLUMN epoch 'The epoch number from beacon block payload', +COMMENT COLUMN epoch_start_date_time 'The wall clock time when the epoch started', +COMMENT COLUMN `index` 'The index of the validator', +COMMENT COLUMN `balance` 'The balance of the validator', +COMMENT COLUMN `status` 'The status of the validator', +COMMENT COLUMN pubkey 'The public key of the validator', +COMMENT COLUMN withdrawal_credentials 'The withdrawal credentials of the validator', +COMMENT COLUMN effective_balance 'The effective balance of the validator', +COMMENT COLUMN slashed 'Whether the validator is slashed', +COMMENT COLUMN activation_epoch 'The epoch when the validator was activated', +COMMENT COLUMN activation_eligibility_epoch 'The epoch when the validator was activated', +COMMENT COLUMN exit_epoch 'The epoch when the validator exited', +COMMENT COLUMN withdrawable_epoch 'The epoch when the validator can withdraw', +COMMENT COLUMN meta_client_name 'Name of the client that generated the event', +COMMENT COLUMN meta_client_id 'Unique Session ID of the client that generated the event. This changes every time the client is restarted.', +COMMENT COLUMN meta_client_version 'Version of the client that generated the event', +COMMENT COLUMN meta_client_implementation 'Implementation of the client that generated the event', +COMMENT COLUMN meta_client_os 'Operating system of the client that generated the event', +COMMENT COLUMN meta_client_ip 'IP address of the client that generated the event', +COMMENT COLUMN meta_client_geo_city 'City of the client that generated the event', +COMMENT COLUMN meta_client_geo_country 'Country of the client that generated the event', +COMMENT COLUMN meta_client_geo_country_code 'Country code of the client that generated the event', +COMMENT COLUMN meta_client_geo_continent_code 'Continent code of the client that generated the event', +COMMENT COLUMN meta_client_geo_longitude 'Longitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_latitude 'Latitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_number 'Autonomous system number of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_organization 'Autonomous system organization of the client that generated the event', +COMMENT COLUMN meta_network_id 'Ethereum network ID', +COMMENT COLUMN meta_network_name 'Ethereum network name', +COMMENT COLUMN meta_consensus_version 'Ethereum consensus client version that generated the event', +COMMENT COLUMN meta_consensus_version_major 'Ethereum consensus client major version that generated the event', +COMMENT COLUMN meta_consensus_version_minor 'Ethereum consensus client minor version that generated the event', +COMMENT COLUMN meta_consensus_version_patch 'Ethereum consensus client patch version that generated the event', +COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implementation that generated the event', +COMMENT COLUMN meta_labels 'Labels associated with the event'; + +CREATE TABLE canonical_beacon_validators on cluster '{cluster}' AS canonical_beacon_validators_local +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_local, cityHash64('epoch_start_date_time', 'index', 'meta_network_name')); diff --git a/docker-compose.yml b/docker-compose.yml index 27928209..9d3c3ae0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -265,6 +265,7 @@ services: "libp2p-trace-gossipsub-beacon-block" "libp2p-trace-gossipsub-beacon-attestation" "libp2p-trace-gossipsub-blob-sidecar" + "beacon-api-eth-v1-beacon-validators" ) for topic in "$${topics[@]}"; do echo "Creating topic: $$topic"; diff --git a/go.mod b/go.mod index c0d9dc83..e2d82c5a 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/chuckpreslar/emission v0.0.0-20170206194824-a7ddd980baf9 github.com/creasty/defaults v1.7.0 github.com/ethereum/go-ethereum v1.13.15 - github.com/ethpandaops/beacon v0.35.0 + github.com/ethpandaops/beacon v0.37.0 github.com/ethpandaops/ethcore v0.0.0-20240422023000-2a5727b18756 github.com/ethpandaops/ethwallclock v0.3.0 github.com/go-co-op/gocron v1.27.1 diff --git a/go.sum b/go.sum index 5f71e1e4..9531a6ba 100644 --- a/go.sum +++ b/go.sum @@ -260,8 +260,8 @@ github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= -github.com/ethpandaops/beacon v0.35.0 h1:ZkHfxm41N0wkv503Xdb6rFxLuEnIonClUQWUPFHS5VU= -github.com/ethpandaops/beacon v0.35.0/go.mod h1:B+SLxj1gnDd/Ia7cl/uuhzo1wyVf2p2puL6lmzPdPro= +github.com/ethpandaops/beacon v0.37.0 h1:T+F0IEjkSrevAbGA4zsqvqjnm4IRp+JKLsd8DyAO8ZQ= +github.com/ethpandaops/beacon v0.37.0/go.mod h1:B+SLxj1gnDd/Ia7cl/uuhzo1wyVf2p2puL6lmzPdPro= github.com/ethpandaops/ethcore v0.0.0-20240422023000-2a5727b18756 h1:8JWjrRfP14m0oxOk03m11n/xgdY5ceyUf/ZxYdOs5gE= github.com/ethpandaops/ethcore v0.0.0-20240422023000-2a5727b18756/go.mod h1:ZvKqL6CKxiraefdXPHeJurV2pDD/f2HF2uklDVdrry8= github.com/ethpandaops/ethwallclock v0.3.0 h1:xF5fwtBf+bHFHZKBnwiPFEuelW3sMM7SD3ZNFq1lJY4= diff --git a/pkg/cannon/cannon.go b/pkg/cannon/cannon.go index 84bf812b..261bb0fd 100644 --- a/pkg/cannon/cannon.go +++ b/pkg/cannon/cannon.go @@ -548,6 +548,23 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { c.beacon, clientMeta, ), + v1.NewBeaconValidatorsDeriver( + c.log, + &c.Config.Derivers.BeaconValidatorsConfig, + iterator.NewBackfillingCheckpoint( + c.log, + networkName, + networkID, + xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS, + c.coordinatorClient, + wallclock, + &backfillingCheckpointIteratorMetrics, + c.beacon, + finalizedCheckpoint, + ), + c.beacon, + clientMeta, + ), } c.eventDerivers = eventDerivers diff --git a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go new file mode 100644 index 00000000..4a131ec4 --- /dev/null +++ b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go @@ -0,0 +1,354 @@ +package v1 + +import ( + "context" + "fmt" + "time" + + client "github.com/attestantio/go-eth2-client" + "github.com/attestantio/go-eth2-client/api" + apiv1 "github.com/attestantio/go-eth2-client/api/v1" + "github.com/attestantio/go-eth2-client/spec/phase0" + backoff "github.com/cenkalti/backoff/v4" + "github.com/ethpandaops/xatu/pkg/cannon/ethereum" + "github.com/ethpandaops/xatu/pkg/cannon/iterator" + "github.com/ethpandaops/xatu/pkg/observability" + xatuethv1 "github.com/ethpandaops/xatu/pkg/proto/eth/v1" + "github.com/ethpandaops/xatu/pkg/proto/xatu" + "github.com/google/uuid" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/trace" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" +) + +const ( + BeaconValidatorsDeriverName = xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS +) + +type BeaconValidatorsDeriverConfig struct { + Enabled bool `yaml:"enabled" default:"true"` +} + +type BeaconValidatorsDeriver struct { + log logrus.FieldLogger + cfg *BeaconValidatorsDeriverConfig + iterator *iterator.BackfillingCheckpoint + onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error + beacon *ethereum.BeaconNode + clientMeta *xatu.ClientMeta +} + +func NewBeaconValidatorsDeriver(log logrus.FieldLogger, config *BeaconValidatorsDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BeaconValidatorsDeriver { + return &BeaconValidatorsDeriver{ + log: log.WithField("module", "cannon/event/beacon/eth/v1/validators"), + cfg: config, + iterator: iter, + beacon: beacon, + clientMeta: clientMeta, + } +} + +func (b *BeaconValidatorsDeriver) CannonType() xatu.CannonType { + return BeaconValidatorsDeriverName +} + +func (b *BeaconValidatorsDeriver) ActivationFork() string { + return ethereum.ForkNamePhase0 +} + +func (b *BeaconValidatorsDeriver) Name() string { + return BeaconValidatorsDeriverName.String() +} + +func (b *BeaconValidatorsDeriver) OnEventsDerived(ctx context.Context, fn func(ctx context.Context, events []*xatu.DecoratedEvent) error) { + b.onEventsCallbacks = append(b.onEventsCallbacks, fn) +} + +func (b *BeaconValidatorsDeriver) Start(ctx context.Context) error { + if !b.cfg.Enabled { + b.log.Info("Validator states deriver disabled") + + return nil + } + + b.log.Info("Validator states deriver enabled") + + // Start our main loop + b.run(ctx) + + return nil +} + +func (b *BeaconValidatorsDeriver) Stop(ctx context.Context) error { + return nil +} + +func (b *BeaconValidatorsDeriver) run(rctx context.Context) { + bo := backoff.NewExponentialBackOff() + bo.MaxInterval = 3 * time.Minute + + tracer := observability.Tracer() + + for { + select { + case <-rctx.Done(): + return + default: + operation := func() error { + ctx, span := tracer.Start(rctx, fmt.Sprintf("Derive %s", b.Name()), + trace.WithAttributes( + attribute.String("network", string(b.beacon.Metadata().Network.Name))), + ) + defer span.End() + + time.Sleep(100 * time.Millisecond) + + if err := b.beacon.Synced(ctx); err != nil { + span.SetStatus(codes.Error, err.Error()) + + return err + } + + // Get the next location. + location, _, err := b.iterator.Next(ctx) + if err != nil { + span.SetStatus(codes.Error, err.Error()) + + return err + } + + finality, err := b.beacon.Node().Finality() + if err != nil { + span.SetStatus(codes.Error, err.Error()) + + return errors.Wrap(err, "failed to get finality") + } + + if finality == nil { + span.SetStatus(codes.Error, "finality is nil") + + return errors.New("finality is nil") + } + + checkpoint := finality.Finalized + + processingFinalizedEpoch := false + epochToProcess := location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker().GetBackfillEpoch() - 1 + + if checkpoint.Epoch > phase0.Epoch(location.GetEthV1BeaconValidators().BackfillingCheckpointMarker.FinalizedEpoch) { + processingFinalizedEpoch = true + epochToProcess = int64(location.GetEthV1BeaconValidators().BackfillingCheckpointMarker.FinalizedEpoch) + 1 + } + + if !processingFinalizedEpoch && epochToProcess == -1 { + return nil + } + + events, err := b.processEpoch(ctx, phase0.Epoch(epochToProcess)) + if err != nil { + b.log.WithError(err).WithField("epoch", epochToProcess).Error("Failed to process epoch") + + span.SetStatus(codes.Error, err.Error()) + + return err + } + + for _, fn := range b.onEventsCallbacks { + if err := fn(ctx, events); err != nil { + span.SetStatus(codes.Error, err.Error()) + + return errors.Wrap(err, "failed to send events") + } + } + + if processingFinalizedEpoch { + location.Data = &xatu.CannonLocation_EthV1BeaconValidators{ + EthV1BeaconValidators: &xatu.CannonLocationEthV1BeaconValidators{ + BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ + BackfillEpoch: location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker().GetBackfillEpoch(), + FinalizedEpoch: uint64(epochToProcess), + }, + }, + } + } else { + location.Data = &xatu.CannonLocation_EthV1BeaconValidators{ + EthV1BeaconValidators: &xatu.CannonLocationEthV1BeaconValidators{ + BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ + BackfillEpoch: epochToProcess, + FinalizedEpoch: location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker().GetFinalizedEpoch(), + }, + }, + } + } + + span.SetAttributes(attribute.Int64("epoch", epochToProcess)) + span.SetAttributes(attribute.Bool("is_backfill", !processingFinalizedEpoch)) + + if err := b.iterator.UpdateLocation(ctx, location); err != nil { + span.SetStatus(codes.Error, err.Error()) + + return err + } + + bo.Reset() + + return nil + } + + if err := backoff.RetryNotify(operation, bo, func(err error, timer time.Duration) { + b.log.WithError(err).WithField("next_attempt", timer).Warn("Failed to process") + }); err != nil { + b.log.WithError(err).Warn("Failed to process") + } + } + } +} + +func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0.Epoch) ([]*xatu.DecoratedEvent, error) { + ctx, span := observability.Tracer().Start(ctx, + "BeaconValidatorsDeriver.processEpoch", + trace.WithAttributes(attribute.Int64("epoch", int64(epoch))), + ) + defer span.End() + + validatorStates, err := b.getValidatorsClient(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to fetch validator states") + } + + spec, err := b.beacon.Node().Spec() + if err != nil { + return nil, errors.Wrap(err, "failed to fetch spec") + } + + boundarySlot := phase0.Slot(uint64(epoch) * uint64(spec.SlotsPerEpoch)) + + validatorsResponse, err := validatorStates.Validators(ctx, &api.ValidatorsOpts{ + State: xatuethv1.SlotAsString(boundarySlot), + Common: api.CommonOpts{ + Timeout: 6 * time.Minute, // If we can't fetch 1 epoch of validators within 1 epoch we will never catch up. + }, + }) + if err != nil { + return nil, errors.Wrap(err, "failed to fetch validator states") + } + + validatorsMap := validatorsResponse.Data + + // Chunk the validators per 1000 + chunkSize := 1000 + + var validatorChunks [][]*apiv1.Validator + + currentChunk := []*apiv1.Validator{} + + for _, validator := range validatorsMap { + if len(currentChunk) == chunkSize { + validatorChunks = append(validatorChunks, currentChunk) + currentChunk = []*apiv1.Validator{} + } + + currentChunk = append(currentChunk, validator) + } + + if len(currentChunk) > 0 { + validatorChunks = append(validatorChunks, currentChunk) + } + + allEvents := []*xatu.DecoratedEvent{} + + for chunkNum, chunk := range validatorChunks { + event, err := b.createEventFromValidators(ctx, chunk, epoch) + if err != nil { + b.log. + WithError(err). + WithField("chunk_size", len(chunk)). + WithField("chunk_number", chunkNum). + WithField("epoch", epoch). + Error("Failed to create event from validator state") + + return nil, err + } + + allEvents = append(allEvents, event) + } + + return allEvents, nil +} + +func (b *BeaconValidatorsDeriver) getValidatorsClient(ctx context.Context) (client.ValidatorsProvider, error) { + if provider, isProvider := b.beacon.Node().Service().(client.ValidatorsProvider); isProvider { + return provider, nil + } + + return nil, errors.New("validator states client not found") +} + +func (b *BeaconValidatorsDeriver) createEventFromValidators(ctx context.Context, validators []*apiv1.Validator, epoch phase0.Epoch) (*xatu.DecoratedEvent, error) { + metadata, ok := proto.Clone(b.clientMeta).(*xatu.ClientMeta) + if !ok { + return nil, errors.New("failed to clone client metadata") + } + + data := xatu.Validators{} + for _, validator := range validators { + data.Validators = append(data.Validators, &xatuethv1.Validator{ + Index: wrapperspb.UInt64(uint64(validator.Index)), + Balance: wrapperspb.UInt64(uint64(validator.Balance)), + Status: wrapperspb.String(validator.Status.String()), + Data: &xatuethv1.ValidatorData{ + Pubkey: wrapperspb.String(validator.Validator.PublicKey.String()), + WithdrawalCredentials: wrapperspb.String(fmt.Sprintf("%#x", validator.Validator.WithdrawalCredentials)), + EffectiveBalance: wrapperspb.UInt64(uint64(validator.Validator.EffectiveBalance)), + Slashed: wrapperspb.Bool(validator.Validator.Slashed), + ActivationEpoch: wrapperspb.UInt64(uint64(validator.Validator.ActivationEpoch)), + ActivationEligibilityEpoch: wrapperspb.UInt64(uint64(validator.Validator.ActivationEligibilityEpoch)), + ExitEpoch: wrapperspb.UInt64(uint64(validator.Validator.ExitEpoch)), + WithdrawableEpoch: wrapperspb.UInt64(uint64(validator.Validator.WithdrawableEpoch)), + }, + }) + } + + decoratedEvent := &xatu.DecoratedEvent{ + Event: &xatu.Event{ + Name: xatu.Event_BEACON_API_ETH_V1_BEACON_VALIDATORS, + DateTime: timestamppb.New(time.Now()), + Id: uuid.New().String(), + }, + Meta: &xatu.Meta{ + Client: metadata, + }, + Data: &xatu.DecoratedEvent_EthV1Validators{ + EthV1Validators: &data, + }, + } + + additionalData, err := b.getAdditionalData(ctx, epoch) + if err != nil { + b.log.WithError(err).Error("Failed to get extra validator state data") + + return nil, err + } else { + decoratedEvent.Meta.Client.AdditionalData = &xatu.ClientMeta_EthV1Validators{ + EthV1Validators: additionalData, + } + } + + return decoratedEvent, nil +} + +func (b *BeaconValidatorsDeriver) getAdditionalData(_ context.Context, epoch phase0.Epoch) (*xatu.ClientMeta_AdditionalEthV1ValidatorsData, error) { + epochInfo := b.beacon.Metadata().Wallclock().Epochs().FromNumber(uint64(epoch)) + + return &xatu.ClientMeta_AdditionalEthV1ValidatorsData{ + Epoch: &xatu.EpochV2{ + Number: &wrapperspb.UInt64Value{Value: uint64(epoch)}, + StartDateTime: timestamppb.New(epochInfo.TimeWindow().Start()), + }, + }, nil +} diff --git a/pkg/cannon/deriver/config.go b/pkg/cannon/deriver/config.go index fb7e9c1a..dba072e3 100644 --- a/pkg/cannon/deriver/config.go +++ b/pkg/cannon/deriver/config.go @@ -20,6 +20,7 @@ type Config struct { BeaconBlobSidecarConfig v1.BeaconBlobDeriverConfig `yaml:"beaconBlobSidecar"` ProposerDutyConfig v1.ProposerDutyDeriverConfig `yaml:"proposerDuty"` ElaboratedAttestationConfig v2.ElaboratedAttestationDeriverConfig `yaml:"elaboratedAttestation"` + BeaconValidatorsConfig v1.BeaconValidatorsDeriverConfig `yaml:"beaconValidators"` } func (c *Config) Validate() error { diff --git a/pkg/cannon/deriver/event_deriver.go b/pkg/cannon/deriver/event_deriver.go index a4853d33..5a4de5fb 100644 --- a/pkg/cannon/deriver/event_deriver.go +++ b/pkg/cannon/deriver/event_deriver.go @@ -33,3 +33,4 @@ var _ EventDeriver = &blockprint.BlockClassificationDeriver{} var _ EventDeriver = &v2.ElaboratedAttestationDeriver{} var _ EventDeriver = &v1.ProposerDutyDeriver{} var _ EventDeriver = &v1.BeaconBlobDeriver{} +var _ EventDeriver = &v1.BeaconValidatorsDeriver{} diff --git a/pkg/cannon/iterator/backfilling_checkpoint_iterator.go b/pkg/cannon/iterator/backfilling_checkpoint_iterator.go index c45c9f44..6a8fd3f7 100644 --- a/pkg/cannon/iterator/backfilling_checkpoint_iterator.go +++ b/pkg/cannon/iterator/backfilling_checkpoint_iterator.go @@ -165,6 +165,8 @@ func (c *BackfillingCheckpoint) getMarker(location *xatu.CannonLocation) (*xatu. return location.GetEthV1BeaconProposerDuty().GetBackfillingCheckpointMarker(), nil case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION: return location.GetEthV2BeaconBlockElaboratedAttestation().GetBackfillingCheckpointMarker(), nil + case xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS: + return location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker(), nil default: return nil, errors.Errorf("unknown cannon type %s", location.Type) } @@ -195,6 +197,15 @@ func (c *BackfillingCheckpoint) createLocationFromEpochNumber(finalized, backfil }, }, } + case xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS: + location.Data = &xatu.CannonLocation_EthV1BeaconValidators{ + EthV1BeaconValidators: &xatu.CannonLocationEthV1BeaconValidators{ + BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ + FinalizedEpoch: uint64(finalized), + BackfillEpoch: int64(backfill), + }, + }, + } default: return location, errors.Errorf("unknown cannon type %s", location.Type) } diff --git a/pkg/proto/blockprint/block_classification.pb.go b/pkg/proto/blockprint/block_classification.pb.go index 59877567..7dacf5a3 100644 --- a/pkg/proto/blockprint/block_classification.pb.go +++ b/pkg/proto/blockprint/block_classification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/blockprint/block_classification.proto package blockprint diff --git a/pkg/proto/eth/v1/attestation.pb.go b/pkg/proto/eth/v1/attestation.pb.go index a48218b7..e88179b6 100644 --- a/pkg/proto/eth/v1/attestation.pb.go +++ b/pkg/proto/eth/v1/attestation.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/attestation.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/beacon_block.pb.go b/pkg/proto/eth/v1/beacon_block.pb.go index 7f1e0cbd..6bd7c4cc 100644 --- a/pkg/proto/eth/v1/beacon_block.pb.go +++ b/pkg/proto/eth/v1/beacon_block.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/beacon_block.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/blob.pb.go b/pkg/proto/eth/v1/blob.pb.go index 708e16f0..4eacdc89 100644 --- a/pkg/proto/eth/v1/blob.pb.go +++ b/pkg/proto/eth/v1/blob.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/blob.proto package v1 diff --git a/pkg/proto/eth/v1/checkpoint.pb.go b/pkg/proto/eth/v1/checkpoint.pb.go index de681c73..8eb4e410 100644 --- a/pkg/proto/eth/v1/checkpoint.pb.go +++ b/pkg/proto/eth/v1/checkpoint.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/checkpoint.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/committee.pb.go b/pkg/proto/eth/v1/committee.pb.go index 7a07a4f1..8108585b 100644 --- a/pkg/proto/eth/v1/committee.pb.go +++ b/pkg/proto/eth/v1/committee.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/committee.proto // Note: largely inspired by https://github.com/prysmaticlabs/prysm/tree/develop/proto/eth/v1 diff --git a/pkg/proto/eth/v1/duties.pb.go b/pkg/proto/eth/v1/duties.pb.go index a5502f64..31987514 100644 --- a/pkg/proto/eth/v1/duties.pb.go +++ b/pkg/proto/eth/v1/duties.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/duties.proto package v1 diff --git a/pkg/proto/eth/v1/events.pb.go b/pkg/proto/eth/v1/events.pb.go index 533039ec..45e146e5 100644 --- a/pkg/proto/eth/v1/events.pb.go +++ b/pkg/proto/eth/v1/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/events.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/execution_engine.pb.go b/pkg/proto/eth/v1/execution_engine.pb.go index d86ea3a6..b0ec27c7 100644 --- a/pkg/proto/eth/v1/execution_engine.pb.go +++ b/pkg/proto/eth/v1/execution_engine.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/execution_engine.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/fork_choice.pb.go b/pkg/proto/eth/v1/fork_choice.pb.go index 6aa08831..73108ac4 100644 --- a/pkg/proto/eth/v1/fork_choice.pb.go +++ b/pkg/proto/eth/v1/fork_choice.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/fork_choice.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/sync_committee.pb.go b/pkg/proto/eth/v1/sync_committee.pb.go index fef4b82c..43123452 100644 --- a/pkg/proto/eth/v1/sync_committee.pb.go +++ b/pkg/proto/eth/v1/sync_committee.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v1/sync_committee.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v1/validator.pb.go b/pkg/proto/eth/v1/validator.pb.go new file mode 100644 index 00000000..dd1ff97f --- /dev/null +++ b/pkg/proto/eth/v1/validator.pb.go @@ -0,0 +1,352 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.24.2 +// source: pkg/proto/eth/v1/validator.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ValidatorData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pubkey *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=pubkey,proto3" json:"pubkey,omitempty"` + WithdrawalCredentials *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=withdrawal_credentials,proto3" json:"withdrawal_credentials,omitempty"` + EffectiveBalance *wrapperspb.UInt64Value `protobuf:"bytes,3,opt,name=effective_balance,proto3" json:"effective_balance,omitempty"` + Slashed *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=slashed,proto3" json:"slashed,omitempty"` + ActivationEligibilityEpoch *wrapperspb.UInt64Value `protobuf:"bytes,5,opt,name=activation_eligibility_epoch,proto3" json:"activation_eligibility_epoch,omitempty"` + ActivationEpoch *wrapperspb.UInt64Value `protobuf:"bytes,6,opt,name=activation_epoch,proto3" json:"activation_epoch,omitempty"` + ExitEpoch *wrapperspb.UInt64Value `protobuf:"bytes,7,opt,name=exit_epoch,proto3" json:"exit_epoch,omitempty"` + WithdrawableEpoch *wrapperspb.UInt64Value `protobuf:"bytes,8,opt,name=withdrawable_epoch,proto3" json:"withdrawable_epoch,omitempty"` +} + +func (x *ValidatorData) Reset() { + *x = ValidatorData{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_eth_v1_validator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatorData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatorData) ProtoMessage() {} + +func (x *ValidatorData) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_eth_v1_validator_proto_msgTypes[0] + 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 ValidatorData.ProtoReflect.Descriptor instead. +func (*ValidatorData) Descriptor() ([]byte, []int) { + return file_pkg_proto_eth_v1_validator_proto_rawDescGZIP(), []int{0} +} + +func (x *ValidatorData) GetPubkey() *wrapperspb.StringValue { + if x != nil { + return x.Pubkey + } + return nil +} + +func (x *ValidatorData) GetWithdrawalCredentials() *wrapperspb.StringValue { + if x != nil { + return x.WithdrawalCredentials + } + return nil +} + +func (x *ValidatorData) GetEffectiveBalance() *wrapperspb.UInt64Value { + if x != nil { + return x.EffectiveBalance + } + return nil +} + +func (x *ValidatorData) GetSlashed() *wrapperspb.BoolValue { + if x != nil { + return x.Slashed + } + return nil +} + +func (x *ValidatorData) GetActivationEligibilityEpoch() *wrapperspb.UInt64Value { + if x != nil { + return x.ActivationEligibilityEpoch + } + return nil +} + +func (x *ValidatorData) GetActivationEpoch() *wrapperspb.UInt64Value { + if x != nil { + return x.ActivationEpoch + } + return nil +} + +func (x *ValidatorData) GetExitEpoch() *wrapperspb.UInt64Value { + if x != nil { + return x.ExitEpoch + } + return nil +} + +func (x *ValidatorData) GetWithdrawableEpoch() *wrapperspb.UInt64Value { + if x != nil { + return x.WithdrawableEpoch + } + return nil +} + +type Validator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data *ValidatorData `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Index *wrapperspb.UInt64Value `protobuf:"bytes,2,opt,name=index,proto3" json:"index,omitempty"` + Balance *wrapperspb.UInt64Value `protobuf:"bytes,3,opt,name=balance,proto3" json:"balance,omitempty"` + Status *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *Validator) Reset() { + *x = Validator{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_eth_v1_validator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Validator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Validator) ProtoMessage() {} + +func (x *Validator) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_eth_v1_validator_proto_msgTypes[1] + 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 Validator.ProtoReflect.Descriptor instead. +func (*Validator) Descriptor() ([]byte, []int) { + return file_pkg_proto_eth_v1_validator_proto_rawDescGZIP(), []int{1} +} + +func (x *Validator) GetData() *ValidatorData { + if x != nil { + return x.Data + } + return nil +} + +func (x *Validator) GetIndex() *wrapperspb.UInt64Value { + if x != nil { + return x.Index + } + return nil +} + +func (x *Validator) GetBalance() *wrapperspb.UInt64Value { + if x != nil { + return x.Balance + } + return nil +} + +func (x *Validator) GetStatus() *wrapperspb.StringValue { + if x != nil { + return x.Status + } + return nil +} + +var File_pkg_proto_eth_v1_validator_proto protoreflect.FileDescriptor + +var file_pkg_proto_eth_v1_validator_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, + 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x0b, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x1a, + 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xd5, 0x04, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x34, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, + 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4a, 0x0a, + 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x6c, 0x61, + 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x64, 0x12, + 0x60, 0x0a, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6c, + 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x48, 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x3c, 0x0a, 0x0a, 0x65, + 0x78, 0x69, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, + 0x78, 0x69, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x4c, 0x0a, 0x12, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0xdd, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x36, 0x0a, 0x07, 0x62, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, + 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_pkg_proto_eth_v1_validator_proto_rawDescOnce sync.Once + file_pkg_proto_eth_v1_validator_proto_rawDescData = file_pkg_proto_eth_v1_validator_proto_rawDesc +) + +func file_pkg_proto_eth_v1_validator_proto_rawDescGZIP() []byte { + file_pkg_proto_eth_v1_validator_proto_rawDescOnce.Do(func() { + file_pkg_proto_eth_v1_validator_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_proto_eth_v1_validator_proto_rawDescData) + }) + return file_pkg_proto_eth_v1_validator_proto_rawDescData +} + +var file_pkg_proto_eth_v1_validator_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_pkg_proto_eth_v1_validator_proto_goTypes = []interface{}{ + (*ValidatorData)(nil), // 0: xatu.eth.v1.ValidatorData + (*Validator)(nil), // 1: xatu.eth.v1.Validator + (*wrapperspb.StringValue)(nil), // 2: google.protobuf.StringValue + (*wrapperspb.UInt64Value)(nil), // 3: google.protobuf.UInt64Value + (*wrapperspb.BoolValue)(nil), // 4: google.protobuf.BoolValue +} +var file_pkg_proto_eth_v1_validator_proto_depIdxs = []int32{ + 2, // 0: xatu.eth.v1.ValidatorData.pubkey:type_name -> google.protobuf.StringValue + 2, // 1: xatu.eth.v1.ValidatorData.withdrawal_credentials:type_name -> google.protobuf.StringValue + 3, // 2: xatu.eth.v1.ValidatorData.effective_balance:type_name -> google.protobuf.UInt64Value + 4, // 3: xatu.eth.v1.ValidatorData.slashed:type_name -> google.protobuf.BoolValue + 3, // 4: xatu.eth.v1.ValidatorData.activation_eligibility_epoch:type_name -> google.protobuf.UInt64Value + 3, // 5: xatu.eth.v1.ValidatorData.activation_epoch:type_name -> google.protobuf.UInt64Value + 3, // 6: xatu.eth.v1.ValidatorData.exit_epoch:type_name -> google.protobuf.UInt64Value + 3, // 7: xatu.eth.v1.ValidatorData.withdrawable_epoch:type_name -> google.protobuf.UInt64Value + 0, // 8: xatu.eth.v1.Validator.data:type_name -> xatu.eth.v1.ValidatorData + 3, // 9: xatu.eth.v1.Validator.index:type_name -> google.protobuf.UInt64Value + 3, // 10: xatu.eth.v1.Validator.balance:type_name -> google.protobuf.UInt64Value + 2, // 11: xatu.eth.v1.Validator.status:type_name -> google.protobuf.StringValue + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_pkg_proto_eth_v1_validator_proto_init() } +func file_pkg_proto_eth_v1_validator_proto_init() { + if File_pkg_proto_eth_v1_validator_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_pkg_proto_eth_v1_validator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatorData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_eth_v1_validator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Validator); 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{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_pkg_proto_eth_v1_validator_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_pkg_proto_eth_v1_validator_proto_goTypes, + DependencyIndexes: file_pkg_proto_eth_v1_validator_proto_depIdxs, + MessageInfos: file_pkg_proto_eth_v1_validator_proto_msgTypes, + }.Build() + File_pkg_proto_eth_v1_validator_proto = out.File + file_pkg_proto_eth_v1_validator_proto_rawDesc = nil + file_pkg_proto_eth_v1_validator_proto_goTypes = nil + file_pkg_proto_eth_v1_validator_proto_depIdxs = nil +} diff --git a/pkg/proto/eth/v1/validator.proto b/pkg/proto/eth/v1/validator.proto new file mode 100644 index 00000000..adcbd473 --- /dev/null +++ b/pkg/proto/eth/v1/validator.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +package xatu.eth.v1; + +option go_package = "github.com/ethpandaops/xatu/pkg/proto/eth/v1"; + +import "google/protobuf/wrappers.proto"; + +message ValidatorData { + google.protobuf.StringValue pubkey = 1; + google.protobuf.StringValue withdrawal_credentials = 2 [ json_name = "withdrawal_credentials" ]; + google.protobuf.UInt64Value effective_balance = 3 [ json_name = "effective_balance" ]; + google.protobuf.BoolValue slashed = 4; + google.protobuf.UInt64Value activation_eligibility_epoch = 5 [ json_name = "activation_eligibility_epoch" ]; + google.protobuf.UInt64Value activation_epoch = 6 [ json_name = "activation_epoch" ]; + google.protobuf.UInt64Value exit_epoch = 7 [ json_name = "exit_epoch" ]; + google.protobuf.UInt64Value withdrawable_epoch = 8 [ json_name = "withdrawable_epoch" ]; +} + +message Validator { + ValidatorData data = 1; + google.protobuf.UInt64Value index = 2; + google.protobuf.UInt64Value balance = 3; + google.protobuf.StringValue status = 4; +} + diff --git a/pkg/proto/eth/v2/beacon_block.pb.go b/pkg/proto/eth/v2/beacon_block.pb.go index 3b70d032..70987c38 100644 --- a/pkg/proto/eth/v2/beacon_block.pb.go +++ b/pkg/proto/eth/v2/beacon_block.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v2/beacon_block.proto // Note: largely inspired by diff --git a/pkg/proto/eth/v2/events.pb.go b/pkg/proto/eth/v2/events.pb.go index e89aa4f1..709a88d1 100644 --- a/pkg/proto/eth/v2/events.pb.go +++ b/pkg/proto/eth/v2/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v2/events.proto package v2 diff --git a/pkg/proto/eth/v2/withdrawals.pb.go b/pkg/proto/eth/v2/withdrawals.pb.go index 19ab86f8..c934b761 100644 --- a/pkg/proto/eth/v2/withdrawals.pb.go +++ b/pkg/proto/eth/v2/withdrawals.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/eth/v2/withdrawals.proto // Note: largely inspired by diff --git a/pkg/proto/libp2p/eth.pb.go b/pkg/proto/libp2p/eth.pb.go index 4c550365..80d817c0 100644 --- a/pkg/proto/libp2p/eth.pb.go +++ b/pkg/proto/libp2p/eth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/libp2p/eth.proto package libp2p diff --git a/pkg/proto/libp2p/gossipsub/eth.pb.go b/pkg/proto/libp2p/gossipsub/eth.pb.go index 8e7da525..4ebdbede 100644 --- a/pkg/proto/libp2p/gossipsub/eth.pb.go +++ b/pkg/proto/libp2p/gossipsub/eth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/libp2p/gossipsub/eth.proto package gossipsub diff --git a/pkg/proto/libp2p/peer.pb.go b/pkg/proto/libp2p/peer.pb.go index 6d6eec44..5770fb45 100644 --- a/pkg/proto/libp2p/peer.pb.go +++ b/pkg/proto/libp2p/peer.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/libp2p/peer.proto package libp2p diff --git a/pkg/proto/libp2p/trace.pb.go b/pkg/proto/libp2p/trace.pb.go index 59bb9d5d..0063ba32 100644 --- a/pkg/proto/libp2p/trace.pb.go +++ b/pkg/proto/libp2p/trace.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/libp2p/trace.proto package libp2p diff --git a/pkg/proto/xatu/coordinator.pb.go b/pkg/proto/xatu/coordinator.pb.go index 9b4dab36..fa55b731 100644 --- a/pkg/proto/xatu/coordinator.pb.go +++ b/pkg/proto/xatu/coordinator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/xatu/coordinator.proto package xatu @@ -35,6 +35,7 @@ const ( CannonType_BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR CannonType = 9 CannonType_BEACON_API_ETH_V1_PROPOSER_DUTY CannonType = 10 CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION CannonType = 11 + CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS CannonType = 12 ) // Enum value maps for CannonType. @@ -52,6 +53,7 @@ var ( 9: "BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR", 10: "BEACON_API_ETH_V1_PROPOSER_DUTY", 11: "BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION", + 12: "BEACON_API_ETH_V1_BEACON_VALIDATORS", } CannonType_value = map[string]int32{ "BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT": 0, @@ -66,6 +68,7 @@ var ( "BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR": 9, "BEACON_API_ETH_V1_PROPOSER_DUTY": 10, "BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION": 11, + "BEACON_API_ETH_V1_BEACON_VALIDATORS": 12, } ) @@ -1405,6 +1408,53 @@ func (x *CannonLocationEthV2BeaconBlockElaboratedAttestation) GetBackfillingChec return nil } +type CannonLocationEthV1BeaconValidators struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,1,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` +} + +func (x *CannonLocationEthV1BeaconValidators) Reset() { + *x = CannonLocationEthV1BeaconValidators{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CannonLocationEthV1BeaconValidators) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CannonLocationEthV1BeaconValidators) ProtoMessage() {} + +func (x *CannonLocationEthV1BeaconValidators) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[25] + 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 CannonLocationEthV1BeaconValidators.ProtoReflect.Descriptor instead. +func (*CannonLocationEthV1BeaconValidators) Descriptor() ([]byte, []int) { + return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{25} +} + +func (x *CannonLocationEthV1BeaconValidators) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1426,13 +1476,14 @@ type CannonLocation struct { // *CannonLocation_EthV1BeaconBlobSidecar // *CannonLocation_EthV1BeaconProposerDuty // *CannonLocation_EthV2BeaconBlockElaboratedAttestation + // *CannonLocation_EthV1BeaconValidators Data isCannonLocation_Data `protobuf_oneof:"Data"` } func (x *CannonLocation) Reset() { *x = CannonLocation{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[25] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1445,7 +1496,7 @@ func (x *CannonLocation) String() string { func (*CannonLocation) ProtoMessage() {} func (x *CannonLocation) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[25] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1458,7 +1509,7 @@ func (x *CannonLocation) ProtoReflect() protoreflect.Message { // Deprecated: Use CannonLocation.ProtoReflect.Descriptor instead. func (*CannonLocation) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{25} + return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{26} } func (x *CannonLocation) GetNetworkId() string { @@ -1566,6 +1617,13 @@ func (x *CannonLocation) GetEthV2BeaconBlockElaboratedAttestation() *CannonLocat return nil } +func (x *CannonLocation) GetEthV1BeaconValidators() *CannonLocationEthV1BeaconValidators { + if x, ok := x.GetData().(*CannonLocation_EthV1BeaconValidators); ok { + return x.EthV1BeaconValidators + } + return nil +} + type isCannonLocation_Data interface { isCannonLocation_Data() } @@ -1618,6 +1676,10 @@ type CannonLocation_EthV2BeaconBlockElaboratedAttestation struct { EthV2BeaconBlockElaboratedAttestation *CannonLocationEthV2BeaconBlockElaboratedAttestation `protobuf:"bytes,14,opt,name=eth_v2_beacon_block_elaborated_attestation,json=BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION,proto3,oneof"` } +type CannonLocation_EthV1BeaconValidators struct { + EthV1BeaconValidators *CannonLocationEthV1BeaconValidators `protobuf:"bytes,15,opt,name=eth_v1_beacon_validators,json=BEACON_API_ETH_V1_BEACON_VALIDATORS,proto3,oneof"` +} + func (*CannonLocation_EthV2BeaconBlockVoluntaryExit) isCannonLocation_Data() {} func (*CannonLocation_EthV2BeaconBlockProposerSlashing) isCannonLocation_Data() {} @@ -1642,6 +1704,8 @@ func (*CannonLocation_EthV1BeaconProposerDuty) isCannonLocation_Data() {} func (*CannonLocation_EthV2BeaconBlockElaboratedAttestation) isCannonLocation_Data() {} +func (*CannonLocation_EthV1BeaconValidators) isCannonLocation_Data() {} + type GetCannonLocationRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1654,7 +1718,7 @@ type GetCannonLocationRequest struct { func (x *GetCannonLocationRequest) Reset() { *x = GetCannonLocationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[26] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1667,7 +1731,7 @@ func (x *GetCannonLocationRequest) String() string { func (*GetCannonLocationRequest) ProtoMessage() {} func (x *GetCannonLocationRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[26] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1680,7 +1744,7 @@ func (x *GetCannonLocationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCannonLocationRequest.ProtoReflect.Descriptor instead. func (*GetCannonLocationRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{26} + return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{27} } func (x *GetCannonLocationRequest) GetNetworkId() string { @@ -1708,7 +1772,7 @@ type GetCannonLocationResponse struct { func (x *GetCannonLocationResponse) Reset() { *x = GetCannonLocationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[27] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1721,7 +1785,7 @@ func (x *GetCannonLocationResponse) String() string { func (*GetCannonLocationResponse) ProtoMessage() {} func (x *GetCannonLocationResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[27] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1734,7 +1798,7 @@ func (x *GetCannonLocationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCannonLocationResponse.ProtoReflect.Descriptor instead. func (*GetCannonLocationResponse) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{27} + return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{28} } func (x *GetCannonLocationResponse) GetLocation() *CannonLocation { @@ -1755,7 +1819,7 @@ type UpsertCannonLocationRequest struct { func (x *UpsertCannonLocationRequest) Reset() { *x = UpsertCannonLocationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[28] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1768,7 +1832,7 @@ func (x *UpsertCannonLocationRequest) String() string { func (*UpsertCannonLocationRequest) ProtoMessage() {} func (x *UpsertCannonLocationRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[28] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1781,7 +1845,7 @@ func (x *UpsertCannonLocationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertCannonLocationRequest.ProtoReflect.Descriptor instead. func (*UpsertCannonLocationRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{28} + return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{29} } func (x *UpsertCannonLocationRequest) GetLocation() *CannonLocation { @@ -1800,7 +1864,7 @@ type UpsertCannonLocationResponse struct { func (x *UpsertCannonLocationResponse) Reset() { *x = UpsertCannonLocationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[29] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1813,7 +1877,7 @@ func (x *UpsertCannonLocationResponse) String() string { func (*UpsertCannonLocationResponse) ProtoMessage() {} func (x *UpsertCannonLocationResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[29] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1826,7 +1890,7 @@ func (x *UpsertCannonLocationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertCannonLocationResponse.ProtoReflect.Descriptor instead. func (*UpsertCannonLocationResponse) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{29} + return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{30} } type ExecutionNodeStatus_Capability struct { @@ -1841,7 +1905,7 @@ type ExecutionNodeStatus_Capability struct { func (x *ExecutionNodeStatus_Capability) Reset() { *x = ExecutionNodeStatus_Capability{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[30] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1854,7 +1918,7 @@ func (x *ExecutionNodeStatus_Capability) String() string { func (*ExecutionNodeStatus_Capability) ProtoMessage() {} func (x *ExecutionNodeStatus_Capability) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[30] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1896,7 +1960,7 @@ type ExecutionNodeStatus_ForkID struct { func (x *ExecutionNodeStatus_ForkID) Reset() { *x = ExecutionNodeStatus_ForkID{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[31] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1909,7 +1973,7 @@ func (x *ExecutionNodeStatus_ForkID) String() string { func (*ExecutionNodeStatus_ForkID) ProtoMessage() {} func (x *ExecutionNodeStatus_ForkID) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[31] + mi := &file_pkg_proto_xatu_coordinator_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2111,226 +2175,245 @@ var file_pkg_proto_xatu_coordinator_proto_rawDesc = []byte{ 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xef, 0x0d, - 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, - 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, - 0x79, 0x45, 0x78, 0x69, 0x74, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, - 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, - 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, - 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, - 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x30, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, - 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, - 0x12, 0x7a, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x8c, 0x01, + 0x0a, 0x23, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, + 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xe3, 0x0e, 0x0a, + 0x0e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, + 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, + 0x45, 0x78, 0x69, 0x74, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, + 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, + 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, - 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, - 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, - 0x6e, 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, - 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0xa7, 0x01, 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, - 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, - 0x6c, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, - 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x12, 0xa3, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, + 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, + 0x7a, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x83, 0x01, 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, - 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, - 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x63, 0x0a, 0x13, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, + 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x12, 0x7d, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x12, 0x77, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, - 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, - 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x73, 0x0a, 0x1b, 0x65, 0x74, 0x68, - 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0xa6, - 0x01, 0x0a, 0x2a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, + 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, + 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, + 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, + 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0xa7, 0x01, 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, + 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, + 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, + 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, + 0xa3, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x83, 0x01, 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, + 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, + 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, + 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x63, 0x0a, 0x13, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, + 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x00, + 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, - 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x42, 0x06, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, - 0x5f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x4d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, - 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x4f, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, - 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x1e, 0x0a, 0x1c, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x12, 0x7d, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, + 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, + 0x77, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, + 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, + 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x73, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, + 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0xa6, 0x01, + 0x0a, 0x2a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, + 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x72, 0x0a, 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, + 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, + 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x42, 0x06, 0x0a, 0x04, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x5f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x4d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2a, 0xd0, 0x04, 0x0a, 0x0a, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x31, 0x0a, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, - 0x10, 0x00, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x12, 0x30, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, + 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x30, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x1c, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, + 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2a, 0xf9, 0x04, 0x0a, 0x0a, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, - 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, - 0x49, 0x54, 0x10, 0x02, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, - 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x3a, 0x0a, 0x36, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, - 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0x04, 0x12, 0x38, 0x0a, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, - 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x10, 0x06, 0x12, - 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x10, 0x07, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, - 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, - 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, - 0x52, 0x10, 0x09, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, - 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x10, 0x0a, 0x12, 0x39, 0x0a, 0x35, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, - 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x0b, 0x32, 0x8a, 0x06, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x56, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1f, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, + 0x58, 0x49, 0x54, 0x10, 0x00, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, + 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, + 0x50, 0x4f, 0x53, 0x49, 0x54, 0x10, 0x02, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, + 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x3a, 0x0a, + 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x04, 0x12, 0x38, 0x0a, 0x34, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, + 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x10, 0x05, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, + 0x10, 0x06, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, + 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, + 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x29, 0x0a, 0x25, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, + 0x45, 0x43, 0x41, 0x52, 0x10, 0x09, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, + 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x10, 0x0a, 0x12, 0x39, 0x0a, 0x35, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, + 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0b, 0x12, 0x27, 0x0a, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x10, 0x0c, 0x32, + 0x8a, 0x06, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x56, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x2c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1f, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, + 0x1e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, - 0x2c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, - 0x01, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, + 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x7d, 0x0a, 0x1e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x73, 0x12, 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x65, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x61, - 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x5f, 0x0a, 0x14, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x55, + 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x14, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, - 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x55, 0x70, + 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, + 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2346,7 +2429,7 @@ func file_pkg_proto_xatu_coordinator_proto_rawDescGZIP() []byte { } var file_pkg_proto_xatu_coordinator_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pkg_proto_xatu_coordinator_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_pkg_proto_xatu_coordinator_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_pkg_proto_xatu_coordinator_proto_goTypes = []interface{}{ (CannonType)(0), // 0: xatu.CannonType (*CreateNodeRecordsRequest)(nil), // 1: xatu.CreateNodeRecordsRequest @@ -2374,56 +2457,59 @@ var file_pkg_proto_xatu_coordinator_proto_goTypes = []interface{}{ (*CannonLocationEthV1BeaconBlobSidecar)(nil), // 23: xatu.CannonLocationEthV1BeaconBlobSidecar (*CannonLocationEthV1BeaconProposerDuty)(nil), // 24: xatu.CannonLocationEthV1BeaconProposerDuty (*CannonLocationEthV2BeaconBlockElaboratedAttestation)(nil), // 25: xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation - (*CannonLocation)(nil), // 26: xatu.CannonLocation - (*GetCannonLocationRequest)(nil), // 27: xatu.GetCannonLocationRequest - (*GetCannonLocationResponse)(nil), // 28: xatu.GetCannonLocationResponse - (*UpsertCannonLocationRequest)(nil), // 29: xatu.UpsertCannonLocationRequest - (*UpsertCannonLocationResponse)(nil), // 30: xatu.UpsertCannonLocationResponse - (*ExecutionNodeStatus_Capability)(nil), // 31: xatu.ExecutionNodeStatus.Capability - (*ExecutionNodeStatus_ForkID)(nil), // 32: xatu.ExecutionNodeStatus.ForkID + (*CannonLocationEthV1BeaconValidators)(nil), // 26: xatu.CannonLocationEthV1BeaconValidators + (*CannonLocation)(nil), // 27: xatu.CannonLocation + (*GetCannonLocationRequest)(nil), // 28: xatu.GetCannonLocationRequest + (*GetCannonLocationResponse)(nil), // 29: xatu.GetCannonLocationResponse + (*UpsertCannonLocationRequest)(nil), // 30: xatu.UpsertCannonLocationRequest + (*UpsertCannonLocationResponse)(nil), // 31: xatu.UpsertCannonLocationResponse + (*ExecutionNodeStatus_Capability)(nil), // 32: xatu.ExecutionNodeStatus.Capability + (*ExecutionNodeStatus_ForkID)(nil), // 33: xatu.ExecutionNodeStatus.ForkID } var file_pkg_proto_xatu_coordinator_proto_depIdxs = []int32{ - 31, // 0: xatu.ExecutionNodeStatus.capabilities:type_name -> xatu.ExecutionNodeStatus.Capability - 32, // 1: xatu.ExecutionNodeStatus.fork_id:type_name -> xatu.ExecutionNodeStatus.ForkID + 32, // 0: xatu.ExecutionNodeStatus.capabilities:type_name -> xatu.ExecutionNodeStatus.Capability + 33, // 1: xatu.ExecutionNodeStatus.fork_id:type_name -> xatu.ExecutionNodeStatus.ForkID 5, // 2: xatu.CreateExecutionNodeRecordStatusRequest.status:type_name -> xatu.ExecutionNodeStatus 8, // 3: xatu.CoordinateExecutionNodeRecordsRequest.node_records:type_name -> xatu.CoordinatedNodeRecord 13, // 4: xatu.CannonLocationEthV1BeaconProposerDuty.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker 13, // 5: xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker - 0, // 6: xatu.CannonLocation.type:type_name -> xatu.CannonType - 14, // 7: xatu.CannonLocation.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.CannonLocationEthV2BeaconBlockVoluntaryExit - 15, // 8: xatu.CannonLocation.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockProposerSlashing - 16, // 9: xatu.CannonLocation.eth_v2_beacon_block_deposit:type_name -> xatu.CannonLocationEthV2BeaconBlockDeposit - 17, // 10: xatu.CannonLocation.eth_v2_beacon_block_attester_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockAttesterSlashing - 18, // 11: xatu.CannonLocation.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange - 19, // 12: xatu.CannonLocation.eth_v2_beacon_block_execution_transaction:type_name -> xatu.CannonLocationEthV2BeaconBlockExecutionTransaction - 20, // 13: xatu.CannonLocation.eth_v2_beacon_block_withdrawal:type_name -> xatu.CannonLocationEthV2BeaconBlockWithdrawal - 21, // 14: xatu.CannonLocation.eth_v2_beacon_block:type_name -> xatu.CannonLocationEthV2BeaconBlock - 22, // 15: xatu.CannonLocation.blockprint_block_classification:type_name -> xatu.CannonLocationBlockprintBlockClassification - 23, // 16: xatu.CannonLocation.eth_v1_beacon_blob_sidecar:type_name -> xatu.CannonLocationEthV1BeaconBlobSidecar - 24, // 17: xatu.CannonLocation.eth_v1_beacon_proposer_duty:type_name -> xatu.CannonLocationEthV1BeaconProposerDuty - 25, // 18: xatu.CannonLocation.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation - 0, // 19: xatu.GetCannonLocationRequest.type:type_name -> xatu.CannonType - 26, // 20: xatu.GetCannonLocationResponse.location:type_name -> xatu.CannonLocation - 26, // 21: xatu.UpsertCannonLocationRequest.location:type_name -> xatu.CannonLocation - 1, // 22: xatu.Coordinator.CreateNodeRecords:input_type -> xatu.CreateNodeRecordsRequest - 3, // 23: xatu.Coordinator.ListStalledExecutionNodeRecords:input_type -> xatu.ListStalledExecutionNodeRecordsRequest - 6, // 24: xatu.Coordinator.CreateExecutionNodeRecordStatus:input_type -> xatu.CreateExecutionNodeRecordStatusRequest - 9, // 25: xatu.Coordinator.CoordinateExecutionNodeRecords:input_type -> xatu.CoordinateExecutionNodeRecordsRequest - 11, // 26: xatu.Coordinator.GetDiscoveryNodeRecord:input_type -> xatu.GetDiscoveryNodeRecordRequest - 27, // 27: xatu.Coordinator.GetCannonLocation:input_type -> xatu.GetCannonLocationRequest - 29, // 28: xatu.Coordinator.UpsertCannonLocation:input_type -> xatu.UpsertCannonLocationRequest - 2, // 29: xatu.Coordinator.CreateNodeRecords:output_type -> xatu.CreateNodeRecordsResponse - 4, // 30: xatu.Coordinator.ListStalledExecutionNodeRecords:output_type -> xatu.ListStalledExecutionNodeRecordsResponse - 7, // 31: xatu.Coordinator.CreateExecutionNodeRecordStatus:output_type -> xatu.CreateExecutionNodeRecordStatusResponse - 10, // 32: xatu.Coordinator.CoordinateExecutionNodeRecords:output_type -> xatu.CoordinateExecutionNodeRecordsResponse - 12, // 33: xatu.Coordinator.GetDiscoveryNodeRecord:output_type -> xatu.GetDiscoveryNodeRecordResponse - 28, // 34: xatu.Coordinator.GetCannonLocation:output_type -> xatu.GetCannonLocationResponse - 30, // 35: xatu.Coordinator.UpsertCannonLocation:output_type -> xatu.UpsertCannonLocationResponse - 29, // [29:36] is the sub-list for method output_type - 22, // [22:29] is the sub-list for method input_type - 22, // [22:22] is the sub-list for extension type_name - 22, // [22:22] is the sub-list for extension extendee - 0, // [0:22] is the sub-list for field type_name + 13, // 6: xatu.CannonLocationEthV1BeaconValidators.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 0, // 7: xatu.CannonLocation.type:type_name -> xatu.CannonType + 14, // 8: xatu.CannonLocation.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.CannonLocationEthV2BeaconBlockVoluntaryExit + 15, // 9: xatu.CannonLocation.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockProposerSlashing + 16, // 10: xatu.CannonLocation.eth_v2_beacon_block_deposit:type_name -> xatu.CannonLocationEthV2BeaconBlockDeposit + 17, // 11: xatu.CannonLocation.eth_v2_beacon_block_attester_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockAttesterSlashing + 18, // 12: xatu.CannonLocation.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange + 19, // 13: xatu.CannonLocation.eth_v2_beacon_block_execution_transaction:type_name -> xatu.CannonLocationEthV2BeaconBlockExecutionTransaction + 20, // 14: xatu.CannonLocation.eth_v2_beacon_block_withdrawal:type_name -> xatu.CannonLocationEthV2BeaconBlockWithdrawal + 21, // 15: xatu.CannonLocation.eth_v2_beacon_block:type_name -> xatu.CannonLocationEthV2BeaconBlock + 22, // 16: xatu.CannonLocation.blockprint_block_classification:type_name -> xatu.CannonLocationBlockprintBlockClassification + 23, // 17: xatu.CannonLocation.eth_v1_beacon_blob_sidecar:type_name -> xatu.CannonLocationEthV1BeaconBlobSidecar + 24, // 18: xatu.CannonLocation.eth_v1_beacon_proposer_duty:type_name -> xatu.CannonLocationEthV1BeaconProposerDuty + 25, // 19: xatu.CannonLocation.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation + 26, // 20: xatu.CannonLocation.eth_v1_beacon_validators:type_name -> xatu.CannonLocationEthV1BeaconValidators + 0, // 21: xatu.GetCannonLocationRequest.type:type_name -> xatu.CannonType + 27, // 22: xatu.GetCannonLocationResponse.location:type_name -> xatu.CannonLocation + 27, // 23: xatu.UpsertCannonLocationRequest.location:type_name -> xatu.CannonLocation + 1, // 24: xatu.Coordinator.CreateNodeRecords:input_type -> xatu.CreateNodeRecordsRequest + 3, // 25: xatu.Coordinator.ListStalledExecutionNodeRecords:input_type -> xatu.ListStalledExecutionNodeRecordsRequest + 6, // 26: xatu.Coordinator.CreateExecutionNodeRecordStatus:input_type -> xatu.CreateExecutionNodeRecordStatusRequest + 9, // 27: xatu.Coordinator.CoordinateExecutionNodeRecords:input_type -> xatu.CoordinateExecutionNodeRecordsRequest + 11, // 28: xatu.Coordinator.GetDiscoveryNodeRecord:input_type -> xatu.GetDiscoveryNodeRecordRequest + 28, // 29: xatu.Coordinator.GetCannonLocation:input_type -> xatu.GetCannonLocationRequest + 30, // 30: xatu.Coordinator.UpsertCannonLocation:input_type -> xatu.UpsertCannonLocationRequest + 2, // 31: xatu.Coordinator.CreateNodeRecords:output_type -> xatu.CreateNodeRecordsResponse + 4, // 32: xatu.Coordinator.ListStalledExecutionNodeRecords:output_type -> xatu.ListStalledExecutionNodeRecordsResponse + 7, // 33: xatu.Coordinator.CreateExecutionNodeRecordStatus:output_type -> xatu.CreateExecutionNodeRecordStatusResponse + 10, // 34: xatu.Coordinator.CoordinateExecutionNodeRecords:output_type -> xatu.CoordinateExecutionNodeRecordsResponse + 12, // 35: xatu.Coordinator.GetDiscoveryNodeRecord:output_type -> xatu.GetDiscoveryNodeRecordResponse + 29, // 36: xatu.Coordinator.GetCannonLocation:output_type -> xatu.GetCannonLocationResponse + 31, // 37: xatu.Coordinator.UpsertCannonLocation:output_type -> xatu.UpsertCannonLocationResponse + 31, // [31:38] is the sub-list for method output_type + 24, // [24:31] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_pkg_proto_xatu_coordinator_proto_init() } @@ -2733,7 +2819,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CannonLocation); i { + switch v := v.(*CannonLocationEthV1BeaconValidators); i { case 0: return &v.state case 1: @@ -2745,7 +2831,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCannonLocationRequest); i { + switch v := v.(*CannonLocation); i { case 0: return &v.state case 1: @@ -2757,7 +2843,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCannonLocationResponse); i { + switch v := v.(*GetCannonLocationRequest); i { case 0: return &v.state case 1: @@ -2769,7 +2855,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertCannonLocationRequest); i { + switch v := v.(*GetCannonLocationResponse); i { case 0: return &v.state case 1: @@ -2781,7 +2867,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertCannonLocationResponse); i { + switch v := v.(*UpsertCannonLocationRequest); i { case 0: return &v.state case 1: @@ -2793,7 +2879,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecutionNodeStatus_Capability); i { + switch v := v.(*UpsertCannonLocationResponse); i { case 0: return &v.state case 1: @@ -2805,6 +2891,18 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } file_pkg_proto_xatu_coordinator_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExecutionNodeStatus_Capability); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_xatu_coordinator_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecutionNodeStatus_ForkID); i { case 0: return &v.state @@ -2817,7 +2915,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { } } } - file_pkg_proto_xatu_coordinator_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_pkg_proto_xatu_coordinator_proto_msgTypes[26].OneofWrappers = []interface{}{ (*CannonLocation_EthV2BeaconBlockVoluntaryExit)(nil), (*CannonLocation_EthV2BeaconBlockProposerSlashing)(nil), (*CannonLocation_EthV2BeaconBlockDeposit)(nil), @@ -2830,6 +2928,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { (*CannonLocation_EthV1BeaconBlobSidecar)(nil), (*CannonLocation_EthV1BeaconProposerDuty)(nil), (*CannonLocation_EthV2BeaconBlockElaboratedAttestation)(nil), + (*CannonLocation_EthV1BeaconValidators)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -2837,7 +2936,7 @@ func file_pkg_proto_xatu_coordinator_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_proto_xatu_coordinator_proto_rawDesc, NumEnums: 1, - NumMessages: 32, + NumMessages: 33, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/proto/xatu/coordinator.proto b/pkg/proto/xatu/coordinator.proto index 196cfdd1..383c82a5 100644 --- a/pkg/proto/xatu/coordinator.proto +++ b/pkg/proto/xatu/coordinator.proto @@ -100,6 +100,7 @@ enum CannonType { BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR = 9; BEACON_API_ETH_V1_PROPOSER_DUTY = 10; BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION = 11; + BEACON_API_ETH_V1_BEACON_VALIDATORS = 12; } message BackfillingCheckpointMarker { @@ -138,6 +139,10 @@ message CannonLocationEthV2BeaconBlockElaboratedAttestation { BackfillingCheckpointMarker backfilling_checkpoint_marker = 1; } +message CannonLocationEthV1BeaconValidators { + BackfillingCheckpointMarker backfilling_checkpoint_marker = 1; +} + message CannonLocation { string network_id = 1; CannonType type = 2; @@ -174,6 +179,8 @@ message CannonLocation { CannonLocationEthV2BeaconBlockElaboratedAttestation eth_v2_beacon_block_elaborated_attestation = 14 [ json_name = "BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION" ]; + CannonLocationEthV1BeaconValidators eth_v1_beacon_validators = 15 + [ json_name = "BEACON_API_ETH_V1_BEACON_VALIDATORS" ]; } } diff --git a/pkg/proto/xatu/coordinator_grpc.pb.go b/pkg/proto/xatu/coordinator_grpc.pb.go index 62dd61d1..2bfbdc1d 100644 --- a/pkg/proto/xatu/coordinator_grpc.pb.go +++ b/pkg/proto/xatu/coordinator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 +// - protoc v4.24.2 // source: pkg/proto/xatu/coordinator.proto package xatu diff --git a/pkg/proto/xatu/event_ingester.pb.go b/pkg/proto/xatu/event_ingester.pb.go index 7562b9ce..bdfa78d4 100644 --- a/pkg/proto/xatu/event_ingester.pb.go +++ b/pkg/proto/xatu/event_ingester.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.3 +// protoc-gen-go v1.31.0 +// protoc v4.24.2 // source: pkg/proto/xatu/event_ingester.proto package xatu @@ -82,6 +82,7 @@ const ( Event_LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK Event_Name = 49 Event_LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION Event_Name = 50 Event_LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR Event_Name = 51 + Event_BEACON_API_ETH_V1_BEACON_VALIDATORS Event_Name = 52 ) // Enum value maps for Event_Name. @@ -139,6 +140,7 @@ var ( 49: "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK", 50: "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION", 51: "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR", + 52: "BEACON_API_ETH_V1_BEACON_VALIDATORS", } Event_Name_value = map[string]int32{ "BEACON_API_ETH_V1_EVENTS_UNKNOWN": 0, @@ -193,6 +195,7 @@ var ( "LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK": 49, "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION": 50, "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR": 51, + "BEACON_API_ETH_V1_BEACON_VALIDATORS": 52, } ) @@ -220,7 +223,7 @@ func (x Event_Name) Number() protoreflect.EnumNumber { // Deprecated: Use Event_Name.Descriptor instead. func (Event_Name) EnumDescriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{17, 0} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{18, 0} } type CreateEventsRequest struct { @@ -929,6 +932,53 @@ func (x *DebugForkChoiceReorgV2) GetEvent() *v1.EventChainReorgV2 { return nil } +type Validators struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Validators []*v1.Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` +} + +func (x *Validators) Reset() { + *x = Validators{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Validators) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Validators) ProtoMessage() {} + +func (x *Validators) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[13] + 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 Validators.ProtoReflect.Descriptor instead. +func (*Validators) Descriptor() ([]byte, []int) { + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{13} +} + +func (x *Validators) GetValidators() []*v1.Validator { + if x != nil { + return x.Validators + } + return nil +} + type BlockIdentifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -947,7 +997,7 @@ type BlockIdentifier struct { func (x *BlockIdentifier) Reset() { *x = BlockIdentifier{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[13] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -960,7 +1010,7 @@ func (x *BlockIdentifier) String() string { func (*BlockIdentifier) ProtoMessage() {} func (x *BlockIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[13] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -973,7 +1023,7 @@ func (x *BlockIdentifier) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockIdentifier.ProtoReflect.Descriptor instead. func (*BlockIdentifier) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{13} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14} } func (x *BlockIdentifier) GetEpoch() *EpochV2 { @@ -1079,13 +1129,14 @@ type ClientMeta struct { // *ClientMeta_Libp2PTraceGossipsubBeaconBlock // *ClientMeta_Libp2PTraceGossipsubBeaconAttestation // *ClientMeta_Libp2PTraceGossipsubBlobSidecar + // *ClientMeta_EthV1Validators AdditionalData isClientMeta_AdditionalData `protobuf_oneof:"AdditionalData"` } func (x *ClientMeta) Reset() { *x = ClientMeta{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[14] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1098,7 +1149,7 @@ func (x *ClientMeta) String() string { func (*ClientMeta) ProtoMessage() {} func (x *ClientMeta) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[14] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1111,7 +1162,7 @@ func (x *ClientMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta.ProtoReflect.Descriptor instead. func (*ClientMeta) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15} } func (x *ClientMeta) GetName() string { @@ -1520,6 +1571,13 @@ func (x *ClientMeta) GetLibp2PTraceGossipsubBlobSidecar() *ClientMeta_Additional return nil } +func (x *ClientMeta) GetEthV1Validators() *ClientMeta_AdditionalEthV1ValidatorsData { + if x, ok := x.GetAdditionalData().(*ClientMeta_EthV1Validators); ok { + return x.EthV1Validators + } + return nil +} + type isClientMeta_AdditionalData interface { isClientMeta_AdditionalData() } @@ -1798,6 +1856,11 @@ type ClientMeta_Libp2PTraceGossipsubBlobSidecar struct { Libp2PTraceGossipsubBlobSidecar *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData `protobuf:"bytes,59,opt,name=libp2p_trace_gossipsub_blob_sidecar,json=LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR,proto3,oneof"` } +type ClientMeta_EthV1Validators struct { + // AdditionalEthV1ValidatorsData contains additional data about the eth v1 validators. + EthV1Validators *ClientMeta_AdditionalEthV1ValidatorsData `protobuf:"bytes,60,opt,name=eth_v1_validators,json=BEACON_API_ETH_V1_BEACON_VALIDATORS,proto3,oneof"` +} + func (*ClientMeta_EthV1EventsAttestation) isClientMeta_AdditionalData() {} func (*ClientMeta_EthV1EventsHead) isClientMeta_AdditionalData() {} @@ -1896,6 +1959,8 @@ func (*ClientMeta_Libp2PTraceGossipsubBeaconAttestation) isClientMeta_Additional func (*ClientMeta_Libp2PTraceGossipsubBlobSidecar) isClientMeta_AdditionalData() {} +func (*ClientMeta_EthV1Validators) isClientMeta_AdditionalData() {} + type ServerMeta struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1919,7 +1984,7 @@ type ServerMeta struct { func (x *ServerMeta) Reset() { *x = ServerMeta{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[15] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1932,7 +1997,7 @@ func (x *ServerMeta) String() string { func (*ServerMeta) ProtoMessage() {} func (x *ServerMeta) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[15] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1945,7 +2010,7 @@ func (x *ServerMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerMeta.ProtoReflect.Descriptor instead. func (*ServerMeta) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16} } func (x *ServerMeta) GetEvent() *ServerMeta_Event { @@ -2032,7 +2097,7 @@ type Meta struct { func (x *Meta) Reset() { *x = Meta{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[16] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2045,7 +2110,7 @@ func (x *Meta) String() string { func (*Meta) ProtoMessage() {} func (x *Meta) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[16] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2058,7 +2123,7 @@ func (x *Meta) ProtoReflect() protoreflect.Message { // Deprecated: Use Meta.ProtoReflect.Descriptor instead. func (*Meta) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{17} } func (x *Meta) GetClient() *ClientMeta { @@ -2091,7 +2156,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[17] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2104,7 +2169,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[17] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2117,7 +2182,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{17} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{18} } func (x *Event) GetName() Event_Name { @@ -2201,13 +2266,14 @@ type DecoratedEvent struct { // *DecoratedEvent_Libp2PTraceGossipsubBeaconBlock // *DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation // *DecoratedEvent_Libp2PTraceGossipsubBlobSidecar + // *DecoratedEvent_EthV1Validators Data isDecoratedEvent_Data `protobuf_oneof:"data"` } func (x *DecoratedEvent) Reset() { *x = DecoratedEvent{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[18] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2220,7 +2286,7 @@ func (x *DecoratedEvent) String() string { func (*DecoratedEvent) ProtoMessage() {} func (x *DecoratedEvent) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[18] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2233,7 +2299,7 @@ func (x *DecoratedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DecoratedEvent.ProtoReflect.Descriptor instead. func (*DecoratedEvent) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{18} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{19} } func (x *DecoratedEvent) GetEvent() *Event { @@ -2611,6 +2677,13 @@ func (x *DecoratedEvent) GetLibp2PTraceGossipsubBlobSidecar() *gossipsub.BlobSid return nil } +func (x *DecoratedEvent) GetEthV1Validators() *Validators { + if x, ok := x.GetData().(*DecoratedEvent_EthV1Validators); ok { + return x.EthV1Validators + } + return nil +} + type isDecoratedEvent_Data interface { isDecoratedEvent_Data() } @@ -2822,6 +2895,10 @@ type DecoratedEvent_Libp2PTraceGossipsubBlobSidecar struct { Libp2PTraceGossipsubBlobSidecar *gossipsub.BlobSidecar `protobuf:"bytes,51,opt,name=libp2p_trace_gossipsub_blob_sidecar,json=LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR,proto3,oneof"` } +type DecoratedEvent_EthV1Validators struct { + EthV1Validators *Validators `protobuf:"bytes,52,opt,name=eth_v1_validators,json=BEACON_API_ETH_V1_BEACON_VALIDATORS,proto3,oneof"` +} + func (*DecoratedEvent_EthV1EventsAttestation) isDecoratedEvent_Data() {} func (*DecoratedEvent_EthV1EventsBlock) isDecoratedEvent_Data() {} @@ -2920,6 +2997,8 @@ func (*DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation) isDecoratedEvent_Da func (*DecoratedEvent_Libp2PTraceGossipsubBlobSidecar) isDecoratedEvent_Data() {} +func (*DecoratedEvent_EthV1Validators) isDecoratedEvent_Data() {} + type ClientMeta_Ethereum struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2936,7 +3015,7 @@ type ClientMeta_Ethereum struct { func (x *ClientMeta_Ethereum) Reset() { *x = ClientMeta_Ethereum{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[19] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2949,7 +3028,7 @@ func (x *ClientMeta_Ethereum) String() string { func (*ClientMeta_Ethereum) ProtoMessage() {} func (x *ClientMeta_Ethereum) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[19] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2962,7 +3041,7 @@ func (x *ClientMeta_Ethereum) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta_Ethereum.ProtoReflect.Descriptor instead. func (*ClientMeta_Ethereum) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 0} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 0} } func (x *ClientMeta_Ethereum) GetNetwork() *ClientMeta_Ethereum_Network { @@ -2998,7 +3077,7 @@ type ClientMeta_AdditionalEthV1AttestationSourceData struct { func (x *ClientMeta_AdditionalEthV1AttestationSourceData) Reset() { *x = ClientMeta_AdditionalEthV1AttestationSourceData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[21] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3011,7 +3090,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationSourceData) String() string { func (*ClientMeta_AdditionalEthV1AttestationSourceData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1AttestationSourceData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[21] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3024,7 +3103,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationSourceData) ProtoReflect() protore // Deprecated: Use ClientMeta_AdditionalEthV1AttestationSourceData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1AttestationSourceData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 2} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 2} } func (x *ClientMeta_AdditionalEthV1AttestationSourceData) GetEpoch() *Epoch { @@ -3046,7 +3125,7 @@ type ClientMeta_AdditionalEthV1AttestationSourceV2Data struct { func (x *ClientMeta_AdditionalEthV1AttestationSourceV2Data) Reset() { *x = ClientMeta_AdditionalEthV1AttestationSourceV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[22] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3059,7 +3138,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationSourceV2Data) String() string { func (*ClientMeta_AdditionalEthV1AttestationSourceV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1AttestationSourceV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[22] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3072,7 +3151,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationSourceV2Data) ProtoReflect() proto // Deprecated: Use ClientMeta_AdditionalEthV1AttestationSourceV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1AttestationSourceV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 3} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 3} } func (x *ClientMeta_AdditionalEthV1AttestationSourceV2Data) GetEpoch() *EpochV2 { @@ -3094,7 +3173,7 @@ type ClientMeta_AdditionalEthV1AttestationTargetData struct { func (x *ClientMeta_AdditionalEthV1AttestationTargetData) Reset() { *x = ClientMeta_AdditionalEthV1AttestationTargetData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[23] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3107,7 +3186,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationTargetData) String() string { func (*ClientMeta_AdditionalEthV1AttestationTargetData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1AttestationTargetData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[23] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3120,7 +3199,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationTargetData) ProtoReflect() protore // Deprecated: Use ClientMeta_AdditionalEthV1AttestationTargetData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1AttestationTargetData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 4} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 4} } func (x *ClientMeta_AdditionalEthV1AttestationTargetData) GetEpoch() *Epoch { @@ -3142,7 +3221,7 @@ type ClientMeta_AdditionalEthV1AttestationTargetV2Data struct { func (x *ClientMeta_AdditionalEthV1AttestationTargetV2Data) Reset() { *x = ClientMeta_AdditionalEthV1AttestationTargetV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[24] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3155,7 +3234,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationTargetV2Data) String() string { func (*ClientMeta_AdditionalEthV1AttestationTargetV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1AttestationTargetV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[24] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3168,7 +3247,7 @@ func (x *ClientMeta_AdditionalEthV1AttestationTargetV2Data) ProtoReflect() proto // Deprecated: Use ClientMeta_AdditionalEthV1AttestationTargetV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1AttestationTargetV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 5} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 5} } func (x *ClientMeta_AdditionalEthV1AttestationTargetV2Data) GetEpoch() *EpochV2 { @@ -3203,7 +3282,7 @@ type ClientMeta_AdditionalEthV1EventsAttestationData struct { func (x *ClientMeta_AdditionalEthV1EventsAttestationData) Reset() { *x = ClientMeta_AdditionalEthV1EventsAttestationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[25] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3216,7 +3295,7 @@ func (x *ClientMeta_AdditionalEthV1EventsAttestationData) String() string { func (*ClientMeta_AdditionalEthV1EventsAttestationData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsAttestationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[25] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3229,7 +3308,7 @@ func (x *ClientMeta_AdditionalEthV1EventsAttestationData) ProtoReflect() protore // Deprecated: Use ClientMeta_AdditionalEthV1EventsAttestationData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsAttestationData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 6} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 6} } func (x *ClientMeta_AdditionalEthV1EventsAttestationData) GetSource() *ClientMeta_AdditionalEthV1AttestationSourceData { @@ -3299,7 +3378,7 @@ type ClientMeta_AdditionalEthV1EventsAttestationV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsAttestationV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsAttestationV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[26] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3312,7 +3391,7 @@ func (x *ClientMeta_AdditionalEthV1EventsAttestationV2Data) String() string { func (*ClientMeta_AdditionalEthV1EventsAttestationV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsAttestationV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[26] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3325,7 +3404,7 @@ func (x *ClientMeta_AdditionalEthV1EventsAttestationV2Data) ProtoReflect() proto // Deprecated: Use ClientMeta_AdditionalEthV1EventsAttestationV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsAttestationV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 7} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 7} } func (x *ClientMeta_AdditionalEthV1EventsAttestationV2Data) GetSource() *ClientMeta_AdditionalEthV1AttestationSourceV2Data { @@ -3386,7 +3465,7 @@ type ClientMeta_AdditionalEthV1EventsHeadData struct { func (x *ClientMeta_AdditionalEthV1EventsHeadData) Reset() { *x = ClientMeta_AdditionalEthV1EventsHeadData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[27] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3399,7 +3478,7 @@ func (x *ClientMeta_AdditionalEthV1EventsHeadData) String() string { func (*ClientMeta_AdditionalEthV1EventsHeadData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsHeadData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[27] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3412,7 +3491,7 @@ func (x *ClientMeta_AdditionalEthV1EventsHeadData) ProtoReflect() protoreflect.M // Deprecated: Use ClientMeta_AdditionalEthV1EventsHeadData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsHeadData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 8} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 8} } func (x *ClientMeta_AdditionalEthV1EventsHeadData) GetEpoch() *Epoch { @@ -3452,7 +3531,7 @@ type ClientMeta_AdditionalEthV1EventsHeadV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsHeadV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsHeadV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[28] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3465,7 +3544,7 @@ func (x *ClientMeta_AdditionalEthV1EventsHeadV2Data) String() string { func (*ClientMeta_AdditionalEthV1EventsHeadV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsHeadV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[28] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3478,7 +3557,7 @@ func (x *ClientMeta_AdditionalEthV1EventsHeadV2Data) ProtoReflect() protoreflect // Deprecated: Use ClientMeta_AdditionalEthV1EventsHeadV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsHeadV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 9} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 9} } func (x *ClientMeta_AdditionalEthV1EventsHeadV2Data) GetEpoch() *EpochV2 { @@ -3518,7 +3597,7 @@ type ClientMeta_AdditionalEthV1EventsBlockData struct { func (x *ClientMeta_AdditionalEthV1EventsBlockData) Reset() { *x = ClientMeta_AdditionalEthV1EventsBlockData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[29] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3531,7 +3610,7 @@ func (x *ClientMeta_AdditionalEthV1EventsBlockData) String() string { func (*ClientMeta_AdditionalEthV1EventsBlockData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsBlockData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[29] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3544,7 +3623,7 @@ func (x *ClientMeta_AdditionalEthV1EventsBlockData) ProtoReflect() protoreflect. // Deprecated: Use ClientMeta_AdditionalEthV1EventsBlockData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsBlockData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 10} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 10} } func (x *ClientMeta_AdditionalEthV1EventsBlockData) GetEpoch() *Epoch { @@ -3584,7 +3663,7 @@ type ClientMeta_AdditionalEthV1EventsBlockV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsBlockV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsBlockV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[30] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3597,7 +3676,7 @@ func (x *ClientMeta_AdditionalEthV1EventsBlockV2Data) String() string { func (*ClientMeta_AdditionalEthV1EventsBlockV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsBlockV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[30] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3610,7 +3689,7 @@ func (x *ClientMeta_AdditionalEthV1EventsBlockV2Data) ProtoReflect() protoreflec // Deprecated: Use ClientMeta_AdditionalEthV1EventsBlockV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsBlockV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 11} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 11} } func (x *ClientMeta_AdditionalEthV1EventsBlockV2Data) GetEpoch() *EpochV2 { @@ -3646,7 +3725,7 @@ type ClientMeta_AdditionalEthV1EventsVoluntaryExitData struct { func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitData) Reset() { *x = ClientMeta_AdditionalEthV1EventsVoluntaryExitData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[31] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3659,7 +3738,7 @@ func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitData) String() string { func (*ClientMeta_AdditionalEthV1EventsVoluntaryExitData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[31] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3672,7 +3751,7 @@ func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitData) ProtoReflect() proto // Deprecated: Use ClientMeta_AdditionalEthV1EventsVoluntaryExitData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsVoluntaryExitData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 12} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 12} } func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitData) GetEpoch() *Epoch { @@ -3694,7 +3773,7 @@ type ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[32] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3707,7 +3786,7 @@ func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) String() string { func (*ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[32] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3720,7 +3799,7 @@ func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) ProtoReflect() pro // Deprecated: Use ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 13} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 13} } func (x *ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data) GetEpoch() *EpochV2 { @@ -3742,7 +3821,7 @@ type ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData struct { func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) Reset() { *x = ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[33] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3755,7 +3834,7 @@ func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) String() strin func (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[33] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3768,7 +3847,7 @@ func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) ProtoReflect() // Deprecated: Use ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 14} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 14} } func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData) GetEpoch() *Epoch { @@ -3790,7 +3869,7 @@ type ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[34] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3803,7 +3882,7 @@ func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) String() str func (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[34] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3816,7 +3895,7 @@ func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) ProtoReflect // Deprecated: Use ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 15} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 15} } func (x *ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data) GetEpoch() *EpochV2 { @@ -3843,7 +3922,7 @@ type ClientMeta_AdditionalEthV1EventsChainReorgData struct { func (x *ClientMeta_AdditionalEthV1EventsChainReorgData) Reset() { *x = ClientMeta_AdditionalEthV1EventsChainReorgData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[35] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3856,7 +3935,7 @@ func (x *ClientMeta_AdditionalEthV1EventsChainReorgData) String() string { func (*ClientMeta_AdditionalEthV1EventsChainReorgData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsChainReorgData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[35] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3869,7 +3948,7 @@ func (x *ClientMeta_AdditionalEthV1EventsChainReorgData) ProtoReflect() protoref // Deprecated: Use ClientMeta_AdditionalEthV1EventsChainReorgData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsChainReorgData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 16} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 16} } func (x *ClientMeta_AdditionalEthV1EventsChainReorgData) GetEpoch() *Epoch { @@ -3910,7 +3989,7 @@ type ClientMeta_AdditionalEthV1EventsChainReorgV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsChainReorgV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsChainReorgV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[36] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3923,7 +4002,7 @@ func (x *ClientMeta_AdditionalEthV1EventsChainReorgV2Data) String() string { func (*ClientMeta_AdditionalEthV1EventsChainReorgV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsChainReorgV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[36] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3936,7 +4015,7 @@ func (x *ClientMeta_AdditionalEthV1EventsChainReorgV2Data) ProtoReflect() protor // Deprecated: Use ClientMeta_AdditionalEthV1EventsChainReorgV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsChainReorgV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 17} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 17} } func (x *ClientMeta_AdditionalEthV1EventsChainReorgV2Data) GetEpoch() *EpochV2 { @@ -3977,7 +4056,7 @@ type ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData struct func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) Reset() { *x = ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[37] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3990,7 +4069,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) S func (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[37] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4003,7 +4082,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) P // Deprecated: Use ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 18} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 18} } func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData) GetEpoch() *Epoch { @@ -4044,7 +4123,7 @@ type ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data stru func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[38] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4057,7 +4136,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) func (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[38] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4070,7 +4149,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) // Deprecated: Use ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 19} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 19} } func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data) GetEpoch() *EpochV2 { @@ -4105,7 +4184,7 @@ type ClientMeta_AdditionalEthV1EventsContributionAndProofData struct { func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofData) Reset() { *x = ClientMeta_AdditionalEthV1EventsContributionAndProofData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[39] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4118,7 +4197,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofData) String() stri func (*ClientMeta_AdditionalEthV1EventsContributionAndProofData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[39] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4131,7 +4210,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofData) ProtoReflect( // Deprecated: Use ClientMeta_AdditionalEthV1EventsContributionAndProofData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsContributionAndProofData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 20} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 20} } func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofData) GetContribution() *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData { @@ -4152,7 +4231,7 @@ type ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data struct { func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) Reset() { *x = ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[40] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4165,7 +4244,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) String() st func (*ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[40] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4178,7 +4257,7 @@ func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) ProtoReflec // Deprecated: Use ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 21} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 21} } func (x *ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data) GetContribution() *ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data { @@ -4212,7 +4291,7 @@ type ClientMeta_ForkChoiceSnapshot struct { func (x *ClientMeta_ForkChoiceSnapshot) Reset() { *x = ClientMeta_ForkChoiceSnapshot{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[41] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4225,7 +4304,7 @@ func (x *ClientMeta_ForkChoiceSnapshot) String() string { func (*ClientMeta_ForkChoiceSnapshot) ProtoMessage() {} func (x *ClientMeta_ForkChoiceSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[41] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4238,7 +4317,7 @@ func (x *ClientMeta_ForkChoiceSnapshot) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta_ForkChoiceSnapshot.ProtoReflect.Descriptor instead. func (*ClientMeta_ForkChoiceSnapshot) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 22} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 22} } func (x *ClientMeta_ForkChoiceSnapshot) GetRequestEpoch() *Epoch { @@ -4300,7 +4379,7 @@ type ClientMeta_ForkChoiceSnapshotV2 struct { func (x *ClientMeta_ForkChoiceSnapshotV2) Reset() { *x = ClientMeta_ForkChoiceSnapshotV2{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[42] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4313,7 +4392,7 @@ func (x *ClientMeta_ForkChoiceSnapshotV2) String() string { func (*ClientMeta_ForkChoiceSnapshotV2) ProtoMessage() {} func (x *ClientMeta_ForkChoiceSnapshotV2) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[42] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4326,7 +4405,7 @@ func (x *ClientMeta_ForkChoiceSnapshotV2) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta_ForkChoiceSnapshotV2.ProtoReflect.Descriptor instead. func (*ClientMeta_ForkChoiceSnapshotV2) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 23} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 23} } func (x *ClientMeta_ForkChoiceSnapshotV2) GetRequestEpoch() *EpochV2 { @@ -4375,7 +4454,7 @@ type ClientMeta_AdditionalEthV1DebugForkChoiceData struct { func (x *ClientMeta_AdditionalEthV1DebugForkChoiceData) Reset() { *x = ClientMeta_AdditionalEthV1DebugForkChoiceData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[43] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4388,7 +4467,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceData) String() string { func (*ClientMeta_AdditionalEthV1DebugForkChoiceData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1DebugForkChoiceData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[43] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4401,7 +4480,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceData) ProtoReflect() protorefl // Deprecated: Use ClientMeta_AdditionalEthV1DebugForkChoiceData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1DebugForkChoiceData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 24} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 24} } func (x *ClientMeta_AdditionalEthV1DebugForkChoiceData) GetSnapshot() *ClientMeta_ForkChoiceSnapshot { @@ -4422,7 +4501,7 @@ type ClientMeta_AdditionalEthV1DebugForkChoiceV2Data struct { func (x *ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) Reset() { *x = ClientMeta_AdditionalEthV1DebugForkChoiceV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[44] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4435,7 +4514,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) String() string { func (*ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[44] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4448,7 +4527,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) ProtoReflect() protore // Deprecated: Use ClientMeta_AdditionalEthV1DebugForkChoiceV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 25} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 25} } func (x *ClientMeta_AdditionalEthV1DebugForkChoiceV2Data) GetSnapshot() *ClientMeta_ForkChoiceSnapshotV2 { @@ -4470,7 +4549,7 @@ type ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData struct { func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) Reset() { *x = ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[45] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4483,7 +4562,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) String() string { func (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[45] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4496,7 +4575,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) ProtoReflect() prot // Deprecated: Use ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 26} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 26} } func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData) GetBefore() *ClientMeta_ForkChoiceSnapshot { @@ -4525,7 +4604,7 @@ type ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data struct { func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) Reset() { *x = ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[46] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4538,7 +4617,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) String() string { func (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[46] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4551,7 +4630,7 @@ func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) ProtoReflect() pr // Deprecated: Use ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 27} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 27} } func (x *ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data) GetBefore() *ClientMeta_ForkChoiceSnapshotV2 { @@ -4582,7 +4661,7 @@ type ClientMeta_AdditionalEthV1BeaconCommitteeData struct { func (x *ClientMeta_AdditionalEthV1BeaconCommitteeData) Reset() { *x = ClientMeta_AdditionalEthV1BeaconCommitteeData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[47] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4595,7 +4674,7 @@ func (x *ClientMeta_AdditionalEthV1BeaconCommitteeData) String() string { func (*ClientMeta_AdditionalEthV1BeaconCommitteeData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1BeaconCommitteeData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[47] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4608,7 +4687,7 @@ func (x *ClientMeta_AdditionalEthV1BeaconCommitteeData) ProtoReflect() protorefl // Deprecated: Use ClientMeta_AdditionalEthV1BeaconCommitteeData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1BeaconCommitteeData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 28} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 28} } func (x *ClientMeta_AdditionalEthV1BeaconCommitteeData) GetEpoch() *EpochV2 { @@ -4653,7 +4732,7 @@ type ClientMeta_AdditionalMempoolTransactionData struct { func (x *ClientMeta_AdditionalMempoolTransactionData) Reset() { *x = ClientMeta_AdditionalMempoolTransactionData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[48] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4666,7 +4745,7 @@ func (x *ClientMeta_AdditionalMempoolTransactionData) String() string { func (*ClientMeta_AdditionalMempoolTransactionData) ProtoMessage() {} func (x *ClientMeta_AdditionalMempoolTransactionData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[48] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4679,7 +4758,7 @@ func (x *ClientMeta_AdditionalMempoolTransactionData) ProtoReflect() protoreflec // Deprecated: Use ClientMeta_AdditionalMempoolTransactionData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalMempoolTransactionData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 29} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 29} } func (x *ClientMeta_AdditionalMempoolTransactionData) GetHash() string { @@ -4789,7 +4868,7 @@ type ClientMeta_AdditionalMempoolTransactionV2Data struct { func (x *ClientMeta_AdditionalMempoolTransactionV2Data) Reset() { *x = ClientMeta_AdditionalMempoolTransactionV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[49] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4802,7 +4881,7 @@ func (x *ClientMeta_AdditionalMempoolTransactionV2Data) String() string { func (*ClientMeta_AdditionalMempoolTransactionV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalMempoolTransactionV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[49] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4815,7 +4894,7 @@ func (x *ClientMeta_AdditionalMempoolTransactionV2Data) ProtoReflect() protorefl // Deprecated: Use ClientMeta_AdditionalMempoolTransactionV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalMempoolTransactionV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 30} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 30} } func (x *ClientMeta_AdditionalMempoolTransactionV2Data) GetHash() string { @@ -4959,7 +5038,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[50] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4972,7 +5051,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockData) String() string { func (*ClientMeta_AdditionalEthV2BeaconBlockData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[50] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4985,7 +5064,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockData) ProtoReflect() protoreflect. // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 31} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 31} } func (x *ClientMeta_AdditionalEthV2BeaconBlockData) GetEpoch() *Epoch { @@ -5062,7 +5141,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockV2Data struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockV2Data) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockV2Data{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[51] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5075,7 +5154,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockV2Data) String() string { func (*ClientMeta_AdditionalEthV2BeaconBlockV2Data) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockV2Data) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[51] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5088,7 +5167,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockV2Data) ProtoReflect() protoreflec // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockV2Data.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockV2Data) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 32} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 32} } func (x *ClientMeta_AdditionalEthV2BeaconBlockV2Data) GetEpoch() *EpochV2 { @@ -5174,7 +5253,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[52] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5187,7 +5266,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) String() str func (*ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[52] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5200,7 +5279,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) ProtoReflect // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 33} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 33} } func (x *ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData) GetBlock() *BlockIdentifier { @@ -5223,7 +5302,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[53] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5236,7 +5315,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) String() str func (*ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[53] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5249,7 +5328,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) ProtoReflect // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 34} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 34} } func (x *ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData) GetBlock() *BlockIdentifier { @@ -5272,7 +5351,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[54] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5285,7 +5364,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) String() string func (*ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[54] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5298,7 +5377,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) ProtoReflect() // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 35} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 35} } func (x *ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData) GetBlock() *BlockIdentifier { @@ -5321,7 +5400,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockDepositData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockDepositData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockDepositData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[55] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5334,7 +5413,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockDepositData) String() string { func (*ClientMeta_AdditionalEthV2BeaconBlockDepositData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockDepositData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[55] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5347,7 +5426,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockDepositData) ProtoReflect() protor // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockDepositData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockDepositData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 36} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 36} } func (x *ClientMeta_AdditionalEthV2BeaconBlockDepositData) GetBlock() *BlockIdentifier { @@ -5370,7 +5449,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[56] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5383,7 +5462,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) String() func (*ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[56] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5396,7 +5475,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) ProtoRef // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 37} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 37} } func (x *ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData) GetBlock() *BlockIdentifier { @@ -5429,7 +5508,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[57] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5442,7 +5521,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) String() func (*ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[57] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5455,7 +5534,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) ProtoRef // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 38} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 38} } func (x *ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData) GetBlock() *BlockIdentifier { @@ -5513,7 +5592,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[58] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5526,7 +5605,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) String() string { func (*ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[58] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5539,7 +5618,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) ProtoReflect() pro // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 39} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 39} } func (x *ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData) GetBlock() *BlockIdentifier { @@ -5563,7 +5642,7 @@ type ClientMeta_AdditionalBlockprintBlockClassificationData struct { func (x *ClientMeta_AdditionalBlockprintBlockClassificationData) Reset() { *x = ClientMeta_AdditionalBlockprintBlockClassificationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[59] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5576,7 +5655,7 @@ func (x *ClientMeta_AdditionalBlockprintBlockClassificationData) String() string func (*ClientMeta_AdditionalBlockprintBlockClassificationData) ProtoMessage() {} func (x *ClientMeta_AdditionalBlockprintBlockClassificationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[59] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5589,7 +5668,7 @@ func (x *ClientMeta_AdditionalBlockprintBlockClassificationData) ProtoReflect() // Deprecated: Use ClientMeta_AdditionalBlockprintBlockClassificationData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalBlockprintBlockClassificationData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 40} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 40} } func (x *ClientMeta_AdditionalBlockprintBlockClassificationData) GetEpoch() *EpochV2 { @@ -5625,7 +5704,7 @@ type ClientMeta_AttestationDataSnapshot struct { func (x *ClientMeta_AttestationDataSnapshot) Reset() { *x = ClientMeta_AttestationDataSnapshot{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[60] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5638,7 +5717,7 @@ func (x *ClientMeta_AttestationDataSnapshot) String() string { func (*ClientMeta_AttestationDataSnapshot) ProtoMessage() {} func (x *ClientMeta_AttestationDataSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[60] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5651,7 +5730,7 @@ func (x *ClientMeta_AttestationDataSnapshot) ProtoReflect() protoreflect.Message // Deprecated: Use ClientMeta_AttestationDataSnapshot.ProtoReflect.Descriptor instead. func (*ClientMeta_AttestationDataSnapshot) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 41} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 41} } func (x *ClientMeta_AttestationDataSnapshot) GetRequestedAtSlotStartDiffMs() *wrapperspb.UInt64Value { @@ -5696,7 +5775,7 @@ type ClientMeta_AdditionalEthV1ValidatorAttestationDataData struct { func (x *ClientMeta_AdditionalEthV1ValidatorAttestationDataData) Reset() { *x = ClientMeta_AdditionalEthV1ValidatorAttestationDataData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[61] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5709,7 +5788,7 @@ func (x *ClientMeta_AdditionalEthV1ValidatorAttestationDataData) String() string func (*ClientMeta_AdditionalEthV1ValidatorAttestationDataData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1ValidatorAttestationDataData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[61] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5722,7 +5801,7 @@ func (x *ClientMeta_AdditionalEthV1ValidatorAttestationDataData) ProtoReflect() // Deprecated: Use ClientMeta_AdditionalEthV1ValidatorAttestationDataData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1ValidatorAttestationDataData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 42} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 42} } func (x *ClientMeta_AdditionalEthV1ValidatorAttestationDataData) GetSource() *ClientMeta_AdditionalEthV1AttestationSourceV2Data { @@ -5777,7 +5856,7 @@ type ClientMeta_AdditionalEthV1EventsBlobSidecarData struct { func (x *ClientMeta_AdditionalEthV1EventsBlobSidecarData) Reset() { *x = ClientMeta_AdditionalEthV1EventsBlobSidecarData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[62] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5790,7 +5869,7 @@ func (x *ClientMeta_AdditionalEthV1EventsBlobSidecarData) String() string { func (*ClientMeta_AdditionalEthV1EventsBlobSidecarData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1EventsBlobSidecarData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[62] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5803,7 +5882,7 @@ func (x *ClientMeta_AdditionalEthV1EventsBlobSidecarData) ProtoReflect() protore // Deprecated: Use ClientMeta_AdditionalEthV1EventsBlobSidecarData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1EventsBlobSidecarData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 43} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 43} } func (x *ClientMeta_AdditionalEthV1EventsBlobSidecarData) GetEpoch() *EpochV2 { @@ -5847,7 +5926,7 @@ type ClientMeta_AdditionalEthV1BeaconBlobSidecarData struct { func (x *ClientMeta_AdditionalEthV1BeaconBlobSidecarData) Reset() { *x = ClientMeta_AdditionalEthV1BeaconBlobSidecarData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[63] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5860,7 +5939,7 @@ func (x *ClientMeta_AdditionalEthV1BeaconBlobSidecarData) String() string { func (*ClientMeta_AdditionalEthV1BeaconBlobSidecarData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1BeaconBlobSidecarData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[63] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5873,7 +5952,7 @@ func (x *ClientMeta_AdditionalEthV1BeaconBlobSidecarData) ProtoReflect() protore // Deprecated: Use ClientMeta_AdditionalEthV1BeaconBlobSidecarData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1BeaconBlobSidecarData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 44} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 44} } func (x *ClientMeta_AdditionalEthV1BeaconBlobSidecarData) GetEpoch() *EpochV2 { @@ -5942,7 +6021,7 @@ type ClientMeta_AdditionalBeaconP2PAttestationData struct { func (x *ClientMeta_AdditionalBeaconP2PAttestationData) Reset() { *x = ClientMeta_AdditionalBeaconP2PAttestationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[64] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5955,7 +6034,7 @@ func (x *ClientMeta_AdditionalBeaconP2PAttestationData) String() string { func (*ClientMeta_AdditionalBeaconP2PAttestationData) ProtoMessage() {} func (x *ClientMeta_AdditionalBeaconP2PAttestationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[64] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5968,7 +6047,7 @@ func (x *ClientMeta_AdditionalBeaconP2PAttestationData) ProtoReflect() protorefl // Deprecated: Use ClientMeta_AdditionalBeaconP2PAttestationData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalBeaconP2PAttestationData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 45} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 45} } func (x *ClientMeta_AdditionalBeaconP2PAttestationData) GetSource() *ClientMeta_AdditionalEthV1AttestationSourceV2Data { @@ -6052,7 +6131,7 @@ type ClientMeta_AdditionalEthV1ProposerDutyData struct { func (x *ClientMeta_AdditionalEthV1ProposerDutyData) Reset() { *x = ClientMeta_AdditionalEthV1ProposerDutyData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[65] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6065,7 +6144,7 @@ func (x *ClientMeta_AdditionalEthV1ProposerDutyData) String() string { func (*ClientMeta_AdditionalEthV1ProposerDutyData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV1ProposerDutyData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[65] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6078,7 +6157,7 @@ func (x *ClientMeta_AdditionalEthV1ProposerDutyData) ProtoReflect() protoreflect // Deprecated: Use ClientMeta_AdditionalEthV1ProposerDutyData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV1ProposerDutyData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 46} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 46} } func (x *ClientMeta_AdditionalEthV1ProposerDutyData) GetEpoch() *EpochV2 { @@ -6126,7 +6205,7 @@ type ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData struct { func (x *ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) Reset() { *x = ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[66] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6139,7 +6218,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) String( func (*ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) ProtoMessage() {} func (x *ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[66] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6152,7 +6231,7 @@ func (x *ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) ProtoRe // Deprecated: Use ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 47} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 47} } func (x *ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData) GetBlock() *BlockIdentifier { @@ -6209,7 +6288,7 @@ type ClientMeta_AdditionalLibP2PTraceAddPeerData struct { func (x *ClientMeta_AdditionalLibP2PTraceAddPeerData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceAddPeerData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[67] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6222,7 +6301,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceAddPeerData) String() string { func (*ClientMeta_AdditionalLibP2PTraceAddPeerData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceAddPeerData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[67] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6235,7 +6314,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceAddPeerData) ProtoReflect() protoreflec // Deprecated: Use ClientMeta_AdditionalLibP2PTraceAddPeerData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceAddPeerData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 48} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 48} } func (x *ClientMeta_AdditionalLibP2PTraceAddPeerData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6257,7 +6336,7 @@ type ClientMeta_AdditionalLibP2PTraceRemovePeerData struct { func (x *ClientMeta_AdditionalLibP2PTraceRemovePeerData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceRemovePeerData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[68] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6270,7 +6349,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceRemovePeerData) String() string { func (*ClientMeta_AdditionalLibP2PTraceRemovePeerData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceRemovePeerData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[68] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6283,7 +6362,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceRemovePeerData) ProtoReflect() protoref // Deprecated: Use ClientMeta_AdditionalLibP2PTraceRemovePeerData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceRemovePeerData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 49} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 49} } func (x *ClientMeta_AdditionalLibP2PTraceRemovePeerData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6305,7 +6384,7 @@ type ClientMeta_AdditionalLibP2PTraceRecvRPCData struct { func (x *ClientMeta_AdditionalLibP2PTraceRecvRPCData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceRecvRPCData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[69] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6318,7 +6397,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceRecvRPCData) String() string { func (*ClientMeta_AdditionalLibP2PTraceRecvRPCData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceRecvRPCData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[69] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6331,7 +6410,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceRecvRPCData) ProtoReflect() protoreflec // Deprecated: Use ClientMeta_AdditionalLibP2PTraceRecvRPCData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceRecvRPCData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 50} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 50} } func (x *ClientMeta_AdditionalLibP2PTraceRecvRPCData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6353,7 +6432,7 @@ type ClientMeta_AdditionalLibP2PTraceSendRPCData struct { func (x *ClientMeta_AdditionalLibP2PTraceSendRPCData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceSendRPCData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[70] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6366,7 +6445,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceSendRPCData) String() string { func (*ClientMeta_AdditionalLibP2PTraceSendRPCData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceSendRPCData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[70] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6379,7 +6458,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceSendRPCData) ProtoReflect() protoreflec // Deprecated: Use ClientMeta_AdditionalLibP2PTraceSendRPCData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceSendRPCData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 51} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 51} } func (x *ClientMeta_AdditionalLibP2PTraceSendRPCData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6401,7 +6480,7 @@ type ClientMeta_AdditionalLibP2PTraceJoinData struct { func (x *ClientMeta_AdditionalLibP2PTraceJoinData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceJoinData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[71] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6414,7 +6493,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceJoinData) String() string { func (*ClientMeta_AdditionalLibP2PTraceJoinData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceJoinData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[71] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6427,7 +6506,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceJoinData) ProtoReflect() protoreflect.M // Deprecated: Use ClientMeta_AdditionalLibP2PTraceJoinData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceJoinData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 52} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 52} } func (x *ClientMeta_AdditionalLibP2PTraceJoinData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6449,7 +6528,7 @@ type ClientMeta_AdditionalLibP2PTraceConnectedData struct { func (x *ClientMeta_AdditionalLibP2PTraceConnectedData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceConnectedData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[72] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6462,7 +6541,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceConnectedData) String() string { func (*ClientMeta_AdditionalLibP2PTraceConnectedData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceConnectedData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[72] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6475,7 +6554,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceConnectedData) ProtoReflect() protorefl // Deprecated: Use ClientMeta_AdditionalLibP2PTraceConnectedData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceConnectedData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 53} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 53} } func (x *ClientMeta_AdditionalLibP2PTraceConnectedData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6497,7 +6576,7 @@ type ClientMeta_AdditionalLibP2PTraceDisconnectedData struct { func (x *ClientMeta_AdditionalLibP2PTraceDisconnectedData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceDisconnectedData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[73] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6510,7 +6589,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceDisconnectedData) String() string { func (*ClientMeta_AdditionalLibP2PTraceDisconnectedData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceDisconnectedData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[73] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6523,7 +6602,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceDisconnectedData) ProtoReflect() protor // Deprecated: Use ClientMeta_AdditionalLibP2PTraceDisconnectedData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceDisconnectedData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 54} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 54} } func (x *ClientMeta_AdditionalLibP2PTraceDisconnectedData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6545,7 +6624,7 @@ type ClientMeta_AdditionalLibP2PTraceHandleMetadataData struct { func (x *ClientMeta_AdditionalLibP2PTraceHandleMetadataData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceHandleMetadataData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[74] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6558,7 +6637,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceHandleMetadataData) String() string { func (*ClientMeta_AdditionalLibP2PTraceHandleMetadataData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceHandleMetadataData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[74] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6571,7 +6650,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceHandleMetadataData) ProtoReflect() prot // Deprecated: Use ClientMeta_AdditionalLibP2PTraceHandleMetadataData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceHandleMetadataData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 55} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 55} } func (x *ClientMeta_AdditionalLibP2PTraceHandleMetadataData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6593,7 +6672,7 @@ type ClientMeta_AdditionalLibP2PTraceHandleStatusData struct { func (x *ClientMeta_AdditionalLibP2PTraceHandleStatusData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceHandleStatusData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[75] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6606,7 +6685,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceHandleStatusData) String() string { func (*ClientMeta_AdditionalLibP2PTraceHandleStatusData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceHandleStatusData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[75] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6619,7 +6698,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceHandleStatusData) ProtoReflect() protor // Deprecated: Use ClientMeta_AdditionalLibP2PTraceHandleStatusData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceHandleStatusData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 56} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 56} } func (x *ClientMeta_AdditionalLibP2PTraceHandleStatusData) GetMetadata() *libp2p.TraceEventMetadata { @@ -6658,7 +6737,7 @@ type ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData struct { func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[76] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6671,7 +6750,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) String() stri func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[76] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6684,7 +6763,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) ProtoReflect( // Deprecated: Use ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 57} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 57} } func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData) GetEpoch() *EpochV2 { @@ -6762,7 +6841,7 @@ type ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData struct func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[77] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6775,7 +6854,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) S func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[77] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6788,7 +6867,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) P // Deprecated: Use ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 58} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 58} } func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData) GetEpoch() *EpochV2 { @@ -6810,7 +6889,7 @@ type ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData struct func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[78] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6823,7 +6902,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) S func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[78] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6836,7 +6915,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) P // Deprecated: Use ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 59} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 59} } func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData) GetEpoch() *EpochV2 { @@ -6883,7 +6962,7 @@ type ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData struct { func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[79] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6896,7 +6975,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) String( func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[79] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6909,7 +6988,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) ProtoRe // Deprecated: Use ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 60} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 60} } func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData) GetSource() *ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData { @@ -7024,7 +7103,7 @@ type ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData struct { func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) Reset() { *x = ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7037,7 +7116,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) String() stri func (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) ProtoMessage() {} func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[80] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7050,7 +7129,7 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) ProtoReflect( // Deprecated: Use ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData.ProtoReflect.Descriptor instead. func (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 61} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 61} } func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetEpoch() *EpochV2 { @@ -7116,6 +7195,54 @@ func (x *ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData) GetMessageId( return nil } +// AdditionalEthV1ValidatorsData contains additional data about the eth v1 validators. +type ClientMeta_AdditionalEthV1ValidatorsData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Epoch *EpochV2 `protobuf:"bytes,1,opt,name=epoch,proto3" json:"epoch,omitempty"` +} + +func (x *ClientMeta_AdditionalEthV1ValidatorsData) Reset() { + *x = ClientMeta_AdditionalEthV1ValidatorsData{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientMeta_AdditionalEthV1ValidatorsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientMeta_AdditionalEthV1ValidatorsData) ProtoMessage() {} + +func (x *ClientMeta_AdditionalEthV1ValidatorsData) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] + 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 ClientMeta_AdditionalEthV1ValidatorsData.ProtoReflect.Descriptor instead. +func (*ClientMeta_AdditionalEthV1ValidatorsData) Descriptor() ([]byte, []int) { + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 62} +} + +func (x *ClientMeta_AdditionalEthV1ValidatorsData) GetEpoch() *EpochV2 { + if x != nil { + return x.Epoch + } + return nil +} + type ClientMeta_Ethereum_Network struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7130,7 +7257,7 @@ type ClientMeta_Ethereum_Network struct { func (x *ClientMeta_Ethereum_Network) Reset() { *x = ClientMeta_Ethereum_Network{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7143,7 +7270,7 @@ func (x *ClientMeta_Ethereum_Network) String() string { func (*ClientMeta_Ethereum_Network) ProtoMessage() {} func (x *ClientMeta_Ethereum_Network) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[81] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7156,7 +7283,7 @@ func (x *ClientMeta_Ethereum_Network) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta_Ethereum_Network.ProtoReflect.Descriptor instead. func (*ClientMeta_Ethereum_Network) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 0, 0} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 0, 0} } func (x *ClientMeta_Ethereum_Network) GetName() string { @@ -7185,7 +7312,7 @@ type ClientMeta_Ethereum_Execution struct { func (x *ClientMeta_Ethereum_Execution) Reset() { *x = ClientMeta_Ethereum_Execution{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7198,7 +7325,7 @@ func (x *ClientMeta_Ethereum_Execution) String() string { func (*ClientMeta_Ethereum_Execution) ProtoMessage() {} func (x *ClientMeta_Ethereum_Execution) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[82] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7211,7 +7338,7 @@ func (x *ClientMeta_Ethereum_Execution) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta_Ethereum_Execution.ProtoReflect.Descriptor instead. func (*ClientMeta_Ethereum_Execution) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 0, 1} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 0, 1} } func (x *ClientMeta_Ethereum_Execution) GetForkId() *ForkID { @@ -7235,7 +7362,7 @@ type ClientMeta_Ethereum_Consensus struct { func (x *ClientMeta_Ethereum_Consensus) Reset() { *x = ClientMeta_Ethereum_Consensus{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7248,7 +7375,7 @@ func (x *ClientMeta_Ethereum_Consensus) String() string { func (*ClientMeta_Ethereum_Consensus) ProtoMessage() {} func (x *ClientMeta_Ethereum_Consensus) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[83] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7261,7 +7388,7 @@ func (x *ClientMeta_Ethereum_Consensus) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientMeta_Ethereum_Consensus.ProtoReflect.Descriptor instead. func (*ClientMeta_Ethereum_Consensus) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{14, 0, 2} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 0, 2} } func (x *ClientMeta_Ethereum_Consensus) GetImplementation() string { @@ -7290,7 +7417,7 @@ type ServerMeta_Event struct { func (x *ServerMeta_Event) Reset() { *x = ServerMeta_Event{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7303,7 +7430,7 @@ func (x *ServerMeta_Event) String() string { func (*ServerMeta_Event) ProtoMessage() {} func (x *ServerMeta_Event) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[84] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7316,7 +7443,7 @@ func (x *ServerMeta_Event) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerMeta_Event.ProtoReflect.Descriptor instead. func (*ServerMeta_Event) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 0} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 0} } func (x *ServerMeta_Event) GetReceivedDateTime() *timestamppb.Timestamp { @@ -7358,7 +7485,7 @@ type ServerMeta_Geo struct { func (x *ServerMeta_Geo) Reset() { *x = ServerMeta_Geo{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7371,7 +7498,7 @@ func (x *ServerMeta_Geo) String() string { func (*ServerMeta_Geo) ProtoMessage() {} func (x *ServerMeta_Geo) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[85] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7384,7 +7511,7 @@ func (x *ServerMeta_Geo) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerMeta_Geo.ProtoReflect.Descriptor instead. func (*ServerMeta_Geo) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 1} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 1} } func (x *ServerMeta_Geo) GetCity() string { @@ -7458,7 +7585,7 @@ type ServerMeta_Client struct { func (x *ServerMeta_Client) Reset() { *x = ServerMeta_Client{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7471,7 +7598,7 @@ func (x *ServerMeta_Client) String() string { func (*ServerMeta_Client) ProtoMessage() {} func (x *ServerMeta_Client) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[86] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7484,7 +7611,7 @@ func (x *ServerMeta_Client) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerMeta_Client.ProtoReflect.Descriptor instead. func (*ServerMeta_Client) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 2} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 2} } func (x *ServerMeta_Client) GetIP() string { @@ -7513,7 +7640,7 @@ type ServerMeta_Peer struct { func (x *ServerMeta_Peer) Reset() { *x = ServerMeta_Peer{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7526,7 +7653,7 @@ func (x *ServerMeta_Peer) String() string { func (*ServerMeta_Peer) ProtoMessage() {} func (x *ServerMeta_Peer) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[87] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7539,7 +7666,7 @@ func (x *ServerMeta_Peer) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerMeta_Peer.ProtoReflect.Descriptor instead. func (*ServerMeta_Peer) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 3} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 3} } func (x *ServerMeta_Peer) GetGeo() *ServerMeta_Geo { @@ -7560,7 +7687,7 @@ type ServerMeta_AdditionalBeaconP2PAttestationData struct { func (x *ServerMeta_AdditionalBeaconP2PAttestationData) Reset() { *x = ServerMeta_AdditionalBeaconP2PAttestationData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7573,7 +7700,7 @@ func (x *ServerMeta_AdditionalBeaconP2PAttestationData) String() string { func (*ServerMeta_AdditionalBeaconP2PAttestationData) ProtoMessage() {} func (x *ServerMeta_AdditionalBeaconP2PAttestationData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[88] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7586,7 +7713,7 @@ func (x *ServerMeta_AdditionalBeaconP2PAttestationData) ProtoReflect() protorefl // Deprecated: Use ServerMeta_AdditionalBeaconP2PAttestationData.ProtoReflect.Descriptor instead. func (*ServerMeta_AdditionalBeaconP2PAttestationData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 4} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 4} } func (x *ServerMeta_AdditionalBeaconP2PAttestationData) GetPeer() *ServerMeta_Peer { @@ -7607,7 +7734,7 @@ type ServerMeta_AdditionalLibp2PTraceConnectedData struct { func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) Reset() { *x = ServerMeta_AdditionalLibp2PTraceConnectedData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7620,7 +7747,7 @@ func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) String() string { func (*ServerMeta_AdditionalLibp2PTraceConnectedData) ProtoMessage() {} func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[89] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7633,7 +7760,7 @@ func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) ProtoReflect() protorefl // Deprecated: Use ServerMeta_AdditionalLibp2PTraceConnectedData.ProtoReflect.Descriptor instead. func (*ServerMeta_AdditionalLibp2PTraceConnectedData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 5} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 5} } func (x *ServerMeta_AdditionalLibp2PTraceConnectedData) GetPeer() *ServerMeta_Peer { @@ -7654,7 +7781,7 @@ type ServerMeta_AdditionalLibp2PTraceDisconnectedData struct { func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) Reset() { *x = ServerMeta_AdditionalLibp2PTraceDisconnectedData{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[90] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7667,7 +7794,7 @@ func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) String() string { func (*ServerMeta_AdditionalLibp2PTraceDisconnectedData) ProtoMessage() {} func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[90] + mi := &file_pkg_proto_xatu_event_ingester_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7680,7 +7807,7 @@ func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) ProtoReflect() protor // Deprecated: Use ServerMeta_AdditionalLibp2PTraceDisconnectedData.ProtoReflect.Descriptor instead. func (*ServerMeta_AdditionalLibp2PTraceDisconnectedData) Descriptor() ([]byte, []int) { - return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{15, 6} + return file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP(), []int{16, 6} } func (x *ServerMeta_AdditionalLibp2PTraceDisconnectedData) GetPeer() *ServerMeta_Peer { @@ -7721,640 +7848,736 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x6f, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, - 0x69, 0x62, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1c, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x62, 0x70, - 0x32, 0x70, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, - 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, - 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x2f, 0x65, 0x74, 0x68, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x43, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x65, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, + 0x74, 0x6f, 0x1a, 0x20, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2f, 0x70, 0x65, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, + 0x62, 0x70, 0x32, 0x70, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x24, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x2f, 0x65, 0x74, 0x68, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x43, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x65, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x07, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x12, 0x34, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x22, 0x64, 0x0a, 0x04, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x07, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x56, 0x32, 0x12, 0x34, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x06, 0x53, 0x6c, 0x6f, + 0x74, 0x56, 0x32, 0x12, 0x34, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, + 0x30, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x65, 0x78, + 0x74, 0x22, 0x37, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, + 0x69, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x22, 0x57, 0x0a, 0x0d, 0x50, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x12, 0x46, 0x0a, 0x0f, 0x73, + 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x22, 0x64, 0x0a, 0x04, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x06, 0x53, 0x6c, 0x6f, 0x74, 0x56, - 0x32, 0x12, 0x34, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x30, 0x0a, - 0x06, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x22, - 0x37, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x0a, 0x0f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, - 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x22, 0x57, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x12, 0x46, 0x0a, 0x0f, 0x73, 0x6c, 0x6f, - 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, - 0x66, 0x22, 0x54, 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, 0x14, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, - 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x75, 0x65, 0x52, 0x0f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, + 0x69, 0x66, 0x66, 0x22, 0x54, 0x0a, 0x12, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, 0x14, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x32, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xaa, 0x01, 0x0a, - 0x14, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x6f, 0x72, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x06, - 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x05, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, - 0x72, 0x67, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x16, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, - 0x72, 0x67, 0x56, 0x32, 0x12, 0x31, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, - 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xaa, + 0x01, 0x0a, 0x14, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x6f, 0x72, 0x67, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x16, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x12, 0x31, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, - 0x32, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x86, - 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0xc7, 0x9a, 0x01, 0x0a, 0x0a, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, - 0x02, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x20, 0x0a, - 0x0b, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x12, - 0x35, 0x0a, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x52, 0x08, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x80, 0x01, 0x0a, - 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, - 0x6b, 0x0a, 0x12, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1d, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x12, 0x6e, 0x0a, 0x13, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x88, 0x01, 0x0a, - 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, - 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x32, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x61, 0x66, 0x74, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x56, 0x32, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x22, 0x44, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x36, + 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, + 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x22, + 0xff, 0x9b, 0x01, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, + 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, + 0x72, 0x69, 0x66, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x75, 0x6d, 0x52, 0x08, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x12, 0x34, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, + 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, + 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6b, 0x0a, 0x12, 0x65, 0x74, 0x68, 0x5f, 0x76, + 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, - 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x27, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, - 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x9a, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, - 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, - 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, - 0x4f, 0x49, 0x4e, 0x54, 0x12, 0x7f, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, - 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, - 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x9f, 0x01, 0x0a, 0x24, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, - 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, - 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x12, 0x65, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x13, 0x4d, 0x45, 0x4d, 0x50, 0x4f, - 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6e, - 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x78, 0x61, + 0x48, 0x45, 0x41, 0x44, 0x12, 0x6e, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, + 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x88, 0x01, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, + 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1e, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x7c, - 0x0a, 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, - 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x12, 0x8d, 0x01, 0x0a, - 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x6f, - 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, - 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, - 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, - 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x7a, 0x0a, 0x17, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x22, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x43, - 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, 0x12, 0x97, 0x01, 0x0a, 0x21, 0x65, 0x74, 0x68, - 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x12, 0x88, 0x01, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x76, 0x32, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, - 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x73, 0x0a, - 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, - 0x65, 0x61, 0x64, 0x5f, 0x76, 0x32, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, + 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, + 0x9a, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x20, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, - 0x56, 0x32, 0x12, 0x76, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, - 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, - 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2d, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, + 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x12, 0x7f, 0x0a, 0x19, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, + 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, + 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, - 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x12, 0x90, 0x01, 0x0a, 0x1f, 0x65, - 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x1b, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, - 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, - 0x00, 0x52, 0x2a, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, - 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x5f, 0x56, 0x32, 0x12, 0xa2, 0x01, - 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, - 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, - 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, - 0x56, 0x32, 0x12, 0x87, 0x01, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, - 0x5f, 0x76, 0x32, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, - 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x12, 0xa7, 0x01, 0x0a, - 0x27, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x76, 0x32, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, - 0x48, 0x00, 0x52, 0x32, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, - 0x4f, 0x4f, 0x46, 0x5f, 0x56, 0x32, 0x12, 0x6d, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, - 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, - 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x4d, - 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, - 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, - 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x12, 0x84, 0x01, - 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, - 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x21, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, - 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, - 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, - 0x45, 0x5f, 0x56, 0x32, 0x12, 0x95, 0x01, 0x0a, 0x21, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2c, + 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x9f, 0x01, + 0x0a, 0x24, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, - 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x12, 0xa2, 0x01, 0x0a, - 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, - 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x78, + 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, + 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x12, + 0x65, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, - 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, - 0x47, 0x12, 0xa2, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x24, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, - 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, - 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x99, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, - 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, - 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x25, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, - 0x49, 0x54, 0x12, 0x85, 0x01, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, - 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0xb2, 0x01, 0x0a, 0x2b, 0x65, - 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x43, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x4c, 0x53, - 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, - 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, - 0xae, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x28, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, + 0x00, 0x52, 0x13, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6e, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, + 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x12, 0x8e, 0x01, 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, - 0x4c, 0x12, 0x82, 0x01, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, - 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, - 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x88, 0x01, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x12, 0x82, 0x01, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, - 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, - 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x6d, 0x0a, 0x16, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x71, 0x0a, 0x14, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x2e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, - 0x79, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, - 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0xb1, 0x01, 0x0a, 0x2a, 0x65, 0x74, 0x68, - 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, + 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x7c, 0x0a, 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, + 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, + 0x4f, 0x49, 0x43, 0x45, 0x12, 0x8d, 0x01, 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, + 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, + 0x45, 0x4f, 0x52, 0x47, 0x12, 0x7a, 0x0a, 0x17, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x22, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, + 0x12, 0x97, 0x01, 0x0a, 0x21, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x12, 0x88, 0x01, 0x0a, 0x1c, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x18, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, + 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x73, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x32, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x20, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x16, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x56, 0x32, 0x12, 0x90, 0x01, 0x0a, 0x1f, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, + 0x78, 0x69, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, + 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2a, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, + 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, + 0x49, 0x54, 0x5f, 0x56, 0x32, 0x12, 0xa2, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x32, 0x18, + 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, + 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x12, 0x87, 0x01, 0x0a, 0x1c, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x1d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, + 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, + 0x6f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, + 0x47, 0x5f, 0x56, 0x32, 0x12, 0xa7, 0x01, 0x0a, 0x27, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x76, 0x32, + 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x32, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x56, 0x32, 0x12, 0x6d, + 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, + 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x76, 0x0a, + 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, - 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x69, 0x0a, 0x15, - 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, - 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, + 0x48, 0x00, 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x12, 0x84, 0x01, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, + 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x41, - 0x44, 0x44, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x72, 0x0a, 0x18, 0x6c, 0x69, 0x62, 0x70, 0x32, - 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, - 0x65, 0x65, 0x72, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, + 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x56, 0x32, 0x12, 0x95, 0x01, 0x0a, + 0x21, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x66, 0x6f, + 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, + 0x76, 0x32, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x56, 0x32, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, + 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, + 0x47, 0x5f, 0x56, 0x32, 0x12, 0xa2, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x23, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, + 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, + 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0xa2, 0x01, 0x0a, 0x25, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, - 0x00, 0x52, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, - 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x69, 0x0a, 0x15, 0x6c, - 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x76, - 0x5f, 0x72, 0x70, 0x63, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x63, 0x76, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, - 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x69, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, - 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x70, 0x63, 0x18, - 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, + 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, + 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x99, + 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, + 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, + 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, + 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x85, 0x01, 0x0a, 0x1b, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, + 0x49, 0x54, 0x12, 0xb2, 0x01, 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, 0x5f, 0x74, + 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, 0xae, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x48, 0x00, 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x8e, 0x01, 0x0a, 0x1e, 0x65, 0x74, 0x68, + 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x29, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, + 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x29, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, + 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, + 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x82, 0x01, 0x0a, 0x1a, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, + 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x88, + 0x01, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, + 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, + 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x82, 0x01, 0x0a, 0x1a, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, + 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x6d, + 0x0a, 0x16, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x61, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, + 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x71, 0x0a, + 0x14, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, + 0x12, 0xb1, 0x01, 0x0a, 0x2a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6e, - 0x64, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, - 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x50, - 0x43, 0x12, 0x5e, 0x0a, 0x11, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x11, - 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, - 0x4e, 0x12, 0x6d, 0x0a, 0x16, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x35, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, - 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, - 0x12, 0x77, 0x0a, 0x19, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x36, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x35, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, + 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x69, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x30, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1a, 0x4c, - 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, - 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x7e, 0x0a, 0x1c, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, - 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1c, 0x4c, 0x49, 0x42, - 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, - 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x12, 0x78, 0x0a, 0x1a, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x12, 0x92, 0x01, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x39, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x64, 0x64, 0x50, 0x65, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, + 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, + 0x72, 0x0a, 0x18, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x31, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, - 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, - 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0xa4, 0x01, 0x0a, 0x29, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, - 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, - 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, - 0x92, 0x01, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, + 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, + 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, + 0x45, 0x45, 0x52, 0x12, 0x69, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x32, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, + 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x63, 0x76, 0x52, 0x50, + 0x43, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x69, + 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, + 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x6c, - 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, - 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, - 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, - 0x45, 0x43, 0x41, 0x52, 0x1a, 0x80, 0x03, 0x0a, 0x08, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x12, 0x3b, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x41, - 0x0a, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x41, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x65, - 0x6e, 0x73, 0x75, 0x73, 0x1a, 0x2d, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x69, 0x64, 0x1a, 0x33, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, - 0x07, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x1a, 0x4d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, - 0x65, 0x6e, 0x73, 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4d, 0x0a, - 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x49, 0x0a, 0x24, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, + 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x5e, 0x0a, 0x11, 0x6c, 0x69, 0x62, + 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x34, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x4a, 0x6f, 0x69, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x11, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, + 0x52, 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x12, 0x6d, 0x0a, 0x16, 0x6c, 0x69, 0x62, + 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, + 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, + 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x77, 0x0a, 0x19, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, + 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, + 0x44, 0x12, 0x7e, 0x0a, 0x1c, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, + 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, + 0x61, 0x48, 0x00, 0x52, 0x1c, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, + 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, + 0x41, 0x12, 0x78, 0x0a, 0x1a, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, + 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x92, 0x01, 0x0a, 0x23, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, + 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, + 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, + 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, + 0x12, 0xa4, 0x01, 0x0a, 0x29, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x3a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, + 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x29, 0x4c, 0x49, + 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, + 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, + 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x92, 0x01, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, + 0x75, 0x62, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, + 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, + 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, + 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x70, 0x0a, 0x11, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x73, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x1a, 0x80, + 0x03, 0x0a, 0x08, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x12, 0x3b, 0x0a, 0x07, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, + 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x45, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x09, 0x63, + 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, + 0x73, 0x75, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x1a, 0x2d, + 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x33, 0x0a, + 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x07, 0x66, 0x6f, + 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x52, 0x07, 0x66, 0x6f, 0x72, 0x6b, 0x5f, + 0x69, 0x64, 0x1a, 0x4d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x12, + 0x26, 0x0a, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x49, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4d, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x88, 0x03, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x4d, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, - 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4d, - 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1e, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x21, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x13, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x1a, 0x96, 0x03, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, - 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, - 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x49, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x1a, 0x4d, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x1a, 0x88, 0x03, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, + 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x4a, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x96, 0x03, 0x0a, 0x26, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, + 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, + 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x97, 0x01, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, + 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, + 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x9f, + 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x56, 0x32, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, + 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x98, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, + 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa0, 0x01, 0x0a, 0x20, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x97, 0x01, 0x0a, 0x1d, 0x41, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, + 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x4b, + 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, + 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, + 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x4f, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, + 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, + 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x51, 0x0a, 0x2c, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, + 0x55, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x9d, 0x01, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa5, 0x01, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, + 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb3, + 0x01, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, @@ -8362,703 +8585,625 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x9f, 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x65, - 0x61, 0x64, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, - 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x98, 0x01, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, - 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x1a, 0xa0, 0x01, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, - 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, - 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x4b, 0x0a, 0x26, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, - 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x1a, 0x4f, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, - 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, - 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x1a, 0x51, 0x0a, 0x2c, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x55, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x46, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x9d, 0x01, 0x0a, - 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa5, 0x01, 0x0a, - 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, - 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, - 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, - 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb3, 0x01, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbb, 0x01, 0x0a, 0x3b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xbb, 0x01, 0x0a, 0x3b, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, - 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x9f, 0x01, 0x0a, 0x2d, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, - 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x6e, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, - 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa3, 0x01, 0x0a, 0x2f, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x70, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, + 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0x9f, 0x01, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0xad, 0x02, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x31, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x0d, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x0c, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x0c, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x48, 0x0a, 0x1f, 0x72, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x6e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, + 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa3, 0x01, 0x0a, 0x2f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x70, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xad, 0x02, 0x0a, 0x12, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x12, 0x31, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x48, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x30, + 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, + 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0xef, 0x02, 0x0a, 0x14, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x56, 0x32, 0x12, 0x33, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x30, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0c, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x66, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, - 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x1a, 0xef, 0x02, 0x0a, 0x14, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x12, 0x33, 0x0a, 0x0d, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, - 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x30, - 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, - 0x56, 0x32, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, - 0x12, 0x66, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, - 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x1a, 0x65, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, - 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, + 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, + 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x65, 0x0a, 0x22, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x1a, 0x69, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, + 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x08, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, + 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x56, 0x32, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0xa1, + 0x01, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x06, 0x62, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, - 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x69, 0x0a, 0x24, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x41, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x1a, 0xa1, 0x01, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, - 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x3b, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, - 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, - 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x1a, 0xa7, 0x01, 0x0a, 0x29, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, - 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, + 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, - 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x06, 0x62, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x05, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x1a, 0x6b, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x1a, - 0xf2, 0x01, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, - 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, - 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, - 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x9a, 0x05, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, - 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x74, 0x6f, 0x12, 0x32, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x73, 0x5f, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, - 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x73, - 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x67, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x67, - 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x38, 0x0a, - 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x62, - 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, - 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, - 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, - 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, - 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x1a, 0x89, 0x02, 0x0a, 0x1e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, - 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x1a, 0x8d, 0x05, - 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, - 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, + 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x05, 0x61, 0x66, 0x74, + 0x65, 0x72, 0x1a, 0xa7, 0x01, 0x0a, 0x29, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, + 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x4f, 0x72, 0x67, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x3d, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, + 0x3b, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x1a, 0x6b, 0x0a, 0x22, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, - 0x6f, 0x6f, 0x74, 0x12, 0x4c, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x1a, 0xf2, 0x01, 0x0a, 0x20, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, + 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x9a, + 0x05, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x6d, + 0x70, 0x6f, 0x6f, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, + 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x32, 0x0a, + 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, + 0x2e, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x67, 0x61, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, + 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x74, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x74, 0x69, 0x70, 0x5f, 0x63, + 0x61, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x74, 0x69, + 0x70, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, + 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x73, 0x5f, + 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x38, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, + 0x67, 0x61, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, + 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, + 0x65, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x6c, 0x6f, + 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x12, 0x20, 0x0a, + 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, + 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, + 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x3a, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x89, 0x02, 0x0a, 0x1e, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x1e, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x58, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x23, 0x74, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0b, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x16, 0x74, + 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x1a, 0x8d, 0x05, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, + 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x4c, 0x0a, + 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x58, 0x0a, 0x18, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x12, 0x3a, 0x0a, 0x18, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, - 0x68, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x18, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, - 0x68, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x5d, 0x0a, - 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5d, 0x0a, 0x2e, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, - 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5a, 0x0a, 0x2b, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, - 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x54, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x18, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x65, 0x6e, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x65, 0x6e, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x1a, 0x5d, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x61, 0x0a, - 0x32, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x4c, 0x53, 0x54, 0x6f, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x1a, 0xd5, 0x02, 0x0a, 0x32, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, - 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4a, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, - 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2e, 0x0a, 0x12, - 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, - 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x18, - 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, - 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0x57, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, + 0x73, 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5d, 0x0a, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, + 0x68, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x5a, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x1a, 0x74, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, - 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x1a, 0x8b, 0x02, 0x0a, 0x17, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x12, 0x66, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, - 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, - 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0xdc, 0x02, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, - 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x44, - 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x1a, 0xa4, 0x01, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, - 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, - 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x99, 0x02, 0x0a, 0x24, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, - 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x09, 0x64, - 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x12, - 0x46, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x1a, 0xa9, 0x04, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x6b, 0x1a, 0x54, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, + 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x61, 0x0a, 0x32, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, + 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0xd5, 0x02, 0x0a, 0x32, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4a, + 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, + 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, + 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, + 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, + 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x1a, 0x57, 0x0a, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, + 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x1a, 0x74, 0x0a, 0x2b, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, + 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, + 0x74, 0x1a, 0x8b, 0x02, 0x0a, 0x17, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x66, 0x0a, + 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, + 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, + 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, + 0xdc, 0x02, 0x0a, 0x2b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, + 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, - 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, - 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x04, - 0x70, 0x65, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, - 0x65, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x1a, 0x84, 0x01, 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, - 0x75, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, + 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x44, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0xa4, + 0x01, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, + 0x56, 0x31, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, + 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x97, 0x03, 0x0a, 0x33, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x4a, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, - 0x6f, 0x74, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, - 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x64, 0x64, - 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x99, 0x02, 0x0a, 0x24, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, + 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x3a, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x12, 0x46, 0x0a, 0x0f, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x1a, 0xa9, 0x04, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x32, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x32, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, + 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, + 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, + 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x12, 0x34, 0x0a, + 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x84, 0x01, + 0x0a, 0x1f, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, + 0x31, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, + 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x97, 0x03, 0x0a, 0x33, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x05, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x4a, 0x0a, 0x11, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, + 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, + 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x4f, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4f, 0x0a, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x56, 0x32, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x5f, + 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, + 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, + 0x62, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, + 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x63, 0x76, + 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x62, 0x0a, 0x23, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x63, 0x76, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5f, 0x0a, 0x20, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5c, 0x0a, 0x1d, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x61, 0x0a, 0x22, 0x41, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5c, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x4a, 0x6f, + 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x1a, 0x61, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, - 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x1a, 0x66, 0x0a, 0x27, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, + 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x64, 0x0a, 0x25, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x1a, 0x8d, 0x04, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, - 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, - 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, - 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, - 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x1a, 0x60, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, - 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x1a, 0x60, 0x0a, 0x39, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, - 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x1a, 0xa9, 0x06, 0x0a, 0x33, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, - 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x62, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x8d, 0x04, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x62, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, + 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, + 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, + 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, + 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, + 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x60, 0x0a, 0x39, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0x60, 0x0a, 0x39, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, + 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x1a, 0xa9, + 0x06, 0x0a, 0x33, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, - 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, - 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, - 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, - 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x1a, 0x8d, 0x04, 0x0a, 0x2d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, - 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, - 0x53, 0x75, 0x62, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, - 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, - 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, - 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, - 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, - 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x62, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, + 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x06, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, + 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, + 0x12, 0x23, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x13, + 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, + 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x8d, 0x04, 0x0a, 0x2d, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x62, 0x50, 0x32, 0x50, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x53, 0x75, 0x62, 0x42, 0x6c, 0x6f, + 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x12, 0x20, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x56, 0x32, 0x52, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x12, 0x37, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x0f, 0x77, 0x61, 0x6c, + 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0e, + 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x6c, 0x6f, 0x74, + 0x56, 0x32, 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x6c, + 0x6f, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x0b, 0x70, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x40, 0x0a, 0x0c, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3c, 0x0a, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x1a, 0x44, 0x0a, 0x1d, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x74, 0x68, 0x56, 0x31, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x56, 0x32, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x10, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0xca, 0x09, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, @@ -9142,7 +9287,7 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, - 0x65, 0x74, 0x61, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xcb, 0x11, 0x0a, 0x05, + 0x65, 0x74, 0x61, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xf4, 0x11, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, @@ -9150,7 +9295,7 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd1, 0x10, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xfa, 0x10, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, @@ -9283,349 +9428,357 @@ var file_pkg_proto_xatu_event_ingester_proto_rawDesc = []byte{ 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x32, 0x12, 0x27, 0x0a, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, - 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x10, 0x33, 0x22, 0xca, 0x29, 0x0a, 0x0e, 0x44, 0x65, - 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x1e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, - 0x67, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, - 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, - 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, - 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, - 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, - 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x6b, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, - 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, + 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x10, 0x33, 0x12, 0x27, 0x0a, 0x23, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, + 0x10, 0x34, 0x22, 0x9e, 0x2a, 0x0a, 0x0e, 0x44, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x67, 0x0a, 0x19, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, - 0x47, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x12, 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, - 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x12, 0x57, 0x0a, 0x12, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x42, 0x02, - 0x18, 0x01, 0x48, 0x00, 0x52, 0x1d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, - 0x45, 0x41, 0x44, 0x12, 0x74, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, - 0x78, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, - 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, - 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x8b, 0x01, 0x0a, 0x24, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, - 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, - 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x12, 0x36, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x13, 0x4d, 0x45, 0x4d, 0x50, - 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, - 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x5e, 0x0a, 0x12, 0x65, - 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, - 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, - 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x12, 0x6d, 0x0a, 0x18, 0x65, - 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, - 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, - 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, - 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x5d, 0x0a, 0x17, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x65, 0x48, 0x00, 0x52, 0x22, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x45, 0x12, 0x79, 0x0a, 0x21, 0x65, 0x74, 0x68, - 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, - 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x12, 0x6b, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, - 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, - 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, 0x21, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, - 0x32, 0x12, 0x6f, 0x0a, 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, - 0x32, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, - 0x56, 0x32, 0x12, 0x8a, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, + 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, - 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x12, - 0x5b, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x56, 0x32, 0x48, 0x00, 0x52, 0x20, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x5f, 0x56, 0x32, 0x12, 0x78, 0x0a, 0x1f, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, - 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x76, 0x32, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, - 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2a, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, - 0x58, 0x49, 0x54, 0x5f, 0x56, 0x32, 0x12, 0x8f, 0x01, 0x0a, 0x27, 0x65, 0x74, 0x68, 0x5f, 0x76, - 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, - 0x76, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x56, 0x32, 0x48, 0x00, 0x52, 0x32, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x6b, 0x0a, + 0x19, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x24, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, - 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, - 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x56, 0x32, 0x12, 0x38, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x70, - 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x76, 0x32, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x4d, 0x45, 0x4d, 0x50, - 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x56, 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, - 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, - 0x56, 0x32, 0x12, 0x62, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, - 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x76, 0x32, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x26, + 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x12, 0x86, 0x01, 0x0a, 0x22, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x46, + 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x50, 0x4f, + 0x49, 0x4e, 0x54, 0x12, 0x57, 0x0a, 0x12, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x1d, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x12, 0x74, 0x0a, 0x1c, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, + 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, + 0x78, 0x69, 0x74, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, + 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, + 0x49, 0x54, 0x12, 0x8b, 0x01, 0x0a, 0x24, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, + 0x2f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, + 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, + 0x12, 0x36, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, + 0x01, 0x48, 0x00, 0x52, 0x13, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x02, + 0x18, 0x01, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x5e, 0x0a, 0x12, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, + 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, + 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, + 0x4f, 0x49, 0x43, 0x45, 0x12, 0x6d, 0x0a, 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, + 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x44, 0x65, + 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, + 0x72, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, + 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, + 0x4f, 0x52, 0x47, 0x12, 0x5d, 0x0a, 0x17, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x48, 0x00, 0x52, 0x22, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, - 0x49, 0x43, 0x45, 0x5f, 0x56, 0x32, 0x12, 0x71, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, - 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, - 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, - 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, - 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x12, 0x82, 0x01, 0x0a, 0x25, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, - 0x69, 0x6e, 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, - 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x82, - 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, - 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x32, 0x48, - 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, - 0x49, 0x4e, 0x47, 0x12, 0x7f, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, - 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, - 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, + 0x45, 0x45, 0x12, 0x79, 0x0a, 0x21, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x56, 0x32, 0x48, 0x00, 0x52, + 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x31, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, + 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x12, 0x6b, 0x0a, + 0x1c, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x61, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, + 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x41, 0x54, 0x54, 0x45, + 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x12, 0x6f, 0x0a, 0x1c, 0x65, 0x74, + 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x6f, 0x72, 0x67, 0x56, 0x32, + 0x48, 0x00, 0x52, 0x27, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, + 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x48, 0x41, + 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, 0x56, 0x32, 0x12, 0x8a, 0x01, 0x0a, 0x25, + 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x66, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, + 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, + 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x5f, 0x56, 0x32, 0x12, 0x5b, 0x0a, 0x15, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x76, + 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x56, + 0x32, 0x48, 0x00, 0x52, 0x20, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x48, 0x45, + 0x41, 0x44, 0x5f, 0x56, 0x32, 0x12, 0x78, 0x0a, 0x1f, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, + 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, + 0x32, 0x48, 0x00, 0x52, 0x2a, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x56, 0x4f, + 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x5f, 0x56, 0x32, 0x12, + 0x8f, 0x01, 0x0a, 0x27, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, + 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x76, 0x32, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x56, 0x32, 0x48, 0x00, 0x52, 0x32, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x56, + 0x32, 0x12, 0x38, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x32, 0x18, 0x17, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x16, 0x4d, 0x45, 0x4d, 0x50, 0x4f, 0x4f, 0x4c, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x32, 0x12, 0x5e, 0x0a, 0x16, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x76, 0x32, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x32, 0x48, 0x00, 0x52, 0x21, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x32, 0x12, 0x62, 0x0a, 0x15, 0x65, + 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, + 0x65, 0x5f, 0x76, 0x32, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, + 0x69, 0x63, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x5f, 0x46, 0x4f, 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x56, 0x32, 0x12, + 0x71, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x63, + 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x67, 0x5f, 0x76, 0x32, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6f, 0x72, 0x67, + 0x56, 0x32, 0x48, 0x00, 0x52, 0x2c, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x4f, + 0x52, 0x4b, 0x5f, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4f, 0x52, 0x47, 0x5f, + 0x56, 0x32, 0x12, 0x82, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, + 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, - 0x45, 0x58, 0x49, 0x54, 0x12, 0x65, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x56, - 0x32, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0x98, 0x01, 0x0a, 0x2b, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, + 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x82, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, + 0x67, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, + 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x32, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, + 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x7f, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x36, + 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, + 0x69, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x6f, 0x6c, + 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, - 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, - 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, 0x83, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, - 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6e, 0x0a, 0x1e, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x21, + 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, + 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x65, 0x0a, + 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x56, 0x32, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, + 0x4f, 0x53, 0x49, 0x54, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, + 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, + 0x4c, 0x53, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x56, 0x32, 0x48, 0x00, 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, + 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, + 0x83, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6e, 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x56, 0x32, 0x48, 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, + 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x6a, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, + 0x63, 0x61, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, + 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, + 0x52, 0x12, 0x70, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x2e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x12, 0x6b, 0x0a, 0x20, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, + 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, + 0x12, 0x54, 0x0a, 0x16, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x61, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x16, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, + 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, 0x14, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x56, 0x32, 0x48, - 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, - 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x6a, 0x0a, 0x1a, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x62, 0x6c, - 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, - 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x42, - 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x70, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, - 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x6b, 0x0a, 0x20, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x24, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, + 0x00, 0x52, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, + 0x54, 0x59, 0x12, 0x8f, 0x01, 0x0a, 0x2a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x35, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, + 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x28, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, + 0x70, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, + 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x45, + 0x45, 0x52, 0x12, 0x55, 0x0a, 0x18, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x29, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, + 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x69, 0x62, + 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x72, + 0x70, 0x63, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x52, 0x65, 0x63, 0x76, 0x52, 0x50, 0x43, 0x48, 0x00, + 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, + 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, + 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x70, 0x63, + 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, + 0x62, 0x70, 0x32, 0x70, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, + 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x4e, + 0x44, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x41, 0x0a, 0x11, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x4a, + 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, + 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x12, 0x50, 0x0a, 0x16, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x59, 0x0a, 0x19, 0x6c, 0x69, + 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x19, 0x4c, 0x49, 0x42, 0x50, + 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, + 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x61, 0x0a, 0x1c, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x1c, 0x4c, 0x49, 0x42, 0x50, + 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, + 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x12, 0x5b, 0x0a, 0x1a, 0x6c, 0x69, 0x62, 0x70, + 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, + 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x7a, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x31, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, + 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, + 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, + 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, + 0x4b, 0x12, 0x78, 0x0a, 0x29, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, - 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, - 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x54, 0x0a, 0x16, 0x62, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x32, 0x48, 0x00, 0x52, 0x16, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x50, 0x32, - 0x50, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x5a, 0x0a, - 0x14, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, - 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, - 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0x8f, 0x01, 0x0a, 0x2a, 0x65, 0x74, - 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6c, 0x61, - 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, - 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x4c, 0x0a, 0x15, 0x6c, - 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x5f, - 0x70, 0x65, 0x65, 0x72, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x65, 0x65, 0x72, - 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, - 0x5f, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x45, 0x45, 0x52, 0x12, 0x55, 0x0a, 0x18, 0x6c, 0x69, 0x62, - 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x50, 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, 0x18, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, - 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x50, 0x45, 0x45, 0x52, - 0x12, 0x4c, 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x5f, 0x72, 0x65, 0x63, 0x76, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x52, 0x65, - 0x63, 0x76, 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x56, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x4c, - 0x0a, 0x15, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x73, - 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x70, 0x63, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x53, 0x65, 0x6e, 0x64, - 0x52, 0x50, 0x43, 0x48, 0x00, 0x52, 0x15, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, - 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x50, 0x43, 0x12, 0x41, 0x0a, 0x11, - 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x6a, 0x6f, 0x69, - 0x6e, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, - 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x4c, 0x49, - 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x12, - 0x50, 0x0a, 0x16, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x16, 0x4c, 0x49, 0x42, 0x50, 0x32, - 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, - 0x44, 0x12, 0x59, 0x0a, 0x19, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x2e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, - 0x32, 0x70, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x19, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, - 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x12, 0x61, 0x0a, 0x1c, - 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x2f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, - 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, - 0x00, 0x52, 0x1c, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, - 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x12, - 0x5b, 0x0a, 0x1a, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x30, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, - 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, - 0x52, 0x1a, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x48, - 0x41, 0x4e, 0x44, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x7a, 0x0a, 0x23, - 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, - 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, - 0x62, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, - 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x78, 0x0a, 0x29, 0x6c, 0x69, 0x62, 0x70, - 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, - 0x75, 0x62, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, - 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x12, 0x7a, 0x0a, 0x23, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x6c, 0x6f, - 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x67, 0x6f, - 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, 0x6c, 0x6f, 0x62, - 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, - 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, - 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x42, 0x06, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x58, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, - 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, - 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x29, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x47, + 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x7a, 0x0a, 0x23, 0x6c, + 0x69, 0x62, 0x70, 0x32, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x6f, 0x73, 0x73, + 0x69, 0x70, 0x73, 0x75, 0x62, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, + 0x61, 0x72, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, + 0x6c, 0x69, 0x62, 0x70, 0x32, 0x70, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x73, 0x75, 0x62, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, + 0x48, 0x00, 0x52, 0x23, 0x4c, 0x49, 0x42, 0x50, 0x32, 0x50, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x5f, 0x47, 0x4f, 0x53, 0x53, 0x49, 0x50, 0x53, 0x55, 0x42, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, + 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x52, 0x0a, 0x11, 0x65, 0x74, 0x68, 0x5f, 0x76, + 0x31, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x34, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, + 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x42, 0x06, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x32, 0x58, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x67, 0x65, + 0x73, 0x74, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, + 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, + 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -9641,7 +9794,7 @@ func file_pkg_proto_xatu_event_ingester_proto_rawDescGZIP() []byte { } var file_pkg_proto_xatu_event_ingester_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pkg_proto_xatu_event_ingester_proto_msgTypes = make([]protoimpl.MessageInfo, 91) +var file_pkg_proto_xatu_event_ingester_proto_msgTypes = make([]protoimpl.MessageInfo, 93) var file_pkg_proto_xatu_event_ingester_proto_goTypes = []interface{}{ (Event_Name)(0), // 0: xatu.Event.Name (*CreateEventsRequest)(nil), // 1: xatu.CreateEventsRequest @@ -9657,438 +9810,445 @@ var file_pkg_proto_xatu_event_ingester_proto_goTypes = []interface{}{ (*AttestingValidatorV2)(nil), // 11: xatu.AttestingValidatorV2 (*DebugForkChoiceReorg)(nil), // 12: xatu.DebugForkChoiceReorg (*DebugForkChoiceReorgV2)(nil), // 13: xatu.DebugForkChoiceReorgV2 - (*BlockIdentifier)(nil), // 14: xatu.BlockIdentifier - (*ClientMeta)(nil), // 15: xatu.ClientMeta - (*ServerMeta)(nil), // 16: xatu.ServerMeta - (*Meta)(nil), // 17: xatu.Meta - (*Event)(nil), // 18: xatu.Event - (*DecoratedEvent)(nil), // 19: xatu.DecoratedEvent - (*ClientMeta_Ethereum)(nil), // 20: xatu.ClientMeta.Ethereum - nil, // 21: xatu.ClientMeta.LabelsEntry - (*ClientMeta_AdditionalEthV1AttestationSourceData)(nil), // 22: xatu.ClientMeta.AdditionalEthV1AttestationSourceData - (*ClientMeta_AdditionalEthV1AttestationSourceV2Data)(nil), // 23: xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - (*ClientMeta_AdditionalEthV1AttestationTargetData)(nil), // 24: xatu.ClientMeta.AdditionalEthV1AttestationTargetData - (*ClientMeta_AdditionalEthV1AttestationTargetV2Data)(nil), // 25: xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - (*ClientMeta_AdditionalEthV1EventsAttestationData)(nil), // 26: xatu.ClientMeta.AdditionalEthV1EventsAttestationData - (*ClientMeta_AdditionalEthV1EventsAttestationV2Data)(nil), // 27: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data - (*ClientMeta_AdditionalEthV1EventsHeadData)(nil), // 28: xatu.ClientMeta.AdditionalEthV1EventsHeadData - (*ClientMeta_AdditionalEthV1EventsHeadV2Data)(nil), // 29: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data - (*ClientMeta_AdditionalEthV1EventsBlockData)(nil), // 30: xatu.ClientMeta.AdditionalEthV1EventsBlockData - (*ClientMeta_AdditionalEthV1EventsBlockV2Data)(nil), // 31: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data - (*ClientMeta_AdditionalEthV1EventsVoluntaryExitData)(nil), // 32: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData - (*ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data)(nil), // 33: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data - (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData)(nil), // 34: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData - (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data)(nil), // 35: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data - (*ClientMeta_AdditionalEthV1EventsChainReorgData)(nil), // 36: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData - (*ClientMeta_AdditionalEthV1EventsChainReorgV2Data)(nil), // 37: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data - (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData)(nil), // 38: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData - (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data)(nil), // 39: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data - (*ClientMeta_AdditionalEthV1EventsContributionAndProofData)(nil), // 40: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData - (*ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data)(nil), // 41: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data - (*ClientMeta_ForkChoiceSnapshot)(nil), // 42: xatu.ClientMeta.ForkChoiceSnapshot - (*ClientMeta_ForkChoiceSnapshotV2)(nil), // 43: xatu.ClientMeta.ForkChoiceSnapshotV2 - (*ClientMeta_AdditionalEthV1DebugForkChoiceData)(nil), // 44: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData - (*ClientMeta_AdditionalEthV1DebugForkChoiceV2Data)(nil), // 45: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data - (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData)(nil), // 46: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData - (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data)(nil), // 47: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data - (*ClientMeta_AdditionalEthV1BeaconCommitteeData)(nil), // 48: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData - (*ClientMeta_AdditionalMempoolTransactionData)(nil), // 49: xatu.ClientMeta.AdditionalMempoolTransactionData - (*ClientMeta_AdditionalMempoolTransactionV2Data)(nil), // 50: xatu.ClientMeta.AdditionalMempoolTransactionV2Data - (*ClientMeta_AdditionalEthV2BeaconBlockData)(nil), // 51: xatu.ClientMeta.AdditionalEthV2BeaconBlockData - (*ClientMeta_AdditionalEthV2BeaconBlockV2Data)(nil), // 52: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data - (*ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData)(nil), // 53: xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData - (*ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData)(nil), // 54: xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData - (*ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData)(nil), // 55: xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData - (*ClientMeta_AdditionalEthV2BeaconBlockDepositData)(nil), // 56: xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData - (*ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData)(nil), // 57: xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData - (*ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData)(nil), // 58: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData - (*ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData)(nil), // 59: xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData - (*ClientMeta_AdditionalBlockprintBlockClassificationData)(nil), // 60: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData - (*ClientMeta_AttestationDataSnapshot)(nil), // 61: xatu.ClientMeta.AttestationDataSnapshot - (*ClientMeta_AdditionalEthV1ValidatorAttestationDataData)(nil), // 62: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData - (*ClientMeta_AdditionalEthV1EventsBlobSidecarData)(nil), // 63: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData - (*ClientMeta_AdditionalEthV1BeaconBlobSidecarData)(nil), // 64: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData - (*ClientMeta_AdditionalBeaconP2PAttestationData)(nil), // 65: xatu.ClientMeta.AdditionalBeaconP2PAttestationData - (*ClientMeta_AdditionalEthV1ProposerDutyData)(nil), // 66: xatu.ClientMeta.AdditionalEthV1ProposerDutyData - (*ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData)(nil), // 67: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData - (*ClientMeta_AdditionalLibP2PTraceAddPeerData)(nil), // 68: xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData - (*ClientMeta_AdditionalLibP2PTraceRemovePeerData)(nil), // 69: xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData - (*ClientMeta_AdditionalLibP2PTraceRecvRPCData)(nil), // 70: xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData - (*ClientMeta_AdditionalLibP2PTraceSendRPCData)(nil), // 71: xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData - (*ClientMeta_AdditionalLibP2PTraceJoinData)(nil), // 72: xatu.ClientMeta.AdditionalLibP2PTraceJoinData - (*ClientMeta_AdditionalLibP2PTraceConnectedData)(nil), // 73: xatu.ClientMeta.AdditionalLibP2PTraceConnectedData - (*ClientMeta_AdditionalLibP2PTraceDisconnectedData)(nil), // 74: xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData - (*ClientMeta_AdditionalLibP2PTraceHandleMetadataData)(nil), // 75: xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData - (*ClientMeta_AdditionalLibP2PTraceHandleStatusData)(nil), // 76: xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData - (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData)(nil), // 77: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData - (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData)(nil), // 78: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData - (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData)(nil), // 79: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData - (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData)(nil), // 80: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData - (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData)(nil), // 81: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData - (*ClientMeta_Ethereum_Network)(nil), // 82: xatu.ClientMeta.Ethereum.Network - (*ClientMeta_Ethereum_Execution)(nil), // 83: xatu.ClientMeta.Ethereum.Execution - (*ClientMeta_Ethereum_Consensus)(nil), // 84: xatu.ClientMeta.Ethereum.Consensus - (*ServerMeta_Event)(nil), // 85: xatu.ServerMeta.Event - (*ServerMeta_Geo)(nil), // 86: xatu.ServerMeta.Geo - (*ServerMeta_Client)(nil), // 87: xatu.ServerMeta.Client - (*ServerMeta_Peer)(nil), // 88: xatu.ServerMeta.Peer - (*ServerMeta_AdditionalBeaconP2PAttestationData)(nil), // 89: xatu.ServerMeta.AdditionalBeaconP2PAttestationData - (*ServerMeta_AdditionalLibp2PTraceConnectedData)(nil), // 90: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData - (*ServerMeta_AdditionalLibp2PTraceDisconnectedData)(nil), // 91: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData - (*timestamppb.Timestamp)(nil), // 92: google.protobuf.Timestamp - (*wrapperspb.UInt64Value)(nil), // 93: google.protobuf.UInt64Value - (*v1.ForkChoice)(nil), // 94: xatu.eth.v1.ForkChoice - (*v1.EventChainReorg)(nil), // 95: xatu.eth.v1.EventChainReorg - (*v1.ForkChoiceV2)(nil), // 96: xatu.eth.v1.ForkChoiceV2 - (*v1.EventChainReorgV2)(nil), // 97: xatu.eth.v1.EventChainReorgV2 - (*v1.Attestation)(nil), // 98: xatu.eth.v1.Attestation - (*v1.EventBlock)(nil), // 99: xatu.eth.v1.EventBlock - (*v1.EventFinalizedCheckpoint)(nil), // 100: xatu.eth.v1.EventFinalizedCheckpoint - (*v1.EventHead)(nil), // 101: xatu.eth.v1.EventHead - (*v1.EventVoluntaryExit)(nil), // 102: xatu.eth.v1.EventVoluntaryExit - (*v1.EventContributionAndProof)(nil), // 103: xatu.eth.v1.EventContributionAndProof - (*v2.EventBlock)(nil), // 104: xatu.eth.v2.EventBlock - (*v1.Committee)(nil), // 105: xatu.eth.v1.Committee - (*v1.AttestationDataV2)(nil), // 106: xatu.eth.v1.AttestationDataV2 - (*v1.AttestationV2)(nil), // 107: xatu.eth.v1.AttestationV2 - (*v1.EventBlockV2)(nil), // 108: xatu.eth.v1.EventBlockV2 - (*v1.EventFinalizedCheckpointV2)(nil), // 109: xatu.eth.v1.EventFinalizedCheckpointV2 - (*v1.EventHeadV2)(nil), // 110: xatu.eth.v1.EventHeadV2 - (*v1.EventVoluntaryExitV2)(nil), // 111: xatu.eth.v1.EventVoluntaryExitV2 - (*v1.EventContributionAndProofV2)(nil), // 112: xatu.eth.v1.EventContributionAndProofV2 - (*v2.EventBlockV2)(nil), // 113: xatu.eth.v2.EventBlockV2 - (*v1.AttesterSlashingV2)(nil), // 114: xatu.eth.v1.AttesterSlashingV2 - (*v1.ProposerSlashingV2)(nil), // 115: xatu.eth.v1.ProposerSlashingV2 - (*v1.SignedVoluntaryExitV2)(nil), // 116: xatu.eth.v1.SignedVoluntaryExitV2 - (*v1.DepositV2)(nil), // 117: xatu.eth.v1.DepositV2 - (*v2.SignedBLSToExecutionChangeV2)(nil), // 118: xatu.eth.v2.SignedBLSToExecutionChangeV2 - (*v1.Transaction)(nil), // 119: xatu.eth.v1.Transaction - (*v1.WithdrawalV2)(nil), // 120: xatu.eth.v1.WithdrawalV2 - (*v1.EventBlobSidecar)(nil), // 121: xatu.eth.v1.EventBlobSidecar - (*blockprint.BlockClassification)(nil), // 122: xatu.blockprint.BlockClassification - (*v1.BlobSidecar)(nil), // 123: xatu.eth.v1.BlobSidecar - (*v1.ProposerDuty)(nil), // 124: xatu.eth.v1.ProposerDuty - (*v1.ElaboratedAttestation)(nil), // 125: xatu.eth.v1.ElaboratedAttestation - (*libp2p.AddPeer)(nil), // 126: xatu.libp2p.AddPeer - (*libp2p.RemovePeer)(nil), // 127: xatu.libp2p.RemovePeer - (*libp2p.RecvRPC)(nil), // 128: xatu.libp2p.RecvRPC - (*libp2p.SendRPC)(nil), // 129: xatu.libp2p.SendRPC - (*libp2p.Join)(nil), // 130: xatu.libp2p.Join - (*libp2p.Connected)(nil), // 131: xatu.libp2p.Connected - (*libp2p.Disconnected)(nil), // 132: xatu.libp2p.Disconnected - (*libp2p.HandleMetadata)(nil), // 133: xatu.libp2p.HandleMetadata - (*libp2p.HandleStatus)(nil), // 134: xatu.libp2p.HandleStatus - (*gossipsub.BeaconBlock)(nil), // 135: xatu.libp2p.gossipsub.eth.BeaconBlock - (*gossipsub.BlobSidecar)(nil), // 136: xatu.libp2p.gossipsub.eth.BlobSidecar - (*wrapperspb.UInt32Value)(nil), // 137: google.protobuf.UInt32Value - (*libp2p.Peer)(nil), // 138: xatu.libp2p.Peer - (*wrapperspb.BoolValue)(nil), // 139: google.protobuf.BoolValue - (*libp2p.TraceEventMetadata)(nil), // 140: xatu.libp2p.TraceEventMetadata - (*wrapperspb.StringValue)(nil), // 141: google.protobuf.StringValue + (*Validators)(nil), // 14: xatu.Validators + (*BlockIdentifier)(nil), // 15: xatu.BlockIdentifier + (*ClientMeta)(nil), // 16: xatu.ClientMeta + (*ServerMeta)(nil), // 17: xatu.ServerMeta + (*Meta)(nil), // 18: xatu.Meta + (*Event)(nil), // 19: xatu.Event + (*DecoratedEvent)(nil), // 20: xatu.DecoratedEvent + (*ClientMeta_Ethereum)(nil), // 21: xatu.ClientMeta.Ethereum + nil, // 22: xatu.ClientMeta.LabelsEntry + (*ClientMeta_AdditionalEthV1AttestationSourceData)(nil), // 23: xatu.ClientMeta.AdditionalEthV1AttestationSourceData + (*ClientMeta_AdditionalEthV1AttestationSourceV2Data)(nil), // 24: xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + (*ClientMeta_AdditionalEthV1AttestationTargetData)(nil), // 25: xatu.ClientMeta.AdditionalEthV1AttestationTargetData + (*ClientMeta_AdditionalEthV1AttestationTargetV2Data)(nil), // 26: xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + (*ClientMeta_AdditionalEthV1EventsAttestationData)(nil), // 27: xatu.ClientMeta.AdditionalEthV1EventsAttestationData + (*ClientMeta_AdditionalEthV1EventsAttestationV2Data)(nil), // 28: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data + (*ClientMeta_AdditionalEthV1EventsHeadData)(nil), // 29: xatu.ClientMeta.AdditionalEthV1EventsHeadData + (*ClientMeta_AdditionalEthV1EventsHeadV2Data)(nil), // 30: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data + (*ClientMeta_AdditionalEthV1EventsBlockData)(nil), // 31: xatu.ClientMeta.AdditionalEthV1EventsBlockData + (*ClientMeta_AdditionalEthV1EventsBlockV2Data)(nil), // 32: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data + (*ClientMeta_AdditionalEthV1EventsVoluntaryExitData)(nil), // 33: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData + (*ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data)(nil), // 34: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data + (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData)(nil), // 35: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData + (*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data)(nil), // 36: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data + (*ClientMeta_AdditionalEthV1EventsChainReorgData)(nil), // 37: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData + (*ClientMeta_AdditionalEthV1EventsChainReorgV2Data)(nil), // 38: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data + (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData)(nil), // 39: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData + (*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data)(nil), // 40: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data + (*ClientMeta_AdditionalEthV1EventsContributionAndProofData)(nil), // 41: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData + (*ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data)(nil), // 42: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data + (*ClientMeta_ForkChoiceSnapshot)(nil), // 43: xatu.ClientMeta.ForkChoiceSnapshot + (*ClientMeta_ForkChoiceSnapshotV2)(nil), // 44: xatu.ClientMeta.ForkChoiceSnapshotV2 + (*ClientMeta_AdditionalEthV1DebugForkChoiceData)(nil), // 45: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData + (*ClientMeta_AdditionalEthV1DebugForkChoiceV2Data)(nil), // 46: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data + (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData)(nil), // 47: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData + (*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data)(nil), // 48: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data + (*ClientMeta_AdditionalEthV1BeaconCommitteeData)(nil), // 49: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData + (*ClientMeta_AdditionalMempoolTransactionData)(nil), // 50: xatu.ClientMeta.AdditionalMempoolTransactionData + (*ClientMeta_AdditionalMempoolTransactionV2Data)(nil), // 51: xatu.ClientMeta.AdditionalMempoolTransactionV2Data + (*ClientMeta_AdditionalEthV2BeaconBlockData)(nil), // 52: xatu.ClientMeta.AdditionalEthV2BeaconBlockData + (*ClientMeta_AdditionalEthV2BeaconBlockV2Data)(nil), // 53: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data + (*ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData)(nil), // 54: xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData + (*ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData)(nil), // 55: xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData + (*ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData)(nil), // 56: xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData + (*ClientMeta_AdditionalEthV2BeaconBlockDepositData)(nil), // 57: xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData + (*ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData)(nil), // 58: xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData + (*ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData)(nil), // 59: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData + (*ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData)(nil), // 60: xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData + (*ClientMeta_AdditionalBlockprintBlockClassificationData)(nil), // 61: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData + (*ClientMeta_AttestationDataSnapshot)(nil), // 62: xatu.ClientMeta.AttestationDataSnapshot + (*ClientMeta_AdditionalEthV1ValidatorAttestationDataData)(nil), // 63: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData + (*ClientMeta_AdditionalEthV1EventsBlobSidecarData)(nil), // 64: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData + (*ClientMeta_AdditionalEthV1BeaconBlobSidecarData)(nil), // 65: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData + (*ClientMeta_AdditionalBeaconP2PAttestationData)(nil), // 66: xatu.ClientMeta.AdditionalBeaconP2PAttestationData + (*ClientMeta_AdditionalEthV1ProposerDutyData)(nil), // 67: xatu.ClientMeta.AdditionalEthV1ProposerDutyData + (*ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData)(nil), // 68: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData + (*ClientMeta_AdditionalLibP2PTraceAddPeerData)(nil), // 69: xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData + (*ClientMeta_AdditionalLibP2PTraceRemovePeerData)(nil), // 70: xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData + (*ClientMeta_AdditionalLibP2PTraceRecvRPCData)(nil), // 71: xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData + (*ClientMeta_AdditionalLibP2PTraceSendRPCData)(nil), // 72: xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData + (*ClientMeta_AdditionalLibP2PTraceJoinData)(nil), // 73: xatu.ClientMeta.AdditionalLibP2PTraceJoinData + (*ClientMeta_AdditionalLibP2PTraceConnectedData)(nil), // 74: xatu.ClientMeta.AdditionalLibP2PTraceConnectedData + (*ClientMeta_AdditionalLibP2PTraceDisconnectedData)(nil), // 75: xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData + (*ClientMeta_AdditionalLibP2PTraceHandleMetadataData)(nil), // 76: xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData + (*ClientMeta_AdditionalLibP2PTraceHandleStatusData)(nil), // 77: xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData + (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData)(nil), // 78: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData + (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData)(nil), // 79: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData + (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData)(nil), // 80: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData + (*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData)(nil), // 81: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData + (*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData)(nil), // 82: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData + (*ClientMeta_AdditionalEthV1ValidatorsData)(nil), // 83: xatu.ClientMeta.AdditionalEthV1ValidatorsData + (*ClientMeta_Ethereum_Network)(nil), // 84: xatu.ClientMeta.Ethereum.Network + (*ClientMeta_Ethereum_Execution)(nil), // 85: xatu.ClientMeta.Ethereum.Execution + (*ClientMeta_Ethereum_Consensus)(nil), // 86: xatu.ClientMeta.Ethereum.Consensus + (*ServerMeta_Event)(nil), // 87: xatu.ServerMeta.Event + (*ServerMeta_Geo)(nil), // 88: xatu.ServerMeta.Geo + (*ServerMeta_Client)(nil), // 89: xatu.ServerMeta.Client + (*ServerMeta_Peer)(nil), // 90: xatu.ServerMeta.Peer + (*ServerMeta_AdditionalBeaconP2PAttestationData)(nil), // 91: xatu.ServerMeta.AdditionalBeaconP2PAttestationData + (*ServerMeta_AdditionalLibp2PTraceConnectedData)(nil), // 92: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData + (*ServerMeta_AdditionalLibp2PTraceDisconnectedData)(nil), // 93: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData + (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp + (*wrapperspb.UInt64Value)(nil), // 95: google.protobuf.UInt64Value + (*v1.ForkChoice)(nil), // 96: xatu.eth.v1.ForkChoice + (*v1.EventChainReorg)(nil), // 97: xatu.eth.v1.EventChainReorg + (*v1.ForkChoiceV2)(nil), // 98: xatu.eth.v1.ForkChoiceV2 + (*v1.EventChainReorgV2)(nil), // 99: xatu.eth.v1.EventChainReorgV2 + (*v1.Validator)(nil), // 100: xatu.eth.v1.Validator + (*v1.Attestation)(nil), // 101: xatu.eth.v1.Attestation + (*v1.EventBlock)(nil), // 102: xatu.eth.v1.EventBlock + (*v1.EventFinalizedCheckpoint)(nil), // 103: xatu.eth.v1.EventFinalizedCheckpoint + (*v1.EventHead)(nil), // 104: xatu.eth.v1.EventHead + (*v1.EventVoluntaryExit)(nil), // 105: xatu.eth.v1.EventVoluntaryExit + (*v1.EventContributionAndProof)(nil), // 106: xatu.eth.v1.EventContributionAndProof + (*v2.EventBlock)(nil), // 107: xatu.eth.v2.EventBlock + (*v1.Committee)(nil), // 108: xatu.eth.v1.Committee + (*v1.AttestationDataV2)(nil), // 109: xatu.eth.v1.AttestationDataV2 + (*v1.AttestationV2)(nil), // 110: xatu.eth.v1.AttestationV2 + (*v1.EventBlockV2)(nil), // 111: xatu.eth.v1.EventBlockV2 + (*v1.EventFinalizedCheckpointV2)(nil), // 112: xatu.eth.v1.EventFinalizedCheckpointV2 + (*v1.EventHeadV2)(nil), // 113: xatu.eth.v1.EventHeadV2 + (*v1.EventVoluntaryExitV2)(nil), // 114: xatu.eth.v1.EventVoluntaryExitV2 + (*v1.EventContributionAndProofV2)(nil), // 115: xatu.eth.v1.EventContributionAndProofV2 + (*v2.EventBlockV2)(nil), // 116: xatu.eth.v2.EventBlockV2 + (*v1.AttesterSlashingV2)(nil), // 117: xatu.eth.v1.AttesterSlashingV2 + (*v1.ProposerSlashingV2)(nil), // 118: xatu.eth.v1.ProposerSlashingV2 + (*v1.SignedVoluntaryExitV2)(nil), // 119: xatu.eth.v1.SignedVoluntaryExitV2 + (*v1.DepositV2)(nil), // 120: xatu.eth.v1.DepositV2 + (*v2.SignedBLSToExecutionChangeV2)(nil), // 121: xatu.eth.v2.SignedBLSToExecutionChangeV2 + (*v1.Transaction)(nil), // 122: xatu.eth.v1.Transaction + (*v1.WithdrawalV2)(nil), // 123: xatu.eth.v1.WithdrawalV2 + (*v1.EventBlobSidecar)(nil), // 124: xatu.eth.v1.EventBlobSidecar + (*blockprint.BlockClassification)(nil), // 125: xatu.blockprint.BlockClassification + (*v1.BlobSidecar)(nil), // 126: xatu.eth.v1.BlobSidecar + (*v1.ProposerDuty)(nil), // 127: xatu.eth.v1.ProposerDuty + (*v1.ElaboratedAttestation)(nil), // 128: xatu.eth.v1.ElaboratedAttestation + (*libp2p.AddPeer)(nil), // 129: xatu.libp2p.AddPeer + (*libp2p.RemovePeer)(nil), // 130: xatu.libp2p.RemovePeer + (*libp2p.RecvRPC)(nil), // 131: xatu.libp2p.RecvRPC + (*libp2p.SendRPC)(nil), // 132: xatu.libp2p.SendRPC + (*libp2p.Join)(nil), // 133: xatu.libp2p.Join + (*libp2p.Connected)(nil), // 134: xatu.libp2p.Connected + (*libp2p.Disconnected)(nil), // 135: xatu.libp2p.Disconnected + (*libp2p.HandleMetadata)(nil), // 136: xatu.libp2p.HandleMetadata + (*libp2p.HandleStatus)(nil), // 137: xatu.libp2p.HandleStatus + (*gossipsub.BeaconBlock)(nil), // 138: xatu.libp2p.gossipsub.eth.BeaconBlock + (*gossipsub.BlobSidecar)(nil), // 139: xatu.libp2p.gossipsub.eth.BlobSidecar + (*wrapperspb.UInt32Value)(nil), // 140: google.protobuf.UInt32Value + (*libp2p.Peer)(nil), // 141: xatu.libp2p.Peer + (*wrapperspb.BoolValue)(nil), // 142: google.protobuf.BoolValue + (*libp2p.TraceEventMetadata)(nil), // 143: xatu.libp2p.TraceEventMetadata + (*wrapperspb.StringValue)(nil), // 144: google.protobuf.StringValue } var file_pkg_proto_xatu_event_ingester_proto_depIdxs = []int32{ - 19, // 0: xatu.CreateEventsRequest.events:type_name -> xatu.DecoratedEvent - 92, // 1: xatu.Epoch.start_date_time:type_name -> google.protobuf.Timestamp - 93, // 2: xatu.EpochV2.number:type_name -> google.protobuf.UInt64Value - 92, // 3: xatu.EpochV2.start_date_time:type_name -> google.protobuf.Timestamp - 92, // 4: xatu.Slot.start_date_time:type_name -> google.protobuf.Timestamp - 93, // 5: xatu.SlotV2.number:type_name -> google.protobuf.UInt64Value - 92, // 6: xatu.SlotV2.start_date_time:type_name -> google.protobuf.Timestamp - 93, // 7: xatu.PropagationV2.slot_start_diff:type_name -> google.protobuf.UInt64Value - 93, // 8: xatu.AttestingValidatorV2.committee_index:type_name -> google.protobuf.UInt64Value - 93, // 9: xatu.AttestingValidatorV2.index:type_name -> google.protobuf.UInt64Value - 94, // 10: xatu.DebugForkChoiceReorg.before:type_name -> xatu.eth.v1.ForkChoice - 94, // 11: xatu.DebugForkChoiceReorg.after:type_name -> xatu.eth.v1.ForkChoice - 95, // 12: xatu.DebugForkChoiceReorg.event:type_name -> xatu.eth.v1.EventChainReorg - 96, // 13: xatu.DebugForkChoiceReorgV2.before:type_name -> xatu.eth.v1.ForkChoiceV2 - 96, // 14: xatu.DebugForkChoiceReorgV2.after:type_name -> xatu.eth.v1.ForkChoiceV2 - 97, // 15: xatu.DebugForkChoiceReorgV2.event:type_name -> xatu.eth.v1.EventChainReorgV2 - 4, // 16: xatu.BlockIdentifier.epoch:type_name -> xatu.EpochV2 - 6, // 17: xatu.BlockIdentifier.slot:type_name -> xatu.SlotV2 - 20, // 18: xatu.ClientMeta.ethereum:type_name -> xatu.ClientMeta.Ethereum - 21, // 19: xatu.ClientMeta.labels:type_name -> xatu.ClientMeta.LabelsEntry - 26, // 20: xatu.ClientMeta.eth_v1_events_attestation:type_name -> xatu.ClientMeta.AdditionalEthV1EventsAttestationData - 28, // 21: xatu.ClientMeta.eth_v1_events_head:type_name -> xatu.ClientMeta.AdditionalEthV1EventsHeadData - 30, // 22: xatu.ClientMeta.eth_v1_events_block:type_name -> xatu.ClientMeta.AdditionalEthV1EventsBlockData - 32, // 23: xatu.ClientMeta.eth_v1_events_voluntary_exit:type_name -> xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData - 34, // 24: xatu.ClientMeta.eth_v1_events_finalized_checkpoint:type_name -> xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData - 36, // 25: xatu.ClientMeta.eth_v1_events_chain_reorg:type_name -> xatu.ClientMeta.AdditionalEthV1EventsChainReorgData - 40, // 26: xatu.ClientMeta.eth_v1_events_contribution_and_proof:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData - 49, // 27: xatu.ClientMeta.mempool_transaction:type_name -> xatu.ClientMeta.AdditionalMempoolTransactionData - 51, // 28: xatu.ClientMeta.eth_v2_beacon_block:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockData - 44, // 29: xatu.ClientMeta.eth_v1_debug_fork_choice:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData - 46, // 30: xatu.ClientMeta.eth_v1_debug_fork_choice_reorg:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData - 48, // 31: xatu.ClientMeta.eth_v1_beacon_committee:type_name -> xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData - 62, // 32: xatu.ClientMeta.eth_v1_validator_attestation_data:type_name -> xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData - 27, // 33: xatu.ClientMeta.eth_v1_events_attestation_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data - 29, // 34: xatu.ClientMeta.eth_v1_events_head_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data - 31, // 35: xatu.ClientMeta.eth_v1_events_block_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data - 33, // 36: xatu.ClientMeta.eth_v1_events_voluntary_exit_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data - 35, // 37: xatu.ClientMeta.eth_v1_events_finalized_checkpoint_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data - 37, // 38: xatu.ClientMeta.eth_v1_events_chain_reorg_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data - 41, // 39: xatu.ClientMeta.eth_v1_events_contribution_and_proof_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data - 50, // 40: xatu.ClientMeta.mempool_transaction_v2:type_name -> xatu.ClientMeta.AdditionalMempoolTransactionV2Data - 52, // 41: xatu.ClientMeta.eth_v2_beacon_block_v2:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data - 45, // 42: xatu.ClientMeta.eth_v1_debug_fork_choice_v2:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data - 47, // 43: xatu.ClientMeta.eth_v1_debug_fork_choice_reorg_v2:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data - 53, // 44: xatu.ClientMeta.eth_v2_beacon_block_attester_slashing:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData - 54, // 45: xatu.ClientMeta.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData - 55, // 46: xatu.ClientMeta.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData - 56, // 47: xatu.ClientMeta.eth_v2_beacon_block_deposit:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData - 57, // 48: xatu.ClientMeta.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData - 58, // 49: xatu.ClientMeta.eth_v2_beacon_block_execution_transaction:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData - 59, // 50: xatu.ClientMeta.eth_v2_beacon_block_withdrawal:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData - 63, // 51: xatu.ClientMeta.eth_v1_events_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData - 60, // 52: xatu.ClientMeta.blockprint_block_classification:type_name -> xatu.ClientMeta.AdditionalBlockprintBlockClassificationData - 64, // 53: xatu.ClientMeta.eth_v1_beacon_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData - 65, // 54: xatu.ClientMeta.beacon_p2p_attestation:type_name -> xatu.ClientMeta.AdditionalBeaconP2PAttestationData - 66, // 55: xatu.ClientMeta.eth_v1_proposer_duty:type_name -> xatu.ClientMeta.AdditionalEthV1ProposerDutyData - 67, // 56: xatu.ClientMeta.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData - 68, // 57: xatu.ClientMeta.libp2p_trace_add_peer:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData - 69, // 58: xatu.ClientMeta.libp2p_trace_remove_peer:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData - 70, // 59: xatu.ClientMeta.libp2p_trace_recv_rpc:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData - 71, // 60: xatu.ClientMeta.libp2p_trace_send_rpc:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData - 72, // 61: xatu.ClientMeta.libp2p_trace_join:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceJoinData - 73, // 62: xatu.ClientMeta.libp2p_trace_connected:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceConnectedData - 74, // 63: xatu.ClientMeta.libp2p_trace_disconnected:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData - 75, // 64: xatu.ClientMeta.libp2p_trace_handle_metadata:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData - 76, // 65: xatu.ClientMeta.libp2p_trace_handle_status:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData - 77, // 66: xatu.ClientMeta.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData - 80, // 67: xatu.ClientMeta.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData - 81, // 68: xatu.ClientMeta.libp2p_trace_gossipsub_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData - 85, // 69: xatu.ServerMeta.event:type_name -> xatu.ServerMeta.Event - 87, // 70: xatu.ServerMeta.client:type_name -> xatu.ServerMeta.Client - 89, // 71: xatu.ServerMeta.BEACON_P2P_ATTESTATION:type_name -> xatu.ServerMeta.AdditionalBeaconP2PAttestationData - 90, // 72: xatu.ServerMeta.LIBP2P_TRACE_CONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceConnectedData - 91, // 73: xatu.ServerMeta.LIBP2P_TRACE_DISCONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData - 15, // 74: xatu.Meta.client:type_name -> xatu.ClientMeta - 16, // 75: xatu.Meta.server:type_name -> xatu.ServerMeta - 0, // 76: xatu.Event.name:type_name -> xatu.Event.Name - 92, // 77: xatu.Event.date_time:type_name -> google.protobuf.Timestamp - 18, // 78: xatu.DecoratedEvent.event:type_name -> xatu.Event - 17, // 79: xatu.DecoratedEvent.meta:type_name -> xatu.Meta - 98, // 80: xatu.DecoratedEvent.eth_v1_events_attestation:type_name -> xatu.eth.v1.Attestation - 99, // 81: xatu.DecoratedEvent.eth_v1_events_block:type_name -> xatu.eth.v1.EventBlock - 95, // 82: xatu.DecoratedEvent.eth_v1_events_chain_reorg:type_name -> xatu.eth.v1.EventChainReorg - 100, // 83: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint:type_name -> xatu.eth.v1.EventFinalizedCheckpoint - 101, // 84: xatu.DecoratedEvent.eth_v1_events_head:type_name -> xatu.eth.v1.EventHead - 102, // 85: xatu.DecoratedEvent.eth_v1_events_voluntary_exit:type_name -> xatu.eth.v1.EventVoluntaryExit - 103, // 86: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof:type_name -> xatu.eth.v1.EventContributionAndProof - 104, // 87: xatu.DecoratedEvent.eth_v2_beacon_block:type_name -> xatu.eth.v2.EventBlock - 94, // 88: xatu.DecoratedEvent.eth_v1_fork_choice:type_name -> xatu.eth.v1.ForkChoice - 12, // 89: xatu.DecoratedEvent.eth_v1_fork_choice_reorg:type_name -> xatu.DebugForkChoiceReorg - 105, // 90: xatu.DecoratedEvent.eth_v1_beacon_committee:type_name -> xatu.eth.v1.Committee - 106, // 91: xatu.DecoratedEvent.eth_v1_validator_attestation_data:type_name -> xatu.eth.v1.AttestationDataV2 - 107, // 92: xatu.DecoratedEvent.eth_v1_events_attestation_v2:type_name -> xatu.eth.v1.AttestationV2 - 108, // 93: xatu.DecoratedEvent.eth_v1_events_block_v2:type_name -> xatu.eth.v1.EventBlockV2 - 97, // 94: xatu.DecoratedEvent.eth_v1_events_chain_reorg_v2:type_name -> xatu.eth.v1.EventChainReorgV2 - 109, // 95: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint_v2:type_name -> xatu.eth.v1.EventFinalizedCheckpointV2 - 110, // 96: xatu.DecoratedEvent.eth_v1_events_head_v2:type_name -> xatu.eth.v1.EventHeadV2 - 111, // 97: xatu.DecoratedEvent.eth_v1_events_voluntary_exit_v2:type_name -> xatu.eth.v1.EventVoluntaryExitV2 - 112, // 98: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof_v2:type_name -> xatu.eth.v1.EventContributionAndProofV2 - 113, // 99: xatu.DecoratedEvent.eth_v2_beacon_block_v2:type_name -> xatu.eth.v2.EventBlockV2 - 96, // 100: xatu.DecoratedEvent.eth_v1_fork_choice_v2:type_name -> xatu.eth.v1.ForkChoiceV2 - 13, // 101: xatu.DecoratedEvent.eth_v1_fork_choice_reorg_v2:type_name -> xatu.DebugForkChoiceReorgV2 - 114, // 102: xatu.DecoratedEvent.eth_v2_beacon_block_attester_slashing:type_name -> xatu.eth.v1.AttesterSlashingV2 - 115, // 103: xatu.DecoratedEvent.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.eth.v1.ProposerSlashingV2 - 116, // 104: xatu.DecoratedEvent.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.eth.v1.SignedVoluntaryExitV2 - 117, // 105: xatu.DecoratedEvent.eth_v2_beacon_block_deposit:type_name -> xatu.eth.v1.DepositV2 - 118, // 106: xatu.DecoratedEvent.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.eth.v2.SignedBLSToExecutionChangeV2 - 119, // 107: xatu.DecoratedEvent.eth_v2_beacon_block_execution_transaction:type_name -> xatu.eth.v1.Transaction - 120, // 108: xatu.DecoratedEvent.eth_v2_beacon_block_withdrawal:type_name -> xatu.eth.v1.WithdrawalV2 - 121, // 109: xatu.DecoratedEvent.eth_v1_events_blob_sidecar:type_name -> xatu.eth.v1.EventBlobSidecar - 122, // 110: xatu.DecoratedEvent.blockprint_block_classification:type_name -> xatu.blockprint.BlockClassification - 123, // 111: xatu.DecoratedEvent.eth_v1_beacon_block_blob_sidecar:type_name -> xatu.eth.v1.BlobSidecar - 107, // 112: xatu.DecoratedEvent.beacon_p2p_attestation:type_name -> xatu.eth.v1.AttestationV2 - 124, // 113: xatu.DecoratedEvent.eth_v1_proposer_duty:type_name -> xatu.eth.v1.ProposerDuty - 125, // 114: xatu.DecoratedEvent.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.eth.v1.ElaboratedAttestation - 126, // 115: xatu.DecoratedEvent.libp2p_trace_add_peer:type_name -> xatu.libp2p.AddPeer - 127, // 116: xatu.DecoratedEvent.libp2p_trace_remove_peer:type_name -> xatu.libp2p.RemovePeer - 128, // 117: xatu.DecoratedEvent.libp2p_trace_recv_rpc:type_name -> xatu.libp2p.RecvRPC - 129, // 118: xatu.DecoratedEvent.libp2p_trace_send_rpc:type_name -> xatu.libp2p.SendRPC - 130, // 119: xatu.DecoratedEvent.libp2p_trace_join:type_name -> xatu.libp2p.Join - 131, // 120: xatu.DecoratedEvent.libp2p_trace_connected:type_name -> xatu.libp2p.Connected - 132, // 121: xatu.DecoratedEvent.libp2p_trace_disconnected:type_name -> xatu.libp2p.Disconnected - 133, // 122: xatu.DecoratedEvent.libp2p_trace_handle_metadata:type_name -> xatu.libp2p.HandleMetadata - 134, // 123: xatu.DecoratedEvent.libp2p_trace_handle_status:type_name -> xatu.libp2p.HandleStatus - 135, // 124: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.libp2p.gossipsub.eth.BeaconBlock - 98, // 125: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.eth.v1.Attestation - 136, // 126: xatu.DecoratedEvent.libp2p_trace_gossipsub_blob_sidecar:type_name -> xatu.libp2p.gossipsub.eth.BlobSidecar - 82, // 127: xatu.ClientMeta.Ethereum.network:type_name -> xatu.ClientMeta.Ethereum.Network - 83, // 128: xatu.ClientMeta.Ethereum.execution:type_name -> xatu.ClientMeta.Ethereum.Execution - 84, // 129: xatu.ClientMeta.Ethereum.consensus:type_name -> xatu.ClientMeta.Ethereum.Consensus - 3, // 130: xatu.ClientMeta.AdditionalEthV1AttestationSourceData.epoch:type_name -> xatu.Epoch - 4, // 131: xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data.epoch:type_name -> xatu.EpochV2 - 3, // 132: xatu.ClientMeta.AdditionalEthV1AttestationTargetData.epoch:type_name -> xatu.Epoch - 4, // 133: xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data.epoch:type_name -> xatu.EpochV2 - 22, // 134: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceData - 24, // 135: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetData - 5, // 136: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.slot:type_name -> xatu.Slot - 3, // 137: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.epoch:type_name -> xatu.Epoch - 8, // 138: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.propagation:type_name -> xatu.Propagation - 10, // 139: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.attesting_validator:type_name -> xatu.AttestingValidator - 23, // 140: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 141: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 6, // 142: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.slot:type_name -> xatu.SlotV2 - 4, // 143: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.epoch:type_name -> xatu.EpochV2 - 9, // 144: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.propagation:type_name -> xatu.PropagationV2 - 11, // 145: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.attesting_validator:type_name -> xatu.AttestingValidatorV2 - 3, // 146: xatu.ClientMeta.AdditionalEthV1EventsHeadData.epoch:type_name -> xatu.Epoch - 5, // 147: xatu.ClientMeta.AdditionalEthV1EventsHeadData.slot:type_name -> xatu.Slot - 8, // 148: xatu.ClientMeta.AdditionalEthV1EventsHeadData.propagation:type_name -> xatu.Propagation - 4, // 149: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 150: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.slot:type_name -> xatu.SlotV2 - 9, // 151: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.propagation:type_name -> xatu.PropagationV2 - 3, // 152: xatu.ClientMeta.AdditionalEthV1EventsBlockData.epoch:type_name -> xatu.Epoch - 5, // 153: xatu.ClientMeta.AdditionalEthV1EventsBlockData.slot:type_name -> xatu.Slot - 8, // 154: xatu.ClientMeta.AdditionalEthV1EventsBlockData.propagation:type_name -> xatu.Propagation - 4, // 155: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 156: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.slot:type_name -> xatu.SlotV2 - 9, // 157: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.propagation:type_name -> xatu.PropagationV2 - 3, // 158: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData.epoch:type_name -> xatu.Epoch - 4, // 159: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data.epoch:type_name -> xatu.EpochV2 - 3, // 160: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData.epoch:type_name -> xatu.Epoch - 4, // 161: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data.epoch:type_name -> xatu.EpochV2 - 3, // 162: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.epoch:type_name -> xatu.Epoch - 5, // 163: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.slot:type_name -> xatu.Slot - 8, // 164: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.propagation:type_name -> xatu.Propagation - 4, // 165: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 166: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.slot:type_name -> xatu.SlotV2 - 9, // 167: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.propagation:type_name -> xatu.PropagationV2 - 3, // 168: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.epoch:type_name -> xatu.Epoch - 5, // 169: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.slot:type_name -> xatu.Slot - 8, // 170: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.propagation:type_name -> xatu.Propagation - 4, // 171: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 172: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.slot:type_name -> xatu.SlotV2 - 9, // 173: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.propagation:type_name -> xatu.PropagationV2 - 38, // 174: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData - 39, // 175: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data - 3, // 176: xatu.ClientMeta.ForkChoiceSnapshot.request_epoch:type_name -> xatu.Epoch - 5, // 177: xatu.ClientMeta.ForkChoiceSnapshot.request_slot:type_name -> xatu.Slot - 92, // 178: xatu.ClientMeta.ForkChoiceSnapshot.timestamp:type_name -> google.protobuf.Timestamp - 4, // 179: xatu.ClientMeta.ForkChoiceSnapshotV2.request_epoch:type_name -> xatu.EpochV2 - 6, // 180: xatu.ClientMeta.ForkChoiceSnapshotV2.request_slot:type_name -> xatu.SlotV2 - 93, // 181: xatu.ClientMeta.ForkChoiceSnapshotV2.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value - 93, // 182: xatu.ClientMeta.ForkChoiceSnapshotV2.request_duration_ms:type_name -> google.protobuf.UInt64Value - 92, // 183: xatu.ClientMeta.ForkChoiceSnapshotV2.timestamp:type_name -> google.protobuf.Timestamp - 42, // 184: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshot - 43, // 185: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 - 42, // 186: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshot - 42, // 187: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshot - 43, // 188: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 - 43, // 189: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 - 4, // 190: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.epoch:type_name -> xatu.EpochV2 - 6, // 191: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.slot:type_name -> xatu.SlotV2 - 93, // 192: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.nonce:type_name -> google.protobuf.UInt64Value - 93, // 193: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.gas:type_name -> google.protobuf.UInt64Value - 137, // 194: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.type:type_name -> google.protobuf.UInt32Value - 93, // 195: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.blob_gas:type_name -> google.protobuf.UInt64Value - 3, // 196: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.epoch:type_name -> xatu.Epoch - 5, // 197: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.slot:type_name -> xatu.Slot - 4, // 198: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.epoch:type_name -> xatu.EpochV2 - 6, // 199: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.slot:type_name -> xatu.SlotV2 - 93, // 200: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_count:type_name -> google.protobuf.UInt64Value - 93, // 201: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes:type_name -> google.protobuf.UInt64Value - 93, // 202: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes_compressed:type_name -> google.protobuf.UInt64Value - 93, // 203: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes:type_name -> google.protobuf.UInt64Value - 93, // 204: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes_compressed:type_name -> google.protobuf.UInt64Value - 14, // 205: xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData.block:type_name -> xatu.BlockIdentifier - 14, // 206: xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData.block:type_name -> xatu.BlockIdentifier - 14, // 207: xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData.block:type_name -> xatu.BlockIdentifier - 14, // 208: xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData.block:type_name -> xatu.BlockIdentifier - 14, // 209: xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData.block:type_name -> xatu.BlockIdentifier - 14, // 210: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.block:type_name -> xatu.BlockIdentifier - 93, // 211: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.position_in_block:type_name -> google.protobuf.UInt64Value - 14, // 212: xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData.block:type_name -> xatu.BlockIdentifier - 4, // 213: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.epoch:type_name -> xatu.EpochV2 - 6, // 214: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.slot:type_name -> xatu.SlotV2 - 93, // 215: xatu.ClientMeta.AttestationDataSnapshot.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value - 93, // 216: xatu.ClientMeta.AttestationDataSnapshot.request_duration_ms:type_name -> google.protobuf.UInt64Value - 92, // 217: xatu.ClientMeta.AttestationDataSnapshot.timestamp:type_name -> google.protobuf.Timestamp - 23, // 218: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 219: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 4, // 220: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.epoch:type_name -> xatu.EpochV2 - 6, // 221: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.slot:type_name -> xatu.SlotV2 - 61, // 222: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.Snapshot:type_name -> xatu.ClientMeta.AttestationDataSnapshot - 4, // 223: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.epoch:type_name -> xatu.EpochV2 - 6, // 224: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.slot:type_name -> xatu.SlotV2 - 9, // 225: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.propagation:type_name -> xatu.PropagationV2 - 4, // 226: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.epoch:type_name -> xatu.EpochV2 - 6, // 227: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.slot:type_name -> xatu.SlotV2 - 93, // 228: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_size:type_name -> google.protobuf.UInt64Value - 93, // 229: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_empty_size:type_name -> google.protobuf.UInt64Value - 23, // 230: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 231: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 6, // 232: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.slot:type_name -> xatu.SlotV2 - 4, // 233: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.epoch:type_name -> xatu.EpochV2 - 9, // 234: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.propagation:type_name -> xatu.PropagationV2 - 11, // 235: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 - 138, // 236: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.libp2p.Peer - 137, // 237: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.subnet:type_name -> google.protobuf.UInt32Value - 139, // 238: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.validated:type_name -> google.protobuf.BoolValue - 4, // 239: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.epoch:type_name -> xatu.EpochV2 - 6, // 240: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.slot:type_name -> xatu.SlotV2 - 14, // 241: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.block:type_name -> xatu.BlockIdentifier - 93, // 242: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.position_in_block:type_name -> google.protobuf.UInt64Value - 4, // 243: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.epoch:type_name -> xatu.EpochV2 - 6, // 244: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.slot:type_name -> xatu.SlotV2 - 23, // 245: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data - 25, // 246: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data - 140, // 247: xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 248: xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 249: xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 250: xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 251: xatu.ClientMeta.AdditionalLibP2PTraceJoinData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 252: xatu.ClientMeta.AdditionalLibP2PTraceConnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 253: xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 254: xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 140, // 255: xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 4, // 256: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.epoch:type_name -> xatu.EpochV2 - 6, // 257: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.slot:type_name -> xatu.SlotV2 - 4, // 258: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_epoch:type_name -> xatu.EpochV2 - 6, // 259: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_slot:type_name -> xatu.SlotV2 - 9, // 260: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.propagation:type_name -> xatu.PropagationV2 - 140, // 261: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 141, // 262: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.topic:type_name -> google.protobuf.StringValue - 137, // 263: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_size:type_name -> google.protobuf.UInt32Value - 141, // 264: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_id:type_name -> google.protobuf.StringValue - 4, // 265: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData.epoch:type_name -> xatu.EpochV2 - 4, // 266: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData.epoch:type_name -> xatu.EpochV2 - 78, // 267: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.source:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData - 79, // 268: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.target:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData - 6, // 269: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.slot:type_name -> xatu.SlotV2 - 4, // 270: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.epoch:type_name -> xatu.EpochV2 - 9, // 271: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.propagation:type_name -> xatu.PropagationV2 - 11, // 272: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 - 4, // 273: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_epoch:type_name -> xatu.EpochV2 - 6, // 274: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_slot:type_name -> xatu.SlotV2 - 140, // 275: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 141, // 276: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.topic:type_name -> google.protobuf.StringValue - 137, // 277: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_size:type_name -> google.protobuf.UInt32Value - 141, // 278: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_id:type_name -> google.protobuf.StringValue - 4, // 279: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.epoch:type_name -> xatu.EpochV2 - 6, // 280: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.slot:type_name -> xatu.SlotV2 - 4, // 281: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.wallclock_epoch:type_name -> xatu.EpochV2 - 6, // 282: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.wallclock_slot:type_name -> xatu.SlotV2 - 9, // 283: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.propagation:type_name -> xatu.PropagationV2 - 140, // 284: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.metadata:type_name -> xatu.libp2p.TraceEventMetadata - 141, // 285: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.topic:type_name -> google.protobuf.StringValue - 137, // 286: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.message_size:type_name -> google.protobuf.UInt32Value - 141, // 287: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.message_id:type_name -> google.protobuf.StringValue - 7, // 288: xatu.ClientMeta.Ethereum.Execution.fork_id:type_name -> xatu.ForkID - 92, // 289: xatu.ServerMeta.Event.received_date_time:type_name -> google.protobuf.Timestamp - 86, // 290: xatu.ServerMeta.Client.geo:type_name -> xatu.ServerMeta.Geo - 86, // 291: xatu.ServerMeta.Peer.geo:type_name -> xatu.ServerMeta.Geo - 88, // 292: xatu.ServerMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.ServerMeta.Peer - 88, // 293: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData.peer:type_name -> xatu.ServerMeta.Peer - 88, // 294: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData.peer:type_name -> xatu.ServerMeta.Peer - 1, // 295: xatu.EventIngester.CreateEvents:input_type -> xatu.CreateEventsRequest - 2, // 296: xatu.EventIngester.CreateEvents:output_type -> xatu.CreateEventsResponse - 296, // [296:297] is the sub-list for method output_type - 295, // [295:296] is the sub-list for method input_type - 295, // [295:295] is the sub-list for extension type_name - 295, // [295:295] is the sub-list for extension extendee - 0, // [0:295] is the sub-list for field type_name + 20, // 0: xatu.CreateEventsRequest.events:type_name -> xatu.DecoratedEvent + 94, // 1: xatu.Epoch.start_date_time:type_name -> google.protobuf.Timestamp + 95, // 2: xatu.EpochV2.number:type_name -> google.protobuf.UInt64Value + 94, // 3: xatu.EpochV2.start_date_time:type_name -> google.protobuf.Timestamp + 94, // 4: xatu.Slot.start_date_time:type_name -> google.protobuf.Timestamp + 95, // 5: xatu.SlotV2.number:type_name -> google.protobuf.UInt64Value + 94, // 6: xatu.SlotV2.start_date_time:type_name -> google.protobuf.Timestamp + 95, // 7: xatu.PropagationV2.slot_start_diff:type_name -> google.protobuf.UInt64Value + 95, // 8: xatu.AttestingValidatorV2.committee_index:type_name -> google.protobuf.UInt64Value + 95, // 9: xatu.AttestingValidatorV2.index:type_name -> google.protobuf.UInt64Value + 96, // 10: xatu.DebugForkChoiceReorg.before:type_name -> xatu.eth.v1.ForkChoice + 96, // 11: xatu.DebugForkChoiceReorg.after:type_name -> xatu.eth.v1.ForkChoice + 97, // 12: xatu.DebugForkChoiceReorg.event:type_name -> xatu.eth.v1.EventChainReorg + 98, // 13: xatu.DebugForkChoiceReorgV2.before:type_name -> xatu.eth.v1.ForkChoiceV2 + 98, // 14: xatu.DebugForkChoiceReorgV2.after:type_name -> xatu.eth.v1.ForkChoiceV2 + 99, // 15: xatu.DebugForkChoiceReorgV2.event:type_name -> xatu.eth.v1.EventChainReorgV2 + 100, // 16: xatu.Validators.validators:type_name -> xatu.eth.v1.Validator + 4, // 17: xatu.BlockIdentifier.epoch:type_name -> xatu.EpochV2 + 6, // 18: xatu.BlockIdentifier.slot:type_name -> xatu.SlotV2 + 21, // 19: xatu.ClientMeta.ethereum:type_name -> xatu.ClientMeta.Ethereum + 22, // 20: xatu.ClientMeta.labels:type_name -> xatu.ClientMeta.LabelsEntry + 27, // 21: xatu.ClientMeta.eth_v1_events_attestation:type_name -> xatu.ClientMeta.AdditionalEthV1EventsAttestationData + 29, // 22: xatu.ClientMeta.eth_v1_events_head:type_name -> xatu.ClientMeta.AdditionalEthV1EventsHeadData + 31, // 23: xatu.ClientMeta.eth_v1_events_block:type_name -> xatu.ClientMeta.AdditionalEthV1EventsBlockData + 33, // 24: xatu.ClientMeta.eth_v1_events_voluntary_exit:type_name -> xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData + 35, // 25: xatu.ClientMeta.eth_v1_events_finalized_checkpoint:type_name -> xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData + 37, // 26: xatu.ClientMeta.eth_v1_events_chain_reorg:type_name -> xatu.ClientMeta.AdditionalEthV1EventsChainReorgData + 41, // 27: xatu.ClientMeta.eth_v1_events_contribution_and_proof:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData + 50, // 28: xatu.ClientMeta.mempool_transaction:type_name -> xatu.ClientMeta.AdditionalMempoolTransactionData + 52, // 29: xatu.ClientMeta.eth_v2_beacon_block:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockData + 45, // 30: xatu.ClientMeta.eth_v1_debug_fork_choice:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData + 47, // 31: xatu.ClientMeta.eth_v1_debug_fork_choice_reorg:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData + 49, // 32: xatu.ClientMeta.eth_v1_beacon_committee:type_name -> xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData + 63, // 33: xatu.ClientMeta.eth_v1_validator_attestation_data:type_name -> xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData + 28, // 34: xatu.ClientMeta.eth_v1_events_attestation_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data + 30, // 35: xatu.ClientMeta.eth_v1_events_head_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data + 32, // 36: xatu.ClientMeta.eth_v1_events_block_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data + 34, // 37: xatu.ClientMeta.eth_v1_events_voluntary_exit_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data + 36, // 38: xatu.ClientMeta.eth_v1_events_finalized_checkpoint_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data + 38, // 39: xatu.ClientMeta.eth_v1_events_chain_reorg_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data + 42, // 40: xatu.ClientMeta.eth_v1_events_contribution_and_proof_v2:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data + 51, // 41: xatu.ClientMeta.mempool_transaction_v2:type_name -> xatu.ClientMeta.AdditionalMempoolTransactionV2Data + 53, // 42: xatu.ClientMeta.eth_v2_beacon_block_v2:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data + 46, // 43: xatu.ClientMeta.eth_v1_debug_fork_choice_v2:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data + 48, // 44: xatu.ClientMeta.eth_v1_debug_fork_choice_reorg_v2:type_name -> xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data + 54, // 45: xatu.ClientMeta.eth_v2_beacon_block_attester_slashing:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData + 55, // 46: xatu.ClientMeta.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData + 56, // 47: xatu.ClientMeta.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData + 57, // 48: xatu.ClientMeta.eth_v2_beacon_block_deposit:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData + 58, // 49: xatu.ClientMeta.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData + 59, // 50: xatu.ClientMeta.eth_v2_beacon_block_execution_transaction:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData + 60, // 51: xatu.ClientMeta.eth_v2_beacon_block_withdrawal:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData + 64, // 52: xatu.ClientMeta.eth_v1_events_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData + 61, // 53: xatu.ClientMeta.blockprint_block_classification:type_name -> xatu.ClientMeta.AdditionalBlockprintBlockClassificationData + 65, // 54: xatu.ClientMeta.eth_v1_beacon_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData + 66, // 55: xatu.ClientMeta.beacon_p2p_attestation:type_name -> xatu.ClientMeta.AdditionalBeaconP2PAttestationData + 67, // 56: xatu.ClientMeta.eth_v1_proposer_duty:type_name -> xatu.ClientMeta.AdditionalEthV1ProposerDutyData + 68, // 57: xatu.ClientMeta.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData + 69, // 58: xatu.ClientMeta.libp2p_trace_add_peer:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData + 70, // 59: xatu.ClientMeta.libp2p_trace_remove_peer:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData + 71, // 60: xatu.ClientMeta.libp2p_trace_recv_rpc:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData + 72, // 61: xatu.ClientMeta.libp2p_trace_send_rpc:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData + 73, // 62: xatu.ClientMeta.libp2p_trace_join:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceJoinData + 74, // 63: xatu.ClientMeta.libp2p_trace_connected:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceConnectedData + 75, // 64: xatu.ClientMeta.libp2p_trace_disconnected:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData + 76, // 65: xatu.ClientMeta.libp2p_trace_handle_metadata:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData + 77, // 66: xatu.ClientMeta.libp2p_trace_handle_status:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData + 78, // 67: xatu.ClientMeta.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData + 81, // 68: xatu.ClientMeta.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData + 82, // 69: xatu.ClientMeta.libp2p_trace_gossipsub_blob_sidecar:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData + 83, // 70: xatu.ClientMeta.eth_v1_validators:type_name -> xatu.ClientMeta.AdditionalEthV1ValidatorsData + 87, // 71: xatu.ServerMeta.event:type_name -> xatu.ServerMeta.Event + 89, // 72: xatu.ServerMeta.client:type_name -> xatu.ServerMeta.Client + 91, // 73: xatu.ServerMeta.BEACON_P2P_ATTESTATION:type_name -> xatu.ServerMeta.AdditionalBeaconP2PAttestationData + 92, // 74: xatu.ServerMeta.LIBP2P_TRACE_CONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceConnectedData + 93, // 75: xatu.ServerMeta.LIBP2P_TRACE_DISCONNECTED:type_name -> xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData + 16, // 76: xatu.Meta.client:type_name -> xatu.ClientMeta + 17, // 77: xatu.Meta.server:type_name -> xatu.ServerMeta + 0, // 78: xatu.Event.name:type_name -> xatu.Event.Name + 94, // 79: xatu.Event.date_time:type_name -> google.protobuf.Timestamp + 19, // 80: xatu.DecoratedEvent.event:type_name -> xatu.Event + 18, // 81: xatu.DecoratedEvent.meta:type_name -> xatu.Meta + 101, // 82: xatu.DecoratedEvent.eth_v1_events_attestation:type_name -> xatu.eth.v1.Attestation + 102, // 83: xatu.DecoratedEvent.eth_v1_events_block:type_name -> xatu.eth.v1.EventBlock + 97, // 84: xatu.DecoratedEvent.eth_v1_events_chain_reorg:type_name -> xatu.eth.v1.EventChainReorg + 103, // 85: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint:type_name -> xatu.eth.v1.EventFinalizedCheckpoint + 104, // 86: xatu.DecoratedEvent.eth_v1_events_head:type_name -> xatu.eth.v1.EventHead + 105, // 87: xatu.DecoratedEvent.eth_v1_events_voluntary_exit:type_name -> xatu.eth.v1.EventVoluntaryExit + 106, // 88: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof:type_name -> xatu.eth.v1.EventContributionAndProof + 107, // 89: xatu.DecoratedEvent.eth_v2_beacon_block:type_name -> xatu.eth.v2.EventBlock + 96, // 90: xatu.DecoratedEvent.eth_v1_fork_choice:type_name -> xatu.eth.v1.ForkChoice + 12, // 91: xatu.DecoratedEvent.eth_v1_fork_choice_reorg:type_name -> xatu.DebugForkChoiceReorg + 108, // 92: xatu.DecoratedEvent.eth_v1_beacon_committee:type_name -> xatu.eth.v1.Committee + 109, // 93: xatu.DecoratedEvent.eth_v1_validator_attestation_data:type_name -> xatu.eth.v1.AttestationDataV2 + 110, // 94: xatu.DecoratedEvent.eth_v1_events_attestation_v2:type_name -> xatu.eth.v1.AttestationV2 + 111, // 95: xatu.DecoratedEvent.eth_v1_events_block_v2:type_name -> xatu.eth.v1.EventBlockV2 + 99, // 96: xatu.DecoratedEvent.eth_v1_events_chain_reorg_v2:type_name -> xatu.eth.v1.EventChainReorgV2 + 112, // 97: xatu.DecoratedEvent.eth_v1_events_finalized_checkpoint_v2:type_name -> xatu.eth.v1.EventFinalizedCheckpointV2 + 113, // 98: xatu.DecoratedEvent.eth_v1_events_head_v2:type_name -> xatu.eth.v1.EventHeadV2 + 114, // 99: xatu.DecoratedEvent.eth_v1_events_voluntary_exit_v2:type_name -> xatu.eth.v1.EventVoluntaryExitV2 + 115, // 100: xatu.DecoratedEvent.eth_v1_events_contribution_and_proof_v2:type_name -> xatu.eth.v1.EventContributionAndProofV2 + 116, // 101: xatu.DecoratedEvent.eth_v2_beacon_block_v2:type_name -> xatu.eth.v2.EventBlockV2 + 98, // 102: xatu.DecoratedEvent.eth_v1_fork_choice_v2:type_name -> xatu.eth.v1.ForkChoiceV2 + 13, // 103: xatu.DecoratedEvent.eth_v1_fork_choice_reorg_v2:type_name -> xatu.DebugForkChoiceReorgV2 + 117, // 104: xatu.DecoratedEvent.eth_v2_beacon_block_attester_slashing:type_name -> xatu.eth.v1.AttesterSlashingV2 + 118, // 105: xatu.DecoratedEvent.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.eth.v1.ProposerSlashingV2 + 119, // 106: xatu.DecoratedEvent.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.eth.v1.SignedVoluntaryExitV2 + 120, // 107: xatu.DecoratedEvent.eth_v2_beacon_block_deposit:type_name -> xatu.eth.v1.DepositV2 + 121, // 108: xatu.DecoratedEvent.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.eth.v2.SignedBLSToExecutionChangeV2 + 122, // 109: xatu.DecoratedEvent.eth_v2_beacon_block_execution_transaction:type_name -> xatu.eth.v1.Transaction + 123, // 110: xatu.DecoratedEvent.eth_v2_beacon_block_withdrawal:type_name -> xatu.eth.v1.WithdrawalV2 + 124, // 111: xatu.DecoratedEvent.eth_v1_events_blob_sidecar:type_name -> xatu.eth.v1.EventBlobSidecar + 125, // 112: xatu.DecoratedEvent.blockprint_block_classification:type_name -> xatu.blockprint.BlockClassification + 126, // 113: xatu.DecoratedEvent.eth_v1_beacon_block_blob_sidecar:type_name -> xatu.eth.v1.BlobSidecar + 110, // 114: xatu.DecoratedEvent.beacon_p2p_attestation:type_name -> xatu.eth.v1.AttestationV2 + 127, // 115: xatu.DecoratedEvent.eth_v1_proposer_duty:type_name -> xatu.eth.v1.ProposerDuty + 128, // 116: xatu.DecoratedEvent.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.eth.v1.ElaboratedAttestation + 129, // 117: xatu.DecoratedEvent.libp2p_trace_add_peer:type_name -> xatu.libp2p.AddPeer + 130, // 118: xatu.DecoratedEvent.libp2p_trace_remove_peer:type_name -> xatu.libp2p.RemovePeer + 131, // 119: xatu.DecoratedEvent.libp2p_trace_recv_rpc:type_name -> xatu.libp2p.RecvRPC + 132, // 120: xatu.DecoratedEvent.libp2p_trace_send_rpc:type_name -> xatu.libp2p.SendRPC + 133, // 121: xatu.DecoratedEvent.libp2p_trace_join:type_name -> xatu.libp2p.Join + 134, // 122: xatu.DecoratedEvent.libp2p_trace_connected:type_name -> xatu.libp2p.Connected + 135, // 123: xatu.DecoratedEvent.libp2p_trace_disconnected:type_name -> xatu.libp2p.Disconnected + 136, // 124: xatu.DecoratedEvent.libp2p_trace_handle_metadata:type_name -> xatu.libp2p.HandleMetadata + 137, // 125: xatu.DecoratedEvent.libp2p_trace_handle_status:type_name -> xatu.libp2p.HandleStatus + 138, // 126: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_block:type_name -> xatu.libp2p.gossipsub.eth.BeaconBlock + 101, // 127: xatu.DecoratedEvent.libp2p_trace_gossipsub_beacon_attestation:type_name -> xatu.eth.v1.Attestation + 139, // 128: xatu.DecoratedEvent.libp2p_trace_gossipsub_blob_sidecar:type_name -> xatu.libp2p.gossipsub.eth.BlobSidecar + 14, // 129: xatu.DecoratedEvent.eth_v1_validators:type_name -> xatu.Validators + 84, // 130: xatu.ClientMeta.Ethereum.network:type_name -> xatu.ClientMeta.Ethereum.Network + 85, // 131: xatu.ClientMeta.Ethereum.execution:type_name -> xatu.ClientMeta.Ethereum.Execution + 86, // 132: xatu.ClientMeta.Ethereum.consensus:type_name -> xatu.ClientMeta.Ethereum.Consensus + 3, // 133: xatu.ClientMeta.AdditionalEthV1AttestationSourceData.epoch:type_name -> xatu.Epoch + 4, // 134: xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data.epoch:type_name -> xatu.EpochV2 + 3, // 135: xatu.ClientMeta.AdditionalEthV1AttestationTargetData.epoch:type_name -> xatu.Epoch + 4, // 136: xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data.epoch:type_name -> xatu.EpochV2 + 23, // 137: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceData + 25, // 138: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetData + 5, // 139: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.slot:type_name -> xatu.Slot + 3, // 140: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.epoch:type_name -> xatu.Epoch + 8, // 141: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.propagation:type_name -> xatu.Propagation + 10, // 142: xatu.ClientMeta.AdditionalEthV1EventsAttestationData.attesting_validator:type_name -> xatu.AttestingValidator + 24, // 143: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 26, // 144: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 6, // 145: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.slot:type_name -> xatu.SlotV2 + 4, // 146: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.epoch:type_name -> xatu.EpochV2 + 9, // 147: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.propagation:type_name -> xatu.PropagationV2 + 11, // 148: xatu.ClientMeta.AdditionalEthV1EventsAttestationV2Data.attesting_validator:type_name -> xatu.AttestingValidatorV2 + 3, // 149: xatu.ClientMeta.AdditionalEthV1EventsHeadData.epoch:type_name -> xatu.Epoch + 5, // 150: xatu.ClientMeta.AdditionalEthV1EventsHeadData.slot:type_name -> xatu.Slot + 8, // 151: xatu.ClientMeta.AdditionalEthV1EventsHeadData.propagation:type_name -> xatu.Propagation + 4, // 152: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 153: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.slot:type_name -> xatu.SlotV2 + 9, // 154: xatu.ClientMeta.AdditionalEthV1EventsHeadV2Data.propagation:type_name -> xatu.PropagationV2 + 3, // 155: xatu.ClientMeta.AdditionalEthV1EventsBlockData.epoch:type_name -> xatu.Epoch + 5, // 156: xatu.ClientMeta.AdditionalEthV1EventsBlockData.slot:type_name -> xatu.Slot + 8, // 157: xatu.ClientMeta.AdditionalEthV1EventsBlockData.propagation:type_name -> xatu.Propagation + 4, // 158: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 159: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.slot:type_name -> xatu.SlotV2 + 9, // 160: xatu.ClientMeta.AdditionalEthV1EventsBlockV2Data.propagation:type_name -> xatu.PropagationV2 + 3, // 161: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitData.epoch:type_name -> xatu.Epoch + 4, // 162: xatu.ClientMeta.AdditionalEthV1EventsVoluntaryExitV2Data.epoch:type_name -> xatu.EpochV2 + 3, // 163: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointData.epoch:type_name -> xatu.Epoch + 4, // 164: xatu.ClientMeta.AdditionalEthV1EventsFinalizedCheckpointV2Data.epoch:type_name -> xatu.EpochV2 + 3, // 165: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.epoch:type_name -> xatu.Epoch + 5, // 166: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.slot:type_name -> xatu.Slot + 8, // 167: xatu.ClientMeta.AdditionalEthV1EventsChainReorgData.propagation:type_name -> xatu.Propagation + 4, // 168: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 169: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.slot:type_name -> xatu.SlotV2 + 9, // 170: xatu.ClientMeta.AdditionalEthV1EventsChainReorgV2Data.propagation:type_name -> xatu.PropagationV2 + 3, // 171: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.epoch:type_name -> xatu.Epoch + 5, // 172: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.slot:type_name -> xatu.Slot + 8, // 173: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData.propagation:type_name -> xatu.Propagation + 4, // 174: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 175: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.slot:type_name -> xatu.SlotV2 + 9, // 176: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data.propagation:type_name -> xatu.PropagationV2 + 39, // 177: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofData.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionData + 40, // 178: xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofV2Data.contribution:type_name -> xatu.ClientMeta.AdditionalEthV1EventsContributionAndProofContributionV2Data + 3, // 179: xatu.ClientMeta.ForkChoiceSnapshot.request_epoch:type_name -> xatu.Epoch + 5, // 180: xatu.ClientMeta.ForkChoiceSnapshot.request_slot:type_name -> xatu.Slot + 94, // 181: xatu.ClientMeta.ForkChoiceSnapshot.timestamp:type_name -> google.protobuf.Timestamp + 4, // 182: xatu.ClientMeta.ForkChoiceSnapshotV2.request_epoch:type_name -> xatu.EpochV2 + 6, // 183: xatu.ClientMeta.ForkChoiceSnapshotV2.request_slot:type_name -> xatu.SlotV2 + 95, // 184: xatu.ClientMeta.ForkChoiceSnapshotV2.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value + 95, // 185: xatu.ClientMeta.ForkChoiceSnapshotV2.request_duration_ms:type_name -> google.protobuf.UInt64Value + 94, // 186: xatu.ClientMeta.ForkChoiceSnapshotV2.timestamp:type_name -> google.protobuf.Timestamp + 43, // 187: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceData.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshot + 44, // 188: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceV2Data.Snapshot:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 + 43, // 189: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshot + 43, // 190: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgData.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshot + 44, // 191: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.before:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 + 44, // 192: xatu.ClientMeta.AdditionalEthV1DebugForkChoiceReOrgV2Data.after:type_name -> xatu.ClientMeta.ForkChoiceSnapshotV2 + 4, // 193: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.epoch:type_name -> xatu.EpochV2 + 6, // 194: xatu.ClientMeta.AdditionalEthV1BeaconCommitteeData.slot:type_name -> xatu.SlotV2 + 95, // 195: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.nonce:type_name -> google.protobuf.UInt64Value + 95, // 196: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.gas:type_name -> google.protobuf.UInt64Value + 140, // 197: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.type:type_name -> google.protobuf.UInt32Value + 95, // 198: xatu.ClientMeta.AdditionalMempoolTransactionV2Data.blob_gas:type_name -> google.protobuf.UInt64Value + 3, // 199: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.epoch:type_name -> xatu.Epoch + 5, // 200: xatu.ClientMeta.AdditionalEthV2BeaconBlockData.slot:type_name -> xatu.Slot + 4, // 201: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.epoch:type_name -> xatu.EpochV2 + 6, // 202: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.slot:type_name -> xatu.SlotV2 + 95, // 203: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_count:type_name -> google.protobuf.UInt64Value + 95, // 204: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes:type_name -> google.protobuf.UInt64Value + 95, // 205: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.transactions_total_bytes_compressed:type_name -> google.protobuf.UInt64Value + 95, // 206: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes:type_name -> google.protobuf.UInt64Value + 95, // 207: xatu.ClientMeta.AdditionalEthV2BeaconBlockV2Data.total_bytes_compressed:type_name -> google.protobuf.UInt64Value + 15, // 208: xatu.ClientMeta.AdditionalEthV2BeaconBlockAttesterSlashingData.block:type_name -> xatu.BlockIdentifier + 15, // 209: xatu.ClientMeta.AdditionalEthV2BeaconBlockProposerSlashingData.block:type_name -> xatu.BlockIdentifier + 15, // 210: xatu.ClientMeta.AdditionalEthV2BeaconBlockVoluntaryExitData.block:type_name -> xatu.BlockIdentifier + 15, // 211: xatu.ClientMeta.AdditionalEthV2BeaconBlockDepositData.block:type_name -> xatu.BlockIdentifier + 15, // 212: xatu.ClientMeta.AdditionalEthV2BeaconBlockBLSToExecutionChangeData.block:type_name -> xatu.BlockIdentifier + 15, // 213: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.block:type_name -> xatu.BlockIdentifier + 95, // 214: xatu.ClientMeta.AdditionalEthV2BeaconBlockExecutionTransactionData.position_in_block:type_name -> google.protobuf.UInt64Value + 15, // 215: xatu.ClientMeta.AdditionalEthV2BeaconBlockWithdrawalData.block:type_name -> xatu.BlockIdentifier + 4, // 216: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.epoch:type_name -> xatu.EpochV2 + 6, // 217: xatu.ClientMeta.AdditionalBlockprintBlockClassificationData.slot:type_name -> xatu.SlotV2 + 95, // 218: xatu.ClientMeta.AttestationDataSnapshot.requested_at_slot_start_diff_ms:type_name -> google.protobuf.UInt64Value + 95, // 219: xatu.ClientMeta.AttestationDataSnapshot.request_duration_ms:type_name -> google.protobuf.UInt64Value + 94, // 220: xatu.ClientMeta.AttestationDataSnapshot.timestamp:type_name -> google.protobuf.Timestamp + 24, // 221: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 26, // 222: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 4, // 223: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.epoch:type_name -> xatu.EpochV2 + 6, // 224: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.slot:type_name -> xatu.SlotV2 + 62, // 225: xatu.ClientMeta.AdditionalEthV1ValidatorAttestationDataData.Snapshot:type_name -> xatu.ClientMeta.AttestationDataSnapshot + 4, // 226: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.epoch:type_name -> xatu.EpochV2 + 6, // 227: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.slot:type_name -> xatu.SlotV2 + 9, // 228: xatu.ClientMeta.AdditionalEthV1EventsBlobSidecarData.propagation:type_name -> xatu.PropagationV2 + 4, // 229: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.epoch:type_name -> xatu.EpochV2 + 6, // 230: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.slot:type_name -> xatu.SlotV2 + 95, // 231: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_size:type_name -> google.protobuf.UInt64Value + 95, // 232: xatu.ClientMeta.AdditionalEthV1BeaconBlobSidecarData.data_empty_size:type_name -> google.protobuf.UInt64Value + 24, // 233: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 26, // 234: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 6, // 235: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.slot:type_name -> xatu.SlotV2 + 4, // 236: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.epoch:type_name -> xatu.EpochV2 + 9, // 237: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.propagation:type_name -> xatu.PropagationV2 + 11, // 238: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 + 141, // 239: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.libp2p.Peer + 140, // 240: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.subnet:type_name -> google.protobuf.UInt32Value + 142, // 241: xatu.ClientMeta.AdditionalBeaconP2PAttestationData.validated:type_name -> google.protobuf.BoolValue + 4, // 242: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.epoch:type_name -> xatu.EpochV2 + 6, // 243: xatu.ClientMeta.AdditionalEthV1ProposerDutyData.slot:type_name -> xatu.SlotV2 + 15, // 244: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.block:type_name -> xatu.BlockIdentifier + 95, // 245: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.position_in_block:type_name -> google.protobuf.UInt64Value + 4, // 246: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.epoch:type_name -> xatu.EpochV2 + 6, // 247: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.slot:type_name -> xatu.SlotV2 + 24, // 248: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.source:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationSourceV2Data + 26, // 249: xatu.ClientMeta.AdditionalEthV2BeaconBlockElaboratedAttestationData.target:type_name -> xatu.ClientMeta.AdditionalEthV1AttestationTargetV2Data + 143, // 250: xatu.ClientMeta.AdditionalLibP2PTraceAddPeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 251: xatu.ClientMeta.AdditionalLibP2PTraceRemovePeerData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 252: xatu.ClientMeta.AdditionalLibP2PTraceRecvRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 253: xatu.ClientMeta.AdditionalLibP2PTraceSendRPCData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 254: xatu.ClientMeta.AdditionalLibP2PTraceJoinData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 255: xatu.ClientMeta.AdditionalLibP2PTraceConnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 256: xatu.ClientMeta.AdditionalLibP2PTraceDisconnectedData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 257: xatu.ClientMeta.AdditionalLibP2PTraceHandleMetadataData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 143, // 258: xatu.ClientMeta.AdditionalLibP2PTraceHandleStatusData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 4, // 259: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.epoch:type_name -> xatu.EpochV2 + 6, // 260: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.slot:type_name -> xatu.SlotV2 + 4, // 261: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_epoch:type_name -> xatu.EpochV2 + 6, // 262: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.wallclock_slot:type_name -> xatu.SlotV2 + 9, // 263: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.propagation:type_name -> xatu.PropagationV2 + 143, // 264: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 144, // 265: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.topic:type_name -> google.protobuf.StringValue + 140, // 266: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_size:type_name -> google.protobuf.UInt32Value + 144, // 267: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconBlockData.message_id:type_name -> google.protobuf.StringValue + 4, // 268: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData.epoch:type_name -> xatu.EpochV2 + 4, // 269: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData.epoch:type_name -> xatu.EpochV2 + 79, // 270: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.source:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData + 80, // 271: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.target:type_name -> xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData + 6, // 272: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.slot:type_name -> xatu.SlotV2 + 4, // 273: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.epoch:type_name -> xatu.EpochV2 + 9, // 274: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.propagation:type_name -> xatu.PropagationV2 + 11, // 275: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.attesting_validator:type_name -> xatu.AttestingValidatorV2 + 4, // 276: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_epoch:type_name -> xatu.EpochV2 + 6, // 277: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.wallclock_slot:type_name -> xatu.SlotV2 + 143, // 278: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 144, // 279: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.topic:type_name -> google.protobuf.StringValue + 140, // 280: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_size:type_name -> google.protobuf.UInt32Value + 144, // 281: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBeaconAttestationData.message_id:type_name -> google.protobuf.StringValue + 4, // 282: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.epoch:type_name -> xatu.EpochV2 + 6, // 283: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.slot:type_name -> xatu.SlotV2 + 4, // 284: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.wallclock_epoch:type_name -> xatu.EpochV2 + 6, // 285: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.wallclock_slot:type_name -> xatu.SlotV2 + 9, // 286: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.propagation:type_name -> xatu.PropagationV2 + 143, // 287: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.metadata:type_name -> xatu.libp2p.TraceEventMetadata + 144, // 288: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.topic:type_name -> google.protobuf.StringValue + 140, // 289: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.message_size:type_name -> google.protobuf.UInt32Value + 144, // 290: xatu.ClientMeta.AdditionalLibP2PTraceGossipSubBlobSidecarData.message_id:type_name -> google.protobuf.StringValue + 4, // 291: xatu.ClientMeta.AdditionalEthV1ValidatorsData.epoch:type_name -> xatu.EpochV2 + 7, // 292: xatu.ClientMeta.Ethereum.Execution.fork_id:type_name -> xatu.ForkID + 94, // 293: xatu.ServerMeta.Event.received_date_time:type_name -> google.protobuf.Timestamp + 88, // 294: xatu.ServerMeta.Client.geo:type_name -> xatu.ServerMeta.Geo + 88, // 295: xatu.ServerMeta.Peer.geo:type_name -> xatu.ServerMeta.Geo + 90, // 296: xatu.ServerMeta.AdditionalBeaconP2PAttestationData.peer:type_name -> xatu.ServerMeta.Peer + 90, // 297: xatu.ServerMeta.AdditionalLibp2PTraceConnectedData.peer:type_name -> xatu.ServerMeta.Peer + 90, // 298: xatu.ServerMeta.AdditionalLibp2PTraceDisconnectedData.peer:type_name -> xatu.ServerMeta.Peer + 1, // 299: xatu.EventIngester.CreateEvents:input_type -> xatu.CreateEventsRequest + 2, // 300: xatu.EventIngester.CreateEvents:output_type -> xatu.CreateEventsResponse + 300, // [300:301] is the sub-list for method output_type + 299, // [299:300] is the sub-list for method input_type + 299, // [299:299] is the sub-list for extension type_name + 299, // [299:299] is the sub-list for extension extendee + 0, // [0:299] is the sub-list for field type_name } func init() { file_pkg_proto_xatu_event_ingester_proto_init() } @@ -10254,7 +10414,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockIdentifier); i { + switch v := v.(*Validators); i { case 0: return &v.state case 1: @@ -10266,7 +10426,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientMeta); i { + switch v := v.(*BlockIdentifier); i { case 0: return &v.state case 1: @@ -10278,7 +10438,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerMeta); i { + switch v := v.(*ClientMeta); i { case 0: return &v.state case 1: @@ -10290,7 +10450,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Meta); i { + switch v := v.(*ServerMeta); i { case 0: return &v.state case 1: @@ -10302,7 +10462,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { + switch v := v.(*Meta); i { case 0: return &v.state case 1: @@ -10314,7 +10474,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DecoratedEvent); i { + switch v := v.(*Event); i { case 0: return &v.state case 1: @@ -10326,6 +10486,18 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } file_pkg_proto_xatu_event_ingester_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DecoratedEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_xatu_event_ingester_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_Ethereum); i { case 0: return &v.state @@ -10337,7 +10509,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1AttestationSourceData); i { case 0: return &v.state @@ -10349,7 +10521,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1AttestationSourceV2Data); i { case 0: return &v.state @@ -10361,7 +10533,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1AttestationTargetData); i { case 0: return &v.state @@ -10373,7 +10545,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1AttestationTargetV2Data); i { case 0: return &v.state @@ -10385,7 +10557,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsAttestationData); i { case 0: return &v.state @@ -10397,7 +10569,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsAttestationV2Data); i { case 0: return &v.state @@ -10409,7 +10581,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsHeadData); i { case 0: return &v.state @@ -10421,7 +10593,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsHeadV2Data); i { case 0: return &v.state @@ -10433,7 +10605,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsBlockData); i { case 0: return &v.state @@ -10445,7 +10617,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsBlockV2Data); i { case 0: return &v.state @@ -10457,7 +10629,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsVoluntaryExitData); i { case 0: return &v.state @@ -10469,7 +10641,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data); i { case 0: return &v.state @@ -10481,7 +10653,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointData); i { case 0: return &v.state @@ -10493,7 +10665,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsFinalizedCheckpointV2Data); i { case 0: return &v.state @@ -10505,7 +10677,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsChainReorgData); i { case 0: return &v.state @@ -10517,7 +10689,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsChainReorgV2Data); i { case 0: return &v.state @@ -10529,7 +10701,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionData); i { case 0: return &v.state @@ -10541,7 +10713,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsContributionAndProofContributionV2Data); i { case 0: return &v.state @@ -10553,7 +10725,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsContributionAndProofData); i { case 0: return &v.state @@ -10565,7 +10737,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsContributionAndProofV2Data); i { case 0: return &v.state @@ -10577,7 +10749,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_ForkChoiceSnapshot); i { case 0: return &v.state @@ -10589,7 +10761,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_ForkChoiceSnapshotV2); i { case 0: return &v.state @@ -10601,7 +10773,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1DebugForkChoiceData); i { case 0: return &v.state @@ -10613,7 +10785,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1DebugForkChoiceV2Data); i { case 0: return &v.state @@ -10625,7 +10797,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgData); i { case 0: return &v.state @@ -10637,7 +10809,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1DebugForkChoiceReOrgV2Data); i { case 0: return &v.state @@ -10649,7 +10821,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1BeaconCommitteeData); i { case 0: return &v.state @@ -10661,7 +10833,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalMempoolTransactionData); i { case 0: return &v.state @@ -10673,7 +10845,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalMempoolTransactionV2Data); i { case 0: return &v.state @@ -10685,7 +10857,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockData); i { case 0: return &v.state @@ -10697,7 +10869,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockV2Data); i { case 0: return &v.state @@ -10709,7 +10881,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockAttesterSlashingData); i { case 0: return &v.state @@ -10721,7 +10893,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockProposerSlashingData); i { case 0: return &v.state @@ -10733,7 +10905,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockVoluntaryExitData); i { case 0: return &v.state @@ -10745,7 +10917,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockDepositData); i { case 0: return &v.state @@ -10757,7 +10929,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockBLSToExecutionChangeData); i { case 0: return &v.state @@ -10769,7 +10941,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockExecutionTransactionData); i { case 0: return &v.state @@ -10781,7 +10953,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockWithdrawalData); i { case 0: return &v.state @@ -10793,7 +10965,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalBlockprintBlockClassificationData); i { case 0: return &v.state @@ -10805,7 +10977,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AttestationDataSnapshot); i { case 0: return &v.state @@ -10817,7 +10989,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1ValidatorAttestationDataData); i { case 0: return &v.state @@ -10829,7 +11001,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1EventsBlobSidecarData); i { case 0: return &v.state @@ -10841,7 +11013,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1BeaconBlobSidecarData); i { case 0: return &v.state @@ -10853,7 +11025,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalBeaconP2PAttestationData); i { case 0: return &v.state @@ -10865,7 +11037,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV1ProposerDutyData); i { case 0: return &v.state @@ -10877,7 +11049,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalEthV2BeaconBlockElaboratedAttestationData); i { case 0: return &v.state @@ -10889,7 +11061,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceAddPeerData); i { case 0: return &v.state @@ -10901,7 +11073,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceRemovePeerData); i { case 0: return &v.state @@ -10913,7 +11085,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceRecvRPCData); i { case 0: return &v.state @@ -10925,7 +11097,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceSendRPCData); i { case 0: return &v.state @@ -10937,7 +11109,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceJoinData); i { case 0: return &v.state @@ -10949,7 +11121,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceConnectedData); i { case 0: return &v.state @@ -10961,7 +11133,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceDisconnectedData); i { case 0: return &v.state @@ -10973,7 +11145,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceHandleMetadataData); i { case 0: return &v.state @@ -10985,7 +11157,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceHandleStatusData); i { case 0: return &v.state @@ -10997,7 +11169,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconBlockData); i { case 0: return &v.state @@ -11009,7 +11181,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationSourceData); i { case 0: return &v.state @@ -11021,7 +11193,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationTargetData); i { case 0: return &v.state @@ -11033,7 +11205,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceGossipSubBeaconAttestationData); i { case 0: return &v.state @@ -11045,7 +11217,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_AdditionalLibP2PTraceGossipSubBlobSidecarData); i { case 0: return &v.state @@ -11057,7 +11229,19 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientMeta_AdditionalEthV1ValidatorsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_xatu_event_ingester_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_Ethereum_Network); i { case 0: return &v.state @@ -11069,7 +11253,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_Ethereum_Execution); i { case 0: return &v.state @@ -11081,7 +11265,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMeta_Ethereum_Consensus); i { case 0: return &v.state @@ -11093,7 +11277,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_Event); i { case 0: return &v.state @@ -11105,7 +11289,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_Geo); i { case 0: return &v.state @@ -11117,7 +11301,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_Client); i { case 0: return &v.state @@ -11129,7 +11313,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_Peer); i { case 0: return &v.state @@ -11141,7 +11325,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_AdditionalBeaconP2PAttestationData); i { case 0: return &v.state @@ -11153,7 +11337,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_AdditionalLibp2PTraceConnectedData); i { case 0: return &v.state @@ -11165,7 +11349,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { return nil } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_pkg_proto_xatu_event_ingester_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerMeta_AdditionalLibp2PTraceDisconnectedData); i { case 0: return &v.state @@ -11178,7 +11362,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { } } } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_pkg_proto_xatu_event_ingester_proto_msgTypes[15].OneofWrappers = []interface{}{ (*ClientMeta_EthV1EventsAttestation)(nil), (*ClientMeta_EthV1EventsHead)(nil), (*ClientMeta_EthV1EventsBlock)(nil), @@ -11228,13 +11412,14 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { (*ClientMeta_Libp2PTraceGossipsubBeaconBlock)(nil), (*ClientMeta_Libp2PTraceGossipsubBeaconAttestation)(nil), (*ClientMeta_Libp2PTraceGossipsubBlobSidecar)(nil), + (*ClientMeta_EthV1Validators)(nil), } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[15].OneofWrappers = []interface{}{ + file_pkg_proto_xatu_event_ingester_proto_msgTypes[16].OneofWrappers = []interface{}{ (*ServerMeta_BEACON_P2P_ATTESTATION)(nil), (*ServerMeta_LIBP2P_TRACE_CONNECTED)(nil), (*ServerMeta_LIBP2P_TRACE_DISCONNECTED)(nil), } - file_pkg_proto_xatu_event_ingester_proto_msgTypes[18].OneofWrappers = []interface{}{ + file_pkg_proto_xatu_event_ingester_proto_msgTypes[19].OneofWrappers = []interface{}{ (*DecoratedEvent_EthV1EventsAttestation)(nil), (*DecoratedEvent_EthV1EventsBlock)(nil), (*DecoratedEvent_EthV1EventsChainReorg)(nil), @@ -11284,6 +11469,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { (*DecoratedEvent_Libp2PTraceGossipsubBeaconBlock)(nil), (*DecoratedEvent_Libp2PTraceGossipsubBeaconAttestation)(nil), (*DecoratedEvent_Libp2PTraceGossipsubBlobSidecar)(nil), + (*DecoratedEvent_EthV1Validators)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -11291,7 +11477,7 @@ func file_pkg_proto_xatu_event_ingester_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_proto_xatu_event_ingester_proto_rawDesc, NumEnums: 1, - NumMessages: 91, + NumMessages: 93, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/proto/xatu/event_ingester.proto b/pkg/proto/xatu/event_ingester.proto index 3d16942d..65d64f4f 100644 --- a/pkg/proto/xatu/event_ingester.proto +++ b/pkg/proto/xatu/event_ingester.proto @@ -17,6 +17,7 @@ import "pkg/proto/eth/v2/withdrawals.proto"; import "pkg/proto/eth/v1/fork_choice.proto"; import "pkg/proto/eth/v1/beacon_block.proto"; import "pkg/proto/eth/v1/execution_engine.proto"; +import "pkg/proto/eth/v1/validator.proto"; import "pkg/proto/blockprint/block_classification.proto"; @@ -109,6 +110,10 @@ message DebugForkChoiceReorgV2 { xatu.eth.v1.EventChainReorgV2 event = 3; } +message Validators { + repeated xatu.eth.v1.Validator validators = 1; +} + message BlockIdentifier { // Epoch contains the epoch information for the block. EpochV2 epoch = 1; @@ -922,7 +927,12 @@ message ClientMeta { // MessageID is a unique identifier for the blob sidecar message. google.protobuf.StringValue message_id = 9 [ json_name = "message_id" ]; } - + + // AdditionalEthV1ValidatorsData contains additional data about the eth v1 validators. + message AdditionalEthV1ValidatorsData { + EpochV2 epoch = 1; + } + // AdditionalData contains additional, computed data as set by the client // about the event. oneof AdditionalData { @@ -1106,6 +1116,8 @@ message ClientMeta { AdditionalLibP2PTraceGossipSubBeaconAttestationData libp2p_trace_gossipsub_beacon_attestation = 58 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" ]; // AdditionalLibP2PTraceGossipSubBlobSidecarData contains additional data about the gossip sub blob sidecar event. AdditionalLibP2PTraceGossipSubBlobSidecarData libp2p_trace_gossipsub_blob_sidecar = 59 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" ]; + // AdditionalEthV1ValidatorsData contains additional data about the eth v1 validators. + AdditionalEthV1ValidatorsData eth_v1_validators = 60 [ json_name = "BEACON_API_ETH_V1_BEACON_VALIDATORS" ]; } } @@ -1248,6 +1260,7 @@ message Event { LIBP2P_TRACE_GOSSIPSUB_BEACON_BLOCK = 49; LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION = 50; LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR = 51; + BEACON_API_ETH_V1_BEACON_VALIDATORS = 52; } // Name is the name of the event. Name name = 1; @@ -1381,5 +1394,7 @@ message DecoratedEvent { [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BEACON_ATTESTATION" ]; xatu.libp2p.gossipsub.eth.BlobSidecar libp2p_trace_gossipsub_blob_sidecar = 51 [ json_name = "LIBP2P_TRACE_GOSSIPSUB_BLOB_SIDECAR" ]; + Validators eth_v1_validators = 52 + [ json_name = "BEACON_API_ETH_V1_BEACON_VALIDATORS" ]; }; } diff --git a/pkg/proto/xatu/event_ingester_grpc.pb.go b/pkg/proto/xatu/event_ingester_grpc.pb.go index 4b45748c..5b52401f 100644 --- a/pkg/proto/xatu/event_ingester_grpc.pb.go +++ b/pkg/proto/xatu/event_ingester_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 +// - protoc v4.24.2 // source: pkg/proto/xatu/event_ingester.proto package xatu diff --git a/pkg/server/persistence/cannon/location.go b/pkg/server/persistence/cannon/location.go index a60959e8..e710a86c 100644 --- a/pkg/server/persistence/cannon/location.go +++ b/pkg/server/persistence/cannon/location.go @@ -164,6 +164,17 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { return err } + l.Value = string(b) + case xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS: + l.Type = "BEACON_API_ETH_V1_BEACON_VALIDATORS" + + data := msg.GetEthV1BeaconValidators() + + b, err := protojson.Marshal(data) + if err != nil { + return err + } + l.Value = string(b) default: return fmt.Errorf("unknown type: %s", msg.Type) @@ -337,6 +348,19 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { msg.Data = &xatu.CannonLocation_EthV2BeaconBlockElaboratedAttestation{ EthV2BeaconBlockElaboratedAttestation: data, } + case "BEACON_API_ETH_V1_BEACON_VALIDATORS": + msg.Type = xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS + + data := &xatu.CannonLocationEthV1BeaconValidators{} + + err := protojson.Unmarshal([]byte(l.Value), data) + if err != nil { + return nil, err + } + + msg.Data = &xatu.CannonLocation_EthV1BeaconValidators{ + EthV1BeaconValidators: data, + } default: return nil, fmt.Errorf("unknown type: %s", l.Type) } diff --git a/pkg/server/service/event-ingester/event/beacon/eth/v1/beacon_validators.go b/pkg/server/service/event-ingester/event/beacon/eth/v1/beacon_validators.go new file mode 100644 index 00000000..41be2d3d --- /dev/null +++ b/pkg/server/service/event-ingester/event/beacon/eth/v1/beacon_validators.go @@ -0,0 +1,50 @@ +package v1 + +import ( + "context" + "errors" + + "github.com/ethpandaops/xatu/pkg/proto/xatu" + "github.com/sirupsen/logrus" +) + +var ( + BeaconValidatorsType = xatu.Event_BEACON_API_ETH_V1_BEACON_VALIDATORS.String() +) + +type BeaconValidators struct { + log logrus.FieldLogger + event *xatu.DecoratedEvent +} + +func NewBeaconValidators(log logrus.FieldLogger, event *xatu.DecoratedEvent) *BeaconValidators { + return &BeaconValidators{ + log: log.WithField("event", BeaconValidatorsType), + event: event, + } +} + +func (b *BeaconValidators) Type() string { + return BeaconValidatorsType +} + +func (b *BeaconValidators) Validate(_ context.Context) error { + data, ok := b.event.GetData().(*xatu.DecoratedEvent_EthV1Validators) + if !ok { + return errors.New("failed to cast event data") + } + + if len(data.EthV1Validators.Validators) == 0 { + return errors.New("no validators found") + } + + return nil +} + +func (b *BeaconValidators) Filter(_ context.Context) bool { + return false +} + +func (b *BeaconValidators) AppendServerMeta(_ context.Context, meta *xatu.ServerMeta) *xatu.ServerMeta { + return meta +} diff --git a/pkg/server/service/event-ingester/event/event.go b/pkg/server/service/event-ingester/event/event.go index 5d032358..2800ceb1 100644 --- a/pkg/server/service/event-ingester/event/event.go +++ b/pkg/server/service/event-ingester/event/event.go @@ -70,6 +70,7 @@ var ( TypeLibP2PTraceGossipSubBeaconBlock Type = Type(libp2p.TraceGossipSubBeaconBlockType) TypeLibP2PTraceGossipSubBeaconAttestation Type = Type(libp2p.TraceGossipSubBeaconAttestationType) TypeLibP2PTraceGossipSubBlobSidecar Type = Type(libp2p.TraceGossipSubBlobSidecarType) + TypeBeaconETHV1BeaconValidators Type = Type(v1.BeaconValidatorsType) ) type Event interface { @@ -88,6 +89,8 @@ func New(eventType Type, log logrus.FieldLogger, event *xatu.DecoratedEvent, cac switch eventType { case TypeBeaconP2PAttestation: return v1.NewBeaconP2PAttestation(log, event, geoipProvider), nil + case TypeLibP2PTraceGossipSubBeaconAttestation: + return libp2p.NewTraceGossipSubBeaconAttestation(log, event), nil case TypeBeaconETHV1EventsAttestation: return v1.NewEventsAttestation(log, event), nil case TypeBeaconETHV1EventsAttestationV2: @@ -180,10 +183,10 @@ func New(eventType Type, log logrus.FieldLogger, event *xatu.DecoratedEvent, cac return libp2p.NewTraceHandleMetadata(log, event), nil case TypeLibP2PTraceGossipSubBeaconBlock: return libp2p.NewTraceGossipSubBeaconBlock(log, event), nil - case TypeLibP2PTraceGossipSubBeaconAttestation: - return libp2p.NewTraceGossipSubBeaconAttestation(log, event), nil case TypeLibP2PTraceGossipSubBlobSidecar: return libp2p.NewTraceGossipSubBlobSidecar(log, event), nil + case TypeBeaconETHV1BeaconValidators: + return v1.NewBeaconValidators(log, event), nil default: return nil, fmt.Errorf("event type %s is unknown", eventType) } From 7541a3b88370ea25004f07901e3f19e46e8b5902 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Tue, 11 Jun 2024 11:26:24 +1000 Subject: [PATCH 08/22] Feat(cannon): Validators chunk size (#330) feat(cannon): Validators chunk size --- .gitignore | 3 ++- .../deriver/beacon/eth/v1/beacon_validators.go | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 06680ce5..444e52fb 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ GeoLite2-City.mmdb __debug_bin* .vscode/launch.json sage.yaml -.goreleaser.yaml.new \ No newline at end of file +.goreleaser.yaml.new +.aider* diff --git a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go index 4a131ec4..e536c8da 100644 --- a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go +++ b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go @@ -31,7 +31,8 @@ const ( ) type BeaconValidatorsDeriverConfig struct { - Enabled bool `yaml:"enabled" default:"true"` + Enabled bool `yaml:"enabled" default:"true"` + ChunkSize int `yaml:"chunkSize" default:"100"` } type BeaconValidatorsDeriver struct { @@ -70,6 +71,11 @@ func (b *BeaconValidatorsDeriver) OnEventsDerived(ctx context.Context, fn func(c } func (b *BeaconValidatorsDeriver) Start(ctx context.Context) error { + b.log.WithFields(logrus.Fields{ + "chunk_size": b.cfg.ChunkSize, + "enabled": b.cfg.Enabled, + }).Info("Starting BeaconValidatorsDeriver") + if !b.cfg.Enabled { b.log.Info("Validator states deriver disabled") @@ -240,8 +246,8 @@ func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0 validatorsMap := validatorsResponse.Data - // Chunk the validators per 1000 - chunkSize := 1000 + // Chunk the validators per the configured chunk size + chunkSize := b.cfg.ChunkSize var validatorChunks [][]*apiv1.Validator From 1f75a9d79908edd48820ac79583bc48ced9e2706 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Tue, 11 Jun 2024 11:45:59 +1000 Subject: [PATCH 09/22] feat(ci): Use self hosted runners --- .github/workflows/goreleaser.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/goreleaser.yaml b/.github/workflows/goreleaser.yaml index 27b0d41e..03fccadb 100644 --- a/.github/workflows/goreleaser.yaml +++ b/.github/workflows/goreleaser.yaml @@ -9,7 +9,9 @@ jobs: goreleaser: permissions: contents: write - runs-on: ubuntu-latest + runs-on: + - self-hosted-ghr + - size-l-x64 steps: - name: Checkout uses: actions/checkout@v3 From eeee7159d2750975a3273d7913e24ac2d2c1d655 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Thu, 13 Jun 2024 12:41:22 +1000 Subject: [PATCH 10/22] feat(processor): Add worker support for sync workloads (#331) * feat(processor): Add worker support for sync workloads * Cancellable * test: Add unit tests for batch item processor --- pkg/processor/batch.go | 85 +++++++++++++++++++++++++------- pkg/processor/batch_test.go | 98 +++++++++++++++++++++++++++++++++---- 2 files changed, 156 insertions(+), 27 deletions(-) diff --git a/pkg/processor/batch.go b/pkg/processor/batch.go index 386c4568..76e95aab 100644 --- a/pkg/processor/batch.go +++ b/pkg/processor/batch.go @@ -205,36 +205,85 @@ func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { } // ImmediatelyExportItems immediately exports the items to the exporter. -// Useful for propogating errors from the exporter. +// Useful for propagating errors from the exporter. func (bvp *BatchItemProcessor[T]) ImmediatelyExportItems(ctx context.Context, items []*T) error { _, span := observability.Tracer().Start(ctx, "BatchItemProcessor.ImmediatelyExportItems") defer span.End() - if l := len(items); l > 0 { - countItemsToExport := len(items) + if len(items) == 0 { + return nil + } - // Split the items in to chunks of our max batch size - for i := 0; i < countItemsToExport; i += bvp.o.MaxExportBatchSize { - end := i + bvp.o.MaxExportBatchSize - if end > countItemsToExport { - end = countItemsToExport - } + countItemsToExport := len(items) - itemsBatch := items[i:end] + batchSize := bvp.o.MaxExportBatchSize + if batchSize == 0 { + batchSize = 1 // Ensure we can't divide by zero + } - bvp.log.WithFields(logrus.Fields{ - "count": len(itemsBatch), - }).Debug("Immediately exporting items") + batches := (countItemsToExport + batchSize - 1) / batchSize - err := bvp.exportWithTimeout(ctx, itemsBatch) + batchCh := make(chan []*T, batches) + errCh := make(chan error, 1) - if err != nil { - return err - } + defer close(errCh) + + var wg sync.WaitGroup + + cctx, cancel := context.WithCancel(ctx) + defer cancel() + + for i := 0; i < countItemsToExport; i += batchSize { + end := i + batchSize + if end > countItemsToExport { + end = countItemsToExport } + + itemsBatch := items[i:end] + batchCh <- itemsBatch } + close(batchCh) // Close the channel after all batches are sent - return nil + bvp.log. + WithField("workers", bvp.o.Workers). + WithField("batches", batches). + Debug("Split items into batches for immediate export") + + for i := 0; i < bvp.o.Workers && i < batches; i++ { + wg.Add(1) + + go func(workerID int) { + defer wg.Done() + + for itemsBatch := range batchCh { + bvp.log.WithFields(logrus.Fields{ + "count": len(itemsBatch), + "worker": workerID, + }).Debug("Immediately exporting items") + + err := bvp.exportWithTimeout(cctx, itemsBatch) + if err != nil { + select { + case errCh <- err: + default: + } + + cancel() // Cancel the context to stop other workers + + return + } + } + }(i) + } + + wg.Wait() + + select { + case err := <-errCh: + return err + default: + return nil + } } // exportWithTimeout exports the items with a timeout. diff --git a/pkg/processor/batch_test.go b/pkg/processor/batch_test.go index fa5c43d4..c7850f9d 100644 --- a/pkg/processor/batch_test.go +++ b/pkg/processor/batch_test.go @@ -9,6 +9,7 @@ package processor import ( "context" "errors" + "fmt" "io" "strconv" "sync" @@ -25,18 +26,28 @@ type TestItem struct { } type testBatchExporter[T TestItem] struct { - mu sync.Mutex - items []*T - sizes []int - batchCount int - shutdownCount int - errors []error - droppedCount int - idx int - err error + mu sync.Mutex + items []*T + sizes []int + batchCount int + shutdownCount int + errors []error + droppedCount int + idx int + err error + failNextExport bool + delay time.Duration } func (t *testBatchExporter[T]) ExportItems(ctx context.Context, items []*T) error { + time.Sleep(t.delay) + + if t.failNextExport { + t.failNextExport = false + + return errors.New("export failure") + } + t.mu.Lock() defer t.mu.Unlock() @@ -487,3 +498,72 @@ func TestBatchItemProcessorWithAsyncErrorExporter(t *testing.T) { t.Errorf("Expected write to fail") } } + +func TestBatchItemProcessorImmediatelyExportItems(t *testing.T) { + // Define a range of values for workers, maxExportBatchSize, and itemsToExport + workerCounts := []int{1, 5, 10} + maxBatchSizes := []int{1, 5, 10, 20} + itemCounts := []int{0, 1, 25, 50} + + for _, workers := range workerCounts { + for _, maxBatchSize := range maxBatchSizes { + for _, itemsToExport := range itemCounts { + t.Run(fmt.Sprintf("%d workers, batch size %d, %d items", workers, maxBatchSize, itemsToExport), func(t *testing.T) { + te := testBatchExporter[TestItem]{} + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(maxBatchSize), WithWorkers(workers)) + require.NoError(t, err) + + items := make([]*TestItem, itemsToExport) + for i := 0; i < itemsToExport; i++ { + items[i] = &TestItem{name: strconv.Itoa(i)} + } + + err = bsp.ImmediatelyExportItems(context.Background(), items) + require.NoError(t, err) + + expectedBatches := (itemsToExport + maxBatchSize - 1) / maxBatchSize + if itemsToExport == 0 { + expectedBatches = 0 + } + + if te.len() != itemsToExport { + t.Errorf("Expected all items to be exported, got: %v", te.len()) + } + + if te.getBatchCount() != expectedBatches { + t.Errorf("Expected %v batches to be exported, got: %v", expectedBatches, te.getBatchCount()) + } + }) + } + } + } +} + +func TestBatchItemProcessorExportCancellationOnFailure(t *testing.T) { + workers := 10 + maxBatchSize := 10 + itemsToExport := 5000 + + t.Run(fmt.Sprintf("%d workers, batch size %d, %d items with cancellation on failure", workers, maxBatchSize, itemsToExport), func(t *testing.T) { + te := testBatchExporter[TestItem]{ + delay: 100 * time.Millisecond, // Introduce a delay to simulate processing time + } + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(maxBatchSize), WithWorkers(workers)) + require.NoError(t, err) + + items := make([]*TestItem, itemsToExport) + for i := 0; i < itemsToExport; i++ { + items[i] = &TestItem{name: strconv.Itoa(i)} + } + + // Simulate export failure and expect cancellation + te.failNextExport = true + + err = bsp.ImmediatelyExportItems(context.Background(), items) + require.Error(t, err, "Expected an error due to simulated export failure") + + // Ensure we exported less than the number of batches since the export should've + // stopped due to the failure. + require.Less(t, te.batchCount, itemsToExport/maxBatchSize) + }) +} From 77c10d9b0d128ab97d7fdbec203e4dca04548157 Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Mon, 17 Jun 2024 15:12:00 +1000 Subject: [PATCH 11/22] feat(cannon): split out validator pubkey & creds --- .../vector-kafka-clickhouse.yaml | 153 +++++++++++- ...canonical_beacon_validators_split.down.sql | 94 +++++++ ...0_canonical_beacon_validators_split.up.sql | 230 ++++++++++++++++++ 3 files changed, 473 insertions(+), 4 deletions(-) create mode 100644 deploy/migrations/clickhouse/040_canonical_beacon_validators_split.down.sql create mode 100644 deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql diff --git a/deploy/local/docker-compose/vector-kafka-clickhouse.yaml b/deploy/local/docker-compose/vector-kafka-clickhouse.yaml index 2f9808f7..da626cb6 100644 --- a/deploy/local/docker-compose/vector-kafka-clickhouse.yaml +++ b/deploy/local/docker-compose/vector-kafka-clickhouse.yaml @@ -1499,7 +1499,6 @@ transforms: for_each(array!(.data.validators)) -> |_index, validator| { events = push(events, { - "key": .event.id, "event_date_time": .event_date_time, "updated_date_time": .updated_date_time, "meta_client_name": .meta_client_name, @@ -1527,9 +1526,115 @@ transforms: "activation_epoch": validator.data.activation_epoch, "effective_balance": validator.data.effective_balance, "exit_epoch": validator.data.exit_epoch, - "pubkey": validator.data.pubkey, "slashed": validator.data.slashed, - "withdrawable_epoch": validator.data.withdrawable_epoch, + "withdrawable_epoch": validator.data.withdrawable_epoch + }) + } + . = events + canonical_beacon_validators_pubkeys_formatted: + type: remap + inputs: + - xatu_server_events_router.canonical_beacon_validators + source: |- + event_date_time, err = parse_timestamp(.event.date_time, format: "%+"); + if err == null { + .event_date_time = to_unix_timestamp(event_date_time, unit: "milliseconds") + } else { + .error = err + .error_description = "failed to parse event date time" + log(., level: "error", rate_limit_secs: 60) + } + + epoch_start_date_time, err = parse_timestamp(.meta.client.additional_data.epoch.start_date_time, format: "%+"); + if err == null { + .epoch_start_date_time = to_unix_timestamp(epoch_start_date_time) + } else { + .error = err + .error_description = "failed to parse epoch start date time" + log(., level: "error", rate_limit_secs: 60) + } + + events = [] + + .updated_date_time = to_unix_timestamp(now()) + + for_each(array!(.data.validators)) -> |_index, validator| { + events = push(events, { + "event_date_time": .event_date_time, + "updated_date_time": .updated_date_time, + "meta_client_name": .meta_client_name, + "meta_client_id": .meta_client_id, + "meta_client_version": .meta_client_version, + "meta_client_implementation": .meta_client_implementation, + "meta_client_os": .meta_client_os, + "meta_client_ip": .meta_client_ip, + "meta_network_id": .meta_network_id, + "meta_network_name": .meta_network_name, + "meta_client_geo_city": .meta_client_geo_city, + "meta_client_geo_country": .meta_client_geo_country, + "meta_client_geo_country_code": .meta_client_geo_country_code, + "meta_client_geo_continent_code": .meta_client_geo_continent_code, + "meta_client_geo_longitude": .meta_client_geo_longitude, + "meta_client_geo_latitude": .meta_client_geo_latitude, + "meta_client_geo_autonomous_system_number": .meta_client_geo_autonomous_system_number, + "meta_client_geo_autonomous_system_organization": .meta_client_geo_autonomous_system_organization, + "epoch": .meta.client.additional_data.epoch.number, + "epoch_start_date_time": .epoch_start_date_time, + "index": validator.index, + "pubkey": validator.data.pubkey + }) + } + . = events + canonical_beacon_validators_withdrawal_credentials_formatted: + type: remap + inputs: + - xatu_server_events_router.canonical_beacon_validators + source: |- + event_date_time, err = parse_timestamp(.event.date_time, format: "%+"); + if err == null { + .event_date_time = to_unix_timestamp(event_date_time, unit: "milliseconds") + } else { + .error = err + .error_description = "failed to parse event date time" + log(., level: "error", rate_limit_secs: 60) + } + + epoch_start_date_time, err = parse_timestamp(.meta.client.additional_data.epoch.start_date_time, format: "%+"); + if err == null { + .epoch_start_date_time = to_unix_timestamp(epoch_start_date_time) + } else { + .error = err + .error_description = "failed to parse epoch start date time" + log(., level: "error", rate_limit_secs: 60) + } + + events = [] + + .updated_date_time = to_unix_timestamp(now()) + + for_each(array!(.data.validators)) -> |_index, validator| { + events = push(events, { + "event_date_time": .event_date_time, + "updated_date_time": .updated_date_time, + "meta_client_name": .meta_client_name, + "meta_client_id": .meta_client_id, + "meta_client_version": .meta_client_version, + "meta_client_implementation": .meta_client_implementation, + "meta_client_os": .meta_client_os, + "meta_client_ip": .meta_client_ip, + "meta_network_id": .meta_network_id, + "meta_network_name": .meta_network_name, + "meta_client_geo_city": .meta_client_geo_city, + "meta_client_geo_country": .meta_client_geo_country, + "meta_client_geo_country_code": .meta_client_geo_country_code, + "meta_client_geo_continent_code": .meta_client_geo_continent_code, + "meta_client_geo_longitude": .meta_client_geo_longitude, + "meta_client_geo_latitude": .meta_client_geo_latitude, + "meta_client_geo_autonomous_system_number": .meta_client_geo_autonomous_system_number, + "meta_client_geo_autonomous_system_organization": .meta_client_geo_autonomous_system_organization, + "epoch": .meta.client.additional_data.epoch.number, + "epoch_start_date_time": .epoch_start_date_time, + "index": validator.index, "withdrawal_credentials": validator.data.withdrawal_credentials }) } @@ -2386,4 +2491,44 @@ sinks: max_events: 200000 healthcheck: enabled: true - skip_unknown_fields: false \ No newline at end of file + skip_unknown_fields: false + canonical_beacon_validators_pubkeys_clickhouse: + type: clickhouse + inputs: + - canonical_beacon_validators_pubkeys_formatted + database: default + endpoint: "${CLICKHOUSE_ENDPOINT}" + table: canonical_beacon_validators_pubkeys + auth: + strategy: basic + user: "${CLICKHOUSE_USER}" + password: "${CLICKHOUSE_PASSWORD}" + batch: + max_bytes: 52428800 + max_events: 200000 + timeout_secs: 1 + buffer: + max_events: 200000 + healthcheck: + enabled: true + skip_unknown_fields: false + canonical_beacon_validators_withdrawal_credentials_clickhouse: + type: clickhouse + inputs: + - canonical_beacon_validators_withdrawal_credentials_formatted + database: default + endpoint: "${CLICKHOUSE_ENDPOINT}" + table: canonical_beacon_validators_withdrawal_credentials + auth: + strategy: basic + user: "${CLICKHOUSE_USER}" + password: "${CLICKHOUSE_PASSWORD}" + batch: + max_bytes: 52428800 + max_events: 200000 + timeout_secs: 1 + buffer: + max_events: 200000 + healthcheck: + enabled: true + skip_unknown_fields: false diff --git a/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.down.sql b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.down.sql new file mode 100644 index 00000000..d79fd523 --- /dev/null +++ b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.down.sql @@ -0,0 +1,94 @@ +DROP TABLE IF EXISTS canonical_beacon_validators on cluster '{cluster}' SYNC; +DROP TABLE IF EXISTS canonical_beacon_validators_local on cluster '{cluster}' SYNC; + +DROP TABLE IF EXISTS canonical_beacon_validators_pubkeys on cluster '{cluster}' SYNC; +DROP TABLE IF EXISTS canonical_beacon_validators_pubkeys_local on cluster '{cluster}' SYNC; + +DROP TABLE IF EXISTS canonical_beacon_validators_withdrawal_credentials on cluster '{cluster}' SYNC; +DROP TABLE IF EXISTS canonical_beacon_validators_withdrawal_credentials_local on cluster '{cluster}' SYNC; + +CREATE TABLE default.canonical_beacon_validators_local on cluster '{cluster}' +( + updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), + epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), + epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + `index` UInt32 CODEC(ZSTD(1)), + balance UInt64 CODEC(ZSTD(1)), + `status` LowCardinality(String), + pubkey String CODEC(ZSTD(1)), + withdrawal_credentials String CODEC(ZSTD(1)), + effective_balance UInt64 CODEC(ZSTD(1)), + slashed Bool, + activation_epoch UInt64 CODEC(ZSTD(1)), + activation_eligibility_epoch UInt64 CODEC(ZSTD(1)), + exit_epoch UInt64 CODEC(ZSTD(1)), + withdrawable_epoch UInt64 CODEC(ZSTD(1)), + meta_client_name LowCardinality(String), + meta_client_id String CODEC(ZSTD(1)), + meta_client_version LowCardinality(String), + meta_client_implementation LowCardinality(String), + meta_client_os LowCardinality(String), + meta_client_ip Nullable(IPv6) CODEC(ZSTD(1)), + meta_client_geo_city LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_continent_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_longitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_latitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_number Nullable(UInt32) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_organization Nullable(String) CODEC(ZSTD(1)), + meta_network_id Int32 CODEC(DoubleDelta, ZSTD(1)), + meta_network_name LowCardinality(String), + meta_consensus_version LowCardinality(String), + meta_consensus_version_major LowCardinality(String), + meta_consensus_version_minor LowCardinality(String), + meta_consensus_version_patch LowCardinality(String), + meta_consensus_implementation LowCardinality(String), + meta_labels Map(String, String) CODEC(ZSTD(1)) +) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', updated_date_time) +PARTITION BY toStartOfMonth(epoch_start_date_time) +ORDER BY (epoch_start_date_time, index, meta_network_name); + +ALTER TABLE default.canonical_beacon_validators_local ON CLUSTER '{cluster}' +MODIFY COMMENT 'Contains a validator state for an epoch.', +COMMENT COLUMN updated_date_time 'When this row was last updated', +COMMENT COLUMN event_date_time 'When the client fetched the beacon block from a beacon node', +COMMENT COLUMN epoch 'The epoch number from beacon block payload', +COMMENT COLUMN epoch_start_date_time 'The wall clock time when the epoch started', +COMMENT COLUMN `index` 'The index of the validator', +COMMENT COLUMN `balance` 'The balance of the validator', +COMMENT COLUMN `status` 'The status of the validator', +COMMENT COLUMN pubkey 'The public key of the validator', +COMMENT COLUMN withdrawal_credentials 'The withdrawal credentials of the validator', +COMMENT COLUMN effective_balance 'The effective balance of the validator', +COMMENT COLUMN slashed 'Whether the validator is slashed', +COMMENT COLUMN activation_epoch 'The epoch when the validator was activated', +COMMENT COLUMN activation_eligibility_epoch 'The epoch when the validator was activated', +COMMENT COLUMN exit_epoch 'The epoch when the validator exited', +COMMENT COLUMN withdrawable_epoch 'The epoch when the validator can withdraw', +COMMENT COLUMN meta_client_name 'Name of the client that generated the event', +COMMENT COLUMN meta_client_id 'Unique Session ID of the client that generated the event. This changes every time the client is restarted.', +COMMENT COLUMN meta_client_version 'Version of the client that generated the event', +COMMENT COLUMN meta_client_implementation 'Implementation of the client that generated the event', +COMMENT COLUMN meta_client_os 'Operating system of the client that generated the event', +COMMENT COLUMN meta_client_ip 'IP address of the client that generated the event', +COMMENT COLUMN meta_client_geo_city 'City of the client that generated the event', +COMMENT COLUMN meta_client_geo_country 'Country of the client that generated the event', +COMMENT COLUMN meta_client_geo_country_code 'Country code of the client that generated the event', +COMMENT COLUMN meta_client_geo_continent_code 'Continent code of the client that generated the event', +COMMENT COLUMN meta_client_geo_longitude 'Longitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_latitude 'Latitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_number 'Autonomous system number of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_organization 'Autonomous system organization of the client that generated the event', +COMMENT COLUMN meta_network_id 'Ethereum network ID', +COMMENT COLUMN meta_network_name 'Ethereum network name', +COMMENT COLUMN meta_consensus_version 'Ethereum consensus client version that generated the event', +COMMENT COLUMN meta_consensus_version_major 'Ethereum consensus client major version that generated the event', +COMMENT COLUMN meta_consensus_version_minor 'Ethereum consensus client minor version that generated the event', +COMMENT COLUMN meta_consensus_version_patch 'Ethereum consensus client patch version that generated the event', +COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implementation that generated the event', +COMMENT COLUMN meta_labels 'Labels associated with the event'; + +CREATE TABLE canonical_beacon_validators on cluster '{cluster}' AS canonical_beacon_validators_local +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_local, cityHash64(epoch_start_date_time, `index`, meta_network_name)); diff --git a/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql new file mode 100644 index 00000000..8b43fc36 --- /dev/null +++ b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql @@ -0,0 +1,230 @@ +DROP TABLE IF EXISTS canonical_beacon_validators on cluster '{cluster}' SYNC; +DROP TABLE IF EXISTS canonical_beacon_validators_local on cluster '{cluster}' SYNC; + +CREATE TABLE default.canonical_beacon_validators_local on cluster '{cluster}' +( + updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), + epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), + epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + `index` UInt32 CODEC(ZSTD(1)), + balance UInt64 CODEC(ZSTD(1)), + `status` LowCardinality(String), + effective_balance UInt64 CODEC(ZSTD(1)), + slashed Bool, + activation_epoch UInt64 CODEC(ZSTD(1)), + activation_eligibility_epoch UInt64 CODEC(ZSTD(1)), + exit_epoch UInt64 CODEC(ZSTD(1)), + withdrawable_epoch UInt64 CODEC(ZSTD(1)), + meta_client_name LowCardinality(String), + meta_client_id String CODEC(ZSTD(1)), + meta_client_version LowCardinality(String), + meta_client_implementation LowCardinality(String), + meta_client_os LowCardinality(String), + meta_client_ip Nullable(IPv6) CODEC(ZSTD(1)), + meta_client_geo_city LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_continent_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_longitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_latitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_number Nullable(UInt32) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_organization Nullable(String) CODEC(ZSTD(1)), + meta_network_id Int32 CODEC(DoubleDelta, ZSTD(1)), + meta_network_name LowCardinality(String), + meta_consensus_version LowCardinality(String), + meta_consensus_version_major LowCardinality(String), + meta_consensus_version_minor LowCardinality(String), + meta_consensus_version_patch LowCardinality(String), + meta_consensus_implementation LowCardinality(String), + meta_labels Map(String, String) CODEC(ZSTD(1)) +) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', updated_date_time) +PARTITION BY toStartOfMonth(epoch_start_date_time) +ORDER BY (epoch_start_date_time, index, meta_network_name); + +ALTER TABLE default.canonical_beacon_validators_local ON CLUSTER '{cluster}' +MODIFY COMMENT 'Contains a validator state for an epoch.', +COMMENT COLUMN updated_date_time 'When this row was last updated', +COMMENT COLUMN event_date_time 'When the client fetched the beacon block from a beacon node', +COMMENT COLUMN epoch 'The epoch number from beacon block payload', +COMMENT COLUMN epoch_start_date_time 'The wall clock time when the epoch started', +COMMENT COLUMN `index` 'The index of the validator', +COMMENT COLUMN balance 'The balance of the validator', +COMMENT COLUMN `status` 'The status of the validator', +COMMENT COLUMN effective_balance 'The effective balance of the validator', +COMMENT COLUMN slashed 'Whether the validator is slashed', +COMMENT COLUMN activation_epoch 'The epoch when the validator was activated', +COMMENT COLUMN activation_eligibility_epoch 'The epoch when the validator was activated', +COMMENT COLUMN exit_epoch 'The epoch when the validator exited', +COMMENT COLUMN withdrawable_epoch 'The epoch when the validator can withdraw', +COMMENT COLUMN meta_client_name 'Name of the client that generated the event', +COMMENT COLUMN meta_client_id 'Unique Session ID of the client that generated the event. This changes every time the client is restarted.', +COMMENT COLUMN meta_client_version 'Version of the client that generated the event', +COMMENT COLUMN meta_client_implementation 'Implementation of the client that generated the event', +COMMENT COLUMN meta_client_os 'Operating system of the client that generated the event', +COMMENT COLUMN meta_client_ip 'IP address of the client that generated the event', +COMMENT COLUMN meta_client_geo_city 'City of the client that generated the event', +COMMENT COLUMN meta_client_geo_country 'Country of the client that generated the event', +COMMENT COLUMN meta_client_geo_country_code 'Country code of the client that generated the event', +COMMENT COLUMN meta_client_geo_continent_code 'Continent code of the client that generated the event', +COMMENT COLUMN meta_client_geo_longitude 'Longitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_latitude 'Latitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_number 'Autonomous system number of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_organization 'Autonomous system organization of the client that generated the event', +COMMENT COLUMN meta_network_id 'Ethereum network ID', +COMMENT COLUMN meta_network_name 'Ethereum network name', +COMMENT COLUMN meta_consensus_version 'Ethereum consensus client version that generated the event', +COMMENT COLUMN meta_consensus_version_major 'Ethereum consensus client major version that generated the event', +COMMENT COLUMN meta_consensus_version_minor 'Ethereum consensus client minor version that generated the event', +COMMENT COLUMN meta_consensus_version_patch 'Ethereum consensus client patch version that generated the event', +COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implementation that generated the event', +COMMENT COLUMN meta_labels 'Labels associated with the event'; + +CREATE TABLE canonical_beacon_validators on cluster '{cluster}' AS canonical_beacon_validators_local +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_local, cityHash64(epoch_start_date_time, `index`, meta_network_name)); + +CREATE TABLE default.canonical_beacon_validators_pubkeys_local on cluster '{cluster}' +( + updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + -- ensure the first epoch the pubkey was seen is in this table + -- add the updated_date_time to make sure we can always overwrite the data + -- 4294967295 = UInt32 max + `version` UInt32 DEFAULT 4294967295 + toUnixTimestamp(updated_date_time) - toUnixTimestamp(epoch_start_date_time) CODEC(DoubleDelta, ZSTD(1)), + event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), + epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), + epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + `index` UInt32 CODEC(ZSTD(1)), + pubkey String CODEC(ZSTD(1)), + meta_client_name LowCardinality(String), + meta_client_id String CODEC(ZSTD(1)), + meta_client_version LowCardinality(String), + meta_client_implementation LowCardinality(String), + meta_client_os LowCardinality(String), + meta_client_ip Nullable(IPv6) CODEC(ZSTD(1)), + meta_client_geo_city LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_continent_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_longitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_latitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_number Nullable(UInt32) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_organization Nullable(String) CODEC(ZSTD(1)), + meta_network_id Int32 CODEC(DoubleDelta, ZSTD(1)), + meta_network_name LowCardinality(String), + meta_consensus_version LowCardinality(String), + meta_consensus_version_major LowCardinality(String), + meta_consensus_version_minor LowCardinality(String), + meta_consensus_version_patch LowCardinality(String), + meta_consensus_implementation LowCardinality(String), + meta_labels Map(String, String) CODEC(ZSTD(1)) +) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', `version`) +PARTITION BY toStartOfMonth(epoch_start_date_time) +ORDER BY (index, pubkey, meta_network_name); + +ALTER TABLE default.canonical_beacon_validators_pubkeys_local ON CLUSTER '{cluster}' +MODIFY COMMENT 'Contains a validator state for an epoch.', +COMMENT COLUMN updated_date_time 'When this row was last updated', +COMMENT COLUMN `version` 'Version of this row, to help with de-duplication we want the latest updated_date_time but earliest epoch_start_date_time the pubkey was seen', +COMMENT COLUMN event_date_time 'When the client fetched the beacon block from a beacon node', +COMMENT COLUMN epoch 'The epoch number from beacon block payload', +COMMENT COLUMN epoch_start_date_time 'The wall clock time when the epoch started', +COMMENT COLUMN `index` 'The index of the validator', +COMMENT COLUMN pubkey 'The public key of the validator', +COMMENT COLUMN meta_client_name 'Name of the client that generated the event', +COMMENT COLUMN meta_client_id 'Unique Session ID of the client that generated the event. This changes every time the client is restarted.', +COMMENT COLUMN meta_client_version 'Version of the client that generated the event', +COMMENT COLUMN meta_client_implementation 'Implementation of the client that generated the event', +COMMENT COLUMN meta_client_os 'Operating system of the client that generated the event', +COMMENT COLUMN meta_client_ip 'IP address of the client that generated the event', +COMMENT COLUMN meta_client_geo_city 'City of the client that generated the event', +COMMENT COLUMN meta_client_geo_country 'Country of the client that generated the event', +COMMENT COLUMN meta_client_geo_country_code 'Country code of the client that generated the event', +COMMENT COLUMN meta_client_geo_continent_code 'Continent code of the client that generated the event', +COMMENT COLUMN meta_client_geo_longitude 'Longitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_latitude 'Latitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_number 'Autonomous system number of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_organization 'Autonomous system organization of the client that generated the event', +COMMENT COLUMN meta_network_id 'Ethereum network ID', +COMMENT COLUMN meta_network_name 'Ethereum network name', +COMMENT COLUMN meta_consensus_version 'Ethereum consensus client version that generated the event', +COMMENT COLUMN meta_consensus_version_major 'Ethereum consensus client major version that generated the event', +COMMENT COLUMN meta_consensus_version_minor 'Ethereum consensus client minor version that generated the event', +COMMENT COLUMN meta_consensus_version_patch 'Ethereum consensus client patch version that generated the event', +COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implementation that generated the event', +COMMENT COLUMN meta_labels 'Labels associated with the event'; + +CREATE TABLE canonical_beacon_validators_pubkeys on cluster '{cluster}' AS canonical_beacon_validators_pubkeys_local +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_pubkeys_local, cityHash64(epoch_start_date_time, `index`, meta_network_name)); + +CREATE TABLE default.canonical_beacon_validators_withdrawal_credentials_local on cluster '{cluster}' +( + updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + -- ensure the first epoch the withdrawal_credentials was seen is in this table + -- add the updated_date_time to make sure we can always overwrite the data + -- 4294967295 = UInt32 max + `version` UInt32 DEFAULT 4294967295 + toUnixTimestamp(updated_date_time) - toUnixTimestamp(epoch_start_date_time) CODEC(DoubleDelta, ZSTD(1)), + event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), + epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), + epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), + `index` UInt32 CODEC(ZSTD(1)), + withdrawal_credentials String CODEC(ZSTD(1)), + meta_client_name LowCardinality(String), + meta_client_id String CODEC(ZSTD(1)), + meta_client_version LowCardinality(String), + meta_client_implementation LowCardinality(String), + meta_client_os LowCardinality(String), + meta_client_ip Nullable(IPv6) CODEC(ZSTD(1)), + meta_client_geo_city LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_country_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_continent_code LowCardinality(String) CODEC(ZSTD(1)), + meta_client_geo_longitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_latitude Nullable(Float64) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_number Nullable(UInt32) CODEC(ZSTD(1)), + meta_client_geo_autonomous_system_organization Nullable(String) CODEC(ZSTD(1)), + meta_network_id Int32 CODEC(DoubleDelta, ZSTD(1)), + meta_network_name LowCardinality(String), + meta_consensus_version LowCardinality(String), + meta_consensus_version_major LowCardinality(String), + meta_consensus_version_minor LowCardinality(String), + meta_consensus_version_patch LowCardinality(String), + meta_consensus_implementation LowCardinality(String), + meta_labels Map(String, String) CODEC(ZSTD(1)) +) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', `version`) +PARTITION BY toStartOfMonth(epoch_start_date_time) +ORDER BY (index, withdrawal_credentials, meta_network_name); + +ALTER TABLE default.canonical_beacon_validators_withdrawal_credentials_local ON CLUSTER '{cluster}' +MODIFY COMMENT 'Contains a validator state for an epoch.', +COMMENT COLUMN updated_date_time 'When this row was last updated', +COMMENT COLUMN `version` 'Version of this row, to help with de-duplication we want the latest updated_date_time but earliest epoch_start_date_time the withdrawal_credentials was seen', +COMMENT COLUMN event_date_time 'When the client fetched the beacon block from a beacon node', +COMMENT COLUMN epoch 'The epoch number from beacon block payload', +COMMENT COLUMN epoch_start_date_time 'The wall clock time when the epoch started', +COMMENT COLUMN `index` 'The index of the validator', +COMMENT COLUMN withdrawal_credentials 'The withdrawal credentials of the validator', +COMMENT COLUMN meta_client_name 'Name of the client that generated the event', +COMMENT COLUMN meta_client_id 'Unique Session ID of the client that generated the event. This changes every time the client is restarted.', +COMMENT COLUMN meta_client_version 'Version of the client that generated the event', +COMMENT COLUMN meta_client_implementation 'Implementation of the client that generated the event', +COMMENT COLUMN meta_client_os 'Operating system of the client that generated the event', +COMMENT COLUMN meta_client_ip 'IP address of the client that generated the event', +COMMENT COLUMN meta_client_geo_city 'City of the client that generated the event', +COMMENT COLUMN meta_client_geo_country 'Country of the client that generated the event', +COMMENT COLUMN meta_client_geo_country_code 'Country code of the client that generated the event', +COMMENT COLUMN meta_client_geo_continent_code 'Continent code of the client that generated the event', +COMMENT COLUMN meta_client_geo_longitude 'Longitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_latitude 'Latitude of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_number 'Autonomous system number of the client that generated the event', +COMMENT COLUMN meta_client_geo_autonomous_system_organization 'Autonomous system organization of the client that generated the event', +COMMENT COLUMN meta_network_id 'Ethereum network ID', +COMMENT COLUMN meta_network_name 'Ethereum network name', +COMMENT COLUMN meta_consensus_version 'Ethereum consensus client version that generated the event', +COMMENT COLUMN meta_consensus_version_major 'Ethereum consensus client major version that generated the event', +COMMENT COLUMN meta_consensus_version_minor 'Ethereum consensus client minor version that generated the event', +COMMENT COLUMN meta_consensus_version_patch 'Ethereum consensus client patch version that generated the event', +COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implementation that generated the event', +COMMENT COLUMN meta_labels 'Labels associated with the event'; + +CREATE TABLE canonical_beacon_validators_withdrawal_credentials on cluster '{cluster}' AS canonical_beacon_validators_withdrawal_credentials_local +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_withdrawal_credentials_local, cityHash64(epoch_start_date_time, `index`, meta_network_name)); From 6789a1b3d91b2139043d0d2d52e777ebf532937d Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Mon, 17 Jun 2024 15:46:37 +1000 Subject: [PATCH 12/22] refactor(processor): Limit goroutines in sync mode & simplify (#334) * feat(processor): Add worker support for sync workloads * Cancellable * test: Add unit tests for batch item processor * feat: Static workers * more debugging * Refactor workers * Add comments * Close * test: Add queue size and dropped events tests * refactor: Improve error handling in enqueueOrDrop function * refactor: Remove duplicate fields and unused variables in testBatchExporter --- pkg/processor/batch.go | 380 ++++++++++++++++-------------------- pkg/processor/batch_test.go | 201 +++++++++++++++---- 2 files changed, 331 insertions(+), 250 deletions(-) diff --git a/pkg/processor/batch.go b/pkg/processor/batch.go index 76e95aab..b9de255b 100644 --- a/pkg/processor/batch.go +++ b/pkg/processor/batch.go @@ -1,14 +1,9 @@ -/* - * This processor was adapted from the OpenTelemetry Collector's batch processor. - * - * Authors: OpenTelemetry - * URL: https://github.com/open-telemetry/opentelemetry-go/blob/496c086ece129182662c14d6a023a2b2da09fe30/sdk/trace/batch_span_processor.go - */ - package processor import ( "context" + "errors" + "fmt" "runtime" "sync" "sync/atomic" @@ -18,6 +13,7 @@ import ( "github.com/sirupsen/logrus" ) +// ItemExporter is an interface for exporting items. type ItemExporter[T any] interface { // ExportItems exports a batch of items. // @@ -39,7 +35,6 @@ type ItemExporter[T any] interface { Shutdown(ctx context.Context) error } -// Defaults for BatchItemProcessorOptions. const ( DefaultMaxQueueSize = 51200 DefaultScheduleDelay = 5000 @@ -49,6 +44,7 @@ const ( DefaultNumWorkers = 1 ) +// ShippingMethod is the method of shipping items for export. type ShippingMethod string const ( @@ -57,17 +53,14 @@ const ( ShippingMethodSync ShippingMethod = "sync" ) -// BatchItemProcessorOption configures a BatchItemProcessor. +// BatchItemProcessorOption is a functional option for the batch item processor. type BatchItemProcessorOption func(o *BatchItemProcessorOptions) -// BatchItemProcessorOptions is configuration settings for a -// BatchItemProcessor. type BatchItemProcessorOptions struct { // MaxQueueSize is the maximum queue size to buffer items for delayed processing. If the // queue gets full it drops the items. // The default value of MaxQueueSize is 51200. MaxQueueSize int - // BatchTimeout is the maximum duration for constructing a batch. Processor // forcefully sends available items when timeout is reached. // The default value of BatchTimeout is 5000 msec. @@ -77,40 +70,47 @@ type BatchItemProcessorOptions struct { // is reached, the export will be cancelled. // The default value of ExportTimeout is 30000 msec. ExportTimeout time.Duration - - // MaxExportBatchSize is the maximum number of items to process in a single batch. - // If there are more than one batch worth of items then it processes multiple batches - // of items one batch after the other without any delay. + // MaxExportBatchSize is the maximum number of items to include in a batch. // The default value of MaxExportBatchSize is 512. MaxExportBatchSize int - - // ShippingMethod is the method used to ship items to the exporter. + // ShippingMethod is the method of shipping items for export. The default value + // of ShippingMethod is "async". ShippingMethod ShippingMethod - - // Number of workers to process items. + // Workers is the number of workers to process batches. + // The default value of Workers is 1. Workers int } -// BatchItemProcessor is a buffer that batches asynchronously-received -// items and sends them to a exporter when complete. +func (o *BatchItemProcessorOptions) Validate() error { + if o.MaxExportBatchSize > o.MaxQueueSize { + return errors.New("max export batch size cannot be greater than max queue size") + } + + if o.Workers == 0 { + return errors.New("workers must be greater than 0") + } + + if o.MaxExportBatchSize < 1 { + return errors.New("max export batch size must be greater than 0") + } + + return nil +} + +// BatchItemProcessor is a processor that batches items for export. type BatchItemProcessor[T any] struct { e ItemExporter[T] o BatchItemProcessorOptions log logrus.FieldLogger - queue chan *T + queue chan traceableItem[T] + batchCh chan []traceableItem[T] dropped uint32 name string metrics *Metrics - batches chan []*T - batchReady chan bool - - batch []*T - batchMutex sync.Mutex - timer *time.Timer stopWait sync.WaitGroup stopOnce sync.Once @@ -118,10 +118,13 @@ type BatchItemProcessor[T any] struct { stopWorkersCh chan struct{} } -// NewBatchItemProcessor creates a new ItemProcessor that will send completed -// item batches to the exporter with the supplied options. -// -// If the exporter is nil, the item processor will preform no action. +type traceableItem[T any] struct { + item *T + errCh chan error + completedCh chan struct{} +} + +// NewBatchItemProcessor creates a new batch item processor. func NewBatchItemProcessor[T any](exporter ItemExporter[T], name string, log logrus.FieldLogger, options ...BatchItemProcessorOption) (*BatchItemProcessor[T], error) { maxQueueSize := DefaultMaxQueueSize maxExportBatchSize := DefaultMaxExportBatchSize @@ -146,6 +149,10 @@ func NewBatchItemProcessor[T any](exporter ItemExporter[T], name string, log log opt(&o) } + if err := o.Validate(); err != nil { + return nil, fmt.Errorf("invalid batch item processor options: %w: %s", err, name) + } + metrics := DefaultMetrics bvp := BatchItemProcessor[T]{ @@ -154,140 +161,103 @@ func NewBatchItemProcessor[T any](exporter ItemExporter[T], name string, log log log: log, name: name, metrics: metrics, - batch: make([]*T, 0, o.MaxExportBatchSize), timer: time.NewTimer(o.BatchTimeout), - queue: make(chan *T, o.MaxQueueSize), + queue: make(chan traceableItem[T], o.MaxQueueSize), + batchCh: make(chan []traceableItem[T], o.Workers), stopCh: make(chan struct{}), stopWorkersCh: make(chan struct{}), } - bvp.batches = make(chan []*T, o.Workers) // Buffer the channel to hold batches for each worker - bvp.batchReady = make(chan bool, 1) + bvp.log.WithFields( + logrus.Fields{ + "workers": bvp.o.Workers, + "batch_timeout": bvp.o.BatchTimeout, + "export_timeout": bvp.o.ExportTimeout, + "max_export_batch_size": bvp.o.MaxExportBatchSize, + "max_queue_size": bvp.o.MaxQueueSize, + "shipping_method": bvp.o.ShippingMethod, + }, + ).Info("Batch item processor initialized") bvp.stopWait.Add(o.Workers) for i := 0; i < o.Workers; i++ { - go func() { + go func(num int) { defer bvp.stopWait.Done() - - bvp.worker(context.Background()) - }() + bvp.worker(context.Background(), num) + }(i) } - go bvp.batchBuilder(context.Background()) // Start building batches + go func() { + bvp.batchBuilder(context.Background()) + bvp.log.Info("Batch builder exited") + }() return &bvp, nil } -// OnEnd method enqueues a item for later processing. +// Write writes items to the queue. If the Processor is configured to use +// the sync shipping method, the items will be written to the queue and this +// function will return when all items have been processed. If the Processor is +// configured to use the async shipping method, the items will be written to +// the queue and this function will return immediately. func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { _, span := observability.Tracer().Start(ctx, "BatchItemProcessor.Write") defer span.End() bvp.metrics.SetItemsQueued(bvp.name, float64(len(bvp.queue))) - if bvp.o.ShippingMethod == ShippingMethodSync { - return bvp.ImmediatelyExportItems(ctx, s) - } - - bvp.metrics.SetItemsQueued(bvp.name, float64(len(bvp.queue))) - - // Do not enqueue items if we are just going to drop them. if bvp.e == nil { - return nil - } - - for _, i := range s { - bvp.enqueue(i) - } - - return nil -} - -// ImmediatelyExportItems immediately exports the items to the exporter. -// Useful for propagating errors from the exporter. -func (bvp *BatchItemProcessor[T]) ImmediatelyExportItems(ctx context.Context, items []*T) error { - _, span := observability.Tracer().Start(ctx, "BatchItemProcessor.ImmediatelyExportItems") - defer span.End() - - if len(items) == 0 { - return nil + return errors.New("exporter is nil") } - countItemsToExport := len(items) - - batchSize := bvp.o.MaxExportBatchSize - if batchSize == 0 { - batchSize = 1 // Ensure we can't divide by zero - } - - batches := (countItemsToExport + batchSize - 1) / batchSize - - batchCh := make(chan []*T, batches) - errCh := make(chan error, 1) - - defer close(errCh) - - var wg sync.WaitGroup + // Break our items up in to chunks that can be processed at + // one time by our workers. This is to prevent wasting + // resources sending items if we've failed an earlier + // batch. + batchSize := bvp.o.Workers * bvp.o.MaxExportBatchSize + for start := 0; start < len(s); start += batchSize { + end := start + batchSize + if end > len(s) { + end = len(s) + } - cctx, cancel := context.WithCancel(ctx) - defer cancel() + prepared := []traceableItem[T]{} + for _, i := range s[start:end] { + prepared = append(prepared, traceableItem[T]{ + item: i, + errCh: make(chan error, 1), + completedCh: make(chan struct{}, 1), + }) + } - for i := 0; i < countItemsToExport; i += batchSize { - end := i + batchSize - if end > countItemsToExport { - end = countItemsToExport + for _, i := range prepared { + if err := bvp.enqueueOrDrop(ctx, i); err != nil { + return err + } } - itemsBatch := items[i:end] - batchCh <- itemsBatch - } - close(batchCh) // Close the channel after all batches are sent - - bvp.log. - WithField("workers", bvp.o.Workers). - WithField("batches", batches). - Debug("Split items into batches for immediate export") - - for i := 0; i < bvp.o.Workers && i < batches; i++ { - wg.Add(1) - - go func(workerID int) { - defer wg.Done() - - for itemsBatch := range batchCh { - bvp.log.WithFields(logrus.Fields{ - "count": len(itemsBatch), - "worker": workerID, - }).Debug("Immediately exporting items") - - err := bvp.exportWithTimeout(cctx, itemsBatch) - if err != nil { - select { - case errCh <- err: - default: + if bvp.o.ShippingMethod == ShippingMethodSync { + for _, item := range prepared { + select { + case err := <-item.errCh: + if err != nil { + return err } - - cancel() // Cancel the context to stop other workers - - return + case <-item.completedCh: + continue + case <-ctx.Done(): + return ctx.Err() } } - }(i) + } } - wg.Wait() - - select { - case err := <-errCh: - return err - default: - return nil - } + return nil } -// exportWithTimeout exports the items with a timeout. -func (bvp *BatchItemProcessor[T]) exportWithTimeout(ctx context.Context, itemsBatch []*T) error { +// exportWithTimeout exports items with a timeout. +func (bvp *BatchItemProcessor[T]) exportWithTimeout(ctx context.Context, itemsBatch []traceableItem[T]) error { if bvp.o.ExportTimeout > 0 { var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, bvp.o.ExportTimeout) @@ -295,44 +265,52 @@ func (bvp *BatchItemProcessor[T]) exportWithTimeout(ctx context.Context, itemsBa defer cancel() } - err := bvp.e.ExportItems(ctx, itemsBatch) + items := make([]*T, len(itemsBatch)) + for i, item := range itemsBatch { + items[i] = item.item + } + + err := bvp.e.ExportItems(ctx, items) if err != nil { bvp.metrics.IncItemsFailedBy(bvp.name, float64(len(itemsBatch))) - - return err + } else { + bvp.metrics.IncItemsExportedBy(bvp.name, float64(len(itemsBatch))) } - bvp.metrics.IncItemsExportedBy(bvp.name, float64(len(itemsBatch))) + for _, item := range itemsBatch { + if item.errCh != nil { + item.errCh <- err + close(item.errCh) + } + + if item.completedCh != nil { + item.completedCh <- struct{}{} + close(item.completedCh) + } + } return nil } -// Shutdown flushes the queue and waits until all items are processed. -// It only executes once. Subsequent call does nothing. +// Shutdown shuts down the batch item processor. func (bvp *BatchItemProcessor[T]) Shutdown(ctx context.Context) error { var err error - bvp.log.Debug("Shutting down processor") - bvp.stopOnce.Do(func() { wait := make(chan struct{}) go func() { - // Stop accepting new items - close(bvp.stopCh) + bvp.log.Info("Stopping processor") - // Drain the queue - bvp.drainQueue() + close(bvp.stopCh) - // Stop the timer bvp.timer.Stop() - // Stop the workers + bvp.drainQueue() + close(bvp.stopWorkersCh) - // Wait for the workers to finish bvp.stopWait.Wait() - // Shutdown the exporter if bvp.e != nil { if err = bvp.e.Shutdown(ctx); err != nil { bvp.log.WithError(err).Error("failed to shutdown processor") @@ -341,7 +319,6 @@ func (bvp *BatchItemProcessor[T]) Shutdown(ctx context.Context) error { close(wait) }() - // Wait until the wait group is done or the context is cancelled select { case <-wait: case <-ctx.Done(): @@ -352,51 +329,36 @@ func (bvp *BatchItemProcessor[T]) Shutdown(ctx context.Context) error { return err } -// WithMaxQueueSize returns a BatchItemProcessorOption that configures the -// maximum queue size allowed for a BatchItemProcessor. func WithMaxQueueSize(size int) BatchItemProcessorOption { return func(o *BatchItemProcessorOptions) { o.MaxQueueSize = size } } -// WithMaxExportBatchSize returns a BatchItemProcessorOption that configures -// the maximum export batch size allowed for a BatchItemProcessor. func WithMaxExportBatchSize(size int) BatchItemProcessorOption { return func(o *BatchItemProcessorOptions) { o.MaxExportBatchSize = size } } -// WithBatchTimeout returns a BatchItemProcessorOption that configures the -// maximum delay allowed for a BatchItemProcessor before it will export any -// held item (whether the queue is full or not). func WithBatchTimeout(delay time.Duration) BatchItemProcessorOption { return func(o *BatchItemProcessorOptions) { o.BatchTimeout = delay } } -// WithExportTimeout returns a BatchItemProcessorOption that configures the -// amount of time a BatchItemProcessor waits for an exporter to export before -// abandoning the export. func WithExportTimeout(timeout time.Duration) BatchItemProcessorOption { return func(o *BatchItemProcessorOptions) { o.ExportTimeout = timeout } } -// WithExportTimeout returns a BatchItemProcessorOption that configures the -// amount of time a BatchItemProcessor waits for an exporter to export before -// abandoning the export. func WithShippingMethod(method ShippingMethod) BatchItemProcessorOption { return func(o *BatchItemProcessorOptions) { o.ShippingMethod = method } } -// WithWorkers returns a BatchItemProcessorOption that configures the -// number of workers to process items. func WithWorkers(workers int) BatchItemProcessorOption { return func(o *BatchItemProcessorOptions) { o.Workers = workers @@ -404,56 +366,60 @@ func WithWorkers(workers int) BatchItemProcessorOption { } func (bvp *BatchItemProcessor[T]) batchBuilder(ctx context.Context) { + log := bvp.log.WithField("module", "batch_builder") + + var batch []traceableItem[T] + for { select { case <-bvp.stopWorkersCh: + log.Info("Stopping batch builder") + return - case sd := <-bvp.queue: - bvp.batchMutex.Lock() + case item := <-bvp.queue: + batch = append(batch, item) - bvp.batch = append(bvp.batch, sd) + if len(batch) >= bvp.o.MaxExportBatchSize { + bvp.sendBatch(batch, "max_export_batch_size") - if len(bvp.batch) >= bvp.o.MaxExportBatchSize { - batchCopy := make([]*T, len(bvp.batch)) - copy(batchCopy, bvp.batch) - bvp.batches <- batchCopy - bvp.batch = bvp.batch[:0] - bvp.batchReady <- true + batch = []traceableItem[T]{} } - - bvp.batchMutex.Unlock() case <-bvp.timer.C: - bvp.batchMutex.Lock() - - if len(bvp.batch) > 0 { - batchCopy := make([]*T, len(bvp.batch)) - copy(batchCopy, bvp.batch) - bvp.batches <- batchCopy - bvp.batch = bvp.batch[:0] - bvp.batchReady <- true + if len(batch) > 0 { + bvp.sendBatch(batch, "timer") + batch = []traceableItem[T]{} } else { - // Reset the timer if there are no items in the batch. - // If there are items in the batch, one of the workers will reset the timer. bvp.timer.Reset(bvp.o.BatchTimeout) } - - bvp.batchMutex.Unlock() } } } +func (bvp *BatchItemProcessor[T]) sendBatch(batch []traceableItem[T], reason string) { + log := bvp.log.WithField("reason", reason) + log.Tracef("Creating a batch of %d items", len(batch)) + + batchCopy := make([]traceableItem[T], len(batch)) + copy(batchCopy, batch) + + log.Tracef("Batch items copied") + + bvp.batchCh <- batchCopy + + log.Tracef("Batch sent to batch channel") +} + +func (bvp *BatchItemProcessor[T]) worker(ctx context.Context, number int) { + bvp.log.Infof("Starting worker %d", number) -// worker removes items from the `queue` channel until processor -// is shut down. It calls the exporter in batches of up to MaxExportBatchSize -// waiting up to BatchTimeout to form a batch. -func (bvp *BatchItemProcessor[T]) worker(ctx context.Context) { for { select { case <-bvp.stopWorkersCh: + bvp.log.Infof("Stopping worker %d", number) + return - case <-bvp.batchReady: + case batch := <-bvp.batchCh: bvp.timer.Reset(bvp.o.BatchTimeout) - batch := <-bvp.batches if err := bvp.exportWithTimeout(ctx, batch); err != nil { bvp.log.WithError(err).Error("failed to export items") } @@ -461,26 +427,22 @@ func (bvp *BatchItemProcessor[T]) worker(ctx context.Context) { } } -// drainQueue awaits the any caller that had added to bvp.stopWait -// to finish the enqueue, then exports the final batch. func (bvp *BatchItemProcessor[T]) drainQueue() { - // Wait for the batch builder to send all remaining items to the workers. + bvp.log.Info("Draining queue: waiting for the batch builder to pull all the items from the queue") + for len(bvp.queue) > 0 { time.Sleep(10 * time.Millisecond) } - // Wait for the workers to finish processing all batches. - for len(bvp.batches) > 0 { - time.Sleep(10 * time.Millisecond) + bvp.log.Info("Draining queue: waiting for workers to finish processing batches") + + for len(bvp.queue) > 0 { + <-bvp.queue } - // Close the batches channel since no more batches will be sent. - close(bvp.batches) -} + bvp.log.Info("Draining queue: all batches finished") -func (bvp *BatchItemProcessor[T]) enqueue(sd *T) { - ctx := context.TODO() - bvp.enqueueOrDrop(ctx, sd) + close(bvp.queue) } func recoverSendOnClosedChan() { @@ -496,24 +458,24 @@ func recoverSendOnClosedChan() { panic(x) } -func (bvp *BatchItemProcessor[T]) enqueueOrDrop(ctx context.Context, sd *T) bool { +func (bvp *BatchItemProcessor[T]) enqueueOrDrop(ctx context.Context, item traceableItem[T]) error { // This ensures the bvp.queue<- below does not panic as the // processor shuts down. defer recoverSendOnClosedChan() select { case <-bvp.stopCh: - return false + return errors.New("processor is shutting down") default: } select { - case bvp.queue <- sd: - return true + case bvp.queue <- item: + return nil default: atomic.AddUint32(&bvp.dropped, 1) bvp.metrics.IncItemsDroppedBy(bvp.name, float64(1)) } - return false + return errors.New("queue is full") } diff --git a/pkg/processor/batch_test.go b/pkg/processor/batch_test.go index c7850f9d..82e49faa 100644 --- a/pkg/processor/batch_test.go +++ b/pkg/processor/batch_test.go @@ -48,6 +48,14 @@ func (t *testBatchExporter[T]) ExportItems(ctx context.Context, items []*T) erro return errors.New("export failure") } + time.Sleep(t.delay) + + if t.failNextExport { + t.failNextExport = false + + return errors.New("export failure") + } + t.mu.Lock() defer t.mu.Unlock() @@ -98,10 +106,11 @@ func TestNewBatchItemProcessorWithNilExporter(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](nil, "processor", nullLogger()) require.NoError(t, err) - if err := bsp.Write(context.Background(), []*TestItem{{ + err = bsp.Write(context.Background(), []*TestItem{{ name: "test", - }}); err != nil { - t.Errorf("failed to Write to the BatchItemProcessor: %v", err) + }}) + if err == nil || err.Error() != "exporter is nil" { + t.Errorf("expected error 'exporter is nil', got: %v", err) } if err := bsp.Shutdown(context.Background()); err != nil { @@ -118,20 +127,26 @@ type testOption struct { wantBatchCount int } -func TestNewBatchItemProcessorWithOptions(t *testing.T) { +func TestAsyncNewBatchItemProcessorWithOptions(t *testing.T) { schDelay := 100 * time.Millisecond options := []testOption{ { - name: "default", - o: []BatchItemProcessorOption{}, + name: "default", + o: []BatchItemProcessorOption{ + WithShippingMethod(ShippingMethodAsync), + WithBatchTimeout(10 * time.Millisecond), + }, + writeNumItems: 2048, genNumItems: 2053, - wantNumItems: 2048, - wantBatchCount: 4, + wantNumItems: 2053, + wantBatchCount: 5, }, { name: "non-default BatchTimeout", o: []BatchItemProcessorOption{ WithBatchTimeout(schDelay), + WithShippingMethod(ShippingMethodAsync), + WithMaxExportBatchSize(512), }, writeNumItems: 2048, genNumItems: 2053, @@ -143,23 +158,13 @@ func TestNewBatchItemProcessorWithOptions(t *testing.T) { o: []BatchItemProcessorOption{ WithBatchTimeout(schDelay), WithMaxQueueSize(200), + WithMaxExportBatchSize(200), + WithShippingMethod(ShippingMethodAsync), }, writeNumItems: 200, genNumItems: 205, wantNumItems: 205, - wantBatchCount: 1, - }, - { - name: "blocking option", - o: []BatchItemProcessorOption{ - WithBatchTimeout(schDelay), - WithMaxQueueSize(200), - WithMaxExportBatchSize(20), - }, - writeNumItems: 200, - genNumItems: 205, - wantNumItems: 205, - wantBatchCount: 11, + wantBatchCount: 2, }, } @@ -169,11 +174,11 @@ func TestNewBatchItemProcessorWithOptions(t *testing.T) { ssp, err := createAndRegisterBatchSP(option.o, &te) if err != nil { - t.Fatalf("%s: Error creating new instance of BatchItemProcessor\n", option.name) + require.NoError(t, err) } if ssp == nil { - t.Fatalf("%s: Error creating new instance of BatchItemProcessor\n", option.name) + require.NoError(t, err) } for i := 0; i < option.genNumItems; i++ { @@ -184,7 +189,7 @@ func TestNewBatchItemProcessorWithOptions(t *testing.T) { if err := ssp.Write(context.Background(), []*TestItem{{ name: "test", }}); err != nil { - t.Errorf("%s: Error writing to BatchItemProcessor\n", option.name) + t.Errorf("%s: Error writing to BatchItemProcessor", option.name) } } @@ -192,15 +197,15 @@ func TestNewBatchItemProcessorWithOptions(t *testing.T) { gotNumOfItems := te.len() if option.wantNumItems > 0 && option.wantNumItems != gotNumOfItems { - t.Errorf("number of exported items: got %+v, want %+v\n", + t.Errorf("number of exported items: got %v, want %v", gotNumOfItems, option.wantNumItems) } gotBatchCount := te.getBatchCount() if option.wantBatchCount > 0 && gotBatchCount != option.wantBatchCount { - t.Errorf("number batches: got %+v, want >= %+v\n", + t.Errorf("number batches: got %v, want %v", gotBatchCount, option.wantBatchCount) - t.Errorf("Batches %v\n", te.sizes) + t.Errorf("Batches %v", te.sizes) } }) } @@ -270,10 +275,11 @@ func TestBatchItemProcessorShutdown(t *testing.T) { func TestBatchItemProcessorDrainQueue(t *testing.T) { be := testBatchExporter[TestItem]{} - bsp, err := NewBatchItemProcessor[TestItem](&be, "processor", nullLogger(), WithMaxExportBatchSize(5), WithBatchTimeout(5*time.Minute)) + log := logrus.New() + bsp, err := NewBatchItemProcessor[TestItem](&be, "processor", log, WithMaxExportBatchSize(5), WithBatchTimeout(1*time.Second), WithWorkers(2), WithShippingMethod(ShippingMethodAsync)) require.NoError(t, err) - itemsToExport := 500 + itemsToExport := 5000 for i := 0; i < itemsToExport; i++ { if err := bsp.Write(context.Background(), []*TestItem{{ @@ -306,11 +312,10 @@ func TestBatchItemProcessorPostShutdown(t *testing.T) { lenJustAfterShutdown := be.len() for i := 0; i < 60; i++ { - if err := bsp.Write(context.Background(), []*TestItem{{ + err := bsp.Write(context.Background(), []*TestItem{{ name: strconv.Itoa(i), - }}); err != nil { - t.Errorf("Error writing to BatchItemProcessor\n") - } + }}) + require.Error(t, err) } assert.Equal(t, lenJustAfterShutdown, be.len(), "Write should have no effect after Shutdown") @@ -487,8 +492,8 @@ func (ErrorItemExporter[T]) ExportItems(ctx context.Context, _ []*T) error { } // TestBatchItemProcessorWithSyncErrorExporter tests a processor with ShippingMethod = sync and an exporter that only returns errors. -func TestBatchItemProcessorWithAsyncErrorExporter(t *testing.T) { - bsp, err := NewBatchItemProcessor[TestItem](ErrorItemExporter[TestItem]{}, "processor", nullLogger(), WithShippingMethod(ShippingMethodSync)) +func TestBatchItemProcessorWithSyncErrorExporter(t *testing.T) { + bsp, err := NewBatchItemProcessor[TestItem](ErrorItemExporter[TestItem]{}, "processor", nullLogger(), WithShippingMethod(ShippingMethodSync), WithBatchTimeout(100*time.Millisecond)) if err != nil { t.Fatalf("failed to create batch processor: %v", err) } @@ -499,18 +504,26 @@ func TestBatchItemProcessorWithAsyncErrorExporter(t *testing.T) { } } -func TestBatchItemProcessorImmediatelyExportItems(t *testing.T) { +func TestBatchItemProcessorSyncShipping(t *testing.T) { // Define a range of values for workers, maxExportBatchSize, and itemsToExport workerCounts := []int{1, 5, 10} maxBatchSizes := []int{1, 5, 10, 20} - itemCounts := []int{0, 1, 25, 50} + itemCounts := []int{0, 1, 10, 25, 50} for _, workers := range workerCounts { for _, maxBatchSize := range maxBatchSizes { for _, itemsToExport := range itemCounts { t.Run(fmt.Sprintf("%d workers, batch size %d, %d items", workers, maxBatchSize, itemsToExport), func(t *testing.T) { te := testBatchExporter[TestItem]{} - bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(maxBatchSize), WithWorkers(workers)) + bsp, err := NewBatchItemProcessor[TestItem]( + &te, + "processor", + logrus.New(), + WithMaxExportBatchSize(maxBatchSize), + WithWorkers(workers), + WithShippingMethod(ShippingMethodSync), + WithBatchTimeout(100*time.Millisecond), + ) require.NoError(t, err) items := make([]*TestItem, itemsToExport) @@ -518,7 +531,7 @@ func TestBatchItemProcessorImmediatelyExportItems(t *testing.T) { items[i] = &TestItem{name: strconv.Itoa(i)} } - err = bsp.ImmediatelyExportItems(context.Background(), items) + err = bsp.Write(context.Background(), items) require.NoError(t, err) expectedBatches := (itemsToExport + maxBatchSize - 1) / maxBatchSize @@ -548,7 +561,7 @@ func TestBatchItemProcessorExportCancellationOnFailure(t *testing.T) { te := testBatchExporter[TestItem]{ delay: 100 * time.Millisecond, // Introduce a delay to simulate processing time } - bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(maxBatchSize), WithWorkers(workers)) + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(maxBatchSize), WithWorkers(workers), WithShippingMethod(ShippingMethodSync)) require.NoError(t, err) items := make([]*TestItem, itemsToExport) @@ -559,7 +572,7 @@ func TestBatchItemProcessorExportCancellationOnFailure(t *testing.T) { // Simulate export failure and expect cancellation te.failNextExport = true - err = bsp.ImmediatelyExportItems(context.Background(), items) + err = bsp.Write(context.Background(), items) require.Error(t, err, "Expected an error due to simulated export failure") // Ensure we exported less than the number of batches since the export should've @@ -567,3 +580,109 @@ func TestBatchItemProcessorExportCancellationOnFailure(t *testing.T) { require.Less(t, te.batchCount, itemsToExport/maxBatchSize) }) } + +func TestBatchItemProcessorWithZeroWorkers(t *testing.T) { + te := testBatchExporter[TestItem]{} + _, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(0)) + require.Error(t, err, "Expected an error when initializing with zero workers") +} + +func TestBatchItemProcessorWithNegativeBatchSize(t *testing.T) { + te := testBatchExporter[TestItem]{} + _, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(-1), WithWorkers(5)) + require.Error(t, err, "Expected an error when initializing with negative batch size") +} + +func TestBatchItemProcessorWithNegativeQueueSize(t *testing.T) { + te := testBatchExporter[TestItem]{} + _, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxQueueSize(-1), WithWorkers(5)) + require.Error(t, err, "Expected an error when initializing with negative queue size") +} + +func TestBatchItemProcessorWithZeroBatchSize(t *testing.T) { + te := testBatchExporter[TestItem]{} + _, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(0), WithWorkers(5)) + require.Error(t, err, "Expected an error when initializing with zero batch size") +} + +func TestBatchItemProcessorWithZeroQueueSize(t *testing.T) { + te := testBatchExporter[TestItem]{} + _, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxQueueSize(0), WithWorkers(5)) + require.Error(t, err, "Expected an error when initializing with zero queue size") +} + +func TestBatchItemProcessorShutdownWithoutExport(t *testing.T) { + te := testBatchExporter[TestItem]{} + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5)) + require.NoError(t, err) + + require.NoError(t, bsp.Shutdown(context.Background()), "shutting down BatchItemProcessor") + require.Equal(t, 0, te.len(), "No items should have been exported") +} + +func TestBatchItemProcessorExportWithTimeout(t *testing.T) { + te := testBatchExporter[TestItem]{delay: 2 * time.Second} + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5), WithExportTimeout(1*time.Second), WithShippingMethod(ShippingMethodSync)) + require.NoError(t, err) + + itemsToExport := 10 + items := make([]*TestItem, itemsToExport) + + for i := 0; i < itemsToExport; i++ { + items[i] = &TestItem{name: strconv.Itoa(i)} + } + + err = bsp.Write(context.Background(), items) + require.Error(t, err, "Expected an error due to export timeout") + require.Less(t, te.len(), itemsToExport, "Expected some items to be exported before timeout") +} + +func TestBatchItemProcessorWithBatchTimeout(t *testing.T) { + te := testBatchExporter[TestItem]{} + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5), WithBatchTimeout(1*time.Second)) + require.NoError(t, err) + + itemsToExport := 5 + items := make([]*TestItem, itemsToExport) + + for i := 0; i < itemsToExport; i++ { + items[i] = &TestItem{name: strconv.Itoa(i)} + } + + for _, item := range items { + err := bsp.Write(context.Background(), []*TestItem{item}) + require.NoError(t, err) + } + + time.Sleep(2 * time.Second) + require.Equal(t, itemsToExport, te.len(), "Expected all items to be exported after batch timeout") +} + +func TestBatchItemProcessorQueueSize(t *testing.T) { + te := indefiniteExporter[TestItem]{} + maxQueueSize := 5 + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithBatchTimeout(10*time.Minute), WithMaxQueueSize(maxQueueSize), WithMaxExportBatchSize(maxQueueSize), WithWorkers(1), WithShippingMethod(ShippingMethodAsync)) + require.NoError(t, err) + + itemsToExport := 10 + items := make([]*TestItem, itemsToExport) + + for i := 0; i < itemsToExport; i++ { + items[i] = &TestItem{name: strconv.Itoa(i)} + } + + // Write items to the processor + for i := 0; i < itemsToExport; i++ { + err := bsp.Write(context.Background(), []*TestItem{items[i]}) + if i < maxQueueSize { + require.NoError(t, err, "Expected no error for item %d", i) + } else { + require.Error(t, err, "Expected an error for item %d due to queue size limit", i) + } + } + + // Ensure that the queue size is respected + require.Equal(t, maxQueueSize, len(bsp.queue), "Queue size should be equal to maxQueueSize") + // Ensure that the dropped count is correct + require.Equal(t, uint32(itemsToExport-maxQueueSize), bsp.dropped, "Dropped count should be equal to the number of items that exceeded the queue size") +} From dd9842c499e0fa45438303736ab4172ae6fa10c4 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Mon, 17 Jun 2024 16:15:41 +1000 Subject: [PATCH 13/22] fix(processor): Memory usage in workers (#335) * feat(processor): Add worker support for sync workloads * Cancellable * test: Add unit tests for batch item processor * feat: Static workers * more debugging * Refactor workers * Add comments * Close * test: Add queue size and dropped events tests * refactor: Improve error handling in enqueueOrDrop function * refactor: Remove duplicate fields and unused variables in testBatchExporter * refactor: Modify batch processing preparation for shipping method * refactor: Update default value of Workers to 5 --- pkg/processor/batch.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/pkg/processor/batch.go b/pkg/processor/batch.go index b9de255b..1e5ad380 100644 --- a/pkg/processor/batch.go +++ b/pkg/processor/batch.go @@ -41,7 +41,7 @@ const ( DefaultExportTimeout = 30000 DefaultMaxExportBatchSize = 512 DefaultShippingMethod = ShippingMethodAsync - DefaultNumWorkers = 1 + DefaultNumWorkers = 5 ) // ShippingMethod is the method of shipping items for export. @@ -77,7 +77,7 @@ type BatchItemProcessorOptions struct { // of ShippingMethod is "async". ShippingMethod ShippingMethod // Workers is the number of workers to process batches. - // The default value of Workers is 1. + // The default value of Workers is 5. Workers int } @@ -223,12 +223,18 @@ func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { } prepared := []traceableItem[T]{} + for _, i := range s[start:end] { - prepared = append(prepared, traceableItem[T]{ - item: i, - errCh: make(chan error, 1), - completedCh: make(chan struct{}, 1), - }) + item := traceableItem[T]{ + item: i, + } + + if bvp.o.ShippingMethod == ShippingMethodSync { + item.errCh = make(chan error, 1) + item.completedCh = make(chan struct{}, 1) + } + + prepared = append(prepared, item) } for _, i := range prepared { From b42ce5cfadd4189bff01f478433cdb4377cb23b6 Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Mon, 17 Jun 2024 16:19:33 +1000 Subject: [PATCH 14/22] fix(deploy/migrations): version and distrubted index --- .../040_canonical_beacon_validators_split.up.sql | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql index 8b43fc36..139f7ed2 100644 --- a/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql +++ b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql @@ -87,9 +87,8 @@ CREATE TABLE default.canonical_beacon_validators_pubkeys_local on cluster '{clus ( updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), -- ensure the first epoch the pubkey was seen is in this table - -- add the updated_date_time to make sure we can always overwrite the data -- 4294967295 = UInt32 max - `version` UInt32 DEFAULT 4294967295 + toUnixTimestamp(updated_date_time) - toUnixTimestamp(epoch_start_date_time) CODEC(DoubleDelta, ZSTD(1)), + `version` UInt32 DEFAULT 4294967295 - toUnixTimestamp(epoch_start_date_time) CODEC(DoubleDelta, ZSTD(1)), event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), @@ -154,15 +153,14 @@ COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implemen COMMENT COLUMN meta_labels 'Labels associated with the event'; CREATE TABLE canonical_beacon_validators_pubkeys on cluster '{cluster}' AS canonical_beacon_validators_pubkeys_local -ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_pubkeys_local, cityHash64(epoch_start_date_time, `index`, meta_network_name)); +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_pubkeys_local, cityHash64(`index`, meta_network_name)); CREATE TABLE default.canonical_beacon_validators_withdrawal_credentials_local on cluster '{cluster}' ( updated_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), -- ensure the first epoch the withdrawal_credentials was seen is in this table - -- add the updated_date_time to make sure we can always overwrite the data -- 4294967295 = UInt32 max - `version` UInt32 DEFAULT 4294967295 + toUnixTimestamp(updated_date_time) - toUnixTimestamp(epoch_start_date_time) CODEC(DoubleDelta, ZSTD(1)), + `version` UInt32 DEFAULT 4294967295 - toUnixTimestamp(epoch_start_date_time) CODEC(DoubleDelta, ZSTD(1)), event_date_time DateTime64(3) CODEC(DoubleDelta, ZSTD(1)), epoch UInt32 CODEC(DoubleDelta, ZSTD(1)), epoch_start_date_time DateTime CODEC(DoubleDelta, ZSTD(1)), @@ -227,4 +225,4 @@ COMMENT COLUMN meta_consensus_implementation 'Ethereum consensus client implemen COMMENT COLUMN meta_labels 'Labels associated with the event'; CREATE TABLE canonical_beacon_validators_withdrawal_credentials on cluster '{cluster}' AS canonical_beacon_validators_withdrawal_credentials_local -ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_withdrawal_credentials_local, cityHash64(epoch_start_date_time, `index`, meta_network_name)); +ENGINE = Distributed('{cluster}', default, canonical_beacon_validators_withdrawal_credentials_local, cityHash64(`index`, meta_network_name)); From 723187b79a4e5fe80fb2e55769578a09b4815351 Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:45:18 +1000 Subject: [PATCH 15/22] fix(deploy/migrations): remove parititons from validator split migration --- .../clickhouse/040_canonical_beacon_validators_split.up.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql index 139f7ed2..d6fbcb0c 100644 --- a/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql +++ b/deploy/migrations/clickhouse/040_canonical_beacon_validators_split.up.sql @@ -117,7 +117,6 @@ CREATE TABLE default.canonical_beacon_validators_pubkeys_local on cluster '{clus meta_consensus_implementation LowCardinality(String), meta_labels Map(String, String) CODEC(ZSTD(1)) ) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', `version`) -PARTITION BY toStartOfMonth(epoch_start_date_time) ORDER BY (index, pubkey, meta_network_name); ALTER TABLE default.canonical_beacon_validators_pubkeys_local ON CLUSTER '{cluster}' @@ -189,7 +188,6 @@ CREATE TABLE default.canonical_beacon_validators_withdrawal_credentials_local on meta_consensus_implementation LowCardinality(String), meta_labels Map(String, String) CODEC(ZSTD(1)) ) Engine = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/{database}/{table}', '{replica}', `version`) -PARTITION BY toStartOfMonth(epoch_start_date_time) ORDER BY (index, withdrawal_credentials, meta_network_name); ALTER TABLE default.canonical_beacon_validators_withdrawal_credentials_local ON CLUSTER '{cluster}' From a340f2488d082af475f25a1052c067459486c3ea Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Wed, 19 Jun 2024 15:11:34 +1000 Subject: [PATCH 16/22] feat(cannon): Preload validators (#337) * feat(cannon): Preload validators * perf: Improve cache expiration time to 5 minutes --- .../beacon/eth/v1/beacon_validators.go | 48 ++++--- pkg/cannon/ethereum/beacon.go | 121 +++++++++++++++++- 2 files changed, 143 insertions(+), 26 deletions(-) diff --git a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go index e536c8da..3c31c804 100644 --- a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go +++ b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go @@ -6,7 +6,6 @@ import ( "time" client "github.com/attestantio/go-eth2-client" - "github.com/attestantio/go-eth2-client/api" apiv1 "github.com/attestantio/go-eth2-client/api/v1" "github.com/attestantio/go-eth2-client/spec/phase0" backoff "github.com/cenkalti/backoff/v4" @@ -155,7 +154,7 @@ func (b *BeaconValidatorsDeriver) run(rctx context.Context) { return nil } - events, err := b.processEpoch(ctx, phase0.Epoch(epochToProcess)) + events, slot, err := b.processEpoch(ctx, phase0.Epoch(epochToProcess)) if err != nil { b.log.WithError(err).WithField("epoch", epochToProcess).Error("Failed to process epoch") @@ -164,6 +163,27 @@ func (b *BeaconValidatorsDeriver) run(rctx context.Context) { return err } + // Be a good citizen and clean up the validator cache for the current epoch + b.beacon.DeleteValidatorsFromCache(xatuethv1.SlotAsString(slot)) + + if !processingFinalizedEpoch { + // If we are backfilling we can prewarm the validator cache with the next epoch's validators + spec, err := b.beacon.Node().Spec() + if err != nil { + return errors.Wrap(err, "failed to fetch spec") + } + + nextSlot := slot - spec.SlotsPerEpoch + if nextSlot > 0 { + b.log.WithFields(logrus.Fields{ + "next_state_id": nextSlot, + "current_state_id": slot, + }).Info("Prewarming validators cache") + + b.beacon.LazyLoadValidators(xatuethv1.SlotAsString(nextSlot)) + } + } + for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { span.SetStatus(codes.Error, err.Error()) @@ -215,37 +235,25 @@ func (b *BeaconValidatorsDeriver) run(rctx context.Context) { } } -func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0.Epoch) ([]*xatu.DecoratedEvent, error) { +func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0.Epoch) ([]*xatu.DecoratedEvent, phase0.Slot, error) { ctx, span := observability.Tracer().Start(ctx, "BeaconValidatorsDeriver.processEpoch", trace.WithAttributes(attribute.Int64("epoch", int64(epoch))), ) defer span.End() - validatorStates, err := b.getValidatorsClient(ctx) - if err != nil { - return nil, errors.Wrap(err, "failed to fetch validator states") - } - spec, err := b.beacon.Node().Spec() if err != nil { - return nil, errors.Wrap(err, "failed to fetch spec") + return nil, 0, errors.Wrap(err, "failed to fetch spec") } boundarySlot := phase0.Slot(uint64(epoch) * uint64(spec.SlotsPerEpoch)) - validatorsResponse, err := validatorStates.Validators(ctx, &api.ValidatorsOpts{ - State: xatuethv1.SlotAsString(boundarySlot), - Common: api.CommonOpts{ - Timeout: 6 * time.Minute, // If we can't fetch 1 epoch of validators within 1 epoch we will never catch up. - }, - }) + validatorsMap, err := b.beacon.GetValidators(ctx, xatuethv1.SlotAsString(boundarySlot)) if err != nil { - return nil, errors.Wrap(err, "failed to fetch validator states") + return nil, 0, errors.Wrap(err, "failed to fetch validator states") } - validatorsMap := validatorsResponse.Data - // Chunk the validators per the configured chunk size chunkSize := b.cfg.ChunkSize @@ -278,13 +286,13 @@ func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0 WithField("epoch", epoch). Error("Failed to create event from validator state") - return nil, err + return nil, 0, err } allEvents = append(allEvents, event) } - return allEvents, nil + return allEvents, boundarySlot, nil } func (b *BeaconValidatorsDeriver) getValidatorsClient(ctx context.Context) (client.ValidatorsProvider, error) { diff --git a/pkg/cannon/ethereum/beacon.go b/pkg/cannon/ethereum/beacon.go index 6237b221..62d0a3f2 100644 --- a/pkg/cannon/ethereum/beacon.go +++ b/pkg/cannon/ethereum/beacon.go @@ -6,7 +6,11 @@ import ( "sync" "time" + client "github.com/attestantio/go-eth2-client" + "github.com/attestantio/go-eth2-client/api" + apiv1 "github.com/attestantio/go-eth2-client/api/v1" "github.com/attestantio/go-eth2-client/spec" + "github.com/attestantio/go-eth2-client/spec/phase0" "github.com/ethpandaops/beacon/pkg/beacon" "github.com/ethpandaops/xatu/pkg/cannon/ethereum/services" "github.com/ethpandaops/xatu/pkg/networks" @@ -36,6 +40,11 @@ type BeaconNode struct { blockCache *ttlcache.Cache[string, *spec.VersionedSignedBeaconBlock] blockPreloadChan chan string blockPreloadSem chan struct{} + + validatorsSfGroup *singleflight.Group + validatorsCache *ttlcache.Cache[string, map[phase0.ValidatorIndex]*apiv1.Validator] + validatorsPreloadChan chan string + validatorsPreloadSem chan struct{} } func NewBeaconNode(ctx context.Context, name string, config *Config, log logrus.FieldLogger) (*BeaconNode, error) { @@ -72,20 +81,28 @@ func NewBeaconNode(ctx context.Context, name string, config *Config, log logrus. // Create a buffered channel (semaphore) to limit the number of concurrent goroutines. sem := make(chan struct{}, config.BlockPreloadWorkers) + validatorsSem := make(chan struct{}, 1) return &BeaconNode{ - config: config, - log: log.WithField("module", "cannon/ethereum/beacon"), - beacon: node, - services: svcs, - sfGroup: &singleflight.Group{}, + config: config, + log: log.WithField("module", "cannon/ethereum/beacon"), + beacon: node, + services: svcs, + sfGroup: &singleflight.Group{}, + validatorsSfGroup: &singleflight.Group{}, blockCache: ttlcache.New( ttlcache.WithTTL[string, *spec.VersionedSignedBeaconBlock](config.BlockCacheTTL.Duration), ttlcache.WithCapacity[string, *spec.VersionedSignedBeaconBlock](config.BlockCacheSize), ), blockPreloadChan: make(chan string, config.BlockPreloadQueueSize), blockPreloadSem: sem, - metrics: NewMetrics(namespace, name), + validatorsCache: ttlcache.New( + ttlcache.WithTTL[string, map[phase0.ValidatorIndex]*apiv1.Validator](5*time.Minute), + ttlcache.WithCapacity[string, map[phase0.ValidatorIndex]*apiv1.Validator](4), + ), + validatorsPreloadChan: make(chan string, 2), + validatorsPreloadSem: validatorsSem, + metrics: NewMetrics(namespace, name), }, nil } @@ -155,6 +172,15 @@ func (b *BeaconNode) Start(ctx context.Context) error { }() } + go func() { + for identifier := range b.validatorsPreloadChan { + b.log.WithField("identifier", identifier).Trace("Preloading validators") + + //nolint:errcheck // We don't care about errors here. + b.GetValidators(ctx, identifier) + } + }() + select { case err := <-errs: return err @@ -307,3 +333,86 @@ func (b *BeaconNode) LazyLoadBeaconBlock(identifier string) { b.blockPreloadChan <- identifier } + +// GetValidators returns a list of validators by its identifier. Validators can be cached internally. +func (b *BeaconNode) GetValidators(ctx context.Context, identifier string) (map[phase0.ValidatorIndex]*apiv1.Validator, error) { + ctx, span := observability.Tracer().Start(ctx, "ethereum.beacon.GetValidators", trace.WithAttributes(attribute.String("identifier", identifier))) + + defer span.End() + + // Check the cache first. + if item := b.validatorsCache.Get(identifier); item != nil { + b.log.WithField("identifier", identifier).Debug("Validator cache hit") + + span.SetAttributes(attribute.Bool("cached", true)) + + return item.Value(), nil + } + + span.SetAttributes(attribute.Bool("cached", false)) + + // Use singleflight to ensure we only make one request for validators at a time. + x, err, shared := b.validatorsSfGroup.Do(identifier, func() (interface{}, error) { + span.AddEvent("Acquiring semaphore...") + + // Acquire a semaphore before proceeding. + b.validatorsPreloadSem <- struct{}{} + defer func() { <-b.validatorsPreloadSem }() + + span.AddEvent("Semaphore acquired. Fetching validators from beacon api...") + + client, err := b.getValidatorsClient(ctx) + if err != nil { + return nil, err + } + + // Not in the cache, so fetch it. + validatorsResponse, err := client.Validators(ctx, &api.ValidatorsOpts{ + State: identifier, + Common: api.CommonOpts{ + Timeout: 6 * time.Minute, // If we can't fetch 1 epoch of validators within 1 epoch we will never catch up. + }, + }) + if err != nil { + return nil, err + } + + validators := validatorsResponse.Data + + span.AddEvent("Validators fetched from beacon node.") + + // Add it to the cache. + b.validatorsCache.Set(identifier, validators, 5*time.Minute) + + return validators, nil + }) + if err != nil { + span.SetStatus(codes.Error, err.Error()) + + return nil, err + } + + span.AddEvent("Validators fetching complete.", trace.WithAttributes(attribute.Bool("shared", shared))) + + return x.(map[phase0.ValidatorIndex]*apiv1.Validator), nil +} + +func (b *BeaconNode) LazyLoadValidators(stateID string) { + if item := b.validatorsCache.Get(stateID); item != nil { + return + } + + b.validatorsPreloadChan <- stateID +} + +func (b *BeaconNode) getValidatorsClient(ctx context.Context) (client.ValidatorsProvider, error) { + if provider, isProvider := b.beacon.Service().(client.ValidatorsProvider); isProvider { + return provider, nil + } + + return nil, errors.New("validator states client not found") +} + +func (b *BeaconNode) DeleteValidatorsFromCache(stateID string) { + b.validatorsCache.Delete(stateID) +} From 8b7b4eaa3f36838e96eef077818adde99c9e9a5d Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Wed, 19 Jun 2024 18:00:55 +1000 Subject: [PATCH 17/22] Update README.md Signed-off-by: Sam Calder-Mason --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index be7affbf..cc60b3bd 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ Ethereum network monitoring with collection clients and a centralized server for data pipelining. + +> [!IMPORTANT] +> EthPandaOps publishes all the data we collect with Xatu. Check it out [here](https://github.com/ethpandaops/xatu-data) + ## Overview Xatu can run in multiple modes. Each mode can be run independently. The following diagram shows the different modes and how they interact with each other and other services. From 5389d6ca81ef51f68b2ef70e9bba81aff59babdb Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Wed, 26 Jun 2024 14:50:54 +1000 Subject: [PATCH 18/22] feat(deploy): add auto purge to zookeeper --- docker-compose.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 9d3c3ae0..5aedbc4c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -85,6 +85,8 @@ services: ZOO_MY_ID: 1 ZOO_4LW_COMMANDS_WHITELIST: "*" ZOO_SERVERS: "server.1=xatu-clickhouse-zookeeper-01:2888:3888;2181 server.2=xatu-clickhouse-zookeeper-02:2888:3888;2181 server.3=xatu-clickhouse-zookeeper-03:2888:3888;2181" + ZOO_AUTOPURGE_PURGEINTERVAL: 1 + ZOO_AUTOPURGE_SNAPRETAINCOUNT: 3 healthcheck: test: ["CMD-SHELL", "echo ruok | nc localhost 2181 | grep -q 'imok'"] interval: 30s @@ -107,6 +109,8 @@ services: ZOO_MY_ID: 2 ZOO_4LW_COMMANDS_WHITELIST: "*" ZOO_SERVERS: "server.1=xatu-clickhouse-zookeeper-01:2888:3888;2181 server.2=xatu-clickhouse-zookeeper-02:2888:3888;2181 server.3=xatu-clickhouse-zookeeper-03:2888:3888;2181" + ZOO_AUTOPURGE_PURGEINTERVAL: 1 + ZOO_AUTOPURGE_SNAPRETAINCOUNT: 3 healthcheck: test: ["CMD-SHELL", "echo ruok | nc localhost 2181 | grep -q 'imok'"] interval: 30s @@ -129,6 +133,8 @@ services: ZOO_MY_ID: 3 ZOO_4LW_COMMANDS_WHITELIST: "*" ZOO_SERVERS: "server.1=xatu-clickhouse-zookeeper-01:2888:3888;2181 server.2=xatu-clickhouse-zookeeper-02:2888:3888;2181 server.3=xatu-clickhouse-zookeeper-03:2888:3888;2181" + ZOO_AUTOPURGE_PURGEINTERVAL: 1 + ZOO_AUTOPURGE_SNAPRETAINCOUNT: 3 healthcheck: test: ["CMD-SHELL", "echo ruok | nc localhost 2181 | grep -q 'imok'"] interval: 30s From f1079979bbaf744d2b1b7bca03b24359cf6e8c50 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Thu, 27 Jun 2024 16:29:29 +1000 Subject: [PATCH 19/22] feat(output-http): Add more compression options (#341) --- deploy/local/docker-compose/xatu-server.yaml | 2 +- pkg/output/http/compression.go | 107 ++++++++++++++++++- pkg/output/http/exporter.go | 41 ++----- 3 files changed, 117 insertions(+), 33 deletions(-) diff --git a/deploy/local/docker-compose/xatu-server.yaml b/deploy/local/docker-compose/xatu-server.yaml index fb08b855..b6959a94 100644 --- a/deploy/local/docker-compose/xatu-server.yaml +++ b/deploy/local/docker-compose/xatu-server.yaml @@ -45,5 +45,5 @@ services: batchTimeout: 3s exportTimeout: 30s maxExportBatchSize: 5000 - compression: none + compression: zstd keepAlive: true diff --git a/pkg/output/http/compression.go b/pkg/output/http/compression.go index cbc7d770..a70b1d86 100644 --- a/pkg/output/http/compression.go +++ b/pkg/output/http/compression.go @@ -1,8 +1,111 @@ package http +import ( + "bytes" + "compress/gzip" + "compress/zlib" + "net/http" + + "github.com/golang/snappy" + "github.com/klauspost/compress/zstd" +) + type CompressionStrategy string var ( - CompressionStrategyNone CompressionStrategy = "none" - CompressionStrategyGzip CompressionStrategy = "gzip" + CompressionStrategyNone CompressionStrategy = "none" + CompressionStrategyGzip CompressionStrategy = "gzip" + CompressionStrategyZstd CompressionStrategy = "zstd" + CompressionStrategyZlib CompressionStrategy = "zlib" + CompressionStrategySnappy CompressionStrategy = "snappy" ) + +type Compressor struct { + Strategy CompressionStrategy +} + +func (c *Compressor) Compress(in *bytes.Buffer) (*bytes.Buffer, error) { + switch c.Strategy { + case CompressionStrategyGzip: + return c.gzipCompress(in) + case CompressionStrategyZstd: + return c.zstdCompress(in) + case CompressionStrategyZlib: + return c.zlibCompress(in) + case CompressionStrategySnappy: + return c.snappyCompress(in) + default: + return in, nil + } +} + +func (c *Compressor) gzipCompress(in *bytes.Buffer) (*bytes.Buffer, error) { + out := &bytes.Buffer{} + g := gzip.NewWriter(out) + + _, err := g.Write(in.Bytes()) + if err != nil { + return out, err + } + + if err := g.Close(); err != nil { + return out, err + } + + return out, nil +} + +func (c *Compressor) zstdCompress(in *bytes.Buffer) (*bytes.Buffer, error) { + out := &bytes.Buffer{} + + z, err := zstd.NewWriter(out) + if err != nil { + return out, err + } + + _, err = z.Write(in.Bytes()) + if err != nil { + return out, err + } + + if err := z.Close(); err != nil { + return out, err + } + + return out, nil +} + +func (c *Compressor) zlibCompress(in *bytes.Buffer) (*bytes.Buffer, error) { + out := &bytes.Buffer{} + z := zlib.NewWriter(out) + + _, err := z.Write(in.Bytes()) + if err != nil { + return out, err + } + + if err := z.Close(); err != nil { + return out, err + } + + return out, nil +} + +func (c *Compressor) snappyCompress(in *bytes.Buffer) (*bytes.Buffer, error) { + compressed := snappy.Encode(nil, in.Bytes()) + + return bytes.NewBuffer(compressed), nil +} + +func (c *Compressor) AddHeaders(req *http.Request) { + switch c.Strategy { + case CompressionStrategyGzip: + req.Header.Set("Content-Encoding", "gzip") + case CompressionStrategyZstd: + req.Header.Set("Content-Encoding", "zstd") + case CompressionStrategyZlib: + req.Header.Set("Content-Encoding", "deflate") + case CompressionStrategySnappy: + req.Header.Set("Content-Encoding", "snappy") + } +} diff --git a/pkg/output/http/exporter.go b/pkg/output/http/exporter.go index 415ca44a..3f1d11fc 100644 --- a/pkg/output/http/exporter.go +++ b/pkg/output/http/exporter.go @@ -2,7 +2,6 @@ package http import ( "bytes" - "compress/gzip" "context" "fmt" "io" @@ -18,10 +17,10 @@ import ( ) type ItemExporter struct { - config *Config - log logrus.FieldLogger - - client *http.Client + config *Config + log logrus.FieldLogger + compressor *Compressor + client *http.Client } func NewItemExporter(name string, config *Config, log logrus.FieldLogger) (ItemExporter, error) { @@ -38,6 +37,7 @@ func NewItemExporter(name string, config *Config, log logrus.FieldLogger) (ItemE Transport: t, Timeout: config.ExportTimeout, }, + compressor: &Compressor{Strategy: config.Compression}, }, nil } @@ -82,15 +82,14 @@ func (e *ItemExporter) sendUpstream(ctx context.Context, items []*xatu.Decorated } buf := bytes.NewBufferString(body) - if e.config.Compression == CompressionStrategyGzip { - compressed, err := e.gzip(buf) - if err != nil { - return err - } - buf = compressed + compressed, err := e.compressor.Compress(buf) + if err != nil { + return err } + buf = compressed + // TODO: check that this also handles processor timeout req, err := http.NewRequestWithContext(ctx, httpMethod, e.config.Address, buf) if err != nil { @@ -103,9 +102,7 @@ func (e *ItemExporter) sendUpstream(ctx context.Context, items []*xatu.Decorated req.Header.Set("Content-Type", "application/x-ndjson") - if e.config.Compression == CompressionStrategyGzip { - req.Header.Set("Content-Encoding", "gzip") - } + e.compressor.AddHeaders(req) rsp, err = e.client.Do(req) if err != nil { @@ -125,19 +122,3 @@ func (e *ItemExporter) sendUpstream(ctx context.Context, items []*xatu.Decorated return nil } - -func (e *ItemExporter) gzip(in *bytes.Buffer) (*bytes.Buffer, error) { - out := &bytes.Buffer{} - g := gzip.NewWriter(out) - - _, err := g.Write(in.Bytes()) - if err != nil { - return out, err - } - - if err := g.Close(); err != nil { - return out, err - } - - return out, nil -} From 033a368bae568cdde9a246da0cec24fd58164fde Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Wed, 3 Jul 2024 15:16:48 +1000 Subject: [PATCH 20/22] Release/extra metrics (#343) * feat(observability): Additional traces * feat: Add observability context merging function * feat: Add metrics and attributes to batch item processor * refactor: Remove unused imports and fields * refactor: Add observability to batch item processor * refactor: Remove redundant code and optimize code structure * feat: Add metrics tracking to batch processor * feat: Add start method for each sink * feat: Add method to start processing in Record * feat: Add worker metrics to BatchItemProcessor * feat: Add handling time histogram with custom buckets * style: Update handling time histogram buckets * feat: Add option to override shipping method for writing items * feat: Add keepalive parameters to gRPC client configuration * fix: Update MaxConnectionAge to 1 minute * refactor: Simplify log field assignment in NewItemExporter * fix: Update MaxConnectionAge to 10 minutes * refactor: Remove unnecessary code and simplify Write function * style: Update maxExportBatchSize to 64 and compression to zstd * style: Remove pointer from Tracing in Config struct * refactor: Remove unused code and variables * refactor: Add duration field to log error with method in RPC * feat: Add github.com/prometheus/client_model v0.6.0 * fix: Correct method name in getAdditionalData function * fix: Update shipping method to async * style: update logging level to "info" --- .../grafana/datasources/datasources.yaml | 9 +- deploy/local/docker-compose/tempo.yaml | 59 ++++++++ deploy/local/docker-compose/xatu-server.yaml | 10 +- docker-compose.yml | 35 +++++ go.mod | 4 +- pkg/cannon/cannon.go | 8 +- .../beacon/eth/v1/beacon_validators.go | 9 -- pkg/observability/config.go | 5 + pkg/observability/context.go | 34 +++++ pkg/observability/tracing.go | 10 +- pkg/output/http/exporter.go | 7 +- pkg/output/http/http.go | 6 + pkg/output/kafka/kafka.go | 2 + pkg/output/stdout/stdout.go | 2 + pkg/output/xatu/exporter.go | 7 + pkg/output/xatu/xatu.go | 2 + pkg/processor/batch.go | 126 ++++++++++++------ pkg/processor/batch_test.go | 108 ++++++++++++++- pkg/processor/metrics.go | 64 ++++++++- pkg/sentry/config.go | 8 ++ .../beacon/eth/v1/events_voluntary_exit.go | 2 +- pkg/sentry/sentry.go | 42 ++++++ pkg/server/config.go | 8 ++ pkg/server/server.go | 54 +++++++- pkg/server/service/coordinator/node/record.go | 2 + .../service/event-ingester/event/event.go | 12 +- pkg/server/service/event-ingester/ingester.go | 6 + 27 files changed, 562 insertions(+), 79 deletions(-) create mode 100644 deploy/local/docker-compose/tempo.yaml create mode 100644 pkg/observability/context.go diff --git a/deploy/local/docker-compose/grafana/datasources/datasources.yaml b/deploy/local/docker-compose/grafana/datasources/datasources.yaml index 91ddd016..65a1a076 100644 --- a/deploy/local/docker-compose/grafana/datasources/datasources.yaml +++ b/deploy/local/docker-compose/grafana/datasources/datasources.yaml @@ -30,4 +30,11 @@ datasources: sslmode: disable tlsSkipVerify: true postgresVersion: 1500 - database: xatu \ No newline at end of file + database: xatu + - name: Tempo + type: tempo + access: proxy + uid: EbPG8fYoz + url: http://tempo:3200 + jsonData: + httpMethod: GET diff --git a/deploy/local/docker-compose/tempo.yaml b/deploy/local/docker-compose/tempo.yaml new file mode 100644 index 00000000..30718cdc --- /dev/null +++ b/deploy/local/docker-compose/tempo.yaml @@ -0,0 +1,59 @@ +stream_over_http_enabled: true +server: + http_listen_port: 3200 + log_level: info + +query_frontend: + search: + duration_slo: 5s + throughput_bytes_slo: 1.073741824e+09 + trace_by_id: + duration_slo: 5s + +distributor: + receivers: # this configuration will listen on all ports and protocols that tempo is capable of. + jaeger: # the receives all come from the OpenTelemetry collector. more configuration information can + protocols: # be found there: https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver + thrift_http: # + grpc: # for a production deployment you should only enable the receivers you need! + thrift_binary: + thrift_compact: + zipkin: + otlp: + protocols: + http: + grpc: + opencensus: + +ingester: + max_block_duration: 5m # cut the headblock when this much time passes. this is being set for demo purposes and should probably be left alone normally + +compactor: + compaction: + block_retention: 15m # overall Tempo trace retention. set for demo purposes + +metrics_generator: + registry: + external_labels: + source: tempo + cluster: docker-compose + storage: + path: /var/tempo/generator/wal + remote_write: + - url: http://prometheus:9090/api/v1/write + send_exemplars: true + traces_storage: + path: /var/tempo/generator/traces + +storage: + trace: + backend: local # backend configuration to use + wal: + path: /var/tempo/wal # where to store the wal locally + local: + path: /var/tempo/blocks + +overrides: + defaults: + metrics_generator: + processors: [service-graphs, span-metrics, local-blocks] # enables metrics generator \ No newline at end of file diff --git a/deploy/local/docker-compose/xatu-server.yaml b/deploy/local/docker-compose/xatu-server.yaml index b6959a94..ed36b26d 100644 --- a/deploy/local/docker-compose/xatu-server.yaml +++ b/deploy/local/docker-compose/xatu-server.yaml @@ -26,6 +26,13 @@ store: geoip: enabled: false +tracing: + enabled: true + endpoint: tempo:4318 + insecure: true + sampling: + rate: 0.1 + services: coordinator: enabled: true # requires persistence to be enabled @@ -44,6 +51,7 @@ services: maxQueueSize: 102400 batchTimeout: 3s exportTimeout: 30s - maxExportBatchSize: 5000 + maxExportBatchSize: 64 compression: zstd keepAlive: true + workers: 50 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 5aedbc4c..b7708728 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -474,6 +474,39 @@ services: condition: service_healthy networks: - xatu-net + tempo-init: + image: &tempoImage grafana/tempo:latest + user: root + entrypoint: + - "chown" + - "10001:10001" + - "/var/tempo" + volumes: + - tempo-data:/var/tempo + + tempo: + image: *tempoImage + container_name: xatu-tempo + command: [ "-config.file=/etc/tempo.yaml" ] + volumes: + - ./deploy/local/docker-compose/tempo.yaml:/etc/tempo.yaml + - tempo-data:/var/tempo + ports: + - "14268:14268" # jaeger ingest + - "3200:3200" # tempo + - "9095:9095" # tempo grpc + - "4317:4317" # otlp grpc + - "4318:4318" # otlp http + - "9411:9411" # zipkin + networks: + - xatu-net + depends_on: + - tempo-init + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3200/ready"] + interval: 5s + timeout: 5s + retries: 5 networks: xatu-net: @@ -506,3 +539,5 @@ volumes: driver: local prometheus-data: driver: local + tempo-data: + driver: local diff --git a/go.mod b/go.mod index e2d82c5a..5671e3fb 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/huandu/go-sqlbuilder v1.25.0 github.com/jellydator/ttlcache/v3 v3.2.0 + github.com/klauspost/compress v1.17.7 github.com/lib/pq v1.10.9 github.com/libp2p/go-libp2p v0.33.1 github.com/mitchellh/hashstructure/v2 v2.0.2 @@ -31,6 +32,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/probe-lab/hermes v0.0.0-20240327153144-a2528356b4f7 github.com/prometheus/client_golang v1.19.0 + github.com/prometheus/client_model v0.6.0 github.com/prysmaticlabs/prysm/v5 v5.0.2 github.com/r3labs/sse/v2 v2.10.0 github.com/redis/go-redis/v9 v9.5.1 @@ -143,7 +145,6 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 // indirect - github.com/klauspost/compress v1.17.7 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -192,7 +193,6 @@ require ( github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/prysmaticlabs/fastssz v0.0.0-20221107182844-78142813af44 // indirect diff --git a/pkg/cannon/cannon.go b/pkg/cannon/cannon.go index 261bb0fd..74bf4e5f 100644 --- a/pkg/cannon/cannon.go +++ b/pkg/cannon/cannon.go @@ -33,6 +33,7 @@ import ( perrors "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel/sdk/trace" ) type Cannon struct { @@ -108,9 +109,14 @@ func (c *Cannon) Start(ctx context.Context) error { return perrors.Wrap(err, "failed to create tracing resource") } + opts := []trace.TracerProviderOption{ + trace.WithSampler(trace.ParentBased(trace.TraceIDRatioBased(c.Config.Tracing.Sampling.Rate))), + } + tracer, err := observability.NewHTTPTraceProvider(ctx, res, - c.Config.Tracing.AsOTelOpts()..., + c.Config.Tracing.AsOTelOpts(), + opts..., ) if err != nil { return perrors.Wrap(err, "failed to create tracing provider") diff --git a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go index 3c31c804..6dfbbd96 100644 --- a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go +++ b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - client "github.com/attestantio/go-eth2-client" apiv1 "github.com/attestantio/go-eth2-client/api/v1" "github.com/attestantio/go-eth2-client/spec/phase0" backoff "github.com/cenkalti/backoff/v4" @@ -295,14 +294,6 @@ func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0 return allEvents, boundarySlot, nil } -func (b *BeaconValidatorsDeriver) getValidatorsClient(ctx context.Context) (client.ValidatorsProvider, error) { - if provider, isProvider := b.beacon.Node().Service().(client.ValidatorsProvider); isProvider { - return provider, nil - } - - return nil, errors.New("validator states client not found") -} - func (b *BeaconValidatorsDeriver) createEventFromValidators(ctx context.Context, validators []*apiv1.Validator, epoch phase0.Epoch) (*xatu.DecoratedEvent, error) { metadata, ok := proto.Clone(b.clientMeta).(*xatu.ClientMeta) if !ok { diff --git a/pkg/observability/config.go b/pkg/observability/config.go index ccaf2ce8..ef5ea684 100644 --- a/pkg/observability/config.go +++ b/pkg/observability/config.go @@ -7,6 +7,10 @@ import ( "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" ) +type SamplingConfig struct { + Rate float64 `yaml:"rate" default:"0.01"` +} + type TracingConfig struct { Enabled bool `yaml:"enabled" default:"false"` Endpoint string `yaml:"endpoint" default:""` @@ -17,6 +21,7 @@ type TracingConfig struct { Insecure bool `yaml:"insecure" default:"false"` Retry *otlptracehttp.RetryConfig `yaml:"retry"` TLS *tls.Config `yaml:"tls"` + Sampling SamplingConfig `yaml:"sampling"` } func (t *TracingConfig) Validate() error { diff --git a/pkg/observability/context.go b/pkg/observability/context.go new file mode 100644 index 00000000..0b858c1e --- /dev/null +++ b/pkg/observability/context.go @@ -0,0 +1,34 @@ +package observability + +import ( + "context" + + "go.opentelemetry.io/otel/trace" +) + +func MergeContexts(parent context.Context, contexts ...context.Context) context.Context { + spanContexts := make([]trace.SpanContext, 0, len(contexts)) + + for _, ctx := range contexts { + if spanContext := trace.SpanContextFromContext(ctx); spanContext.IsValid() { + spanContexts = append(spanContexts, spanContext) + } + } + + if len(spanContexts) == 0 { + return parent + } + + // Create a new span that links to all the original spans + tracer := Tracer() + + links := make([]trace.Link, len(spanContexts)) + for i, spanContext := range spanContexts { + links[i] = trace.Link{SpanContext: spanContext} + } + + ctx, span := tracer.Start(parent, "Observability.MergedSpan", trace.WithLinks(links...)) + defer span.End() + + return ctx +} diff --git a/pkg/observability/tracing.go b/pkg/observability/tracing.go index d2193dd8..596858b2 100644 --- a/pkg/observability/tracing.go +++ b/pkg/observability/tracing.go @@ -54,18 +54,20 @@ func NewResource(serviceName, serviceVersion string) (*resource.Resource, error) ) } -func NewHTTPTraceProvider(ctx context.Context, res *resource.Resource, opts ...otlptracehttp.Option) (*trace.TracerProvider, error) { - client := otlptracehttp.NewClient(opts...) +func NewHTTPTraceProvider(ctx context.Context, res *resource.Resource, httpOpts []otlptracehttp.Option, opts ...trace.TracerProviderOption) (*trace.TracerProvider, error) { + client := otlptracehttp.NewClient(httpOpts...) exporter, err := otlptrace.New(ctx, client) if err != nil { return nil, fmt.Errorf("creating OTLP trace exporter: %w", err) } - traceProvider := trace.NewTracerProvider( + options := append([]trace.TracerProviderOption{ trace.WithBatcher(exporter), trace.WithResource(res), - ) + }, opts...) + + traceProvider := trace.NewTracerProvider(options...) return traceProvider, nil } diff --git a/pkg/output/http/exporter.go b/pkg/output/http/exporter.go index 3f1d11fc..247b5d79 100644 --- a/pkg/output/http/exporter.go +++ b/pkg/output/http/exporter.go @@ -24,14 +24,19 @@ type ItemExporter struct { } func NewItemExporter(name string, config *Config, log logrus.FieldLogger) (ItemExporter, error) { + log = log.WithField("output_name", name).WithField("output_type", SinkType) + t := http.DefaultTransport.(*http.Transport).Clone() + if config.KeepAlive != nil && !*config.KeepAlive { + log.WithField("keep_alive", *config.KeepAlive).Warn("Disabling keep-alives") + t.DisableKeepAlives = true } return ItemExporter{ config: config, - log: log.WithField("output_name", name).WithField("output_type", SinkType), + log: log, client: &http.Client{ Transport: t, diff --git a/pkg/output/http/http.go b/pkg/output/http/http.go index 0b40fc33..f015f3c8 100644 --- a/pkg/output/http/http.go +++ b/pkg/output/http/http.go @@ -66,6 +66,8 @@ func (h *HTTP) Type() string { } func (h *HTTP) Start(ctx context.Context) error { + h.proc.Start(ctx) + return nil } @@ -104,5 +106,9 @@ func (h *HTTP) HandleNewDecoratedEvents(ctx context.Context, events []*xatu.Deco } } + if len(filtered) == 0 { + return nil + } + return h.proc.Write(ctx, filtered) } diff --git a/pkg/output/kafka/kafka.go b/pkg/output/kafka/kafka.go index 7db4becb..fb2a0907 100644 --- a/pkg/output/kafka/kafka.go +++ b/pkg/output/kafka/kafka.go @@ -66,6 +66,8 @@ func (h *Kafka) Type() string { } func (h *Kafka) Start(ctx context.Context) error { + h.proc.Start(ctx) + return nil } diff --git a/pkg/output/stdout/stdout.go b/pkg/output/stdout/stdout.go index b1c2e376..7db813ad 100644 --- a/pkg/output/stdout/stdout.go +++ b/pkg/output/stdout/stdout.go @@ -66,6 +66,8 @@ func (h *StdOut) Type() string { } func (h *StdOut) Start(ctx context.Context) error { + h.proc.Start(ctx) + return nil } diff --git a/pkg/output/xatu/exporter.go b/pkg/output/xatu/exporter.go index 99b22d53..a2229dd9 100644 --- a/pkg/output/xatu/exporter.go +++ b/pkg/output/xatu/exporter.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net" + "time" "github.com/ethpandaops/xatu/pkg/observability" pb "github.com/ethpandaops/xatu/pkg/proto/xatu" @@ -18,6 +19,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/encoding/gzip" + "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" ) @@ -33,6 +35,11 @@ func NewItemExporter(name string, config *Config, log logrus.FieldLogger) (ItemE opts := []grpc.DialOption{ grpc.WithChainUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor, retry.UnaryClientInterceptor()), grpc.WithChainStreamInterceptor(grpc_prometheus.StreamClientInterceptor, retry.StreamClientInterceptor()), + grpc.WithKeepaliveParams(keepalive.ClientParameters{ + Time: 10 * time.Second, + Timeout: 30 * time.Second, + PermitWithoutStream: true, + }), } if config.TLS { diff --git a/pkg/output/xatu/xatu.go b/pkg/output/xatu/xatu.go index 6c6dd801..20a0628f 100644 --- a/pkg/output/xatu/xatu.go +++ b/pkg/output/xatu/xatu.go @@ -70,6 +70,8 @@ func (h *Xatu) Name() string { } func (h *Xatu) Start(ctx context.Context) error { + h.proc.Start(ctx) + return nil } diff --git a/pkg/processor/batch.go b/pkg/processor/batch.go index 1e5ad380..bcd1a2b6 100644 --- a/pkg/processor/batch.go +++ b/pkg/processor/batch.go @@ -6,11 +6,11 @@ import ( "fmt" "runtime" "sync" - "sync/atomic" "time" "github.com/ethpandaops/xatu/pkg/observability" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel/attribute" ) // ItemExporter is an interface for exporting items. @@ -79,6 +79,8 @@ type BatchItemProcessorOptions struct { // Workers is the number of workers to process batches. // The default value of Workers is 5. Workers int + // Metrics is the metrics instance to use. + Metrics *Metrics } func (o *BatchItemProcessorOptions) Validate() error { @@ -104,21 +106,21 @@ type BatchItemProcessor[T any] struct { log logrus.FieldLogger - queue chan traceableItem[T] - batchCh chan []traceableItem[T] - dropped uint32 + queue chan *TraceableItem[T] + batchCh chan []*TraceableItem[T] name string - metrics *Metrics - timer *time.Timer stopWait sync.WaitGroup stopOnce sync.Once stopCh chan struct{} stopWorkersCh chan struct{} + + // Metrics + metrics *Metrics } -type traceableItem[T any] struct { +type TraceableItem[T any] struct { item *T errCh chan error completedCh chan struct{} @@ -153,7 +155,10 @@ func NewBatchItemProcessor[T any](exporter ItemExporter[T], name string, log log return nil, fmt.Errorf("invalid batch item processor options: %w: %s", err, name) } - metrics := DefaultMetrics + metrics := o.Metrics + if metrics == nil { + metrics = DefaultMetrics + } bvp := BatchItemProcessor[T]{ e: exporter, @@ -162,8 +167,8 @@ func NewBatchItemProcessor[T any](exporter ItemExporter[T], name string, log log name: name, metrics: metrics, timer: time.NewTimer(o.BatchTimeout), - queue: make(chan traceableItem[T], o.MaxQueueSize), - batchCh: make(chan []traceableItem[T], o.Workers), + queue: make(chan *TraceableItem[T], o.MaxQueueSize), + batchCh: make(chan []*TraceableItem[T], o.Workers), stopCh: make(chan struct{}), stopWorkersCh: make(chan struct{}), } @@ -179,21 +184,25 @@ func NewBatchItemProcessor[T any](exporter ItemExporter[T], name string, log log }, ).Info("Batch item processor initialized") - bvp.stopWait.Add(o.Workers) + return &bvp, nil +} + +func (bvp *BatchItemProcessor[T]) Start(ctx context.Context) { + bvp.stopWait.Add(bvp.o.Workers) + + bvp.metrics.SetWorkerCount(bvp.name, float64(bvp.o.Workers)) - for i := 0; i < o.Workers; i++ { + for i := 0; i < bvp.o.Workers; i++ { go func(num int) { defer bvp.stopWait.Done() - bvp.worker(context.Background(), num) + bvp.worker(ctx, num) }(i) } go func() { - bvp.batchBuilder(context.Background()) + bvp.batchBuilder(ctx) bvp.log.Info("Batch builder exited") }() - - return &bvp, nil } // Write writes items to the queue. If the Processor is configured to use @@ -205,8 +214,6 @@ func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { _, span := observability.Tracer().Start(ctx, "BatchItemProcessor.Write") defer span.End() - bvp.metrics.SetItemsQueued(bvp.name, float64(len(bvp.queue))) - if bvp.e == nil { return errors.New("exporter is nil") } @@ -222,10 +229,10 @@ func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { end = len(s) } - prepared := []traceableItem[T]{} + prepared := []*TraceableItem[T]{} for _, i := range s[start:end] { - item := traceableItem[T]{ + item := &TraceableItem[T]{ item: i, } @@ -244,17 +251,8 @@ func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { } if bvp.o.ShippingMethod == ShippingMethodSync { - for _, item := range prepared { - select { - case err := <-item.errCh: - if err != nil { - return err - } - case <-item.completedCh: - continue - case <-ctx.Done(): - return ctx.Err() - } + if err := bvp.waitForBatchCompletion(ctx, prepared); err != nil { + return err } } } @@ -263,7 +261,20 @@ func (bvp *BatchItemProcessor[T]) Write(ctx context.Context, s []*T) error { } // exportWithTimeout exports items with a timeout. -func (bvp *BatchItemProcessor[T]) exportWithTimeout(ctx context.Context, itemsBatch []traceableItem[T]) error { +func (bvp *BatchItemProcessor[T]) exportWithTimeout(ctx context.Context, itemsBatch []*TraceableItem[T]) error { + if len(itemsBatch) == 0 { + return nil + } + + bvp.metrics.IncWorkerExportInProgress(bvp.name) + defer bvp.metrics.DecWorkerExportInProgress(bvp.name) + + _, span := observability.Tracer().Start(ctx, "BatchItemProcessor.exportWithTimeout") + defer span.End() + + span.SetAttributes(attribute.String("processor", bvp.name)) + span.SetAttributes(attribute.Int("batch_size", len(itemsBatch))) + if bvp.o.ExportTimeout > 0 { var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, bvp.o.ExportTimeout) @@ -276,11 +287,19 @@ func (bvp *BatchItemProcessor[T]) exportWithTimeout(ctx context.Context, itemsBa items[i] = item.item } + startTime := time.Now() + err := bvp.e.ExportItems(ctx, items) + + duration := time.Since(startTime) + + bvp.metrics.ObserveExportDuration(bvp.name, duration) + if err != nil { bvp.metrics.IncItemsFailedBy(bvp.name, float64(len(itemsBatch))) } else { bvp.metrics.IncItemsExportedBy(bvp.name, float64(len(itemsBatch))) + bvp.metrics.ObserveBatchSize(bvp.name, float64(len(itemsBatch))) } for _, item := range itemsBatch { @@ -371,10 +390,33 @@ func WithWorkers(workers int) BatchItemProcessorOption { } } +func WithMetrics(metrics *Metrics) BatchItemProcessorOption { + return func(o *BatchItemProcessorOptions) { + o.Metrics = metrics + } +} + +func (bvp *BatchItemProcessor[T]) waitForBatchCompletion(ctx context.Context, items []*TraceableItem[T]) error { + for _, item := range items { + select { + case err := <-item.errCh: + if err != nil { + return err + } + case <-item.completedCh: + continue + case <-ctx.Done(): + return ctx.Err() + } + } + + return nil +} + func (bvp *BatchItemProcessor[T]) batchBuilder(ctx context.Context) { log := bvp.log.WithField("module", "batch_builder") - var batch []traceableItem[T] + var batch []*TraceableItem[T] for { select { @@ -388,28 +430,25 @@ func (bvp *BatchItemProcessor[T]) batchBuilder(ctx context.Context) { if len(batch) >= bvp.o.MaxExportBatchSize { bvp.sendBatch(batch, "max_export_batch_size") - batch = []traceableItem[T]{} + batch = []*TraceableItem[T]{} } case <-bvp.timer.C: if len(batch) > 0 { bvp.sendBatch(batch, "timer") - batch = []traceableItem[T]{} + batch = []*TraceableItem[T]{} } else { bvp.timer.Reset(bvp.o.BatchTimeout) } } } } -func (bvp *BatchItemProcessor[T]) sendBatch(batch []traceableItem[T], reason string) { +func (bvp *BatchItemProcessor[T]) sendBatch(batch []*TraceableItem[T], reason string) { log := bvp.log.WithField("reason", reason) log.Tracef("Creating a batch of %d items", len(batch)) - batchCopy := make([]traceableItem[T], len(batch)) - copy(batchCopy, batch) - log.Tracef("Batch items copied") - bvp.batchCh <- batchCopy + bvp.batchCh <- batch log.Tracef("Batch sent to batch channel") } @@ -429,6 +468,8 @@ func (bvp *BatchItemProcessor[T]) worker(ctx context.Context, number int) { if err := bvp.exportWithTimeout(ctx, batch); err != nil { bvp.log.WithError(err).Error("failed to export items") } + + bvp.metrics.SetItemsQueued(bvp.name, float64(len(bvp.queue))) } } } @@ -464,7 +505,7 @@ func recoverSendOnClosedChan() { panic(x) } -func (bvp *BatchItemProcessor[T]) enqueueOrDrop(ctx context.Context, item traceableItem[T]) error { +func (bvp *BatchItemProcessor[T]) enqueueOrDrop(ctx context.Context, item *TraceableItem[T]) error { // This ensures the bvp.queue<- below does not panic as the // processor shuts down. defer recoverSendOnClosedChan() @@ -477,9 +518,10 @@ func (bvp *BatchItemProcessor[T]) enqueueOrDrop(ctx context.Context, item tracea select { case bvp.queue <- item: + bvp.metrics.SetItemsQueued(bvp.name, float64(len(bvp.queue))) + return nil default: - atomic.AddUint32(&bvp.dropped, 1) bvp.metrics.IncItemsDroppedBy(bvp.name, float64(1)) } diff --git a/pkg/processor/batch_test.go b/pkg/processor/batch_test.go index 82e49faa..98e58ccf 100644 --- a/pkg/processor/batch_test.go +++ b/pkg/processor/batch_test.go @@ -16,6 +16,8 @@ import ( "testing" "time" + "github.com/prometheus/client_golang/prometheus" + dto "github.com/prometheus/client_model/go" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -106,6 +108,8 @@ func TestNewBatchItemProcessorWithNilExporter(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](nil, "processor", nullLogger()) require.NoError(t, err) + bsp.Start(context.Background()) + err = bsp.Write(context.Background(), []*TestItem{{ name: "test", }}) @@ -235,6 +239,8 @@ func TestBatchItemProcessorExportTimeout(t *testing.T) { ) require.NoError(t, err) + bvp.Start(context.Background()) + if err := bvp.Write(context.Background(), []*TestItem{{ name: "test", }}); err != nil { @@ -249,7 +255,14 @@ func TestBatchItemProcessorExportTimeout(t *testing.T) { } func createAndRegisterBatchSP[T TestItem](options []BatchItemProcessorOption, te *testBatchExporter[T]) (*BatchItemProcessor[T], error) { - return NewBatchItemProcessor[T](te, "processor", nullLogger(), options...) + bvp, err := NewBatchItemProcessor[T](te, "processor", nullLogger(), options...) + if err != nil { + return nil, err + } + + bvp.Start(context.Background()) + + return bvp, nil } func TestBatchItemProcessorShutdown(t *testing.T) { @@ -257,6 +270,8 @@ func TestBatchItemProcessorShutdown(t *testing.T) { bvp, err := NewBatchItemProcessor[TestItem](&bp, "processor", nullLogger()) require.NoError(t, err) + bvp.Start(context.Background()) + err = bvp.Shutdown(context.Background()) if err != nil { t.Error("Error shutting the BatchItemProcessor down\n") @@ -279,6 +294,8 @@ func TestBatchItemProcessorDrainQueue(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&be, "processor", log, WithMaxExportBatchSize(5), WithBatchTimeout(1*time.Second), WithWorkers(2), WithShippingMethod(ShippingMethodAsync)) require.NoError(t, err) + bsp.Start(context.Background()) + itemsToExport := 5000 for i := 0; i < itemsToExport; i++ { @@ -299,6 +316,8 @@ func TestBatchItemProcessorPostShutdown(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&be, "processor", nullLogger(), WithMaxExportBatchSize(50), WithBatchTimeout(5*time.Millisecond)) require.NoError(t, err) + bsp.Start(context.Background()) + for i := 0; i < 60; i++ { if err := bsp.Write(context.Background(), []*TestItem{{ name: strconv.Itoa(i), @@ -341,6 +360,8 @@ func TestMultipleWorkersConsumeConcurrently(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithBatchTimeout(5*time.Minute), WithWorkers(20)) require.NoError(t, err) + bsp.Start(context.Background()) + itemsToExport := 100 for i := 0; i < itemsToExport; i++ { @@ -361,6 +382,8 @@ func TestWorkersProcessBatches(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5)) require.NoError(t, err) + bsp.Start(context.Background()) + itemsToExport := 50 for i := 0; i < itemsToExport; i++ { @@ -385,6 +408,8 @@ func TestDrainQueueWithMultipleWorkers(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5)) require.NoError(t, err) + bsp.Start(context.Background()) + itemsToExport := 100 for i := 0; i < itemsToExport; i++ { @@ -408,6 +433,8 @@ func TestBatchItemProcessorTimerFunctionality(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(50), WithBatchTimeout(batchTimeout), WithWorkers(5)) require.NoError(t, err) + bsp.Start(context.Background()) + // Add items less than the max batch size itemsToExport := 25 @@ -451,6 +478,8 @@ func TestBatchItemProcessorTimeout(t *testing.T) { t.Fatalf("failed to create batch processor: %v", err) } + bsp.Start(context.Background()) + if got, want := bsp.Write(ctx, []*TestItem{{}}), context.DeadlineExceeded; !errors.Is(got, want) { t.Errorf("expected %q error, got %v", want, got) } @@ -470,6 +499,8 @@ func TestBatchItemProcessorCancellation(t *testing.T) { t.Fatalf("failed to create batch processor: %v", err) } + bsp.Start(context.Background()) + if got, want := bsp.Write(ctx, []*TestItem{{}}), context.Canceled; !errors.Is(got, want) { t.Errorf("expected %q error, got %v", want, got) } @@ -498,6 +529,8 @@ func TestBatchItemProcessorWithSyncErrorExporter(t *testing.T) { t.Fatalf("failed to create batch processor: %v", err) } + bsp.Start(context.Background()) + err = bsp.Write(context.Background(), []*TestItem{{name: "test"}}) if err == nil { t.Errorf("Expected write to fail") @@ -526,6 +559,8 @@ func TestBatchItemProcessorSyncShipping(t *testing.T) { ) require.NoError(t, err) + bsp.Start(context.Background()) + items := make([]*TestItem, itemsToExport) for i := 0; i < itemsToExport; i++ { items[i] = &TestItem{name: strconv.Itoa(i)} @@ -564,6 +599,8 @@ func TestBatchItemProcessorExportCancellationOnFailure(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(maxBatchSize), WithWorkers(workers), WithShippingMethod(ShippingMethodSync)) require.NoError(t, err) + bsp.Start(context.Background()) + items := make([]*TestItem, itemsToExport) for i := 0; i < itemsToExport; i++ { items[i] = &TestItem{name: strconv.Itoa(i)} @@ -625,6 +662,8 @@ func TestBatchItemProcessorExportWithTimeout(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5), WithExportTimeout(1*time.Second), WithShippingMethod(ShippingMethodSync)) require.NoError(t, err) + bsp.Start(context.Background()) + itemsToExport := 10 items := make([]*TestItem, itemsToExport) @@ -642,6 +681,8 @@ func TestBatchItemProcessorWithBatchTimeout(t *testing.T) { bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5), WithBatchTimeout(1*time.Second)) require.NoError(t, err) + bsp.Start(context.Background()) + itemsToExport := 5 items := make([]*TestItem, itemsToExport) @@ -658,13 +699,61 @@ func TestBatchItemProcessorWithBatchTimeout(t *testing.T) { require.Equal(t, itemsToExport, te.len(), "Expected all items to be exported after batch timeout") } +func TestBatchItemProcessorDrainOnShutdownAfterContextCancellation(t *testing.T) { + te := testBatchExporter[TestItem]{} + bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithMaxExportBatchSize(10), WithWorkers(5), WithBatchTimeout(1*time.Second)) + require.NoError(t, err) + + // Create a cancellable context for Start + ctx, cancel := context.WithCancel(context.Background()) + bsp.Start(ctx) + + itemsToExport := 50 + items := make([]*TestItem, itemsToExport) + + for i := 0; i < itemsToExport; i++ { + items[i] = &TestItem{name: strconv.Itoa(i)} + } + + // Write items to the processor + err = bsp.Write(context.Background(), items) + require.NoError(t, err) + + // Cancel the context immediately after writing + cancel() + + // Allow some time for the cancellation to propagate + time.Sleep(100 * time.Millisecond) + + // Shutdown the processor + err = bsp.Shutdown(context.Background()) + require.NoError(t, err) + + // Check if any items were exported + require.Greater(t, itemsToExport, 0, "No items should have been exported on shutdown") +} + func TestBatchItemProcessorQueueSize(t *testing.T) { te := indefiniteExporter[TestItem]{} + + metrics := NewMetrics("test") maxQueueSize := 5 - bsp, err := NewBatchItemProcessor[TestItem](&te, "processor", nullLogger(), WithBatchTimeout(10*time.Minute), WithMaxQueueSize(maxQueueSize), WithMaxExportBatchSize(maxQueueSize), WithWorkers(1), WithShippingMethod(ShippingMethodAsync)) + bsp, err := NewBatchItemProcessor[TestItem]( + &te, + "processor", + nullLogger(), + WithBatchTimeout(10*time.Minute), + WithMaxQueueSize(maxQueueSize), + WithMaxExportBatchSize(maxQueueSize), + WithWorkers(1), + WithShippingMethod(ShippingMethodAsync), + WithMetrics(metrics), + ) require.NoError(t, err) - itemsToExport := 10 + bsp.Start(context.Background()) + + itemsToExport := 5 items := make([]*TestItem, itemsToExport) for i := 0; i < itemsToExport; i++ { @@ -673,7 +762,7 @@ func TestBatchItemProcessorQueueSize(t *testing.T) { // Write items to the processor for i := 0; i < itemsToExport; i++ { - err := bsp.Write(context.Background(), []*TestItem{items[i]}) + err = bsp.Write(context.Background(), []*TestItem{items[i]}) if i < maxQueueSize { require.NoError(t, err, "Expected no error for item %d", i) } else { @@ -683,6 +772,15 @@ func TestBatchItemProcessorQueueSize(t *testing.T) { // Ensure that the queue size is respected require.Equal(t, maxQueueSize, len(bsp.queue), "Queue size should be equal to maxQueueSize") + // Ensure that the dropped count is correct - require.Equal(t, uint32(itemsToExport-maxQueueSize), bsp.dropped, "Dropped count should be equal to the number of items that exceeded the queue size") + counter, err := bsp.metrics.itemsDropped.GetMetricWith(prometheus.Labels{"processor": "processor"}) + require.NoError(t, err) + + metric := &dto.Metric{} + + err = counter.Write(metric) + require.NoError(t, err) + + require.Equal(t, float64(itemsToExport-maxQueueSize), *metric.Counter.Value, "Dropped count should be equal to the number of items that exceeded the queue size") } diff --git a/pkg/processor/metrics.go b/pkg/processor/metrics.go index 82ff8947..e882904c 100644 --- a/pkg/processor/metrics.go +++ b/pkg/processor/metrics.go @@ -1,16 +1,24 @@ package processor -import "github.com/prometheus/client_golang/prometheus" +import ( + "time" + + "github.com/prometheus/client_golang/prometheus" +) var ( DefaultMetrics = NewMetrics("xatu") ) type Metrics struct { - itemsQueued *prometheus.GaugeVec - itemsDropped *prometheus.CounterVec - itemsFailed *prometheus.CounterVec - itemsExported *prometheus.CounterVec + itemsQueued *prometheus.GaugeVec + itemsDropped *prometheus.CounterVec + itemsFailed *prometheus.CounterVec + itemsExported *prometheus.CounterVec + exportDuration *prometheus.HistogramVec + batchSize *prometheus.HistogramVec + workerCount *prometheus.GaugeVec + workerExportInProgress *prometheus.GaugeVec } func NewMetrics(namespace string) *Metrics { @@ -41,12 +49,38 @@ func NewMetrics(namespace string) *Metrics { Namespace: namespace, Help: "Number of items exported", }, []string{"processor"}), + exportDuration: prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Name: "export_duration_seconds", + Namespace: namespace, + Help: "Duration of export operations in seconds", + Buckets: prometheus.ExponentialBuckets(0.1, 2, 10), + }, []string{"processor"}), + batchSize: prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Name: "batch_size", + Namespace: namespace, + Help: "Size of processed batches", + Buckets: prometheus.ExponentialBucketsRange(1, 50000, 10), + }, []string{"processor"}), + workerCount: prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "worker_count", + Namespace: namespace, + Help: "Number of active workers", + }, []string{"processor"}), + workerExportInProgress: prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "worker_export_in_progress", + Namespace: namespace, + Help: "Number of workers currently exporting", + }, []string{"processor"}), } prometheus.MustRegister(m.itemsQueued) prometheus.MustRegister(m.itemsDropped) prometheus.MustRegister(m.itemsFailed) prometheus.MustRegister(m.itemsExported) + prometheus.MustRegister(m.exportDuration) + prometheus.MustRegister(m.batchSize) + prometheus.MustRegister(m.workerCount) + prometheus.MustRegister(m.workerExportInProgress) return m } @@ -66,3 +100,23 @@ func (m *Metrics) IncItemsExportedBy(name string, count float64) { func (m *Metrics) IncItemsFailedBy(name string, count float64) { m.itemsFailed.WithLabelValues(name).Add(count) } + +func (m *Metrics) ObserveExportDuration(name string, duration time.Duration) { + m.exportDuration.WithLabelValues(name).Observe(duration.Seconds()) +} + +func (m *Metrics) ObserveBatchSize(name string, size float64) { + m.batchSize.WithLabelValues(name).Observe(size) +} + +func (m *Metrics) SetWorkerCount(name string, count float64) { + m.workerCount.WithLabelValues(name).Set(count) +} + +func (m *Metrics) IncWorkerExportInProgress(name string) { + m.workerExportInProgress.WithLabelValues(name).Inc() +} + +func (m *Metrics) DecWorkerExportInProgress(name string) { + m.workerExportInProgress.WithLabelValues(name).Dec() +} diff --git a/pkg/sentry/config.go b/pkg/sentry/config.go index 3ff516d9..0cae5835 100644 --- a/pkg/sentry/config.go +++ b/pkg/sentry/config.go @@ -6,6 +6,7 @@ import ( "time" "github.com/ethpandaops/beacon/pkg/human" + "github.com/ethpandaops/xatu/pkg/observability" "github.com/ethpandaops/xatu/pkg/output" "github.com/ethpandaops/xatu/pkg/processor" "github.com/ethpandaops/xatu/pkg/sentry/ethereum" @@ -43,6 +44,9 @@ type Config struct { // ProposerDuty configuration ProposerDuty *ProposerDutyConfig `yaml:"proposerDuty" default:"{'enabled': true}"` + + // Tracing configuration + Tracing observability.TracingConfig `yaml:"tracing"` } func (c *Config) Validate() error { @@ -64,6 +68,10 @@ func (c *Config) Validate() error { return fmt.Errorf("invalid forkChoice config: %w", err) } + if err := c.Tracing.Validate(); err != nil { + return fmt.Errorf("invalid tracing config: %w", err) + } + return nil } diff --git a/pkg/sentry/event/beacon/eth/v1/events_voluntary_exit.go b/pkg/sentry/event/beacon/eth/v1/events_voluntary_exit.go index 9d7f6251..4b282042 100644 --- a/pkg/sentry/event/beacon/eth/v1/events_voluntary_exit.go +++ b/pkg/sentry/event/beacon/eth/v1/events_voluntary_exit.go @@ -102,7 +102,7 @@ func (e *EventsVoluntaryExit) ShouldIgnore(ctx context.Context) (bool, error) { func (e *EventsVoluntaryExit) getAdditionalData(_ context.Context) (*xatu.ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data, error) { extra := &xatu.ClientMeta_AdditionalEthV1EventsVoluntaryExitV2Data{} - epoch := e.beacon.Metadata().Wallclock().Epochs().FromSlot(uint64(e.event.Message.Epoch)) + epoch := e.beacon.Metadata().Wallclock().Epochs().FromNumber(uint64(e.event.Message.Epoch)) extra.Epoch = &xatu.EpochV2{ Number: &wrapperspb.UInt64Value{Value: epoch.Number()}, diff --git a/pkg/sentry/sentry.go b/pkg/sentry/sentry.go index 57b30447..4b30c11f 100644 --- a/pkg/sentry/sentry.go +++ b/pkg/sentry/sentry.go @@ -20,6 +20,7 @@ import ( "github.com/attestantio/go-eth2-client/spec/phase0" "github.com/beevik/ntp" "github.com/ethpandaops/xatu/pkg/networks" + "github.com/ethpandaops/xatu/pkg/observability" "github.com/ethpandaops/xatu/pkg/output" xatuethv1 "github.com/ethpandaops/xatu/pkg/proto/eth/v1" "github.com/ethpandaops/xatu/pkg/proto/xatu" @@ -29,8 +30,10 @@ import ( v2 "github.com/ethpandaops/xatu/pkg/sentry/event/beacon/eth/v2" "github.com/go-co-op/gocron" "github.com/google/uuid" + perrors "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel/sdk/trace" ) type Sentry struct { @@ -54,6 +57,8 @@ type Sentry struct { latestForkChoice *v1.ForkChoice latestForkChoiceMu sync.RWMutex + + shutdownFuncs []func(context.Context) error } func New(ctx context.Context, log logrus.FieldLogger, config *Config) (*Sentry, error) { @@ -90,6 +95,7 @@ func New(ctx context.Context, log logrus.FieldLogger, config *Config) (*Sentry, scheduler: gocron.NewScheduler(time.Local), latestForkChoice: nil, latestForkChoiceMu: sync.RWMutex{}, + shutdownFuncs: []func(context.Context) error{}, }, nil } @@ -110,6 +116,36 @@ func (s *Sentry) Start(ctx context.Context) error { WithField("id", s.id.String()). Info("Starting Xatu in sentry mode") + // Start tracing if enabled + if s.Config.Tracing.Enabled { + s.log.Info("Tracing enabled") + + res, err := observability.NewResource(xatu.WithMode(xatu.ModeSentry), xatu.Short()) + if err != nil { + return perrors.Wrap(err, "failed to create tracing resource") + } + + opts := []trace.TracerProviderOption{ + trace.WithSampler(trace.ParentBased(trace.TraceIDRatioBased(s.Config.Tracing.Sampling.Rate))), + } + + tracer, err := observability.NewHTTPTraceProvider(ctx, + res, + s.Config.Tracing.AsOTelOpts(), + opts..., + ) + if err != nil { + return perrors.Wrap(err, "failed to create tracing provider") + } + + shutdown, err := observability.SetupOTelSDK(ctx, tracer) + if err != nil { + return perrors.Wrap(err, "failed to setup tracing SDK") + } + + s.shutdownFuncs = append(s.shutdownFuncs, shutdown) + } + if err := s.startBeaconCommitteesWatcher(ctx); err != nil { return err } @@ -439,6 +475,12 @@ func (s *Sentry) Start(ctx context.Context) error { } } + for _, f := range s.shutdownFuncs { + if err := f(ctx); err != nil { + return err + } + } + return nil } diff --git a/pkg/server/config.go b/pkg/server/config.go index 224528b3..e8d5c4e4 100644 --- a/pkg/server/config.go +++ b/pkg/server/config.go @@ -1,6 +1,7 @@ package server import ( + "github.com/ethpandaops/xatu/pkg/observability" "github.com/ethpandaops/xatu/pkg/server/geoip" "github.com/ethpandaops/xatu/pkg/server/persistence" "github.com/ethpandaops/xatu/pkg/server/service" @@ -36,6 +37,9 @@ type Config struct { // Services is the list of services to run. Services service.Config `yaml:"services"` + + // Tracing configuration + Tracing observability.TracingConfig `yaml:"tracing"` } func (c *Config) Validate() error { @@ -55,5 +59,9 @@ func (c *Config) Validate() error { return err } + if err := c.Tracing.Validate(); err != nil { + return err + } + return nil } diff --git a/pkg/server/server.go b/pkg/server/server.go index 94ccec5b..1fd7883a 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -13,14 +13,18 @@ import ( _ "net/http/pprof" "github.com/beevik/ntp" + "github.com/ethpandaops/xatu/pkg/observability" + "github.com/ethpandaops/xatu/pkg/proto/xatu" "github.com/ethpandaops/xatu/pkg/server/geoip" "github.com/ethpandaops/xatu/pkg/server/persistence" "github.com/ethpandaops/xatu/pkg/server/service" "github.com/ethpandaops/xatu/pkg/server/store" "github.com/go-co-op/gocron" grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" + "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel/sdk/trace" "golang.org/x/sync/errgroup" "google.golang.org/grpc" @@ -43,6 +47,8 @@ type Xatu struct { geoipProvider geoip.Provider clockDrift *time.Duration + + shutdownFuncs []func(ctx context.Context) error } func NewXatu(ctx context.Context, log logrus.FieldLogger, conf *Config) (*Xatu, error) { @@ -89,6 +95,7 @@ func NewXatu(ctx context.Context, log logrus.FieldLogger, conf *Config) (*Xatu, geoipProvider: g, services: services, clockDrift: &clockDrift, + shutdownFuncs: []func(ctx context.Context) error{}, }, nil } @@ -96,6 +103,36 @@ func (x *Xatu) Start(ctx context.Context) error { nctx, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM) defer stop() + // Start tracing if enabled + if x.config.Tracing.Enabled { + x.log.Info("Tracing enabled") + + res, err := observability.NewResource(xatu.WithMode(xatu.ModeServer), xatu.Short()) + if err != nil { + return errors.Wrap(err, "failed to create tracing resource") + } + + opts := []trace.TracerProviderOption{ + trace.WithSampler(trace.ParentBased(trace.TraceIDRatioBased(x.config.Tracing.Sampling.Rate))), + } + + tracer, err := observability.NewHTTPTraceProvider(ctx, + res, + x.config.Tracing.AsOTelOpts(), + opts..., + ) + if err != nil { + return errors.Wrap(err, "failed to create tracing provider") + } + + shutdown, err := observability.SetupOTelSDK(ctx, tracer) + if err != nil { + return errors.Wrap(err, "failed to setup tracing SDK") + } + + x.shutdownFuncs = append(x.shutdownFuncs, shutdown) + } + if err := x.startCrons(ctx); err != nil { x.log.WithError(err).Fatal("Failed to start crons") } @@ -199,6 +236,12 @@ func (x *Xatu) stop(ctx context.Context) error { } } + for _, f := range x.shutdownFuncs { + if err := f(ctx); err != nil { + return err + } + } + if x.pprofServer != nil { if err := x.pprofServer.Shutdown(ctx); err != nil { return err @@ -224,7 +267,13 @@ func (x *Xatu) startGrpcServer(ctx context.Context) error { mb100 := 1024 * 1024 * 100 - grpc_prometheus.EnableHandlingTimeHistogram() + grpc_prometheus.EnableHandlingTimeHistogram( + grpc_prometheus.WithHistogramBuckets( + []float64{ + 0.01, 0.03, 0.1, 0.3, 1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, + }, + ), + ) opts := []grpc.ServerOption{ grpc.MaxRecvMsgSize(mb100), @@ -241,10 +290,13 @@ func (x *Xatu) startGrpcServer(ctx context.Context) error { grpc.ChainUnaryInterceptor( grpc.UnaryServerInterceptor(grpc_prometheus.UnaryServerInterceptor), func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + start := time.Now() + resp, err := handler(ctx, req) if err != nil { x.log. WithField("method", info.FullMethod). + WithField("duration", time.Since(start)). WithError(err). Error("RPC Error") } diff --git a/pkg/server/service/coordinator/node/record.go b/pkg/server/service/coordinator/node/record.go index e47e1d2f..0a1b9e57 100644 --- a/pkg/server/service/coordinator/node/record.go +++ b/pkg/server/service/coordinator/node/record.go @@ -45,6 +45,8 @@ func (r *Record) Start(ctx context.Context) error { return err } + r.proc.Start(ctx) + return nil } diff --git a/pkg/server/service/event-ingester/event/event.go b/pkg/server/service/event-ingester/event/event.go index 2800ceb1..6faa3e71 100644 --- a/pkg/server/service/event-ingester/event/event.go +++ b/pkg/server/service/event-ingester/event/event.go @@ -87,14 +87,16 @@ func New(eventType Type, log logrus.FieldLogger, event *xatu.DecoratedEvent, cac } switch eventType { - case TypeBeaconP2PAttestation: - return v1.NewBeaconP2PAttestation(log, event, geoipProvider), nil + case TypeBeaconETHV1EventsAttestationV2: + return v1.NewEventsAttestationV2(log, event), nil case TypeLibP2PTraceGossipSubBeaconAttestation: return libp2p.NewTraceGossipSubBeaconAttestation(log, event), nil + case TypeBeaconETHV1BeaconValidators: + return v1.NewBeaconValidators(log, event), nil + case TypeBeaconP2PAttestation: + return v1.NewBeaconP2PAttestation(log, event, geoipProvider), nil case TypeBeaconETHV1EventsAttestation: return v1.NewEventsAttestation(log, event), nil - case TypeBeaconETHV1EventsAttestationV2: - return v1.NewEventsAttestationV2(log, event), nil case TypeBeaconETHV1EventsBlock: return v1.NewEventsBlock(log, event), nil case TypeBeaconETHV1EventsBlockV2: @@ -185,8 +187,6 @@ func New(eventType Type, log logrus.FieldLogger, event *xatu.DecoratedEvent, cac return libp2p.NewTraceGossipSubBeaconBlock(log, event), nil case TypeLibP2PTraceGossipSubBlobSidecar: return libp2p.NewTraceGossipSubBlobSidecar(log, event), nil - case TypeBeaconETHV1BeaconValidators: - return v1.NewBeaconValidators(log, event), nil default: return nil, fmt.Errorf("event type %s is unknown", eventType) } diff --git a/pkg/server/service/event-ingester/ingester.go b/pkg/server/service/event-ingester/ingester.go index 3407808e..24ec5bd9 100644 --- a/pkg/server/service/event-ingester/ingester.go +++ b/pkg/server/service/event-ingester/ingester.go @@ -51,6 +51,12 @@ func (e *Ingester) Start(ctx context.Context, grpcServer *grpc.Server) error { xatu.RegisterEventIngesterServer(grpcServer, e) + for _, sink := range e.sinks { + if err := sink.Start(ctx); err != nil { + return err + } + } + return nil } From ec94902e9457b74b174c614ee153d4825f03aeb8 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Fri, 5 Jul 2024 13:25:13 +1000 Subject: [PATCH 21/22] feat(cannon): Convert all to backfilling checkpoint (#345) * Backfilling * refactor: Update comments in checkpoint iterator file * Convert all to backfilling checkpoint * refactor: Remove unused checkAndMigrateFromCheckpointIterator function * feat: Add lag metrics to backfilling checkpoint iterator * style: Remove unnecessary blank line --- pkg/cannon/cannon.go | 50 +- .../deriver/beacon/eth/v1/beacon_blob.go | 24 +- .../beacon/eth/v1/beacon_validators.go | 108 +-- .../deriver/beacon/eth/v1/proposer_duty.go | 100 +-- .../beacon/eth/v2/attester_slashing.go | 43 +- .../deriver/beacon/eth/v2/beacon_block.go | 53 +- .../beacon/eth/v2/bls_to_execution_change.go | 43 +- pkg/cannon/deriver/beacon/eth/v2/deposit.go | 45 +- .../beacon/eth/v2/elaborated_attestation.go | 100 +-- .../beacon/eth/v2/execution_transaction.go | 43 +- .../beacon/eth/v2/proposer_slashing.go | 45 +- .../deriver/beacon/eth/v2/voluntary_exit.go | 33 +- .../deriver/beacon/eth/v2/withdrawal.go | 45 +- .../blockprint/block_classification.go | 2 +- .../backfilling_checkpoint_iterator.go | 379 ++++++-- ...backfilling_checkpoint_iterator_metrics.go | 26 +- pkg/cannon/iterator/blockprint_iterator.go | 23 +- pkg/cannon/iterator/checkpoint_iterator.go | 287 ------- pkg/cannon/iterator/checkpoint_metrics.go | 38 - pkg/cannon/iterator/iterator.go | 18 +- pkg/proto/xatu/coordinator.pb.go | 807 ++++++++++-------- pkg/proto/xatu/coordinator.proto | 45 +- 22 files changed, 1177 insertions(+), 1180 deletions(-) delete mode 100644 pkg/cannon/iterator/checkpoint_iterator.go delete mode 100644 pkg/cannon/iterator/checkpoint_metrics.go diff --git a/pkg/cannon/cannon.go b/pkg/cannon/cannon.go index 74bf4e5f..e9623904 100644 --- a/pkg/cannon/cannon.go +++ b/pkg/cannon/cannon.go @@ -337,8 +337,6 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { return err } - checkpointIteratorMetrics := iterator.NewCheckpointMetrics("xatu_cannon") - backfillingCheckpointIteratorMetrics := iterator.NewBackfillingCheckpointMetrics("xatu_cannon") blockprintIteratorMetrics := iterator.NewBlockprintMetrics("xatu_cannon") @@ -354,16 +352,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewAttesterSlashingDeriver( c.log, &c.Config.Derivers.AttesterSlashingConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ATTESTER_SLASHING, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -371,16 +370,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewProposerSlashingDeriver( c.log, &c.Config.Derivers.ProposerSlashingConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -388,16 +388,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewVoluntaryExitDeriver( c.log, &c.Config.Derivers.VoluntaryExitConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -405,16 +406,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewDepositDeriver( c.log, &c.Config.Derivers.DepositConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_DEPOSIT, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -422,16 +424,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewBLSToExecutionChangeDeriver( c.log, &c.Config.Derivers.BLSToExecutionConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_BLS_TO_EXECUTION_CHANGE, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -439,16 +442,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewExecutionTransactionDeriver( c.log, &c.Config.Derivers.ExecutionTransactionConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -456,16 +460,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewWithdrawalDeriver( c.log, &c.Config.Derivers.WithdrawalConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -473,16 +478,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v2.NewBeaconBlockDeriver( c.log, &c.Config.Derivers.BeaconBlockConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -506,16 +512,17 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { v1.NewBeaconBlobDeriver( c.log, &c.Config.Derivers.BeaconBlobSidecarConfig, - iterator.NewCheckpointIterator( + iterator.NewBackfillingCheckpoint( c.log, networkName, networkID, xatu.CannonType_BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR, c.coordinatorClient, wallclock, - &checkpointIteratorMetrics, + &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -533,6 +540,7 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -550,6 +558,7 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 3, ), c.beacon, clientMeta, @@ -567,6 +576,7 @@ func (c *Cannon) startBeaconBlockProcessor(ctx context.Context) error { &backfillingCheckpointIteratorMetrics, c.beacon, finalizedCheckpoint, + 2, ), c.beacon, clientMeta, diff --git a/pkg/cannon/deriver/beacon/eth/v1/beacon_blob.go b/pkg/cannon/deriver/beacon/eth/v1/beacon_blob.go index 25835ca4..3e9d1388 100644 --- a/pkg/cannon/deriver/beacon/eth/v1/beacon_blob.go +++ b/pkg/cannon/deriver/beacon/eth/v1/beacon_blob.go @@ -37,13 +37,13 @@ type BeaconBlobDeriverConfig struct { type BeaconBlobDeriver struct { log logrus.FieldLogger cfg *BeaconBlobDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewBeaconBlobDeriver(log logrus.FieldLogger, config *BeaconBlobDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BeaconBlobDeriver { +func NewBeaconBlobDeriver(log logrus.FieldLogger, config *BeaconBlobDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BeaconBlobDeriver { return &BeaconBlobDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v1/beacon_blob"), cfg: config, @@ -78,6 +78,10 @@ func (b *BeaconBlobDeriver) Start(ctx context.Context) error { b.log.Info("Beacon blob deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -118,18 +122,16 @@ func (b *BeaconBlobDeriver) run(rctx context.Context) { span.AddEvent("Grabbing next location") - // Get the next slot - location, _, err := b.iterator.Next(ctx) + // Get the next position. + position, err := b.iterator.Next(ctx) if err != nil { span.SetStatus(codes.Error, err.Error()) return err } - span.AddEvent("Obtained next location. Processing epoch...", trace.WithAttributes(attribute.Int64("location", int64(location.GetEthV1BeaconBlobSidecar().GetEpoch())))) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV1BeaconBlobSidecar().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") @@ -138,8 +140,6 @@ func (b *BeaconBlobDeriver) run(rctx context.Context) { return err } - span.AddEvent("Epoch processing complete. Sending events...") - // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -149,17 +149,13 @@ func (b *BeaconBlobDeriver) run(rctx context.Context) { } } - span.AddEvent("Events sent. Updating location...") - // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { span.SetStatus(codes.Error, err.Error()) return err } - span.AddEvent("Location updated. Done.") - bo.Reset() return nil diff --git a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go index 6dfbbd96..defe5d9a 100644 --- a/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go +++ b/pkg/cannon/deriver/beacon/eth/v1/beacon_validators.go @@ -82,6 +82,10 @@ func (b *BeaconValidatorsDeriver) Start(ctx context.Context) error { b.log.Info("Validator states deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -118,71 +122,28 @@ func (b *BeaconValidatorsDeriver) run(rctx context.Context) { return err } - // Get the next location. - location, _, err := b.iterator.Next(ctx) + // Get the next position. + position, err := b.iterator.Next(ctx) if err != nil { span.SetStatus(codes.Error, err.Error()) return err } - finality, err := b.beacon.Node().Finality() - if err != nil { - span.SetStatus(codes.Error, err.Error()) - - return errors.Wrap(err, "failed to get finality") - } - - if finality == nil { - span.SetStatus(codes.Error, "finality is nil") - - return errors.New("finality is nil") - } - - checkpoint := finality.Finalized - - processingFinalizedEpoch := false - epochToProcess := location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker().GetBackfillEpoch() - 1 - - if checkpoint.Epoch > phase0.Epoch(location.GetEthV1BeaconValidators().BackfillingCheckpointMarker.FinalizedEpoch) { - processingFinalizedEpoch = true - epochToProcess = int64(location.GetEthV1BeaconValidators().BackfillingCheckpointMarker.FinalizedEpoch) + 1 - } - - if !processingFinalizedEpoch && epochToProcess == -1 { - return nil - } - - events, slot, err := b.processEpoch(ctx, phase0.Epoch(epochToProcess)) + events, slot, err := b.processEpoch(ctx, position.Next) if err != nil { - b.log.WithError(err).WithField("epoch", epochToProcess).Error("Failed to process epoch") + b.log.WithError(err).WithField("epoch", position.Next).Error("Failed to process epoch") span.SetStatus(codes.Error, err.Error()) return err } + b.lookAhead(ctx, position.LookAheads) + // Be a good citizen and clean up the validator cache for the current epoch b.beacon.DeleteValidatorsFromCache(xatuethv1.SlotAsString(slot)) - if !processingFinalizedEpoch { - // If we are backfilling we can prewarm the validator cache with the next epoch's validators - spec, err := b.beacon.Node().Spec() - if err != nil { - return errors.Wrap(err, "failed to fetch spec") - } - - nextSlot := slot - spec.SlotsPerEpoch - if nextSlot > 0 { - b.log.WithFields(logrus.Fields{ - "next_state_id": nextSlot, - "current_state_id": slot, - }).Info("Prewarming validators cache") - - b.beacon.LazyLoadValidators(xatuethv1.SlotAsString(nextSlot)) - } - } - for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { span.SetStatus(codes.Error, err.Error()) @@ -191,30 +152,7 @@ func (b *BeaconValidatorsDeriver) run(rctx context.Context) { } } - if processingFinalizedEpoch { - location.Data = &xatu.CannonLocation_EthV1BeaconValidators{ - EthV1BeaconValidators: &xatu.CannonLocationEthV1BeaconValidators{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - BackfillEpoch: location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker().GetBackfillEpoch(), - FinalizedEpoch: uint64(epochToProcess), - }, - }, - } - } else { - location.Data = &xatu.CannonLocation_EthV1BeaconValidators{ - EthV1BeaconValidators: &xatu.CannonLocationEthV1BeaconValidators{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - BackfillEpoch: epochToProcess, - FinalizedEpoch: location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker().GetFinalizedEpoch(), - }, - }, - } - } - - span.SetAttributes(attribute.Int64("epoch", epochToProcess)) - span.SetAttributes(attribute.Bool("is_backfill", !processingFinalizedEpoch)) - - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { span.SetStatus(codes.Error, err.Error()) return err @@ -234,6 +172,30 @@ func (b *BeaconValidatorsDeriver) run(rctx context.Context) { } } +// lookAhead takes the upcoming epochs and looks ahead to do any pre-processing that might be required. +func (b *BeaconValidatorsDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { + _, span := observability.Tracer().Start(ctx, + "BeaconValidatorsDeriver.lookAhead", + ) + defer span.End() + + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + + return + } + + for _, epoch := range epochs { + for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { + slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) + + // Add the state to the preload queue so it's available when we need it + b.beacon.LazyLoadValidators(xatuethv1.SlotAsString(slot)) + } + } +} + func (b *BeaconValidatorsDeriver) processEpoch(ctx context.Context, epoch phase0.Epoch) ([]*xatu.DecoratedEvent, phase0.Slot, error) { ctx, span := observability.Tracer().Start(ctx, "BeaconValidatorsDeriver.processEpoch", diff --git a/pkg/cannon/deriver/beacon/eth/v1/proposer_duty.go b/pkg/cannon/deriver/beacon/eth/v1/proposer_duty.go index f89a4b88..9b0a074b 100644 --- a/pkg/cannon/deriver/beacon/eth/v1/proposer_duty.go +++ b/pkg/cannon/deriver/beacon/eth/v1/proposer_duty.go @@ -77,6 +77,10 @@ func (b *ProposerDutyDeriver) Start(ctx context.Context) error { b.log.Info("Proposer duty deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -113,54 +117,16 @@ func (b *ProposerDutyDeriver) run(rctx context.Context) { return err } - // Get the next location. - location, _, err := b.iterator.Next(ctx) + // Get the next position. + position, err := b.iterator.Next(ctx) if err != nil { span.SetStatus(codes.Error, err.Error()) return err } - /* - Because we are using a backfilling-checkpoint iterator we will - be responsible for deciding which epoch to process, and will update the - location after-the-fact accordingly. - - If the beacon node tells us our finalized_epoch is behind, we'll - process the finalized_epoch. Otherwise we'll process the backfill_epoch - until we are at epoch 0. - */ - - finality, err := b.beacon.Node().Finality() - if err != nil { - span.SetStatus(codes.Error, err.Error()) - - return errors.Wrap(err, "failed to get finality") - } - - if finality == nil { - span.SetStatus(codes.Error, "finality is nil") - - return errors.New("finality is nil") - } - - checkpoint := finality.Finalized - - processingFinalizedEpoch := false - epochToProcess := location.GetEthV1BeaconProposerDuty().GetBackfillingCheckpointMarker().GetBackfillEpoch() - 1 - - if checkpoint.Epoch > phase0.Epoch(location.GetEthV1BeaconProposerDuty().BackfillingCheckpointMarker.FinalizedEpoch) { - processingFinalizedEpoch = true - epochToProcess = int64(location.GetEthV1BeaconProposerDuty().BackfillingCheckpointMarker.FinalizedEpoch) + 1 - } - - if !processingFinalizedEpoch && epochToProcess == -1 { - // We're up to date! We can safely return here and let the iterator sleep us until it thinks we're ready to process again. - return nil - } - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(epochToProcess)) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") @@ -169,6 +135,9 @@ func (b *ProposerDutyDeriver) run(rctx context.Context) { return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -178,31 +147,8 @@ func (b *ProposerDutyDeriver) run(rctx context.Context) { } } - if processingFinalizedEpoch { - location.Data = &xatu.CannonLocation_EthV1BeaconProposerDuty{ - EthV1BeaconProposerDuty: &xatu.CannonLocationEthV1BeaconProposerDuty{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - BackfillEpoch: location.GetEthV1BeaconProposerDuty().GetBackfillingCheckpointMarker().GetBackfillEpoch(), - FinalizedEpoch: uint64(epochToProcess), - }, - }, - } - } else { - location.Data = &xatu.CannonLocation_EthV1BeaconProposerDuty{ - EthV1BeaconProposerDuty: &xatu.CannonLocationEthV1BeaconProposerDuty{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - BackfillEpoch: epochToProcess, - FinalizedEpoch: location.GetEthV1BeaconProposerDuty().GetBackfillingCheckpointMarker().GetFinalizedEpoch(), - }, - }, - } - } - - span.SetAttributes(attribute.Int64("epoch", epochToProcess)) - span.SetAttributes(attribute.Bool("is_backfill", !processingFinalizedEpoch)) - // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { span.SetStatus(codes.Error, err.Error()) return err @@ -255,6 +201,30 @@ func (b *ProposerDutyDeriver) processEpoch(ctx context.Context, epoch phase0.Epo return allEvents, nil } +// lookAhead takes the upcoming epochs and looks ahead to do any pre-processing that might be required. +func (b *ProposerDutyDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { + _, span := observability.Tracer().Start(ctx, + "ProposerDutyDeriver.lookAhead", + ) + defer span.End() + + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + + return + } + + for _, epoch := range epochs { + for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { + slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) + + // Add the block to the preload queue so it's available when we need it + b.beacon.LazyLoadBeaconBlock(xatuethv1.SlotAsString(slot)) + } + } +} + func (b *ProposerDutyDeriver) createEventFromProposerDuty(ctx context.Context, duty *apiv1.ProposerDuty) (*xatu.DecoratedEvent, error) { // Make a clone of the metadata metadata, ok := proto.Clone(b.clientMeta).(*xatu.ClientMeta) diff --git a/pkg/cannon/deriver/beacon/eth/v2/attester_slashing.go b/pkg/cannon/deriver/beacon/eth/v2/attester_slashing.go index 56a9f28a..d6c65713 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/attester_slashing.go +++ b/pkg/cannon/deriver/beacon/eth/v2/attester_slashing.go @@ -34,13 +34,13 @@ type AttesterSlashingDeriverConfig struct { type AttesterSlashingDeriver struct { log logrus.FieldLogger cfg *AttesterSlashingDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewAttesterSlashingDeriver(log logrus.FieldLogger, config *AttesterSlashingDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *AttesterSlashingDeriver { +func NewAttesterSlashingDeriver(log logrus.FieldLogger, config *AttesterSlashingDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *AttesterSlashingDeriver { return &AttesterSlashingDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/attester_slashing"), cfg: config, @@ -75,6 +75,10 @@ func (a *AttesterSlashingDeriver) Start(ctx context.Context) error { a.log.Info("Attester slashing deriver enabled") + if err := a.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop go a.run(ctx) @@ -109,22 +113,22 @@ func (a *AttesterSlashingDeriver) run(rctx context.Context) { } // Get the next slot - location, lookAhead, err := a.iterator.Next(ctx) + position, err := a.iterator.Next(ctx) if err != nil { return err } - // Look ahead - a.lookAheadAtLocations(ctx, lookAhead) - // Process the epoch - events, err := a.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockAttesterSlashing().GetEpoch())) + events, err := a.processEpoch(ctx, position.Next) if err != nil { a.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + a.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range a.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -133,7 +137,7 @@ func (a *AttesterSlashingDeriver) run(rctx context.Context) { } // Update our location - if err := a.iterator.UpdateLocation(ctx, location); err != nil { + if err := a.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -151,28 +155,21 @@ func (a *AttesterSlashingDeriver) run(rctx context.Context) { } } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (a *AttesterSlashingDeriver) lookAheadAtLocations(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead takes the upcoming epochs and looks ahead to do any pre-processing that might be required. +func (a *AttesterSlashingDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "AttesterSlashingDeriver.lookAheadAtLocations", + "AttesterSlashingDeriver.lookAhead", ) defer span.End() - if locations == nil { + sp, err := a.beacon.Node().Spec() + if err != nil { + a.log.WithError(err).Warn("Failed to look ahead at epoch") + return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockAttesterSlashing().GetEpoch()) - - sp, err := a.beacon.Node().Spec() - if err != nil { - a.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") - - return - } - + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/beacon/eth/v2/beacon_block.go b/pkg/cannon/deriver/beacon/eth/v2/beacon_block.go index 9d223ff3..6d6011af 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/beacon_block.go +++ b/pkg/cannon/deriver/beacon/eth/v2/beacon_block.go @@ -39,13 +39,13 @@ type BeaconBlockDeriverConfig struct { type BeaconBlockDeriver struct { log logrus.FieldLogger cfg *BeaconBlockDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewBeaconBlockDeriver(log logrus.FieldLogger, config *BeaconBlockDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BeaconBlockDeriver { +func NewBeaconBlockDeriver(log logrus.FieldLogger, config *BeaconBlockDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BeaconBlockDeriver { return &BeaconBlockDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/beacon_block"), cfg: config, @@ -80,6 +80,10 @@ func (b *BeaconBlockDeriver) Start(ctx context.Context) error { b.log.Info("Beacon block deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -110,33 +114,25 @@ func (b *BeaconBlockDeriver) run(rctx context.Context) { time.Sleep(100 * time.Millisecond) - span.AddEvent("Checking if beacon node is synced") - if err := b.beacon.Synced(ctx); err != nil { span.SetStatus(codes.Error, err.Error()) return err } - span.AddEvent("Grabbing next location") - // Get the next slot - location, lookAhead, err := b.iterator.Next(ctx) + position, err := b.iterator.Next(ctx) if err != nil { span.SetStatus(codes.Error, err.Error()) return err } - span.AddEvent("Obtained next location, looking ahead...", trace.WithAttributes(attribute.Int64("location", int64(location.GetEthV2BeaconBlock().GetEpoch())))) - // Look ahead - b.lookAheadAtLocation(ctx, lookAhead) - - span.AddEvent("Look ahead complete. Processing epoch...") + b.lookAhead(ctx, position.LookAheads) // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlock().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") @@ -159,7 +155,7 @@ func (b *BeaconBlockDeriver) run(rctx context.Context) { span.AddEvent("Events sent. Updating location...") // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { span.SetStatus(codes.Error, err.Error()) return err @@ -172,35 +168,30 @@ func (b *BeaconBlockDeriver) run(rctx context.Context) { return nil } - if err := backoff.Retry(operation, bo); err != nil { - b.log.WithError(err).Error("Failed to process location") + if err := backoff.RetryNotify(operation, bo, func(err error, timer time.Duration) { + b.log.WithError(err).WithField("next_attempt", timer).Warn("Failed to process") + }); err != nil { + b.log.WithError(err).Warn("Failed to process") } } } } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *BeaconBlockDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead takes the upcoming epochs and looks ahead to do any pre-processing that might be required. +func (b *BeaconBlockDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "BeaconBlockDeriver.lookAheadAtLocations", + "BeaconBlockDeriver.lookAhead", ) defer span.End() - if locations == nil { + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlock().GetEpoch()) - - sp, err := b.beacon.Node().Spec() - if err != nil { - b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") - - return - } - + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/beacon/eth/v2/bls_to_execution_change.go b/pkg/cannon/deriver/beacon/eth/v2/bls_to_execution_change.go index 9b57ae57..58625bb2 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/bls_to_execution_change.go +++ b/pkg/cannon/deriver/beacon/eth/v2/bls_to_execution_change.go @@ -36,13 +36,13 @@ type BLSToExecutionChangeDeriverConfig struct { type BLSToExecutionChangeDeriver struct { log logrus.FieldLogger cfg *BLSToExecutionChangeDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewBLSToExecutionChangeDeriver(log logrus.FieldLogger, config *BLSToExecutionChangeDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BLSToExecutionChangeDeriver { +func NewBLSToExecutionChangeDeriver(log logrus.FieldLogger, config *BLSToExecutionChangeDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *BLSToExecutionChangeDeriver { return &BLSToExecutionChangeDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/bls_to_execution_change"), cfg: config, @@ -77,6 +77,10 @@ func (b *BLSToExecutionChangeDeriver) Start(ctx context.Context) error { b.log.Info("BLS to execution change deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -109,23 +113,23 @@ func (b *BLSToExecutionChangeDeriver) run(rctx context.Context) { return err } - // Get the next slot - location, lookAheads, err := b.iterator.Next(ctx) + // Get the next position + position, err := b.iterator.Next(ctx) if err != nil { return err } - // Look ahead - b.lookAheadAtLocation(ctx, lookAheads) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockBlsToExecutionChange().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -134,7 +138,7 @@ func (b *BLSToExecutionChangeDeriver) run(rctx context.Context) { } // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -153,27 +157,20 @@ func (b *BLSToExecutionChangeDeriver) run(rctx context.Context) { } // lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *BLSToExecutionChangeDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +func (b *BLSToExecutionChangeDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "BLSToExecutionChangeDeriver.lookAheadAtLocations", + "BLSToExecutionChangeDeriver.lookAhead", ) defer span.End() - if locations == nil { + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockBlsToExecutionChange().GetEpoch()) - - sp, err := b.beacon.Node().Spec() - if err != nil { - b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") - - return - } - + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/beacon/eth/v2/deposit.go b/pkg/cannon/deriver/beacon/eth/v2/deposit.go index 6c03eea8..5d7ad2af 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/deposit.go +++ b/pkg/cannon/deriver/beacon/eth/v2/deposit.go @@ -34,13 +34,13 @@ type DepositDeriverConfig struct { type DepositDeriver struct { log logrus.FieldLogger cfg *DepositDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewDepositDeriver(log logrus.FieldLogger, config *DepositDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *DepositDeriver { +func NewDepositDeriver(log logrus.FieldLogger, config *DepositDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *DepositDeriver { return &DepositDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/deposit"), cfg: config, @@ -75,6 +75,10 @@ func (b *DepositDeriver) Start(ctx context.Context) error { b.log.Info("Deposit deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -107,23 +111,23 @@ func (b *DepositDeriver) run(rctx context.Context) { return err } - // Get the next slot - location, lookAhead, err := b.iterator.Next(ctx) + // Get the next position + position, err := b.iterator.Next(ctx) if err != nil { return err } - // Look ahead - b.lookAheadAtLocation(ctx, lookAhead) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockDeposit().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -132,7 +136,7 @@ func (b *DepositDeriver) run(rctx context.Context) { } // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -150,28 +154,21 @@ func (b *DepositDeriver) run(rctx context.Context) { } } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *DepositDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead attempts to pre-load any blocks that might be required for the epochs that are coming up. +func (b *DepositDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "DepositDeriver.lookAheadAtLocations", + "DepositDeriver.lookAhead", ) defer span.End() - if locations == nil { + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockDeposit().GetEpoch()) - - sp, err := b.beacon.Node().Spec() - if err != nil { - b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") - - return - } - + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/beacon/eth/v2/elaborated_attestation.go b/pkg/cannon/deriver/beacon/eth/v2/elaborated_attestation.go index 98c165ac..0f8ebab1 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/elaborated_attestation.go +++ b/pkg/cannon/deriver/beacon/eth/v2/elaborated_attestation.go @@ -76,6 +76,10 @@ func (b *ElaboratedAttestationDeriver) Start(ctx context.Context) error { b.log.Info("Elaborated attestation deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -112,54 +116,16 @@ func (b *ElaboratedAttestationDeriver) run(rctx context.Context) { return err } - // Get the next location. - location, _, err := b.iterator.Next(ctx) + // Get the next position. + position, err := b.iterator.Next(ctx) if err != nil { span.SetStatus(codes.Error, err.Error()) return err } - /* - Because we are using a backfilling-checkpoint iterator we will - be responsible for deciding which epoch to process, and will update the - location after-the-fact accordingly. - - If the beacon node tells us our finalized_epoch is behind, we'll - process the finalized_epoch. Otherwise we'll process the backfill_epoch - until we are at epoch 0. - */ - - finality, err := b.beacon.Node().Finality() - if err != nil { - span.SetStatus(codes.Error, err.Error()) - - return errors.Wrap(err, "failed to get finality") - } - - if finality == nil { - span.SetStatus(codes.Error, "finality is nil") - - return errors.New("finality is nil") - } - - checkpoint := finality.Finalized - - processingFinalizedEpoch := false - epochToProcess := location.GetEthV2BeaconBlockElaboratedAttestation().GetBackfillingCheckpointMarker().GetBackfillEpoch() - 1 - - if checkpoint.Epoch > phase0.Epoch(location.GetEthV2BeaconBlockElaboratedAttestation().BackfillingCheckpointMarker.FinalizedEpoch) { - processingFinalizedEpoch = true - epochToProcess = int64(location.GetEthV2BeaconBlockElaboratedAttestation().BackfillingCheckpointMarker.FinalizedEpoch) + 1 - } - - if !processingFinalizedEpoch && epochToProcess == -1 { - // We're up to date! We can safely return here and let the iterator sleep us until it thinks we're ready to process again. - return nil - } - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(epochToProcess)) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") @@ -168,6 +134,9 @@ func (b *ElaboratedAttestationDeriver) run(rctx context.Context) { return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -177,31 +146,8 @@ func (b *ElaboratedAttestationDeriver) run(rctx context.Context) { } } - if processingFinalizedEpoch { - location.Data = &xatu.CannonLocation_EthV2BeaconBlockElaboratedAttestation{ - EthV2BeaconBlockElaboratedAttestation: &xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - BackfillEpoch: location.GetEthV2BeaconBlockElaboratedAttestation().GetBackfillingCheckpointMarker().GetBackfillEpoch(), - FinalizedEpoch: uint64(epochToProcess), - }, - }, - } - } else { - location.Data = &xatu.CannonLocation_EthV2BeaconBlockElaboratedAttestation{ - EthV2BeaconBlockElaboratedAttestation: &xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - BackfillEpoch: epochToProcess, - FinalizedEpoch: location.GetEthV2BeaconBlockElaboratedAttestation().GetBackfillingCheckpointMarker().GetFinalizedEpoch(), - }, - }, - } - } - - span.SetAttributes(attribute.Int64("epoch", epochToProcess)) - span.SetAttributes(attribute.Bool("is_backfill", !processingFinalizedEpoch)) - // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { span.SetStatus(codes.Error, err.Error()) return err @@ -276,6 +222,30 @@ func (b *ElaboratedAttestationDeriver) processSlot(ctx context.Context, slot pha return events, nil } +// lookAhead attempts to pre-load any blocks that might be required for the epochs that are coming up. +func (b *ElaboratedAttestationDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { + _, span := observability.Tracer().Start(ctx, + "ElaboratedAttestationDeriver.lookAhead", + ) + defer span.End() + + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + + return + } + + for _, epoch := range epochs { + for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { + slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) + + // Add the block to the preload queue so it's available when we need it + b.beacon.LazyLoadBeaconBlock(xatuethv1.SlotAsString(slot)) + } + } +} + func (b *ElaboratedAttestationDeriver) getElaboratedAttestations(ctx context.Context, block *spec.VersionedSignedBeaconBlock) ([]*xatu.DecoratedEvent, error) { blockAttestations, err := block.Attestations() if err != nil { diff --git a/pkg/cannon/deriver/beacon/eth/v2/execution_transaction.go b/pkg/cannon/deriver/beacon/eth/v2/execution_transaction.go index 0ecf83bd..ccfab72b 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/execution_transaction.go +++ b/pkg/cannon/deriver/beacon/eth/v2/execution_transaction.go @@ -31,7 +31,7 @@ import ( type ExecutionTransactionDeriver struct { log logrus.FieldLogger cfg *ExecutionTransactionDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta @@ -45,7 +45,7 @@ const ( ExecutionTransactionDeriverName = xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION ) -func NewExecutionTransactionDeriver(log logrus.FieldLogger, config *ExecutionTransactionDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *ExecutionTransactionDeriver { +func NewExecutionTransactionDeriver(log logrus.FieldLogger, config *ExecutionTransactionDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *ExecutionTransactionDeriver { return &ExecutionTransactionDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/execution_transaction"), cfg: config, @@ -80,6 +80,10 @@ func (b *ExecutionTransactionDeriver) Start(ctx context.Context) error { b.log.Info("Execution transaction deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -112,23 +116,23 @@ func (b *ExecutionTransactionDeriver) run(rctx context.Context) { return err } - // Get the next slot - location, lookAhead, err := b.iterator.Next(ctx) + // Get the next position + position, err := b.iterator.Next(ctx) if err != nil { return err } - // Look ahead - b.lookAheadAtLocation(ctx, lookAhead) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockExecutionTransaction().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -137,7 +141,7 @@ func (b *ExecutionTransactionDeriver) run(rctx context.Context) { } // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -183,24 +187,21 @@ func (b *ExecutionTransactionDeriver) processEpoch(ctx context.Context, epoch ph return allEvents, nil } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *ExecutionTransactionDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead attempts to pre-load any blocks that might be required for the epochs that are coming up. +func (b *ExecutionTransactionDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "ExecutionTransactionDeriver.lookAheadAtLocations", + "ExecutionTransactionDeriver.lookAhead", ) defer span.End() - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockExecutionTransaction().GetEpoch()) - - sp, err := b.beacon.Node().Spec() - if err != nil { - b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") - return - } + return + } + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/beacon/eth/v2/proposer_slashing.go b/pkg/cannon/deriver/beacon/eth/v2/proposer_slashing.go index 72aeaf8f..087befce 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/proposer_slashing.go +++ b/pkg/cannon/deriver/beacon/eth/v2/proposer_slashing.go @@ -34,13 +34,13 @@ type ProposerSlashingDeriverConfig struct { type ProposerSlashingDeriver struct { log logrus.FieldLogger cfg *ProposerSlashingDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewProposerSlashingDeriver(log logrus.FieldLogger, config *ProposerSlashingDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *ProposerSlashingDeriver { +func NewProposerSlashingDeriver(log logrus.FieldLogger, config *ProposerSlashingDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *ProposerSlashingDeriver { return &ProposerSlashingDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/proposer_slashing"), cfg: config, @@ -75,6 +75,10 @@ func (b *ProposerSlashingDeriver) Start(ctx context.Context) error { b.log.Info("Proposer slashing deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -107,23 +111,23 @@ func (b *ProposerSlashingDeriver) run(rctx context.Context) { return err } - // Get the next slot - location, lookAhead, err := b.iterator.Next(ctx) + // Get the next position + position, err := b.iterator.Next(ctx) if err != nil { return err } - // Look ahead - b.lookAheadAtLocation(ctx, lookAhead) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockProposerSlashing().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -132,7 +136,7 @@ func (b *ProposerSlashingDeriver) run(rctx context.Context) { } // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -257,28 +261,25 @@ func (b *ProposerSlashingDeriver) getProposerSlashings(ctx context.Context, bloc return slashings, nil } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *ProposerSlashingDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead attempts to pre-load any blocks that might be required for the epochs that are coming up. +func (b *ProposerSlashingDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "ProposerSlashingDeriver.lookAheadAtLocations", + "ProposerSlashingDeriver.lookAhead", ) defer span.End() - if locations == nil { + if epochs == nil { return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockProposerSlashing().GetEpoch()) - - sp, err := b.beacon.Node().Spec() - if err != nil { - b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") - return - } + return + } + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/beacon/eth/v2/voluntary_exit.go b/pkg/cannon/deriver/beacon/eth/v2/voluntary_exit.go index 270aa48e..ef9db7c9 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/voluntary_exit.go +++ b/pkg/cannon/deriver/beacon/eth/v2/voluntary_exit.go @@ -34,13 +34,13 @@ type VoluntaryExitDeriverConfig struct { type VoluntaryExitDeriver struct { log logrus.FieldLogger cfg *VoluntaryExitDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewVoluntaryExitDeriver(log logrus.FieldLogger, config *VoluntaryExitDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *VoluntaryExitDeriver { +func NewVoluntaryExitDeriver(log logrus.FieldLogger, config *VoluntaryExitDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *VoluntaryExitDeriver { return &VoluntaryExitDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/voluntary_exit"), cfg: config, @@ -75,6 +75,10 @@ func (b *VoluntaryExitDeriver) Start(ctx context.Context) error { b.log.Info("Voluntary exit deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -107,23 +111,23 @@ func (b *VoluntaryExitDeriver) run(rctx context.Context) { return err } - // Get the next slot - location, lookAhead, err := b.iterator.Next(ctx) + // Get the next position + position, err := b.iterator.Next(ctx) if err != nil { return err } - // Look ahead - b.lookAheadAtLocation(ctx, lookAhead) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockVoluntaryExit().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + // Send the events for _, fn := range b.onEventsCallbacks { if err := fn(ctx, events); err != nil { @@ -132,7 +136,7 @@ func (b *VoluntaryExitDeriver) run(rctx context.Context) { } // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -150,21 +154,18 @@ func (b *VoluntaryExitDeriver) run(rctx context.Context) { } } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *VoluntaryExitDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead attempts to pre-load any blocks that might be required for the epochs that are coming up. +func (b *VoluntaryExitDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, "VoluntaryExitDeriver.lookAheadAtLocations", ) defer span.End() - if locations == nil { + if epochs == nil { return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockVoluntaryExit().GetEpoch()) - + for _, epoch := range epochs { sp, err := b.beacon.Node().Spec() if err != nil { b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") diff --git a/pkg/cannon/deriver/beacon/eth/v2/withdrawal.go b/pkg/cannon/deriver/beacon/eth/v2/withdrawal.go index 6ee25042..d45a7774 100644 --- a/pkg/cannon/deriver/beacon/eth/v2/withdrawal.go +++ b/pkg/cannon/deriver/beacon/eth/v2/withdrawal.go @@ -34,13 +34,13 @@ type WithdrawalDeriverConfig struct { type WithdrawalDeriver struct { log logrus.FieldLogger cfg *WithdrawalDeriverConfig - iterator *iterator.CheckpointIterator + iterator *iterator.BackfillingCheckpoint onEventsCallbacks []func(ctx context.Context, events []*xatu.DecoratedEvent) error beacon *ethereum.BeaconNode clientMeta *xatu.ClientMeta } -func NewWithdrawalDeriver(log logrus.FieldLogger, config *WithdrawalDeriverConfig, iter *iterator.CheckpointIterator, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *WithdrawalDeriver { +func NewWithdrawalDeriver(log logrus.FieldLogger, config *WithdrawalDeriverConfig, iter *iterator.BackfillingCheckpoint, beacon *ethereum.BeaconNode, clientMeta *xatu.ClientMeta) *WithdrawalDeriver { return &WithdrawalDeriver{ log: log.WithField("module", "cannon/event/beacon/eth/v2/withdrawal"), cfg: config, @@ -75,6 +75,10 @@ func (b *WithdrawalDeriver) Start(ctx context.Context) error { b.log.Info("Withdrawal deriver enabled") + if err := b.iterator.Start(ctx); err != nil { + return errors.Wrap(err, "failed to start iterator") + } + // Start our main loop b.run(ctx) @@ -107,23 +111,23 @@ func (b *WithdrawalDeriver) run(rctx context.Context) { return err } - // Get the next slot - location, lookAhead, err := b.iterator.Next(ctx) + // Get the next position + position, err := b.iterator.Next(ctx) if err != nil { return err } - // Look ahead - b.lookAheadAtLocation(ctx, lookAhead) - // Process the epoch - events, err := b.processEpoch(ctx, phase0.Epoch(location.GetEthV2BeaconBlockWithdrawal().GetEpoch())) + events, err := b.processEpoch(ctx, position.Next) if err != nil { b.log.WithError(err).Error("Failed to process epoch") return err } + // Look ahead + b.lookAhead(ctx, position.LookAheads) + for _, fn := range b.onEventsCallbacks { if errr := fn(ctx, events); errr != nil { return errors.Wrapf(errr, "failed to send events") @@ -131,7 +135,7 @@ func (b *WithdrawalDeriver) run(rctx context.Context) { } // Update our location - if err := b.iterator.UpdateLocation(ctx, location); err != nil { + if err := b.iterator.UpdateLocation(ctx, position.Next, position.Direction); err != nil { return err } @@ -218,28 +222,21 @@ func (b *WithdrawalDeriver) processSlot(ctx context.Context, slot phase0.Slot) ( return events, nil } -// lookAheadAtLocation takes the upcoming locations and looks ahead to do any pre-processing that might be required. -func (b *WithdrawalDeriver) lookAheadAtLocation(ctx context.Context, locations []*xatu.CannonLocation) { +// lookAhead attempts to pre-load any blocks that might be required for the epochs that are coming up. +func (b *WithdrawalDeriver) lookAhead(ctx context.Context, epochs []phase0.Epoch) { _, span := observability.Tracer().Start(ctx, - "WithdrawalDeriver.lookAheadAtLocations", + "WithdrawalDeriver.lookAhead", ) defer span.End() - if locations == nil { + sp, err := b.beacon.Node().Spec() + if err != nil { + b.log.WithError(err).Warn("Failed to look ahead at epoch") + return } - for _, location := range locations { - // Get the next look ahead epoch - epoch := phase0.Epoch(location.GetEthV2BeaconBlockWithdrawal().GetEpoch()) - - sp, err := b.beacon.Node().Spec() - if err != nil { - b.log.WithError(err).WithField("epoch", epoch).Warn("Failed to look ahead at epoch") - - return - } - + for _, epoch := range epochs { for i := uint64(0); i <= uint64(sp.SlotsPerEpoch-1); i++ { slot := phase0.Slot(i + uint64(epoch)*uint64(sp.SlotsPerEpoch)) diff --git a/pkg/cannon/deriver/blockprint/block_classification.go b/pkg/cannon/deriver/blockprint/block_classification.go index 2f96b70d..1033c875 100644 --- a/pkg/cannon/deriver/blockprint/block_classification.go +++ b/pkg/cannon/deriver/blockprint/block_classification.go @@ -117,7 +117,7 @@ func (b *BlockClassificationDeriver) run(rctx context.Context) { time.Sleep(1000 * time.Millisecond) // Get the next slot - location, _, err := b.iterator.Next(ctx) + location, err := b.iterator.Next(ctx) if err != nil { return err } diff --git a/pkg/cannon/iterator/backfilling_checkpoint_iterator.go b/pkg/cannon/iterator/backfilling_checkpoint_iterator.go index 6a8fd3f7..2dee7d2a 100644 --- a/pkg/cannon/iterator/backfilling_checkpoint_iterator.go +++ b/pkg/cannon/iterator/backfilling_checkpoint_iterator.go @@ -17,38 +17,106 @@ import ( ) type BackfillingCheckpoint struct { - log logrus.FieldLogger - cannonType xatu.CannonType - coordinator coordinator.Client - wallclock *ethwallclock.EthereumBeaconChain - networkID string - networkName string - metrics *BackfillingCheckpointMetrics - beaconNode *ethereum.BeaconNode - checkpointName string + log logrus.FieldLogger + cannonType xatu.CannonType + coordinator coordinator.Client + wallclock *ethwallclock.EthereumBeaconChain + networkID string + networkName string + metrics *BackfillingCheckpointMetrics + beaconNode *ethereum.BeaconNode + checkpointName string + lookAheadDistance int } -func NewBackfillingCheckpoint(log logrus.FieldLogger, networkName, networkID string, cannonType xatu.CannonType, coordinatorClient *coordinator.Client, wallclock *ethwallclock.EthereumBeaconChain, metrics *BackfillingCheckpointMetrics, beacon *ethereum.BeaconNode, checkpoint string) *BackfillingCheckpoint { +type BackfillingCheckpointDirection string + +const ( + BackfillingCheckpointDirectionBackfill BackfillingCheckpointDirection = "backfill" + BackfillingCheckpointDirectionHead BackfillingCheckpointDirection = "head" +) + +type BackFillingCheckpointNextResponse struct { + Next phase0.Epoch + LookAheads []phase0.Epoch + Direction BackfillingCheckpointDirection +} + +func NewBackfillingCheckpoint( + log logrus.FieldLogger, + networkName, networkID string, + cannonType xatu.CannonType, + coordinatorClient *coordinator.Client, + wallclock *ethwallclock.EthereumBeaconChain, + metrics *BackfillingCheckpointMetrics, + beacon *ethereum.BeaconNode, + checkpoint string, + lookAheadDistance int, +) *BackfillingCheckpoint { return &BackfillingCheckpoint{ log: log. WithField("module", "cannon/iterator/backfilling_checkpoint_iterator"). WithField("cannon_type", cannonType.String()), - networkName: networkName, - networkID: networkID, - cannonType: cannonType, - coordinator: *coordinatorClient, - wallclock: wallclock, - beaconNode: beacon, - metrics: metrics, - checkpointName: checkpoint, + networkName: networkName, + networkID: networkID, + cannonType: cannonType, + coordinator: *coordinatorClient, + wallclock: wallclock, + beaconNode: beacon, + metrics: metrics, + checkpointName: checkpoint, + lookAheadDistance: lookAheadDistance, } } -func (c *BackfillingCheckpoint) UpdateLocation(ctx context.Context, location *xatu.CannonLocation) error { - return c.coordinator.UpsertCannonLocationRequest(ctx, location) +func (c *BackfillingCheckpoint) Start(ctx context.Context) error { + return nil +} + +func (c *BackfillingCheckpoint) UpdateLocation(ctx context.Context, epoch phase0.Epoch, direction BackfillingCheckpointDirection) error { + location, err := c.coordinator.GetCannonLocation(ctx, c.cannonType, c.networkID) + if err != nil { + return errors.Wrap(err, "failed to get cannon location") + } + + if location == nil { + location, err = c.createLocationFromEpochNumber(epoch, epoch) + if err != nil { + return errors.Wrap(err, "failed to create fresh location from epoch number") + } + } + + marker, err := c.GetMarker(location) + if err != nil { + return errors.Wrap(err, "failed to get marker from location") + } + + switch direction { + case BackfillingCheckpointDirectionHead: + marker.FinalizedEpoch = uint64(epoch) + case BackfillingCheckpointDirectionBackfill: + marker.BackfillEpoch = int64(epoch) + default: + return errors.Errorf("unknown direction (%s) when updating cannon location", direction) + } + + newLocation, err := c.createLocationFromEpochNumber(phase0.Epoch(marker.FinalizedEpoch), phase0.Epoch(marker.BackfillEpoch)) + if err != nil { + return errors.Wrap(err, "failed to create location from epoch number") + } + + err = c.coordinator.UpsertCannonLocationRequest(ctx, newLocation) + if err != nil { + return errors.Wrap(err, "failed to update cannon location") + } + + c.metrics.SetBackfillEpoch(c.cannonType.String(), c.networkName, c.checkpointName, float64(marker.BackfillEpoch)) + c.metrics.SetFinalizedEpoch(c.cannonType.String(), c.networkName, c.checkpointName, float64(marker.FinalizedEpoch)) + + return nil } -func (c *BackfillingCheckpoint) Next(ctx context.Context) (next *xatu.CannonLocation, lookAhead []*xatu.CannonLocation, err error) { +func (c *BackfillingCheckpoint) Next(ctx context.Context) (rsp *BackFillingCheckpointNextResponse, err error) { ctx, span := observability.Tracer().Start(ctx, "BackfillingCheckpoint.Next", trace.WithAttributes( @@ -60,13 +128,23 @@ func (c *BackfillingCheckpoint) Next(ctx context.Context) (next *xatu.CannonLoca defer func() { if err != nil { span.RecordError(err) - } else { - marker, err := c.getMarker(next) - if err == nil { - span.SetAttributes(attribute.Int64("finalized_epoch", int64(marker.FinalizedEpoch))) - span.SetAttributes(attribute.Int64("backfill_epoch", marker.BackfillEpoch)) - c.metrics.SetBackfillEpoch(c.cannonType.String(), c.networkName, c.checkpointName, float64(marker.BackfillEpoch)) - c.metrics.SetFinalizedEpoch(c.cannonType.String(), c.networkName, c.checkpointName, float64(marker.FinalizedEpoch)) + } else if rsp != nil { + c.log.WithFields(logrus.Fields{ + "next_epoch": rsp.Next, + "direction": rsp.Direction, + "look_aheads": rsp.LookAheads, + }).Info("Returning next epoch") + + span.SetAttributes(attribute.Int64("next_epoch", int64(rsp.Next))) + span.SetAttributes(attribute.String("direction", string(rsp.Direction))) + + if rsp.LookAheads != nil { + lookAheads := make([]int64, len(rsp.LookAheads)) + for i, epoch := range rsp.LookAheads { + lookAheads[i] = int64(epoch) + } + + span.SetAttributes(attribute.Int64Slice("look_aheads", lookAheads)) } } @@ -77,37 +155,97 @@ func (c *BackfillingCheckpoint) Next(ctx context.Context) (next *xatu.CannonLoca // Grab the current checkpoint from the beacon node checkpoint, err := c.fetchLatestCheckpoint(ctx) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to fetch latest checkpoint") + return nil, errors.Wrap(err, "failed to fetch latest checkpoint") } if checkpoint == nil { - return nil, []*xatu.CannonLocation{}, errors.New("checkpoint is nil") + return nil, errors.New("checkpoint is nil") } + c.metrics.SetFinalizedCheckpointEpoch(c.networkName, float64(checkpoint.Epoch)) + // Check where we are at from the coordinator location, err := c.coordinator.GetCannonLocation(ctx, c.cannonType, c.networkID) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to get cannon location") + return nil, errors.Wrap(err, "failed to get cannon location") } + earliestEpoch := GetStartingEpochLocation(c.beaconNode.Metadata().Spec.ForkEpochs, c.cannonType) + // If location is empty we haven't started yet, start at the network default for the type. If the network default // is empty, we'll start at the checkpoint. - if location == nil { - location, err = c.createLocationFromEpochNumber(checkpoint.Epoch, checkpoint.Epoch) - if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to create location from slot number 0") - } - return location, c.getLookAheads(ctx, location), nil + if checkpoint.Epoch < earliestEpoch { + // The current finalized checkpoint is before the activation of this cannon, so we should sleep until the next epoch. + epoch := c.wallclock.Epochs().Current() + + sleepFor := time.Until(epoch.TimeWindow().End()) + + c.log.WithFields(logrus.Fields{ + "current_epoch": epoch.Number(), + "sleep_for": sleepFor.String(), + "checkpoint_epoch": checkpoint.Epoch, + "earliest_epoch": earliestEpoch, + }).Info("Sleeping until next epoch as the fork for the iterator is not yet active") + + time.Sleep(sleepFor) + + // Sleep for an additional 5 seconds to give the beacon node time to do epoch processing. + time.Sleep(5 * time.Second) + + continue + } + + if location == nil { + // If the location is empty, we haven't started yet, so we should return the current checkpoint epoch. + return &BackFillingCheckpointNextResponse{ + Next: checkpoint.Epoch, + LookAheads: c.calculateFinalizedLookAheads(checkpoint.Epoch, checkpoint.Epoch), + Direction: BackfillingCheckpointDirectionHead, + }, nil } - // If the backfill is at zero, and the finalized epoch is up to date, we should sleep until the next epoch - marker, err := c.getMarker(location) + marker, err := c.GetMarker(location) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to get marker from location") + return nil, errors.Wrap(err, "failed to get marker from location") } - if marker.BackfillEpoch == -1 && checkpoint.Epoch == phase0.Epoch(marker.FinalizedEpoch) { + c.metrics.SetLag(c.cannonType.String(), c.networkName, BackfillingCheckpointDirectionHead, float64(checkpoint.Epoch-phase0.Epoch(marker.FinalizedEpoch))) + c.metrics.SetLag(c.cannonType.String(), c.networkName, BackfillingCheckpointDirectionBackfill, float64(phase0.Epoch(marker.BackfillEpoch)-earliestEpoch)) + + if marker.FinalizedEpoch == 0 { + // If the marker is empty, we haven't started yet, so we should return the current checkpoint. + return &BackFillingCheckpointNextResponse{ + Next: checkpoint.Epoch, + LookAheads: c.calculateFinalizedLookAheads(checkpoint.Epoch, checkpoint.Epoch), + Direction: BackfillingCheckpointDirectionHead, + }, nil + } + + // If the head isn't up to date, we can return the next finalized epoch to process. + if marker.FinalizedEpoch < uint64(checkpoint.Epoch) { + next := phase0.Epoch(marker.FinalizedEpoch + 1) + + return &BackFillingCheckpointNextResponse{ + Next: next, + LookAheads: c.calculateFinalizedLookAheads(next, checkpoint.Epoch), + Direction: BackfillingCheckpointDirectionHead, + }, nil + } + + // If the backfill hasn't completed, we can return the next backfill epoch to process. + if marker.BackfillEpoch != int64(earliestEpoch) { + next := phase0.Epoch(marker.BackfillEpoch - 1) + + return &BackFillingCheckpointNextResponse{ + Next: next, + LookAheads: c.calculateBackfillingLookAheads(next), + Direction: BackfillingCheckpointDirectionBackfill, + }, nil + } + + // The backfill is done, and the finalized epoch is up to date - we can sleep until the next epoch. + if marker.BackfillEpoch == int64(earliestEpoch) && checkpoint.Epoch == phase0.Epoch(marker.FinalizedEpoch) { // Sleep until the next epoch epoch := c.wallclock.Epochs().Current() @@ -117,7 +255,7 @@ func (c *BackfillingCheckpoint) Next(ctx context.Context) (next *xatu.CannonLoca "current_epoch": epoch.Number(), "sleep_for": sleepFor.String(), "checkpoint_epoch": checkpoint.Epoch, - }).Trace("Sleeping until next epoch") + }).Info("Sleeping until next epoch") time.Sleep(sleepFor) @@ -127,14 +265,16 @@ func (c *BackfillingCheckpoint) Next(ctx context.Context) (next *xatu.CannonLoca continue } - // Return the current location -- consumers of this iterator will have to update the location themselves. - return location, c.getLookAheads(ctx, location), nil - } -} + // Log the current state for debugging + c.log.WithFields(logrus.Fields{ + "marker_finalized_epoch": marker.FinalizedEpoch, + "marker_backfill_epoch": marker.BackfillEpoch, + "checkpoint_epoch": checkpoint.Epoch, + "earliest_epoch": earliestEpoch, + }).Info("Current state before returning unknown state") -func (c *BackfillingCheckpoint) getLookAheads(ctx context.Context, location *xatu.CannonLocation) []*xatu.CannonLocation { - // Not supported - return []*xatu.CannonLocation{} + return nil, errors.New("unknown state") + } } func (c *BackfillingCheckpoint) fetchLatestCheckpoint(ctx context.Context) (*phase0.Checkpoint, error) { @@ -159,17 +299,76 @@ func (c *BackfillingCheckpoint) fetchLatestCheckpoint(ctx context.Context) (*pha return nil, errors.Errorf("unknown checkpoint name %s", c.checkpointName) } -func (c *BackfillingCheckpoint) getMarker(location *xatu.CannonLocation) (*xatu.BackfillingCheckpointMarker, error) { +func (c *BackfillingCheckpoint) calculateBackfillingLookAheads(epoch phase0.Epoch) []phase0.Epoch { + epochs := []phase0.Epoch{} + + for i := 0; i < c.lookAheadDistance; i++ { + e := epoch - phase0.Epoch(i) + + epochs = append(epochs, e) + } + + return epochs +} + +func (c *BackfillingCheckpoint) calculateFinalizedLookAheads(epoch, finalizedEpoch phase0.Epoch) []phase0.Epoch { + epochs := []phase0.Epoch{} + + for i := 0; i < c.lookAheadDistance; i++ { + e := epoch + phase0.Epoch(i) + if e >= finalizedEpoch { + break + } + + epochs = append(epochs, e) + } + + return epochs +} + +func (c *BackfillingCheckpoint) GetMarker(location *xatu.CannonLocation) (*xatu.BackfillingCheckpointMarker, error) { + if location == nil { + return nil, errors.New("location is nil") + } + + var marker *xatu.BackfillingCheckpointMarker + switch location.Type { case xatu.CannonType_BEACON_API_ETH_V1_PROPOSER_DUTY: - return location.GetEthV1BeaconProposerDuty().GetBackfillingCheckpointMarker(), nil + marker = location.GetEthV1BeaconProposerDuty().GetBackfillingCheckpointMarker() case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION: - return location.GetEthV2BeaconBlockElaboratedAttestation().GetBackfillingCheckpointMarker(), nil + marker = location.GetEthV2BeaconBlockElaboratedAttestation().GetBackfillingCheckpointMarker() case xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS: - return location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker(), nil + marker = location.GetEthV1BeaconValidators().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ATTESTER_SLASHING: + marker = location.GetEthV2BeaconBlockAttesterSlashing().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING: + marker = location.GetEthV2BeaconBlockProposerSlashing().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_BLS_TO_EXECUTION_CHANGE: + marker = location.GetEthV2BeaconBlockBlsToExecutionChange().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION: + marker = location.GetEthV2BeaconBlockExecutionTransaction().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT: + marker = location.GetEthV2BeaconBlockVoluntaryExit().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_DEPOSIT: + marker = location.GetEthV2BeaconBlockDeposit().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL: + marker = location.GetEthV2BeaconBlockWithdrawal().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK: + marker = location.GetEthV2BeaconBlock().GetBackfillingCheckpointMarker() + case xatu.CannonType_BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR: + marker = location.GetEthV1BeaconBlobSidecar().GetBackfillingCheckpointMarker() default: return nil, errors.Errorf("unknown cannon type %s", location.Type) } + + if marker == nil { + marker = &xatu.BackfillingCheckpointMarker{ + BackfillEpoch: -1, + } + } + + return marker, nil } func (c *BackfillingCheckpoint) createLocationFromEpochNumber(finalized, backfill phase0.Epoch) (*xatu.CannonLocation, error) { @@ -178,32 +377,82 @@ func (c *BackfillingCheckpoint) createLocationFromEpochNumber(finalized, backfil Type: c.cannonType, } + marker := &xatu.BackfillingCheckpointMarker{ + FinalizedEpoch: uint64(finalized), + BackfillEpoch: int64(backfill), + } + switch c.cannonType { case xatu.CannonType_BEACON_API_ETH_V1_PROPOSER_DUTY: location.Data = &xatu.CannonLocation_EthV1BeaconProposerDuty{ EthV1BeaconProposerDuty: &xatu.CannonLocationEthV1BeaconProposerDuty{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - FinalizedEpoch: uint64(finalized), - BackfillEpoch: int64(backfill), - }, + BackfillingCheckpointMarker: marker, }, } case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ELABORATED_ATTESTATION: location.Data = &xatu.CannonLocation_EthV2BeaconBlockElaboratedAttestation{ EthV2BeaconBlockElaboratedAttestation: &xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - FinalizedEpoch: uint64(finalized), - BackfillEpoch: int64(backfill), - }, + BackfillingCheckpointMarker: marker, }, } case xatu.CannonType_BEACON_API_ETH_V1_BEACON_VALIDATORS: location.Data = &xatu.CannonLocation_EthV1BeaconValidators{ EthV1BeaconValidators: &xatu.CannonLocationEthV1BeaconValidators{ - BackfillingCheckpointMarker: &xatu.BackfillingCheckpointMarker{ - FinalizedEpoch: uint64(finalized), - BackfillEpoch: int64(backfill), - }, + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ATTESTER_SLASHING: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockAttesterSlashing{ + EthV2BeaconBlockAttesterSlashing: &xatu.CannonLocationEthV2BeaconBlockAttesterSlashing{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockProposerSlashing{ + EthV2BeaconBlockProposerSlashing: &xatu.CannonLocationEthV2BeaconBlockProposerSlashing{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_BLS_TO_EXECUTION_CHANGE: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockBlsToExecutionChange{ + EthV2BeaconBlockBlsToExecutionChange: &xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockExecutionTransaction{ + EthV2BeaconBlockExecutionTransaction: &xatu.CannonLocationEthV2BeaconBlockExecutionTransaction{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockVoluntaryExit{ + EthV2BeaconBlockVoluntaryExit: &xatu.CannonLocationEthV2BeaconBlockVoluntaryExit{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_DEPOSIT: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockDeposit{ + EthV2BeaconBlockDeposit: &xatu.CannonLocationEthV2BeaconBlockDeposit{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL: + location.Data = &xatu.CannonLocation_EthV2BeaconBlockWithdrawal{ + EthV2BeaconBlockWithdrawal: &xatu.CannonLocationEthV2BeaconBlockWithdrawal{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK: + location.Data = &xatu.CannonLocation_EthV2BeaconBlock{ + EthV2BeaconBlock: &xatu.CannonLocationEthV2BeaconBlock{ + BackfillingCheckpointMarker: marker, + }, + } + case xatu.CannonType_BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR: + location.Data = &xatu.CannonLocation_EthV1BeaconBlobSidecar{ + EthV1BeaconBlobSidecar: &xatu.CannonLocationEthV1BeaconBlobSidecar{ + BackfillingCheckpointMarker: marker, }, } default: diff --git a/pkg/cannon/iterator/backfilling_checkpoint_iterator_metrics.go b/pkg/cannon/iterator/backfilling_checkpoint_iterator_metrics.go index adbe81d8..7ba7d1b2 100644 --- a/pkg/cannon/iterator/backfilling_checkpoint_iterator_metrics.go +++ b/pkg/cannon/iterator/backfilling_checkpoint_iterator_metrics.go @@ -3,8 +3,10 @@ package iterator import "github.com/prometheus/client_golang/prometheus" type BackfillingCheckpointMetrics struct { - BackfillEpoch *prometheus.GaugeVec - FinalizedEpoch *prometheus.GaugeVec + BackfillEpoch *prometheus.GaugeVec + FinalizedEpoch *prometheus.GaugeVec + FinalizedCheckpointEpoch *prometheus.GaugeVec + Lag *prometheus.GaugeVec } func NewBackfillingCheckpointMetrics(namespace string) BackfillingCheckpointMetrics { @@ -21,10 +23,22 @@ func NewBackfillingCheckpointMetrics(namespace string) BackfillingCheckpointMetr Name: "finalized_epoch", Help: "The current position of the finalized epoch", }, []string{"cannon_type", "network", "checkpoint"}), + FinalizedCheckpointEpoch: prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: namespace, + Name: "finalized_checkpoint_epoch", + Help: "The finalized checkpoint epoch of the network", + }, []string{"network"}), + Lag: prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: namespace, + Name: "lag_epochs", + Help: "The lag of the iterator in epochs", + }, []string{"cannon_type", "network", "direction"}), } prometheus.MustRegister(s.BackfillEpoch) prometheus.MustRegister(s.FinalizedEpoch) + prometheus.MustRegister(s.FinalizedCheckpointEpoch) + prometheus.MustRegister(s.Lag) return s } @@ -36,3 +50,11 @@ func (s *BackfillingCheckpointMetrics) SetBackfillEpoch(cannonType, network, che func (s *BackfillingCheckpointMetrics) SetFinalizedEpoch(cannonType, network, checkpoint string, epoch float64) { s.FinalizedEpoch.WithLabelValues(cannonType, network, checkpoint).Set(epoch) } + +func (s *BackfillingCheckpointMetrics) SetFinalizedCheckpointEpoch(network string, epoch float64) { + s.FinalizedCheckpointEpoch.WithLabelValues(network).Set(epoch) +} + +func (s *BackfillingCheckpointMetrics) SetLag(cannonType, network string, direction BackfillingCheckpointDirection, lag float64) { + s.Lag.WithLabelValues(cannonType, network, string(direction)).Set(lag) +} diff --git a/pkg/cannon/iterator/blockprint_iterator.go b/pkg/cannon/iterator/blockprint_iterator.go index e9c5373a..e7bd09fe 100644 --- a/pkg/cannon/iterator/blockprint_iterator.go +++ b/pkg/cannon/iterator/blockprint_iterator.go @@ -47,7 +47,7 @@ func (c *BlockprintIterator) UpdateLocation(ctx context.Context, location *xatu. return c.coordinator.UpsertCannonLocationRequest(ctx, location) } -func (c *BlockprintIterator) Next(ctx context.Context) (next *xatu.CannonLocation, lookAhead []*xatu.CannonLocation, err error) { +func (c *BlockprintIterator) Next(ctx context.Context) (next *xatu.CannonLocation, err error) { ctx, span := observability.Tracer().Start(ctx, "BlockprintIterator.Next", trace.WithAttributes( @@ -77,16 +77,16 @@ func (c *BlockprintIterator) Next(ctx context.Context) (next *xatu.CannonLocatio // Check where we are at from the coordinator location, err := c.coordinator.GetCannonLocation(ctx, c.cannonType, c.networkID) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to get cannon location") + return nil, errors.Wrap(err, "failed to get cannon location") } status, err := c.blockprintClient.SyncStatus(ctx) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to fetch sync status") + return nil, errors.Wrap(err, "failed to fetch sync status") } if !status.Synced { - return nil, []*xatu.CannonLocation{}, errors.New("blockprint is not synced") + return nil, errors.New("blockprint is not synced") } // If location is empty we haven't started yet. This means we should set our `target_end_slot` to the latest synced slot. @@ -94,15 +94,15 @@ func (c *BlockprintIterator) Next(ctx context.Context) (next *xatu.CannonLocatio if location == nil { next, errr := c.createLocation(0, phase0.Slot(status.GreatestBlockSlot)) if errr != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(errr, "failed to create location") + return nil, errors.Wrap(errr, "failed to create location") } - return next, c.getLookAheads(ctx, next), nil + return next, nil } slot, _, err := c.getSlotsFromLocation(location) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to get slots from location") + return nil, errors.Wrap(err, "failed to get slots from location") } if slot >= phase0.Slot(status.GreatestBlockSlot) { @@ -114,18 +114,13 @@ func (c *BlockprintIterator) Next(ctx context.Context) (next *xatu.CannonLocatio next, err := c.createLocation(slot, phase0.Slot(status.GreatestBlockSlot)) if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to create location") + return nil, errors.Wrap(err, "failed to create location") } - return next, c.getLookAheads(ctx, next), nil + return next, nil } } -func (c *BlockprintIterator) getLookAheads(ctx context.Context, location *xatu.CannonLocation) []*xatu.CannonLocation { - // Not supported for blockprint - return []*xatu.CannonLocation{} -} - func (c *BlockprintIterator) getSlotsFromLocation(location *xatu.CannonLocation) (slot, target phase0.Slot, err error) { switch location.Type { case xatu.CannonType_BLOCKPRINT_BLOCK_CLASSIFICATION: diff --git a/pkg/cannon/iterator/checkpoint_iterator.go b/pkg/cannon/iterator/checkpoint_iterator.go deleted file mode 100644 index 2b5018b8..00000000 --- a/pkg/cannon/iterator/checkpoint_iterator.go +++ /dev/null @@ -1,287 +0,0 @@ -package iterator - -import ( - "context" - "time" - - "github.com/attestantio/go-eth2-client/spec/phase0" - "github.com/ethpandaops/ethwallclock" - "github.com/ethpandaops/xatu/pkg/cannon/coordinator" - "github.com/ethpandaops/xatu/pkg/cannon/ethereum" - "github.com/ethpandaops/xatu/pkg/observability" - "github.com/ethpandaops/xatu/pkg/proto/xatu" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/trace" -) - -type CheckpointIterator struct { - log logrus.FieldLogger - cannonType xatu.CannonType - coordinator coordinator.Client - wallclock *ethwallclock.EthereumBeaconChain - networkID string - networkName string - metrics *CheckpointMetrics - beaconNode *ethereum.BeaconNode - checkpointName string -} - -func NewCheckpointIterator(log logrus.FieldLogger, networkName, networkID string, cannonType xatu.CannonType, coordinatorClient *coordinator.Client, wallclock *ethwallclock.EthereumBeaconChain, metrics *CheckpointMetrics, beacon *ethereum.BeaconNode, checkpoint string) *CheckpointIterator { - return &CheckpointIterator{ - log: log. - WithField("module", "cannon/iterator/checkpoint_iterator"). - WithField("cannon_type", cannonType.String()), - networkName: networkName, - networkID: networkID, - cannonType: cannonType, - coordinator: *coordinatorClient, - wallclock: wallclock, - beaconNode: beacon, - metrics: metrics, - checkpointName: checkpoint, - } -} - -func (c *CheckpointIterator) UpdateLocation(ctx context.Context, location *xatu.CannonLocation) error { - return c.coordinator.UpsertCannonLocationRequest(ctx, location) -} - -func (c *CheckpointIterator) Next(ctx context.Context) (next *xatu.CannonLocation, lookAhead []*xatu.CannonLocation, err error) { - ctx, span := observability.Tracer().Start(ctx, - "CheckpointIterator.Next", - trace.WithAttributes( - attribute.String("network", c.networkName), - attribute.String("cannon_type", c.cannonType.String()), - attribute.String("network_id", c.networkID), - ), - ) - defer func() { - if err != nil { - span.RecordError(err) - } else { - epoch, err := c.getEpochFromLocation(next) - if err == nil { - span.SetAttributes(attribute.Int64("next", int64(epoch))) - } - } - - span.End() - }() - - for { - // Grab the current checkpoint from the beacon node - checkpoint, err := c.fetchLatestEpoch(ctx) - if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to fetch latest checkpoint") - } - - if checkpoint == nil { - return nil, []*xatu.CannonLocation{}, errors.New("checkpoint is nil") - } - - // Check where we are at from the coordinator - location, err := c.coordinator.GetCannonLocation(ctx, c.cannonType, c.networkID) - if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to get cannon location") - } - - // If location is empty we haven't started yet, start at the network default for the type. If the network default - // is empty, we'll start at epoch 0. - if location == nil { - location, err = c.createLocationFromEpochNumber(phase0.Epoch(GetDefaultSlotLocation(c.beaconNode.Metadata().Spec.ForkEpochs, c.cannonType) / 32)) - if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to create location from slot number 0") - } - - return location, c.getLookAheads(ctx, location), nil - } - - // If the location is the same as the current checkpoint, we should sleep until the next epoch - locationEpoch, err := c.getEpochFromLocation(location) - if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to get epoch from location") - } - - c.metrics.SetTrailingEpochs(c.cannonType.String(), c.networkName, c.checkpointName, float64(checkpoint.Epoch-locationEpoch)) - - if locationEpoch >= checkpoint.Epoch { - // Sleep until the next epoch - epoch := c.wallclock.Epochs().Current() - - sleepFor := time.Until(epoch.TimeWindow().End()) - - c.log.WithFields(logrus.Fields{ - "current_epoch": epoch.Number(), - "sleep_for": sleepFor.String(), - "checkpoint_epoch": checkpoint.Epoch, - }).Trace("Sleeping until next epoch") - - time.Sleep(sleepFor) - - // Sleep for an additional 5 seconds to give the beacon node time to do epoch processing. - time.Sleep(5 * time.Second) - - continue - } - - nextEpoch := locationEpoch + 1 - - current, err := c.createLocationFromEpochNumber(nextEpoch) - if err != nil { - return nil, []*xatu.CannonLocation{}, errors.Wrap(err, "failed to create location from epoch number") - } - - c.metrics.SetCurrentEpoch(c.cannonType.String(), c.networkName, c.checkpointName, float64(nextEpoch)) - - return current, c.getLookAheads(ctx, current), nil - } -} - -func (c *CheckpointIterator) getLookAheads(ctx context.Context, location *xatu.CannonLocation) []*xatu.CannonLocation { - // Calculate if we should look ahead - epoch, err := c.getEpochFromLocation(location) - if err != nil { - return []*xatu.CannonLocation{} - } - - latestCheckpoint, err := c.fetchLatestEpoch(ctx) - if err != nil { - return []*xatu.CannonLocation{} - } - - lookAheads := make([]*xatu.CannonLocation, 0) - - for _, i := range []int{1, 2, 3} { - lookAheadEpoch := epoch + phase0.Epoch(i) - - if lookAheadEpoch > latestCheckpoint.Epoch { - continue - } - - loc, err := c.createLocationFromEpochNumber(lookAheadEpoch) - if err != nil { - return []*xatu.CannonLocation{} - } - - lookAheads = append(lookAheads, loc) - } - - return lookAheads -} - -func (c *CheckpointIterator) fetchLatestEpoch(ctx context.Context) (*phase0.Checkpoint, error) { - _, span := observability.Tracer().Start(ctx, - "CheckpointIterator.FetchLatestEpoch", - ) - defer span.End() - - finality, err := c.beaconNode.Node().Finality() - if err != nil { - return nil, errors.Wrap(err, "failed to fetch finality") - } - - if c.checkpointName == "justified" { - return finality.Justified, nil - } - - if c.checkpointName == "finalized" { - return finality.Finalized, nil - } - - return nil, errors.Errorf("unknown checkpoint name %s", c.checkpointName) -} - -func (c *CheckpointIterator) getEpochFromLocation(location *xatu.CannonLocation) (phase0.Epoch, error) { - switch location.Type { - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ATTESTER_SLASHING: - return phase0.Epoch(location.GetEthV2BeaconBlockAttesterSlashing().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING: - return phase0.Epoch(location.GetEthV2BeaconBlockProposerSlashing().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_BLS_TO_EXECUTION_CHANGE: - return phase0.Epoch(location.GetEthV2BeaconBlockBlsToExecutionChange().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION: - return phase0.Epoch(location.GetEthV2BeaconBlockExecutionTransaction().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT: - return phase0.Epoch(location.GetEthV2BeaconBlockVoluntaryExit().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_DEPOSIT: - return phase0.Epoch(location.GetEthV2BeaconBlockDeposit().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL: - return phase0.Epoch(location.GetEthV2BeaconBlockWithdrawal().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK: - return phase0.Epoch(location.GetEthV2BeaconBlock().Epoch), nil - case xatu.CannonType_BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR: - return phase0.Epoch(location.GetEthV1BeaconBlobSidecar().Epoch), nil - default: - return 0, errors.Errorf("unknown cannon type %s", location.Type) - } -} - -func (c *CheckpointIterator) createLocationFromEpochNumber(epoch phase0.Epoch) (*xatu.CannonLocation, error) { - location := &xatu.CannonLocation{ - NetworkId: c.networkID, - Type: c.cannonType, - } - - switch c.cannonType { - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_ATTESTER_SLASHING: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockAttesterSlashing{ - EthV2BeaconBlockAttesterSlashing: &xatu.CannonLocationEthV2BeaconBlockAttesterSlashing{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_PROPOSER_SLASHING: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockProposerSlashing{ - EthV2BeaconBlockProposerSlashing: &xatu.CannonLocationEthV2BeaconBlockProposerSlashing{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_BLS_TO_EXECUTION_CHANGE: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockBlsToExecutionChange{ - EthV2BeaconBlockBlsToExecutionChange: &xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_EXECUTION_TRANSACTION: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockExecutionTransaction{ - EthV2BeaconBlockExecutionTransaction: &xatu.CannonLocationEthV2BeaconBlockExecutionTransaction{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_VOLUNTARY_EXIT: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockVoluntaryExit{ - EthV2BeaconBlockVoluntaryExit: &xatu.CannonLocationEthV2BeaconBlockVoluntaryExit{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_DEPOSIT: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockDeposit{ - EthV2BeaconBlockDeposit: &xatu.CannonLocationEthV2BeaconBlockDeposit{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK_WITHDRAWAL: - location.Data = &xatu.CannonLocation_EthV2BeaconBlockWithdrawal{ - EthV2BeaconBlockWithdrawal: &xatu.CannonLocationEthV2BeaconBlockWithdrawal{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V2_BEACON_BLOCK: - location.Data = &xatu.CannonLocation_EthV2BeaconBlock{ - EthV2BeaconBlock: &xatu.CannonLocationEthV2BeaconBlock{ - Epoch: uint64(epoch), - }, - } - case xatu.CannonType_BEACON_API_ETH_V1_BEACON_BLOB_SIDECAR: - location.Data = &xatu.CannonLocation_EthV1BeaconBlobSidecar{ - EthV1BeaconBlobSidecar: &xatu.CannonLocationEthV1BeaconBlobSidecar{ - Epoch: uint64(epoch), - }, - } - default: - return location, errors.Errorf("unknown cannon type %s", location.Type) - } - - return location, nil -} diff --git a/pkg/cannon/iterator/checkpoint_metrics.go b/pkg/cannon/iterator/checkpoint_metrics.go deleted file mode 100644 index 7433c8cf..00000000 --- a/pkg/cannon/iterator/checkpoint_metrics.go +++ /dev/null @@ -1,38 +0,0 @@ -package iterator - -import "github.com/prometheus/client_golang/prometheus" - -type CheckpointMetrics struct { - Trailingepochs *prometheus.GaugeVec - Currentepoch *prometheus.GaugeVec -} - -func NewCheckpointMetrics(namespace string) CheckpointMetrics { - namespace += "_epoch_iterator" - - s := CheckpointMetrics{ - Trailingepochs: prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: namespace, - Name: "trailing_epochs", - Help: "The number of epochs that the iterator is trailing behind the latest checkpoint epoch", - }, []string{"cannon_type", "network", "checkpoint"}), - Currentepoch: prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: namespace, - Name: "current_epoch", - Help: "The current epoch", - }, []string{"cannon_type", "network", "checkpoint"}), - } - - prometheus.MustRegister(s.Trailingepochs) - prometheus.MustRegister(s.Currentepoch) - - return s -} - -func (s *CheckpointMetrics) SetTrailingEpochs(cannonType, network, checkpoint string, trailing float64) { - s.Trailingepochs.WithLabelValues(cannonType, network, checkpoint).Set(trailing) -} - -func (s *CheckpointMetrics) SetCurrentEpoch(cannonType, network, checkpoint string, current float64) { - s.Currentepoch.WithLabelValues(cannonType, network, checkpoint).Set(current) -} diff --git a/pkg/cannon/iterator/iterator.go b/pkg/cannon/iterator/iterator.go index de4fb457..e58eacba 100644 --- a/pkg/cannon/iterator/iterator.go +++ b/pkg/cannon/iterator/iterator.go @@ -1,7 +1,6 @@ package iterator import ( - "context" "errors" "github.com/attestantio/go-eth2-client/spec/phase0" @@ -9,14 +8,6 @@ import ( "github.com/ethpandaops/xatu/pkg/proto/xatu" ) -type Iterator interface { - UpdateLocation(ctx context.Context, location *xatu.CannonLocation) error - Next(ctx context.Context) (next *xatu.CannonLocation, lookAhead []*xatu.CannonLocation, err error) -} - -// Ensure that derivers implements the EventDeriver interface -var _ Iterator = &CheckpointIterator{} - var ( ErrLocationUpToDate = errors.New("location up to date") @@ -31,3 +22,12 @@ func GetDefaultSlotLocation(forkEpochs state.ForkEpochs, cannonType xatu.CannonT return SlotZero } + +func GetStartingEpochLocation(forkEpochs state.ForkEpochs, cannonType xatu.CannonType) phase0.Epoch { + defaults := NewSlotDefaultsFromForkEpochs(forkEpochs) + if slot, exists := defaults[cannonType]; exists { + return phase0.Epoch(slot / 32) + } + + return 0 +} diff --git a/pkg/proto/xatu/coordinator.pb.go b/pkg/proto/xatu/coordinator.pb.go index fa55b731..32e9eefd 100644 --- a/pkg/proto/xatu/coordinator.pb.go +++ b/pkg/proto/xatu/coordinator.pb.go @@ -841,7 +841,8 @@ type CannonLocationEthV2BeaconBlockVoluntaryExit struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockVoluntaryExit) Reset() { @@ -883,12 +884,20 @@ func (x *CannonLocationEthV2BeaconBlockVoluntaryExit) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockVoluntaryExit) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlockProposerSlashing struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockProposerSlashing) Reset() { @@ -930,12 +939,20 @@ func (x *CannonLocationEthV2BeaconBlockProposerSlashing) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockProposerSlashing) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlockDeposit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockDeposit) Reset() { @@ -977,12 +994,20 @@ func (x *CannonLocationEthV2BeaconBlockDeposit) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockDeposit) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlockAttesterSlashing struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockAttesterSlashing) Reset() { @@ -1024,12 +1049,20 @@ func (x *CannonLocationEthV2BeaconBlockAttesterSlashing) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockAttesterSlashing) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlockBlsToExecutionChange struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockBlsToExecutionChange) Reset() { @@ -1071,12 +1104,20 @@ func (x *CannonLocationEthV2BeaconBlockBlsToExecutionChange) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockBlsToExecutionChange) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlockExecutionTransaction struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockExecutionTransaction) Reset() { @@ -1118,12 +1159,20 @@ func (x *CannonLocationEthV2BeaconBlockExecutionTransaction) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockExecutionTransaction) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlockWithdrawal struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlockWithdrawal) Reset() { @@ -1165,12 +1214,20 @@ func (x *CannonLocationEthV2BeaconBlockWithdrawal) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlockWithdrawal) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV2BeaconBlock struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV2BeaconBlock) Reset() { @@ -1212,6 +1269,13 @@ func (x *CannonLocationEthV2BeaconBlock) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV2BeaconBlock) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationBlockprintBlockClassification struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1272,7 +1336,8 @@ type CannonLocationEthV1BeaconBlobSidecar struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation + BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } func (x *CannonLocationEthV1BeaconBlobSidecar) Reset() { @@ -1314,6 +1379,13 @@ func (x *CannonLocationEthV1BeaconBlobSidecar) GetEpoch() uint64 { return 0 } +func (x *CannonLocationEthV1BeaconBlobSidecar) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { + if x != nil { + return x.BackfillingCheckpointMarker + } + return nil +} + type CannonLocationEthV1BeaconProposerDuty struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2111,309 +2183,367 @@ var file_pkg_proto_xatu_coordinator_proto_rawDesc = []byte{ 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x43, - 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x22, 0x46, 0x0a, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, + 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0xaa, + 0x01, 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, + 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, + 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x2e, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, + 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, + 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, + 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xa4, 0x01, 0x0a, 0x25, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, + 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, + 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, + 0x65, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x3d, 0x0a, 0x25, 0x43, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, + 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, + 0x65, 0x72, 0x22, 0xb1, 0x01, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, + 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, + 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, + 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xb1, 0x01, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, + 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, + 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, + 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xa7, 0x01, 0x0a, 0x28, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, - 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x46, 0x0a, 0x2e, 0x43, 0x61, - 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, - 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x22, 0x4a, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x4a, - 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x40, 0x0a, 0x28, 0x43, 0x61, - 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, - 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x36, 0x0a, 0x1e, - 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, - 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x22, 0x69, 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, + 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, + 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, + 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x72, 0x22, 0x9d, 0x01, 0x0a, 0x1e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, + 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, + 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x72, 0x22, 0x69, 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, - 0x3c, 0x0a, 0x24, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, - 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x8e, 0x01, - 0x0a, 0x25, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, - 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x9c, - 0x01, 0x0a, 0x33, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, - 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x8c, 0x01, - 0x0a, 0x23, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, - 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xe3, 0x0e, 0x0a, - 0x0e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, - 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, - 0x45, 0x78, 0x69, 0x74, 0x48, 0x00, 0x52, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, - 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, - 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, - 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, - 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, - 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, - 0x7a, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, - 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, 0x25, - 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, - 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, - 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, - 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0xa7, 0x01, 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, - 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, - 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, - 0xa3, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0xa3, 0x01, 0x0a, 0x24, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, + 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, + 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x25, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x12, + 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, + 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, + 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x9c, 0x01, 0x0a, 0x33, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, - 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x83, 0x01, 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, - 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x12, 0x63, 0x0a, 0x13, 0x65, - 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, - 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x00, - 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, - 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x12, 0x7d, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1f, - 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, - 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, - 0x77, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, - 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, - 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, - 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, - 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x12, 0x73, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, - 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, + 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, + 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x8c, 0x01, 0x0a, 0x23, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x65, 0x0a, + 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, + 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x72, 0x22, 0xe3, 0x0e, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, + 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x8e, 0x01, 0x0a, + 0x22, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x5f, 0x65, + 0x78, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, + 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x56, + 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x48, 0x00, 0x52, 0x2d, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, + 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, + 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x12, 0x97, 0x01, + 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x73, + 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, - 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, - 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0xa6, 0x01, - 0x0a, 0x2a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, - 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, - 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x72, 0x0a, 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, - 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x42, 0x06, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x5f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x4d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x30, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, - 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x30, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, - 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x1c, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, - 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2a, 0xf9, 0x04, 0x0a, 0x0a, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, - 0x58, 0x49, 0x54, 0x10, 0x00, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, - 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, - 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, - 0x50, 0x4f, 0x53, 0x49, 0x54, 0x10, 0x02, 0x12, 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, - 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, - 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x3a, 0x0a, + 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, + 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0x7a, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, + 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x26, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, + 0x53, 0x49, 0x54, 0x12, 0x97, 0x01, 0x0a, 0x25, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x74, 0x74, 0x65, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x30, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, + 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, 0x47, 0x12, 0xa7, 0x01, + 0x0a, 0x2b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x62, 0x6c, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x04, 0x12, 0x38, 0x0a, 0x34, 0x42, 0x45, 0x41, - 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, - 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x05, 0x12, 0x2d, 0x0a, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, - 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, - 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, - 0x10, 0x06, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, - 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, - 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, - 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, - 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x29, 0x0a, 0x25, 0x42, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x12, 0xa3, 0x01, 0x0a, 0x29, 0x65, 0x74, 0x68, 0x5f, + 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x83, 0x01, + 0x0a, 0x1e, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, + 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, + 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, 0x68, + 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x29, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, + 0x57, 0x41, 0x4c, 0x12, 0x63, 0x0a, 0x13, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, 0x5f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x1e, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, + 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x12, 0x7d, 0x0a, 0x1f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, + 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x77, 0x0a, 0x1a, 0x65, 0x74, 0x68, 0x5f, 0x76, + 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x73, 0x69, + 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x62, + 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x48, 0x00, 0x52, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, + 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, + 0x12, 0x73, 0x0a, 0x1b, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x75, 0x74, 0x79, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, + 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, + 0x74, 0x79, 0x48, 0x00, 0x52, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, + 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, + 0x5f, 0x44, 0x55, 0x54, 0x59, 0x12, 0xa6, 0x01, 0x0a, 0x2a, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x32, + 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6c, + 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x45, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, + 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x12, 0x72, + 0x0a, 0x18, 0x65, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x48, 0x00, 0x52, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, - 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, - 0x45, 0x43, 0x41, 0x52, 0x10, 0x09, 0x12, 0x23, 0x0a, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, - 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, 0x59, 0x10, 0x0a, 0x12, 0x39, 0x0a, 0x35, 0x42, - 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, - 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, - 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0b, 0x12, 0x27, 0x0a, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, - 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, - 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52, 0x53, 0x10, 0x0c, 0x32, - 0x8a, 0x06, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x56, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x2c, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x78, 0x61, 0x74, 0x75, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1f, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, - 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, - 0x1e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, - 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x78, - 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x14, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, + 0x52, 0x53, 0x42, 0x06, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x5f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x55, 0x70, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4d, 0x0a, 0x19, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, 0x74, + 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, - 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, 0x74, 0x75, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x1c, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0xf9, 0x04, 0x0a, 0x0a, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x56, 0x4f, 0x4c, + 0x55, 0x4e, 0x54, 0x41, 0x52, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x54, 0x10, 0x00, 0x12, 0x34, 0x0a, + 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, + 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, + 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x10, 0x02, 0x12, + 0x34, 0x0a, 0x30, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, + 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, + 0x4b, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4c, 0x41, 0x53, 0x48, + 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x3a, 0x0a, 0x36, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, + 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, + 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, + 0x04, 0x12, 0x38, 0x0a, 0x34, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, + 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x2d, 0x0a, 0x29, 0x42, + 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, + 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x57, 0x49, + 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x41, 0x4c, 0x10, 0x06, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x45, + 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, + 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x23, + 0x0a, 0x1f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x10, 0x08, 0x12, 0x29, 0x0a, 0x25, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x43, 0x41, 0x52, 0x10, 0x09, 0x12, 0x23, + 0x0a, 0x1f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x5f, 0x56, 0x31, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x55, 0x54, + 0x59, 0x10, 0x0a, 0x12, 0x39, 0x0a, 0x35, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, + 0x49, 0x5f, 0x45, 0x54, 0x48, 0x5f, 0x56, 0x32, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x45, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x45, 0x44, + 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0b, 0x12, 0x27, + 0x0a, 0x23, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x45, 0x54, 0x48, + 0x5f, 0x56, 0x31, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x41, 0x54, 0x4f, 0x52, 0x53, 0x10, 0x0c, 0x32, 0x8a, 0x06, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x56, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x80, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x12, 0x2c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x6c, 0x6c, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x1e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x2b, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x23, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x11, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1e, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x14, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, + 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x78, 0x61, + 0x74, 0x75, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x61, 0x6e, 0x6e, + 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x65, 0x74, 0x68, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x70, 0x73, 0x2f, 0x78, + 0x61, 0x74, 0x75, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x78, 0x61, + 0x74, 0x75, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2471,45 +2601,54 @@ var file_pkg_proto_xatu_coordinator_proto_depIdxs = []int32{ 33, // 1: xatu.ExecutionNodeStatus.fork_id:type_name -> xatu.ExecutionNodeStatus.ForkID 5, // 2: xatu.CreateExecutionNodeRecordStatusRequest.status:type_name -> xatu.ExecutionNodeStatus 8, // 3: xatu.CoordinateExecutionNodeRecordsRequest.node_records:type_name -> xatu.CoordinatedNodeRecord - 13, // 4: xatu.CannonLocationEthV1BeaconProposerDuty.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker - 13, // 5: xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker - 13, // 6: xatu.CannonLocationEthV1BeaconValidators.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker - 0, // 7: xatu.CannonLocation.type:type_name -> xatu.CannonType - 14, // 8: xatu.CannonLocation.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.CannonLocationEthV2BeaconBlockVoluntaryExit - 15, // 9: xatu.CannonLocation.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockProposerSlashing - 16, // 10: xatu.CannonLocation.eth_v2_beacon_block_deposit:type_name -> xatu.CannonLocationEthV2BeaconBlockDeposit - 17, // 11: xatu.CannonLocation.eth_v2_beacon_block_attester_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockAttesterSlashing - 18, // 12: xatu.CannonLocation.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange - 19, // 13: xatu.CannonLocation.eth_v2_beacon_block_execution_transaction:type_name -> xatu.CannonLocationEthV2BeaconBlockExecutionTransaction - 20, // 14: xatu.CannonLocation.eth_v2_beacon_block_withdrawal:type_name -> xatu.CannonLocationEthV2BeaconBlockWithdrawal - 21, // 15: xatu.CannonLocation.eth_v2_beacon_block:type_name -> xatu.CannonLocationEthV2BeaconBlock - 22, // 16: xatu.CannonLocation.blockprint_block_classification:type_name -> xatu.CannonLocationBlockprintBlockClassification - 23, // 17: xatu.CannonLocation.eth_v1_beacon_blob_sidecar:type_name -> xatu.CannonLocationEthV1BeaconBlobSidecar - 24, // 18: xatu.CannonLocation.eth_v1_beacon_proposer_duty:type_name -> xatu.CannonLocationEthV1BeaconProposerDuty - 25, // 19: xatu.CannonLocation.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation - 26, // 20: xatu.CannonLocation.eth_v1_beacon_validators:type_name -> xatu.CannonLocationEthV1BeaconValidators - 0, // 21: xatu.GetCannonLocationRequest.type:type_name -> xatu.CannonType - 27, // 22: xatu.GetCannonLocationResponse.location:type_name -> xatu.CannonLocation - 27, // 23: xatu.UpsertCannonLocationRequest.location:type_name -> xatu.CannonLocation - 1, // 24: xatu.Coordinator.CreateNodeRecords:input_type -> xatu.CreateNodeRecordsRequest - 3, // 25: xatu.Coordinator.ListStalledExecutionNodeRecords:input_type -> xatu.ListStalledExecutionNodeRecordsRequest - 6, // 26: xatu.Coordinator.CreateExecutionNodeRecordStatus:input_type -> xatu.CreateExecutionNodeRecordStatusRequest - 9, // 27: xatu.Coordinator.CoordinateExecutionNodeRecords:input_type -> xatu.CoordinateExecutionNodeRecordsRequest - 11, // 28: xatu.Coordinator.GetDiscoveryNodeRecord:input_type -> xatu.GetDiscoveryNodeRecordRequest - 28, // 29: xatu.Coordinator.GetCannonLocation:input_type -> xatu.GetCannonLocationRequest - 30, // 30: xatu.Coordinator.UpsertCannonLocation:input_type -> xatu.UpsertCannonLocationRequest - 2, // 31: xatu.Coordinator.CreateNodeRecords:output_type -> xatu.CreateNodeRecordsResponse - 4, // 32: xatu.Coordinator.ListStalledExecutionNodeRecords:output_type -> xatu.ListStalledExecutionNodeRecordsResponse - 7, // 33: xatu.Coordinator.CreateExecutionNodeRecordStatus:output_type -> xatu.CreateExecutionNodeRecordStatusResponse - 10, // 34: xatu.Coordinator.CoordinateExecutionNodeRecords:output_type -> xatu.CoordinateExecutionNodeRecordsResponse - 12, // 35: xatu.Coordinator.GetDiscoveryNodeRecord:output_type -> xatu.GetDiscoveryNodeRecordResponse - 29, // 36: xatu.Coordinator.GetCannonLocation:output_type -> xatu.GetCannonLocationResponse - 31, // 37: xatu.Coordinator.UpsertCannonLocation:output_type -> xatu.UpsertCannonLocationResponse - 31, // [31:38] is the sub-list for method output_type - 24, // [24:31] is the sub-list for method input_type - 24, // [24:24] is the sub-list for extension type_name - 24, // [24:24] is the sub-list for extension extendee - 0, // [0:24] is the sub-list for field type_name + 13, // 4: xatu.CannonLocationEthV2BeaconBlockVoluntaryExit.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 5: xatu.CannonLocationEthV2BeaconBlockProposerSlashing.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 6: xatu.CannonLocationEthV2BeaconBlockDeposit.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 7: xatu.CannonLocationEthV2BeaconBlockAttesterSlashing.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 8: xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 9: xatu.CannonLocationEthV2BeaconBlockExecutionTransaction.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 10: xatu.CannonLocationEthV2BeaconBlockWithdrawal.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 11: xatu.CannonLocationEthV2BeaconBlock.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 12: xatu.CannonLocationEthV1BeaconBlobSidecar.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 13: xatu.CannonLocationEthV1BeaconProposerDuty.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 14: xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 13, // 15: xatu.CannonLocationEthV1BeaconValidators.backfilling_checkpoint_marker:type_name -> xatu.BackfillingCheckpointMarker + 0, // 16: xatu.CannonLocation.type:type_name -> xatu.CannonType + 14, // 17: xatu.CannonLocation.eth_v2_beacon_block_voluntary_exit:type_name -> xatu.CannonLocationEthV2BeaconBlockVoluntaryExit + 15, // 18: xatu.CannonLocation.eth_v2_beacon_block_proposer_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockProposerSlashing + 16, // 19: xatu.CannonLocation.eth_v2_beacon_block_deposit:type_name -> xatu.CannonLocationEthV2BeaconBlockDeposit + 17, // 20: xatu.CannonLocation.eth_v2_beacon_block_attester_slashing:type_name -> xatu.CannonLocationEthV2BeaconBlockAttesterSlashing + 18, // 21: xatu.CannonLocation.eth_v2_beacon_block_bls_to_execution_change:type_name -> xatu.CannonLocationEthV2BeaconBlockBlsToExecutionChange + 19, // 22: xatu.CannonLocation.eth_v2_beacon_block_execution_transaction:type_name -> xatu.CannonLocationEthV2BeaconBlockExecutionTransaction + 20, // 23: xatu.CannonLocation.eth_v2_beacon_block_withdrawal:type_name -> xatu.CannonLocationEthV2BeaconBlockWithdrawal + 21, // 24: xatu.CannonLocation.eth_v2_beacon_block:type_name -> xatu.CannonLocationEthV2BeaconBlock + 22, // 25: xatu.CannonLocation.blockprint_block_classification:type_name -> xatu.CannonLocationBlockprintBlockClassification + 23, // 26: xatu.CannonLocation.eth_v1_beacon_blob_sidecar:type_name -> xatu.CannonLocationEthV1BeaconBlobSidecar + 24, // 27: xatu.CannonLocation.eth_v1_beacon_proposer_duty:type_name -> xatu.CannonLocationEthV1BeaconProposerDuty + 25, // 28: xatu.CannonLocation.eth_v2_beacon_block_elaborated_attestation:type_name -> xatu.CannonLocationEthV2BeaconBlockElaboratedAttestation + 26, // 29: xatu.CannonLocation.eth_v1_beacon_validators:type_name -> xatu.CannonLocationEthV1BeaconValidators + 0, // 30: xatu.GetCannonLocationRequest.type:type_name -> xatu.CannonType + 27, // 31: xatu.GetCannonLocationResponse.location:type_name -> xatu.CannonLocation + 27, // 32: xatu.UpsertCannonLocationRequest.location:type_name -> xatu.CannonLocation + 1, // 33: xatu.Coordinator.CreateNodeRecords:input_type -> xatu.CreateNodeRecordsRequest + 3, // 34: xatu.Coordinator.ListStalledExecutionNodeRecords:input_type -> xatu.ListStalledExecutionNodeRecordsRequest + 6, // 35: xatu.Coordinator.CreateExecutionNodeRecordStatus:input_type -> xatu.CreateExecutionNodeRecordStatusRequest + 9, // 36: xatu.Coordinator.CoordinateExecutionNodeRecords:input_type -> xatu.CoordinateExecutionNodeRecordsRequest + 11, // 37: xatu.Coordinator.GetDiscoveryNodeRecord:input_type -> xatu.GetDiscoveryNodeRecordRequest + 28, // 38: xatu.Coordinator.GetCannonLocation:input_type -> xatu.GetCannonLocationRequest + 30, // 39: xatu.Coordinator.UpsertCannonLocation:input_type -> xatu.UpsertCannonLocationRequest + 2, // 40: xatu.Coordinator.CreateNodeRecords:output_type -> xatu.CreateNodeRecordsResponse + 4, // 41: xatu.Coordinator.ListStalledExecutionNodeRecords:output_type -> xatu.ListStalledExecutionNodeRecordsResponse + 7, // 42: xatu.Coordinator.CreateExecutionNodeRecordStatus:output_type -> xatu.CreateExecutionNodeRecordStatusResponse + 10, // 43: xatu.Coordinator.CoordinateExecutionNodeRecords:output_type -> xatu.CoordinateExecutionNodeRecordsResponse + 12, // 44: xatu.Coordinator.GetDiscoveryNodeRecord:output_type -> xatu.GetDiscoveryNodeRecordResponse + 29, // 45: xatu.Coordinator.GetCannonLocation:output_type -> xatu.GetCannonLocationResponse + 31, // 46: xatu.Coordinator.UpsertCannonLocation:output_type -> xatu.UpsertCannonLocationResponse + 40, // [40:47] is the sub-list for method output_type + 33, // [33:40] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_pkg_proto_xatu_coordinator_proto_init() } diff --git a/pkg/proto/xatu/coordinator.proto b/pkg/proto/xatu/coordinator.proto index 383c82a5..257c7e7f 100644 --- a/pkg/proto/xatu/coordinator.proto +++ b/pkg/proto/xatu/coordinator.proto @@ -108,28 +108,55 @@ message BackfillingCheckpointMarker { int64 backfill_epoch = 2; } -message CannonLocationEthV2BeaconBlockVoluntaryExit { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockVoluntaryExit { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlockProposerSlashing { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockProposerSlashing{ + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlockDeposit { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockDeposit { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlockAttesterSlashing { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockAttesterSlashing { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlockBlsToExecutionChange { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockBlsToExecutionChange { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlockExecutionTransaction { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockExecutionTransaction { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlockWithdrawal { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlockWithdrawal { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} -message CannonLocationEthV2BeaconBlock { uint64 epoch = 1; } +message CannonLocationEthV2BeaconBlock { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} message CannonLocationBlockprintBlockClassification { uint64 slot = 1; uint64 target_end_slot = 2; } -message CannonLocationEthV1BeaconBlobSidecar { uint64 epoch = 1; } +message CannonLocationEthV1BeaconBlobSidecar { + uint64 epoch = 1; // Marked for deprecation + BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; +} message CannonLocationEthV1BeaconProposerDuty { BackfillingCheckpointMarker backfilling_checkpoint_marker = 1; From cf83d6e65a51f4a4b0882e43e4c1dea11d8cf10e Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Mon, 8 Jul 2024 14:30:08 +1000 Subject: [PATCH 22/22] fix(server): Wrap cannon errors (#346) * refactor: Improve error handling in Cannon location and Coordinator client functions * Yeet epoch * style: Change log level from Info to Debug --- .../backfilling_checkpoint_iterator.go | 2 +- pkg/proto/xatu/coordinator.pb.go | 221 ++++++------------ pkg/proto/xatu/coordinator.proto | 18 +- pkg/server/persistence/cannon/location.go | 58 ++--- pkg/server/persistence/cannon_location.go | 10 +- pkg/server/service/coordinator/client.go | 26 ++- 6 files changed, 132 insertions(+), 203 deletions(-) diff --git a/pkg/cannon/iterator/backfilling_checkpoint_iterator.go b/pkg/cannon/iterator/backfilling_checkpoint_iterator.go index 2dee7d2a..ed13c48b 100644 --- a/pkg/cannon/iterator/backfilling_checkpoint_iterator.go +++ b/pkg/cannon/iterator/backfilling_checkpoint_iterator.go @@ -133,7 +133,7 @@ func (c *BackfillingCheckpoint) Next(ctx context.Context) (rsp *BackFillingCheck "next_epoch": rsp.Next, "direction": rsp.Direction, "look_aheads": rsp.LookAheads, - }).Info("Returning next epoch") + }).Debug("Returning next epoch") span.SetAttributes(attribute.Int64("next_epoch", int64(rsp.Next))) span.SetAttributes(attribute.String("direction", string(rsp.Direction))) diff --git a/pkg/proto/xatu/coordinator.pb.go b/pkg/proto/xatu/coordinator.pb.go index 32e9eefd..1d65b083 100644 --- a/pkg/proto/xatu/coordinator.pb.go +++ b/pkg/proto/xatu/coordinator.pb.go @@ -841,7 +841,6 @@ type CannonLocationEthV2BeaconBlockVoluntaryExit struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -877,13 +876,6 @@ func (*CannonLocationEthV2BeaconBlockVoluntaryExit) Descriptor() ([]byte, []int) return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{13} } -func (x *CannonLocationEthV2BeaconBlockVoluntaryExit) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockVoluntaryExit) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -896,7 +888,6 @@ type CannonLocationEthV2BeaconBlockProposerSlashing struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -932,13 +923,6 @@ func (*CannonLocationEthV2BeaconBlockProposerSlashing) Descriptor() ([]byte, []i return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{14} } -func (x *CannonLocationEthV2BeaconBlockProposerSlashing) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockProposerSlashing) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -951,7 +935,6 @@ type CannonLocationEthV2BeaconBlockDeposit struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -987,13 +970,6 @@ func (*CannonLocationEthV2BeaconBlockDeposit) Descriptor() ([]byte, []int) { return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{15} } -func (x *CannonLocationEthV2BeaconBlockDeposit) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockDeposit) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -1006,7 +982,6 @@ type CannonLocationEthV2BeaconBlockAttesterSlashing struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -1042,13 +1017,6 @@ func (*CannonLocationEthV2BeaconBlockAttesterSlashing) Descriptor() ([]byte, []i return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{16} } -func (x *CannonLocationEthV2BeaconBlockAttesterSlashing) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockAttesterSlashing) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -1061,7 +1029,6 @@ type CannonLocationEthV2BeaconBlockBlsToExecutionChange struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -1097,13 +1064,6 @@ func (*CannonLocationEthV2BeaconBlockBlsToExecutionChange) Descriptor() ([]byte, return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{17} } -func (x *CannonLocationEthV2BeaconBlockBlsToExecutionChange) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockBlsToExecutionChange) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -1116,7 +1076,6 @@ type CannonLocationEthV2BeaconBlockExecutionTransaction struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -1152,13 +1111,6 @@ func (*CannonLocationEthV2BeaconBlockExecutionTransaction) Descriptor() ([]byte, return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{18} } -func (x *CannonLocationEthV2BeaconBlockExecutionTransaction) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockExecutionTransaction) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -1171,7 +1123,6 @@ type CannonLocationEthV2BeaconBlockWithdrawal struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -1207,13 +1158,6 @@ func (*CannonLocationEthV2BeaconBlockWithdrawal) Descriptor() ([]byte, []int) { return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{19} } -func (x *CannonLocationEthV2BeaconBlockWithdrawal) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlockWithdrawal) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -1226,7 +1170,6 @@ type CannonLocationEthV2BeaconBlock struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -1262,13 +1205,6 @@ func (*CannonLocationEthV2BeaconBlock) Descriptor() ([]byte, []int) { return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{20} } -func (x *CannonLocationEthV2BeaconBlock) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV2BeaconBlock) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -1336,7 +1272,6 @@ type CannonLocationEthV1BeaconBlobSidecar struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Epoch uint64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // Marked for deprecation BackfillingCheckpointMarker *BackfillingCheckpointMarker `protobuf:"bytes,2,opt,name=backfilling_checkpoint_marker,json=backfillingCheckpointMarker,proto3" json:"backfilling_checkpoint_marker,omitempty"` } @@ -1372,13 +1307,6 @@ func (*CannonLocationEthV1BeaconBlobSidecar) Descriptor() ([]byte, []int) { return file_pkg_proto_xatu_coordinator_proto_rawDescGZIP(), []int{22} } -func (x *CannonLocationEthV1BeaconBlobSidecar) GetEpoch() uint64 { - if x != nil { - return x.Epoch - } - return 0 -} - func (x *CannonLocationEthV1BeaconBlobSidecar) GetBackfillingCheckpointMarker() *BackfillingCheckpointMarker { if x != nil { return x.BackfillingCheckpointMarker @@ -2183,111 +2111,102 @@ var file_pkg_proto_xatu_coordinator_proto_rawDesc = []byte{ 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0xaa, + 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x9a, 0x01, 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, - 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, - 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x2e, + 0x6b, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x12, 0x65, + 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, + 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x9d, 0x01, 0x0a, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, - 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, - 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, - 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xa4, 0x01, 0x0a, 0x25, + 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, + 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, + 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, + 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x94, 0x01, 0x0a, 0x25, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, - 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, - 0x65, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, + 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0x9d, 0x01, 0x0a, 0x2e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6c, 0x61, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, - 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, - 0x65, 0x72, 0x22, 0xb1, 0x01, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, + 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, + 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x22, 0xa1, 0x01, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6c, 0x73, 0x54, 0x6f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, - 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, - 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xb1, 0x01, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, + 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, + 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, + 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xa1, 0x01, 0x0a, 0x32, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, - 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, - 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, - 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xa7, 0x01, 0x0a, 0x28, 0x43, - 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, - 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, + 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, - 0x72, 0x6b, 0x65, 0x72, 0x22, 0x9d, 0x01, 0x0a, 0x1e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, + 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x97, 0x01, 0x0a, 0x28, 0x43, + 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, + 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, + 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, + 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, + 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x22, 0x8d, 0x01, 0x0a, 0x1e, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x32, 0x42, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, 0x0a, - 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, - 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, - 0x72, 0x6b, 0x65, 0x72, 0x22, 0x69, 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, + 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, + 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, + 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, + 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x22, 0x69, 0x0a, 0x2b, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x45, 0x6e, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, - 0xa3, 0x01, 0x0a, 0x24, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x93, 0x01, 0x0a, 0x24, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, - 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x65, - 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, - 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x8e, 0x01, 0x0a, 0x25, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, + 0x62, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, + 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x78, 0x61, 0x74, 0x75, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, + 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, + 0x65, 0x72, 0x52, 0x1b, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x4a, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x8e, 0x01, 0x0a, 0x25, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x74, 0x68, 0x56, 0x31, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x1d, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x63, diff --git a/pkg/proto/xatu/coordinator.proto b/pkg/proto/xatu/coordinator.proto index 257c7e7f..4e8e630a 100644 --- a/pkg/proto/xatu/coordinator.proto +++ b/pkg/proto/xatu/coordinator.proto @@ -109,42 +109,42 @@ message BackfillingCheckpointMarker { } message CannonLocationEthV2BeaconBlockVoluntaryExit { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlockProposerSlashing{ - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlockDeposit { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlockAttesterSlashing { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlockBlsToExecutionChange { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlockExecutionTransaction { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlockWithdrawal { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } message CannonLocationEthV2BeaconBlock { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } @@ -154,7 +154,7 @@ message CannonLocationBlockprintBlockClassification { } message CannonLocationEthV1BeaconBlobSidecar { - uint64 epoch = 1; // Marked for deprecation + reserved 1; BackfillingCheckpointMarker backfilling_checkpoint_marker = 2; } diff --git a/pkg/server/persistence/cannon/location.go b/pkg/server/persistence/cannon/location.go index e710a86c..c55439b4 100644 --- a/pkg/server/persistence/cannon/location.go +++ b/pkg/server/persistence/cannon/location.go @@ -1,6 +1,7 @@ package cannon import ( + "errors" "fmt" "time" @@ -23,6 +24,11 @@ type Location struct { Value string `json:"value" db:"value"` } +var ( + ErrFailedToMarshal = errors.New("failed to marshal location") + ErrFailedToUnmarshal = errors.New("failed to unmarshal location") +) + // MarshalValueFromProto marshals a proto message into the Value field. func (l *Location) Marshal(msg *xatu.CannonLocation) error { l.NetworkID = msg.NetworkId @@ -35,7 +41,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -46,7 +52,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -57,7 +63,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -68,7 +74,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -80,7 +86,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -92,7 +98,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -103,7 +109,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -115,7 +121,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -127,7 +133,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -139,7 +145,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -150,7 +156,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -161,7 +167,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -172,7 +178,7 @@ func (l *Location) Marshal(msg *xatu.CannonLocation) error { b, err := protojson.Marshal(data) if err != nil { - return err + return fmt.Errorf("%w: %s", ErrFailedToMarshal, err) } l.Value = string(b) @@ -196,7 +202,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockVoluntaryExit{ @@ -209,7 +215,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockProposerSlashing{ @@ -222,7 +228,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockDeposit{ @@ -235,7 +241,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockAttesterSlashing{ @@ -249,7 +255,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockExecutionTransaction{ @@ -263,7 +269,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockBlsToExecutionChange{ @@ -277,7 +283,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockWithdrawal{ @@ -290,7 +296,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlock{ @@ -303,7 +309,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_BlockprintBlockClassification{ @@ -316,7 +322,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV1BeaconBlobSidecar{ @@ -329,7 +335,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV1BeaconProposerDuty{ @@ -342,7 +348,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV2BeaconBlockElaboratedAttestation{ @@ -355,7 +361,7 @@ func (l *Location) Unmarshal() (*xatu.CannonLocation, error) { err := protojson.Unmarshal([]byte(l.Value), data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %s", ErrFailedToUnmarshal, err) } msg.Data = &xatu.CannonLocation_EthV1BeaconValidators{ diff --git a/pkg/server/persistence/cannon_location.go b/pkg/server/persistence/cannon_location.go index 306f4137..c12296ee 100644 --- a/pkg/server/persistence/cannon_location.go +++ b/pkg/server/persistence/cannon_location.go @@ -5,6 +5,8 @@ import ( "errors" "time" + perrors "github.com/pkg/errors" + "github.com/ethpandaops/xatu/pkg/server/persistence/cannon" "github.com/huandu/go-sqlbuilder" ) @@ -41,7 +43,7 @@ func (c *Client) GetCannonLocationByID(ctx context.Context, id int64) (*cannon.L rows, err := c.db.QueryContext(ctx, sql, args...) if err != nil { - return nil, err + return nil, perrors.Wrap(err, "db query failed") } defer rows.Close() @@ -53,7 +55,7 @@ func (c *Client) GetCannonLocationByID(ctx context.Context, id int64) (*cannon.L err = rows.Scan(cannonLocationStruct.Addr(&location)...) if err != nil { - return nil, err + return nil, perrors.Wrap(err, "db scan failed") } locations = append(locations, &location) @@ -76,7 +78,7 @@ func (c *Client) GetCannonLocationByNetworkIDAndType(ctx context.Context, networ rows, err := c.db.QueryContext(ctx, sql, args...) if err != nil { - return nil, err + return nil, perrors.Wrap(err, "db query failed") } defer rows.Close() @@ -88,7 +90,7 @@ func (c *Client) GetCannonLocationByNetworkIDAndType(ctx context.Context, networ err = rows.Scan(cannonLocationStruct.Addr(&location)...) if err != nil { - return nil, err + return nil, perrors.Wrap(err, "db scan failed") } locations = append(locations, &location) diff --git a/pkg/server/service/coordinator/client.go b/pkg/server/service/coordinator/client.go index f03cc94a..c5f118a6 100644 --- a/pkg/server/service/coordinator/client.go +++ b/pkg/server/service/coordinator/client.go @@ -9,6 +9,8 @@ import ( "strings" "time" + perrors "github.com/pkg/errors" + "github.com/ethpandaops/xatu/pkg/proto/xatu" "github.com/ethpandaops/xatu/pkg/server/geoip" "github.com/ethpandaops/xatu/pkg/server/persistence" @@ -68,7 +70,7 @@ func (c *Client) Start(ctx context.Context, grpcServer *grpc.Server) error { xatu.RegisterCoordinatorServer(grpcServer, c) if err := c.nodeRecord.Start(ctx); err != nil { - return status.Error(codes.Internal, err.Error()) + return status.Error(codes.Internal, perrors.Wrap(err, "failed to start node record processor").Error()) } return nil @@ -93,7 +95,7 @@ func (c *Client) CreateNodeRecords(ctx context.Context, req *xatu.CreateNodeReco pRecord, err := node.Parse(record) if err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) + return nil, status.Error(codes.InvalidArgument, perrors.Wrap(err, "failed to parse node record").Error()) } if c.geoipProvider != nil { @@ -142,7 +144,7 @@ func (c *Client) ListStalledExecutionNodeRecords(ctx context.Context, req *xatu. nodeRecords, err := c.persistence.CheckoutStalledExecutionNodeRecords(ctx, pageSize) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to get stalled execution node records from db").Error()) } response := &xatu.ListStalledExecutionNodeRecordsResponse{ @@ -194,7 +196,7 @@ func (c *Client) CreateExecutionNodeRecordStatus(ctx context.Context, req *xatu. err := c.persistence.InsertNodeRecordExecution(ctx, &st) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to insert node record execution").Error()) } result = "success" @@ -207,7 +209,7 @@ func (c *Client) CreateExecutionNodeRecordStatus(ctx context.Context, req *xatu. err = c.persistence.UpdateNodeRecord(ctx, nodeRecord) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to update node record").Error()) } return &xatu.CreateExecutionNodeRecordStatusResponse{}, nil @@ -254,7 +256,7 @@ func (c *Client) CoordinateExecutionNodeRecords(ctx context.Context, req *xatu.C if limit > 0 { newNodeRecords, err := c.persistence.ListAvailableExecutionNodeRecords(ctx, req.ClientId, ignoredNodeRecords, req.NetworkIds, req.ForkIdHashes, req.Capabilities, int(limit)) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to get available execution node records from db").Error()) } for _, record := range newNodeRecords { @@ -273,7 +275,7 @@ func (c *Client) CoordinateExecutionNodeRecords(ctx context.Context, req *xatu.C if len(activities) != 0 { err := c.persistence.UpsertNodeRecordActivities(ctx, activities) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to upsert node record activities to db").Error()) } } @@ -286,7 +288,7 @@ func (c *Client) CoordinateExecutionNodeRecords(ctx context.Context, req *xatu.C func (c *Client) GetDiscoveryNodeRecord(ctx context.Context, req *xatu.GetDiscoveryNodeRecordRequest) (*xatu.GetDiscoveryNodeRecordResponse, error) { records, err := c.persistence.ListNodeRecordExecutions(ctx, req.NetworkIds, req.ForkIdHashes, 100) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to get discovery node records from db").Error()) } if len(records) == 0 { @@ -304,7 +306,7 @@ func (c *Client) GetDiscoveryNodeRecord(ctx context.Context, req *xatu.GetDiscov func (c *Client) GetCannonLocation(ctx context.Context, req *xatu.GetCannonLocationRequest) (*xatu.GetCannonLocationResponse, error) { location, err := c.persistence.GetCannonLocationByNetworkIDAndType(ctx, req.NetworkId, req.Type.Enum().String()) if err != nil && err != persistence.ErrCannonLocationNotFound { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to get cannon location from db").Error()) } rsp := &xatu.GetCannonLocationResponse{} @@ -315,7 +317,7 @@ func (c *Client) GetCannonLocation(ctx context.Context, req *xatu.GetCannonLocat protoLoc, err := location.Unmarshal() if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to unmarshal cannon location").Error()) } return &xatu.GetCannonLocationResponse{ @@ -328,12 +330,12 @@ func (c *Client) UpsertCannonLocation(ctx context.Context, req *xatu.UpsertCanno err := newLocation.Marshal(req.Location) if err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) + return nil, status.Error(codes.InvalidArgument, perrors.Wrap(err, "failed to marshal cannon location").Error()) } err = c.persistence.UpsertCannonLocation(ctx, newLocation) if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + return nil, status.Error(codes.Internal, perrors.Wrap(err, "failed to upsert cannon location to db").Error()) } return &xatu.UpsertCannonLocationResponse{}, nil