//
// Copyright 2019 AT&T Intellectual Property
// Copyright 2019 Nokia
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//
// This source code is part of the near-RT RIC (RAN Intelligent Controller)
// platform project (RICP).

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.26.0
// 	protoc        v3.15.8
// source: enb.proto

package entities

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	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 FreqBandIndicatorPriority int32

const (
	FreqBandIndicatorPriority_UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY FreqBandIndicatorPriority = 0
	FreqBandIndicatorPriority_NOT_BROADCASTED                      FreqBandIndicatorPriority = 1
	FreqBandIndicatorPriority_BROADCASTED                          FreqBandIndicatorPriority = 2
)

// Enum value maps for FreqBandIndicatorPriority.
var (
	FreqBandIndicatorPriority_name = map[int32]string{
		0: "UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY",
		1: "NOT_BROADCASTED",
		2: "BROADCASTED",
	}
	FreqBandIndicatorPriority_value = map[string]int32{
		"UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY": 0,
		"NOT_BROADCASTED":                      1,
		"BROADCASTED":                          2,
	}
)

func (x FreqBandIndicatorPriority) Enum() *FreqBandIndicatorPriority {
	p := new(FreqBandIndicatorPriority)
	*p = x
	return p
}

func (x FreqBandIndicatorPriority) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (FreqBandIndicatorPriority) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[0].Descriptor()
}

func (FreqBandIndicatorPriority) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[0]
}

func (x FreqBandIndicatorPriority) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use FreqBandIndicatorPriority.Descriptor instead.
func (FreqBandIndicatorPriority) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{0}
}

type BandwidthReducedSI int32

const (
	BandwidthReducedSI_UNKNOWN_BANDWIDTH_REDUCED_SI BandwidthReducedSI = 0
	BandwidthReducedSI_SCHEDULED                    BandwidthReducedSI = 1
)

// Enum value maps for BandwidthReducedSI.
var (
	BandwidthReducedSI_name = map[int32]string{
		0: "UNKNOWN_BANDWIDTH_REDUCED_SI",
		1: "SCHEDULED",
	}
	BandwidthReducedSI_value = map[string]int32{
		"UNKNOWN_BANDWIDTH_REDUCED_SI": 0,
		"SCHEDULED":                    1,
	}
)

func (x BandwidthReducedSI) Enum() *BandwidthReducedSI {
	p := new(BandwidthReducedSI)
	*p = x
	return p
}

func (x BandwidthReducedSI) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BandwidthReducedSI) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[1].Descriptor()
}

func (BandwidthReducedSI) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[1]
}

func (x BandwidthReducedSI) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BandwidthReducedSI.Descriptor instead.
func (BandwidthReducedSI) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{1}
}

type SubframeAllocationType int32

const (
	SubframeAllocationType_UNKNOWN_SUBFRAME_ALLOCATION_TYPE SubframeAllocationType = 0
	SubframeAllocationType_ONE_FRAME                        SubframeAllocationType = 1
	SubframeAllocationType_FOUR_FRAME                       SubframeAllocationType = 2
)

// Enum value maps for SubframeAllocationType.
var (
	SubframeAllocationType_name = map[int32]string{
		0: "UNKNOWN_SUBFRAME_ALLOCATION_TYPE",
		1: "ONE_FRAME",
		2: "FOUR_FRAME",
	}
	SubframeAllocationType_value = map[string]int32{
		"UNKNOWN_SUBFRAME_ALLOCATION_TYPE": 0,
		"ONE_FRAME":                        1,
		"FOUR_FRAME":                       2,
	}
)

func (x SubframeAllocationType) Enum() *SubframeAllocationType {
	p := new(SubframeAllocationType)
	*p = x
	return p
}

func (x SubframeAllocationType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SubframeAllocationType) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[2].Descriptor()
}

func (SubframeAllocationType) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[2]
}

func (x SubframeAllocationType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SubframeAllocationType.Descriptor instead.
func (SubframeAllocationType) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{2}
}

type RadioframeAllocationPeriod int32

const (
	RadioframeAllocationPeriod_UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD RadioframeAllocationPeriod = 0
	RadioframeAllocationPeriod_N1                                   RadioframeAllocationPeriod = 1
	RadioframeAllocationPeriod_N2                                   RadioframeAllocationPeriod = 2
	RadioframeAllocationPeriod_N4                                   RadioframeAllocationPeriod = 3
	RadioframeAllocationPeriod_N8                                   RadioframeAllocationPeriod = 4
	RadioframeAllocationPeriod_N16                                  RadioframeAllocationPeriod = 5
	RadioframeAllocationPeriod_N32                                  RadioframeAllocationPeriod = 6
)

// Enum value maps for RadioframeAllocationPeriod.
var (
	RadioframeAllocationPeriod_name = map[int32]string{
		0: "UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD",
		1: "N1",
		2: "N2",
		3: "N4",
		4: "N8",
		5: "N16",
		6: "N32",
	}
	RadioframeAllocationPeriod_value = map[string]int32{
		"UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD": 0,
		"N1":                                   1,
		"N2":                                   2,
		"N4":                                   3,
		"N8":                                   4,
		"N16":                                  5,
		"N32":                                  6,
	}
)

func (x RadioframeAllocationPeriod) Enum() *RadioframeAllocationPeriod {
	p := new(RadioframeAllocationPeriod)
	*p = x
	return p
}

func (x RadioframeAllocationPeriod) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (RadioframeAllocationPeriod) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[3].Descriptor()
}

func (RadioframeAllocationPeriod) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[3]
}

func (x RadioframeAllocationPeriod) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use RadioframeAllocationPeriod.Descriptor instead.
func (RadioframeAllocationPeriod) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{3}
}

type NumberOfAntennaPorts int32

const (
	NumberOfAntennaPorts_UNKNOWN_NUMBER_OF_ANTENNA_PORTS NumberOfAntennaPorts = 0
	NumberOfAntennaPorts_AN1                             NumberOfAntennaPorts = 1
	NumberOfAntennaPorts_AN2                             NumberOfAntennaPorts = 2
	NumberOfAntennaPorts_AN4                             NumberOfAntennaPorts = 3
)

// Enum value maps for NumberOfAntennaPorts.
var (
	NumberOfAntennaPorts_name = map[int32]string{
		0: "UNKNOWN_NUMBER_OF_ANTENNA_PORTS",
		1: "AN1",
		2: "AN2",
		3: "AN4",
	}
	NumberOfAntennaPorts_value = map[string]int32{
		"UNKNOWN_NUMBER_OF_ANTENNA_PORTS": 0,
		"AN1":                             1,
		"AN2":                             2,
		"AN4":                             3,
	}
)

func (x NumberOfAntennaPorts) Enum() *NumberOfAntennaPorts {
	p := new(NumberOfAntennaPorts)
	*p = x
	return p
}

func (x NumberOfAntennaPorts) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (NumberOfAntennaPorts) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[4].Descriptor()
}

func (NumberOfAntennaPorts) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[4]
}

func (x NumberOfAntennaPorts) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use NumberOfAntennaPorts.Descriptor instead.
func (NumberOfAntennaPorts) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{4}
}

type SubframeAssignment int32

const (
	SubframeAssignment_UNKNOWN_SUBFRAME_ASSIGNMENT SubframeAssignment = 0
	SubframeAssignment_SA0                         SubframeAssignment = 1
	SubframeAssignment_SA1                         SubframeAssignment = 2
	SubframeAssignment_SA2                         SubframeAssignment = 3
	SubframeAssignment_SA3                         SubframeAssignment = 4
	SubframeAssignment_SA4                         SubframeAssignment = 5
	SubframeAssignment_SA5                         SubframeAssignment = 6
	SubframeAssignment_SA6                         SubframeAssignment = 7
)

// Enum value maps for SubframeAssignment.
var (
	SubframeAssignment_name = map[int32]string{
		0: "UNKNOWN_SUBFRAME_ASSIGNMENT",
		1: "SA0",
		2: "SA1",
		3: "SA2",
		4: "SA3",
		5: "SA4",
		6: "SA5",
		7: "SA6",
	}
	SubframeAssignment_value = map[string]int32{
		"UNKNOWN_SUBFRAME_ASSIGNMENT": 0,
		"SA0":                         1,
		"SA1":                         2,
		"SA2":                         3,
		"SA3":                         4,
		"SA4":                         5,
		"SA5":                         6,
		"SA6":                         7,
	}
)

func (x SubframeAssignment) Enum() *SubframeAssignment {
	p := new(SubframeAssignment)
	*p = x
	return p
}

func (x SubframeAssignment) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SubframeAssignment) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[5].Descriptor()
}

func (SubframeAssignment) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[5]
}

func (x SubframeAssignment) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SubframeAssignment.Descriptor instead.
func (SubframeAssignment) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{5}
}

type CyclicPrefix int32

const (
	CyclicPrefix_UNKNOWN_CYCLIC_PREFIX CyclicPrefix = 0
	CyclicPrefix_NORMAL                CyclicPrefix = 1
	CyclicPrefix_EXTENDED              CyclicPrefix = 2
)

// Enum value maps for CyclicPrefix.
var (
	CyclicPrefix_name = map[int32]string{
		0: "UNKNOWN_CYCLIC_PREFIX",
		1: "NORMAL",
		2: "EXTENDED",
	}
	CyclicPrefix_value = map[string]int32{
		"UNKNOWN_CYCLIC_PREFIX": 0,
		"NORMAL":                1,
		"EXTENDED":              2,
	}
)

func (x CyclicPrefix) Enum() *CyclicPrefix {
	p := new(CyclicPrefix)
	*p = x
	return p
}

func (x CyclicPrefix) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CyclicPrefix) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[6].Descriptor()
}

func (CyclicPrefix) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[6]
}

func (x CyclicPrefix) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CyclicPrefix.Descriptor instead.
func (CyclicPrefix) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{6}
}

type TransmissionBandwidth int32

const (
	TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH TransmissionBandwidth = 0
	TransmissionBandwidth_BW6                            TransmissionBandwidth = 1
	TransmissionBandwidth_BW15                           TransmissionBandwidth = 2
	TransmissionBandwidth_BW25                           TransmissionBandwidth = 3
	TransmissionBandwidth_BW50                           TransmissionBandwidth = 4
	TransmissionBandwidth_BW75                           TransmissionBandwidth = 5
	TransmissionBandwidth_BW100                          TransmissionBandwidth = 6
	TransmissionBandwidth_BW1                            TransmissionBandwidth = 7
)

// Enum value maps for TransmissionBandwidth.
var (
	TransmissionBandwidth_name = map[int32]string{
		0: "UNKNOWN_TRANSMISSION_BANDWIDTH",
		1: "BW6",
		2: "BW15",
		3: "BW25",
		4: "BW50",
		5: "BW75",
		6: "BW100",
		7: "BW1",
	}
	TransmissionBandwidth_value = map[string]int32{
		"UNKNOWN_TRANSMISSION_BANDWIDTH": 0,
		"BW6":                            1,
		"BW15":                           2,
		"BW25":                           3,
		"BW50":                           4,
		"BW75":                           5,
		"BW100":                          6,
		"BW1":                            7,
	}
)

func (x TransmissionBandwidth) Enum() *TransmissionBandwidth {
	p := new(TransmissionBandwidth)
	*p = x
	return p
}

func (x TransmissionBandwidth) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TransmissionBandwidth) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[7].Descriptor()
}

func (TransmissionBandwidth) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[7]
}

func (x TransmissionBandwidth) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use TransmissionBandwidth.Descriptor instead.
func (TransmissionBandwidth) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{7}
}

type Eutra_Mode int32

const (
	Eutra_UNKNOWN Eutra_Mode = 0
	Eutra_FDD     Eutra_Mode = 1
	Eutra_TDD     Eutra_Mode = 2
)

// Enum value maps for Eutra_Mode.
var (
	Eutra_Mode_name = map[int32]string{
		0: "UNKNOWN",
		1: "FDD",
		2: "TDD",
	}
	Eutra_Mode_value = map[string]int32{
		"UNKNOWN": 0,
		"FDD":     1,
		"TDD":     2,
	}
)

func (x Eutra_Mode) Enum() *Eutra_Mode {
	p := new(Eutra_Mode)
	*p = x
	return p
}

func (x Eutra_Mode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Eutra_Mode) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[8].Descriptor()
}

func (Eutra_Mode) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[8]
}

func (x Eutra_Mode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Eutra_Mode.Descriptor instead.
func (Eutra_Mode) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{3, 0}
}

type SpecialSubframe_Patterns int32

const (
	SpecialSubframe_UNKNOWN SpecialSubframe_Patterns = 0
	SpecialSubframe_SSP0    SpecialSubframe_Patterns = 1
	SpecialSubframe_SSP1    SpecialSubframe_Patterns = 2
	SpecialSubframe_SSP2    SpecialSubframe_Patterns = 3
	SpecialSubframe_SSP3    SpecialSubframe_Patterns = 4
	SpecialSubframe_SSP4    SpecialSubframe_Patterns = 5
	SpecialSubframe_SSP5    SpecialSubframe_Patterns = 6
	SpecialSubframe_SSP6    SpecialSubframe_Patterns = 7
	SpecialSubframe_SSP7    SpecialSubframe_Patterns = 8
	SpecialSubframe_SSP8    SpecialSubframe_Patterns = 9
)

// Enum value maps for SpecialSubframe_Patterns.
var (
	SpecialSubframe_Patterns_name = map[int32]string{
		0: "UNKNOWN",
		1: "SSP0",
		2: "SSP1",
		3: "SSP2",
		4: "SSP3",
		5: "SSP4",
		6: "SSP5",
		7: "SSP6",
		8: "SSP7",
		9: "SSP8",
	}
	SpecialSubframe_Patterns_value = map[string]int32{
		"UNKNOWN": 0,
		"SSP0":    1,
		"SSP1":    2,
		"SSP2":    3,
		"SSP3":    4,
		"SSP4":    5,
		"SSP5":    6,
		"SSP6":    7,
		"SSP7":    8,
		"SSP8":    9,
	}
)

func (x SpecialSubframe_Patterns) Enum() *SpecialSubframe_Patterns {
	p := new(SpecialSubframe_Patterns)
	*p = x
	return p
}

func (x SpecialSubframe_Patterns) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (SpecialSubframe_Patterns) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[9].Descriptor()
}

func (SpecialSubframe_Patterns) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[9]
}

func (x SpecialSubframe_Patterns) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use SpecialSubframe_Patterns.Descriptor instead.
func (SpecialSubframe_Patterns) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{12, 0}
}

type AdditionalSpecialSubframe_Patterns int32

const (
	AdditionalSpecialSubframe_UNKNOWN AdditionalSpecialSubframe_Patterns = 0
	AdditionalSpecialSubframe_SSP0    AdditionalSpecialSubframe_Patterns = 1
	AdditionalSpecialSubframe_SSP1    AdditionalSpecialSubframe_Patterns = 2
	AdditionalSpecialSubframe_SSP2    AdditionalSpecialSubframe_Patterns = 3
	AdditionalSpecialSubframe_SSP3    AdditionalSpecialSubframe_Patterns = 4
	AdditionalSpecialSubframe_SSP4    AdditionalSpecialSubframe_Patterns = 5
	AdditionalSpecialSubframe_SSP5    AdditionalSpecialSubframe_Patterns = 6
	AdditionalSpecialSubframe_SSP6    AdditionalSpecialSubframe_Patterns = 7
	AdditionalSpecialSubframe_SSP7    AdditionalSpecialSubframe_Patterns = 8
	AdditionalSpecialSubframe_SSP8    AdditionalSpecialSubframe_Patterns = 9
	AdditionalSpecialSubframe_SSP9    AdditionalSpecialSubframe_Patterns = 10
)

// Enum value maps for AdditionalSpecialSubframe_Patterns.
var (
	AdditionalSpecialSubframe_Patterns_name = map[int32]string{
		0:  "UNKNOWN",
		1:  "SSP0",
		2:  "SSP1",
		3:  "SSP2",
		4:  "SSP3",
		5:  "SSP4",
		6:  "SSP5",
		7:  "SSP6",
		8:  "SSP7",
		9:  "SSP8",
		10: "SSP9",
	}
	AdditionalSpecialSubframe_Patterns_value = map[string]int32{
		"UNKNOWN": 0,
		"SSP0":    1,
		"SSP1":    2,
		"SSP2":    3,
		"SSP3":    4,
		"SSP4":    5,
		"SSP5":    6,
		"SSP6":    7,
		"SSP7":    8,
		"SSP8":    9,
		"SSP9":    10,
	}
)

func (x AdditionalSpecialSubframe_Patterns) Enum() *AdditionalSpecialSubframe_Patterns {
	p := new(AdditionalSpecialSubframe_Patterns)
	*p = x
	return p
}

func (x AdditionalSpecialSubframe_Patterns) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (AdditionalSpecialSubframe_Patterns) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[10].Descriptor()
}

func (AdditionalSpecialSubframe_Patterns) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[10]
}

func (x AdditionalSpecialSubframe_Patterns) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use AdditionalSpecialSubframe_Patterns.Descriptor instead.
func (AdditionalSpecialSubframe_Patterns) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{13, 0}
}

type AdditionalSpecialSubframePatterns_Extension int32

const (
	AdditionalSpecialSubframePatterns_UNKNOWN AdditionalSpecialSubframePatterns_Extension = 0
	AdditionalSpecialSubframePatterns_SSP10   AdditionalSpecialSubframePatterns_Extension = 1
)

// Enum value maps for AdditionalSpecialSubframePatterns_Extension.
var (
	AdditionalSpecialSubframePatterns_Extension_name = map[int32]string{
		0: "UNKNOWN",
		1: "SSP10",
	}
	AdditionalSpecialSubframePatterns_Extension_value = map[string]int32{
		"UNKNOWN": 0,
		"SSP10":   1,
	}
)

func (x AdditionalSpecialSubframePatterns_Extension) Enum() *AdditionalSpecialSubframePatterns_Extension {
	p := new(AdditionalSpecialSubframePatterns_Extension)
	*p = x
	return p
}

func (x AdditionalSpecialSubframePatterns_Extension) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (AdditionalSpecialSubframePatterns_Extension) Descriptor() protoreflect.EnumDescriptor {
	return file_enb_proto_enumTypes[11].Descriptor()
}

func (AdditionalSpecialSubframePatterns_Extension) Type() protoreflect.EnumType {
	return &file_enb_proto_enumTypes[11]
}

func (x AdditionalSpecialSubframePatterns_Extension) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use AdditionalSpecialSubframePatterns_Extension.Descriptor instead.
func (AdditionalSpecialSubframePatterns_Extension) EnumDescriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{14, 0}
}

type Enb struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	EnbType     EnbType                  `protobuf:"varint,1,opt,name=enb_type,json=enbType,proto3,enum=entities.EnbType" json:"enb_type,omitempty"`
	ServedCells []*ServedCellInfo        `protobuf:"bytes,2,rep,name=served_cells,json=servedCells,proto3" json:"served_cells,omitempty"`
	GuGroupIds  []string                 `protobuf:"bytes,3,rep,name=gu_group_ids,json=guGroupIds,proto3" json:"gu_group_ids,omitempty"`
	NodeConfigs []*E2NodeComponentConfig `protobuf:"bytes,4,rep,name=node_configs,json=nodeConfigs,proto3" json:"node_configs,omitempty"`
}

func (x *Enb) Reset() {
	*x = Enb{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Enb) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Enb) ProtoMessage() {}

func (x *Enb) ProtoReflect() protoreflect.Message {
	mi := &file_enb_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 Enb.ProtoReflect.Descriptor instead.
func (*Enb) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{0}
}

func (x *Enb) GetEnbType() EnbType {
	if x != nil {
		return x.EnbType
	}
	return EnbType_UNKNOWN_ENB_TYPE
}

func (x *Enb) GetServedCells() []*ServedCellInfo {
	if x != nil {
		return x.ServedCells
	}
	return nil
}

func (x *Enb) GetGuGroupIds() []string {
	if x != nil {
		return x.GuGroupIds
	}
	return nil
}

func (x *Enb) GetNodeConfigs() []*E2NodeComponentConfig {
	if x != nil {
		return x.NodeConfigs
	}
	return nil
}

type ServedCellInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Pci                       uint32                     `protobuf:"varint,1,opt,name=pci,proto3" json:"pci,omitempty"`
	CellId                    string                     `protobuf:"bytes,2,opt,name=cell_id,json=cellId,proto3" json:"cell_id,omitempty"`
	Tac                       string                     `protobuf:"bytes,3,opt,name=tac,proto3" json:"tac,omitempty"`
	BroadcastPlmns            []string                   `protobuf:"bytes,4,rep,name=broadcast_plmns,json=broadcastPlmns,proto3" json:"broadcast_plmns,omitempty"`
	ChoiceEutraMode           *ChoiceEUTRAMode           `protobuf:"bytes,5,opt,name=choice_eutra_mode,json=choiceEutraMode,proto3" json:"choice_eutra_mode,omitempty"`
	EutraMode                 Eutra_Mode                 `protobuf:"varint,6,opt,name=eutra_mode,json=eutraMode,proto3,enum=entities.Eutra_Mode" json:"eutra_mode,omitempty"`
	NumberOfAntennaPorts      NumberOfAntennaPorts       `protobuf:"varint,7,opt,name=number_of_antenna_ports,json=numberOfAntennaPorts,proto3,enum=entities.NumberOfAntennaPorts" json:"number_of_antenna_ports,omitempty"`
	PrachConfiguration        *PrachConfiguration        `protobuf:"bytes,8,opt,name=prach_configuration,json=prachConfiguration,proto3" json:"prach_configuration,omitempty"`
	MbsfnSubframeInfos        []*MbsfnSubframe           `protobuf:"bytes,9,rep,name=mbsfn_subframe_infos,json=mbsfnSubframeInfos,proto3" json:"mbsfn_subframe_infos,omitempty"`
	CsgId                     string                     `protobuf:"bytes,10,opt,name=csg_id,json=csgId,proto3" json:"csg_id,omitempty"`
	MbmsServiceAreaIdentities []string                   `protobuf:"bytes,11,rep,name=mbms_service_area_identities,json=mbmsServiceAreaIdentities,proto3" json:"mbms_service_area_identities,omitempty"`
	MultibandInfos            []uint32                   `protobuf:"varint,12,rep,packed,name=multiband_infos,json=multibandInfos,proto3" json:"multiband_infos,omitempty"`
	FreqBandIndicatorPriority FreqBandIndicatorPriority  `protobuf:"varint,13,opt,name=freq_band_indicator_priority,json=freqBandIndicatorPriority,proto3,enum=entities.FreqBandIndicatorPriority" json:"freq_band_indicator_priority,omitempty"`
	BandwidthReducedSi        BandwidthReducedSI         `protobuf:"varint,14,opt,name=bandwidth_reduced_si,json=bandwidthReducedSi,proto3,enum=entities.BandwidthReducedSI" json:"bandwidth_reduced_si,omitempty"`
	NeighbourInfos            []*NeighbourInformation    `protobuf:"bytes,15,rep,name=neighbour_infos,json=neighbourInfos,proto3" json:"neighbour_infos,omitempty"`
	AdditionalCellInformation *AdditionalCellInformation `protobuf:"bytes,16,opt,name=additional_cell_information,json=additionalCellInformation,proto3" json:"additional_cell_information,omitempty"`
}

func (x *ServedCellInfo) Reset() {
	*x = ServedCellInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ServedCellInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ServedCellInfo) ProtoMessage() {}

func (x *ServedCellInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_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 ServedCellInfo.ProtoReflect.Descriptor instead.
func (*ServedCellInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{1}
}

func (x *ServedCellInfo) GetPci() uint32 {
	if x != nil {
		return x.Pci
	}
	return 0
}

func (x *ServedCellInfo) GetCellId() string {
	if x != nil {
		return x.CellId
	}
	return ""
}

func (x *ServedCellInfo) GetTac() string {
	if x != nil {
		return x.Tac
	}
	return ""
}

func (x *ServedCellInfo) GetBroadcastPlmns() []string {
	if x != nil {
		return x.BroadcastPlmns
	}
	return nil
}

func (x *ServedCellInfo) GetChoiceEutraMode() *ChoiceEUTRAMode {
	if x != nil {
		return x.ChoiceEutraMode
	}
	return nil
}

func (x *ServedCellInfo) GetEutraMode() Eutra_Mode {
	if x != nil {
		return x.EutraMode
	}
	return Eutra_UNKNOWN
}

func (x *ServedCellInfo) GetNumberOfAntennaPorts() NumberOfAntennaPorts {
	if x != nil {
		return x.NumberOfAntennaPorts
	}
	return NumberOfAntennaPorts_UNKNOWN_NUMBER_OF_ANTENNA_PORTS
}

func (x *ServedCellInfo) GetPrachConfiguration() *PrachConfiguration {
	if x != nil {
		return x.PrachConfiguration
	}
	return nil
}

func (x *ServedCellInfo) GetMbsfnSubframeInfos() []*MbsfnSubframe {
	if x != nil {
		return x.MbsfnSubframeInfos
	}
	return nil
}

func (x *ServedCellInfo) GetCsgId() string {
	if x != nil {
		return x.CsgId
	}
	return ""
}

func (x *ServedCellInfo) GetMbmsServiceAreaIdentities() []string {
	if x != nil {
		return x.MbmsServiceAreaIdentities
	}
	return nil
}

func (x *ServedCellInfo) GetMultibandInfos() []uint32 {
	if x != nil {
		return x.MultibandInfos
	}
	return nil
}

func (x *ServedCellInfo) GetFreqBandIndicatorPriority() FreqBandIndicatorPriority {
	if x != nil {
		return x.FreqBandIndicatorPriority
	}
	return FreqBandIndicatorPriority_UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY
}

func (x *ServedCellInfo) GetBandwidthReducedSi() BandwidthReducedSI {
	if x != nil {
		return x.BandwidthReducedSi
	}
	return BandwidthReducedSI_UNKNOWN_BANDWIDTH_REDUCED_SI
}

func (x *ServedCellInfo) GetNeighbourInfos() []*NeighbourInformation {
	if x != nil {
		return x.NeighbourInfos
	}
	return nil
}

func (x *ServedCellInfo) GetAdditionalCellInformation() *AdditionalCellInformation {
	if x != nil {
		return x.AdditionalCellInformation
	}
	return nil
}

type ChoiceEUTRAMode struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Fdd *FddInfo `protobuf:"bytes,1,opt,name=fdd,proto3" json:"fdd,omitempty"`
	Tdd *TddInfo `protobuf:"bytes,2,opt,name=tdd,proto3" json:"tdd,omitempty"`
}

func (x *ChoiceEUTRAMode) Reset() {
	*x = ChoiceEUTRAMode{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ChoiceEUTRAMode) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ChoiceEUTRAMode) ProtoMessage() {}

func (x *ChoiceEUTRAMode) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[2]
	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 ChoiceEUTRAMode.ProtoReflect.Descriptor instead.
func (*ChoiceEUTRAMode) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{2}
}

func (x *ChoiceEUTRAMode) GetFdd() *FddInfo {
	if x != nil {
		return x.Fdd
	}
	return nil
}

func (x *ChoiceEUTRAMode) GetTdd() *TddInfo {
	if x != nil {
		return x.Tdd
	}
	return nil
}

type Eutra struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *Eutra) Reset() {
	*x = Eutra{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Eutra) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Eutra) ProtoMessage() {}

func (x *Eutra) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[3]
	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 Eutra.ProtoReflect.Descriptor instead.
func (*Eutra) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{3}
}

type NeighbourInformation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Ecgi   string `protobuf:"bytes,1,opt,name=ecgi,proto3" json:"ecgi,omitempty"`
	Pci    uint32 `protobuf:"varint,2,opt,name=pci,proto3" json:"pci,omitempty"`
	EarFcn uint32 `protobuf:"varint,3,opt,name=ear_fcn,json=earFcn,proto3" json:"ear_fcn,omitempty"`
	Tac    string `protobuf:"bytes,4,opt,name=tac,proto3" json:"tac,omitempty"`
}

func (x *NeighbourInformation) Reset() {
	*x = NeighbourInformation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *NeighbourInformation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*NeighbourInformation) ProtoMessage() {}

func (x *NeighbourInformation) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[4]
	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 NeighbourInformation.ProtoReflect.Descriptor instead.
func (*NeighbourInformation) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{4}
}

func (x *NeighbourInformation) GetEcgi() string {
	if x != nil {
		return x.Ecgi
	}
	return ""
}

func (x *NeighbourInformation) GetPci() uint32 {
	if x != nil {
		return x.Pci
	}
	return 0
}

func (x *NeighbourInformation) GetEarFcn() uint32 {
	if x != nil {
		return x.EarFcn
	}
	return 0
}

func (x *NeighbourInformation) GetTac() string {
	if x != nil {
		return x.Tac
	}
	return ""
}

type MbsfnSubframe struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	RadioframeAllocationPeriod RadioframeAllocationPeriod `protobuf:"varint,1,opt,name=radioframe_allocation_period,json=radioframeAllocationPeriod,proto3,enum=entities.RadioframeAllocationPeriod" json:"radioframe_allocation_period,omitempty"`
	RadioframeAllocationOffset uint32                     `protobuf:"varint,2,opt,name=radioframe_allocation_offset,json=radioframeAllocationOffset,proto3" json:"radioframe_allocation_offset,omitempty"`
	SubframeAllocation         string                     `protobuf:"bytes,3,opt,name=subframe_allocation,json=subframeAllocation,proto3" json:"subframe_allocation,omitempty"`
	SubframeAllocationType     SubframeAllocationType     `protobuf:"varint,4,opt,name=subframe_allocation_type,json=subframeAllocationType,proto3,enum=entities.SubframeAllocationType" json:"subframe_allocation_type,omitempty"`
}

func (x *MbsfnSubframe) Reset() {
	*x = MbsfnSubframe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *MbsfnSubframe) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MbsfnSubframe) ProtoMessage() {}

func (x *MbsfnSubframe) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[5]
	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 MbsfnSubframe.ProtoReflect.Descriptor instead.
func (*MbsfnSubframe) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{5}
}

func (x *MbsfnSubframe) GetRadioframeAllocationPeriod() RadioframeAllocationPeriod {
	if x != nil {
		return x.RadioframeAllocationPeriod
	}
	return RadioframeAllocationPeriod_UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD
}

func (x *MbsfnSubframe) GetRadioframeAllocationOffset() uint32 {
	if x != nil {
		return x.RadioframeAllocationOffset
	}
	return 0
}

func (x *MbsfnSubframe) GetSubframeAllocation() string {
	if x != nil {
		return x.SubframeAllocation
	}
	return ""
}

func (x *MbsfnSubframe) GetSubframeAllocationType() SubframeAllocationType {
	if x != nil {
		return x.SubframeAllocationType
	}
	return SubframeAllocationType_UNKNOWN_SUBFRAME_ALLOCATION_TYPE
}

type PrachConfiguration struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	RootSequenceIndex                uint32 `protobuf:"varint,1,opt,name=root_sequence_index,json=rootSequenceIndex,proto3" json:"root_sequence_index,omitempty"`
	ZeroCorrelationZoneConfiguration uint32 `protobuf:"varint,2,opt,name=zero_correlation_zone_configuration,json=zeroCorrelationZoneConfiguration,proto3" json:"zero_correlation_zone_configuration,omitempty"`
	HighSpeedFlag                    bool   `protobuf:"varint,3,opt,name=high_speed_flag,json=highSpeedFlag,proto3" json:"high_speed_flag,omitempty"`
	PrachFrequencyOffset             uint32 `protobuf:"varint,4,opt,name=prach_frequency_offset,json=prachFrequencyOffset,proto3" json:"prach_frequency_offset,omitempty"`
	PrachConfigurationIndex          uint32 `protobuf:"varint,5,opt,name=prach_configuration_index,json=prachConfigurationIndex,proto3" json:"prach_configuration_index,omitempty"`
}

func (x *PrachConfiguration) Reset() {
	*x = PrachConfiguration{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *PrachConfiguration) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PrachConfiguration) ProtoMessage() {}

func (x *PrachConfiguration) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[6]
	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 PrachConfiguration.ProtoReflect.Descriptor instead.
func (*PrachConfiguration) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{6}
}

func (x *PrachConfiguration) GetRootSequenceIndex() uint32 {
	if x != nil {
		return x.RootSequenceIndex
	}
	return 0
}

func (x *PrachConfiguration) GetZeroCorrelationZoneConfiguration() uint32 {
	if x != nil {
		return x.ZeroCorrelationZoneConfiguration
	}
	return 0
}

func (x *PrachConfiguration) GetHighSpeedFlag() bool {
	if x != nil {
		return x.HighSpeedFlag
	}
	return false
}

func (x *PrachConfiguration) GetPrachFrequencyOffset() uint32 {
	if x != nil {
		return x.PrachFrequencyOffset
	}
	return 0
}

func (x *PrachConfiguration) GetPrachConfigurationIndex() uint32 {
	if x != nil {
		return x.PrachConfigurationIndex
	}
	return 0
}

type TddInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	EarFcn                                 uint32                                  `protobuf:"varint,1,opt,name=ear_fcn,json=earFcn,proto3" json:"ear_fcn,omitempty"`
	TransmissionBandwidth                  TransmissionBandwidth                   `protobuf:"varint,2,opt,name=transmission_bandwidth,json=transmissionBandwidth,proto3,enum=entities.TransmissionBandwidth" json:"transmission_bandwidth,omitempty"`
	SubframeAssignment                     SubframeAssignment                      `protobuf:"varint,3,opt,name=subframe_assignment,json=subframeAssignment,proto3,enum=entities.SubframeAssignment" json:"subframe_assignment,omitempty"`
	SpecialSubframeInfo                    *SpecialSubframeInfo                    `protobuf:"bytes,4,opt,name=special_subframe_info,json=specialSubframeInfo,proto3" json:"special_subframe_info,omitempty"`
	AdditionalSpecialSubframeInfo          *AdditionalSpecialSubframeInfo          `protobuf:"bytes,5,opt,name=additional_special_subframe_info,json=additionalSpecialSubframeInfo,proto3" json:"additional_special_subframe_info,omitempty"`
	AdditionalSpecialSubframeExtensionInfo *AdditionalSpecialSubframeExtensionInfo `protobuf:"bytes,6,opt,name=additional_special_subframe_extension_info,json=additionalSpecialSubframeExtensionInfo,proto3" json:"additional_special_subframe_extension_info,omitempty"`
}

func (x *TddInfo) Reset() {
	*x = TddInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *TddInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TddInfo) ProtoMessage() {}

func (x *TddInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[7]
	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 TddInfo.ProtoReflect.Descriptor instead.
func (*TddInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{7}
}

func (x *TddInfo) GetEarFcn() uint32 {
	if x != nil {
		return x.EarFcn
	}
	return 0
}

func (x *TddInfo) GetTransmissionBandwidth() TransmissionBandwidth {
	if x != nil {
		return x.TransmissionBandwidth
	}
	return TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH
}

func (x *TddInfo) GetSubframeAssignment() SubframeAssignment {
	if x != nil {
		return x.SubframeAssignment
	}
	return SubframeAssignment_UNKNOWN_SUBFRAME_ASSIGNMENT
}

func (x *TddInfo) GetSpecialSubframeInfo() *SpecialSubframeInfo {
	if x != nil {
		return x.SpecialSubframeInfo
	}
	return nil
}

func (x *TddInfo) GetAdditionalSpecialSubframeInfo() *AdditionalSpecialSubframeInfo {
	if x != nil {
		return x.AdditionalSpecialSubframeInfo
	}
	return nil
}

func (x *TddInfo) GetAdditionalSpecialSubframeExtensionInfo() *AdditionalSpecialSubframeExtensionInfo {
	if x != nil {
		return x.AdditionalSpecialSubframeExtensionInfo
	}
	return nil
}

type AdditionalSpecialSubframeExtensionInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	AdditionalSpecialSubframePatternsExtension AdditionalSpecialSubframePatterns_Extension `protobuf:"varint,1,opt,name=additional_special_subframe_patterns_extension,json=additionalSpecialSubframePatternsExtension,proto3,enum=entities.AdditionalSpecialSubframePatterns_Extension" json:"additional_special_subframe_patterns_extension,omitempty"`
	CyclicPrefixDl                             CyclicPrefix                                `protobuf:"varint,2,opt,name=cyclic_prefix_dl,json=cyclicPrefixDl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_dl,omitempty"`
	CyclicPrefixUl                             CyclicPrefix                                `protobuf:"varint,3,opt,name=cyclic_prefix_ul,json=cyclicPrefixUl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_ul,omitempty"`
}

func (x *AdditionalSpecialSubframeExtensionInfo) Reset() {
	*x = AdditionalSpecialSubframeExtensionInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AdditionalSpecialSubframeExtensionInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AdditionalSpecialSubframeExtensionInfo) ProtoMessage() {}

func (x *AdditionalSpecialSubframeExtensionInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[8]
	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 AdditionalSpecialSubframeExtensionInfo.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframeExtensionInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{8}
}

func (x *AdditionalSpecialSubframeExtensionInfo) GetAdditionalSpecialSubframePatternsExtension() AdditionalSpecialSubframePatterns_Extension {
	if x != nil {
		return x.AdditionalSpecialSubframePatternsExtension
	}
	return AdditionalSpecialSubframePatterns_UNKNOWN
}

func (x *AdditionalSpecialSubframeExtensionInfo) GetCyclicPrefixDl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixDl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

func (x *AdditionalSpecialSubframeExtensionInfo) GetCyclicPrefixUl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixUl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

type AdditionalSpecialSubframeInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	AdditionalSpecialSubframePatterns AdditionalSpecialSubframe_Patterns `protobuf:"varint,1,opt,name=additional_special_subframe_patterns,json=additionalSpecialSubframePatterns,proto3,enum=entities.AdditionalSpecialSubframe_Patterns" json:"additional_special_subframe_patterns,omitempty"`
	CyclicPrefixDl                    CyclicPrefix                       `protobuf:"varint,2,opt,name=cyclic_prefix_dl,json=cyclicPrefixDl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_dl,omitempty"`
	CyclicPrefixUl                    CyclicPrefix                       `protobuf:"varint,3,opt,name=cyclic_prefix_ul,json=cyclicPrefixUl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_ul,omitempty"`
}

func (x *AdditionalSpecialSubframeInfo) Reset() {
	*x = AdditionalSpecialSubframeInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AdditionalSpecialSubframeInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AdditionalSpecialSubframeInfo) ProtoMessage() {}

func (x *AdditionalSpecialSubframeInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[9]
	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 AdditionalSpecialSubframeInfo.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframeInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{9}
}

func (x *AdditionalSpecialSubframeInfo) GetAdditionalSpecialSubframePatterns() AdditionalSpecialSubframe_Patterns {
	if x != nil {
		return x.AdditionalSpecialSubframePatterns
	}
	return AdditionalSpecialSubframe_UNKNOWN
}

func (x *AdditionalSpecialSubframeInfo) GetCyclicPrefixDl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixDl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

func (x *AdditionalSpecialSubframeInfo) GetCyclicPrefixUl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixUl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

type FddInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	UlearFcn                uint32                `protobuf:"varint,1,opt,name=ulear_fcn,json=ulearFcn,proto3" json:"ulear_fcn,omitempty"`
	DlearFcn                uint32                `protobuf:"varint,2,opt,name=dlear_fcn,json=dlearFcn,proto3" json:"dlear_fcn,omitempty"`
	UlTransmissionBandwidth TransmissionBandwidth `protobuf:"varint,3,opt,name=ul_transmission_bandwidth,json=ulTransmissionBandwidth,proto3,enum=entities.TransmissionBandwidth" json:"ul_transmission_bandwidth,omitempty"`
	DlTransmissionBandwidth TransmissionBandwidth `protobuf:"varint,4,opt,name=dl_transmission_bandwidth,json=dlTransmissionBandwidth,proto3,enum=entities.TransmissionBandwidth" json:"dl_transmission_bandwidth,omitempty"`
}

func (x *FddInfo) Reset() {
	*x = FddInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *FddInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FddInfo) ProtoMessage() {}

func (x *FddInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[10]
	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 FddInfo.ProtoReflect.Descriptor instead.
func (*FddInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{10}
}

func (x *FddInfo) GetUlearFcn() uint32 {
	if x != nil {
		return x.UlearFcn
	}
	return 0
}

func (x *FddInfo) GetDlearFcn() uint32 {
	if x != nil {
		return x.DlearFcn
	}
	return 0
}

func (x *FddInfo) GetUlTransmissionBandwidth() TransmissionBandwidth {
	if x != nil {
		return x.UlTransmissionBandwidth
	}
	return TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH
}

func (x *FddInfo) GetDlTransmissionBandwidth() TransmissionBandwidth {
	if x != nil {
		return x.DlTransmissionBandwidth
	}
	return TransmissionBandwidth_UNKNOWN_TRANSMISSION_BANDWIDTH
}

type SpecialSubframeInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	SpecialSubframePatterns SpecialSubframe_Patterns `protobuf:"varint,1,opt,name=special_subframe_patterns,json=specialSubframePatterns,proto3,enum=entities.SpecialSubframe_Patterns" json:"special_subframe_patterns,omitempty"`
	CyclicPrefixDl          CyclicPrefix             `protobuf:"varint,2,opt,name=cyclic_prefix_dl,json=cyclicPrefixDl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_dl,omitempty"`
	CyclicPrefixUl          CyclicPrefix             `protobuf:"varint,3,opt,name=cyclic_prefix_ul,json=cyclicPrefixUl,proto3,enum=entities.CyclicPrefix" json:"cyclic_prefix_ul,omitempty"`
}

func (x *SpecialSubframeInfo) Reset() {
	*x = SpecialSubframeInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SpecialSubframeInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SpecialSubframeInfo) ProtoMessage() {}

func (x *SpecialSubframeInfo) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[11]
	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 SpecialSubframeInfo.ProtoReflect.Descriptor instead.
func (*SpecialSubframeInfo) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{11}
}

func (x *SpecialSubframeInfo) GetSpecialSubframePatterns() SpecialSubframe_Patterns {
	if x != nil {
		return x.SpecialSubframePatterns
	}
	return SpecialSubframe_UNKNOWN
}

func (x *SpecialSubframeInfo) GetCyclicPrefixDl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixDl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

func (x *SpecialSubframeInfo) GetCyclicPrefixUl() CyclicPrefix {
	if x != nil {
		return x.CyclicPrefixUl
	}
	return CyclicPrefix_UNKNOWN_CYCLIC_PREFIX
}

type SpecialSubframe struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *SpecialSubframe) Reset() {
	*x = SpecialSubframe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SpecialSubframe) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SpecialSubframe) ProtoMessage() {}

func (x *SpecialSubframe) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[12]
	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 SpecialSubframe.ProtoReflect.Descriptor instead.
func (*SpecialSubframe) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{12}
}

type AdditionalSpecialSubframe struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *AdditionalSpecialSubframe) Reset() {
	*x = AdditionalSpecialSubframe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AdditionalSpecialSubframe) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AdditionalSpecialSubframe) ProtoMessage() {}

func (x *AdditionalSpecialSubframe) ProtoReflect() protoreflect.Message {
	mi := &file_enb_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 AdditionalSpecialSubframe.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframe) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{13}
}

type AdditionalSpecialSubframePatterns struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *AdditionalSpecialSubframePatterns) Reset() {
	*x = AdditionalSpecialSubframePatterns{}
	if protoimpl.UnsafeEnabled {
		mi := &file_enb_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AdditionalSpecialSubframePatterns) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AdditionalSpecialSubframePatterns) ProtoMessage() {}

func (x *AdditionalSpecialSubframePatterns) ProtoReflect() protoreflect.Message {
	mi := &file_enb_proto_msgTypes[14]
	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 AdditionalSpecialSubframePatterns.ProtoReflect.Descriptor instead.
func (*AdditionalSpecialSubframePatterns) Descriptor() ([]byte, []int) {
	return file_enb_proto_rawDescGZIP(), []int{14}
}

var File_enb_proto protoreflect.FileDescriptor

var file_enb_proto_rawDesc = []byte{
	0x0a, 0x09, 0x65, 0x6e, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x65, 0x6e, 0x74,
	0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x21, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x65, 0x32, 0x6e, 0x6f, 0x64, 0x65,
	0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x6e, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65,
	0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x03, 0x45, 0x6e, 0x62, 0x12,
	0x2c, 0x0a, 0x08, 0x65, 0x6e, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x11, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x45, 0x6e, 0x62,
	0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3b, 0x0a,
	0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x53,
	0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73,
	0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x67, 0x75,
	0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x0a, 0x67, 0x75, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x0c,
	0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x45, 0x32,
	0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x52, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73,
	0x22, 0xc8, 0x07, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x65, 0x6c, 0x6c, 0x49,
	0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
	0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x64,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x65, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x10,
	0x0a, 0x03, 0x74, 0x61, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x63,
	0x12, 0x27, 0x0a, 0x0f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6c,
	0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x72, 0x6f, 0x61, 0x64,
	0x63, 0x61, 0x73, 0x74, 0x50, 0x6c, 0x6d, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x63, 0x68, 0x6f,
	0x69, 0x63, 0x65, 0x5f, 0x65, 0x75, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e,
	0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x45, 0x55, 0x54, 0x52, 0x41, 0x4d, 0x6f, 0x64, 0x65, 0x52,
	0x0f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x45, 0x75, 0x74, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x65,
	0x12, 0x33, 0x0a, 0x0a, 0x65, 0x75, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e,
	0x45, 0x75, 0x74, 0x72, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x65, 0x75, 0x74, 0x72,
	0x61, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x55, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f,
	0x6f, 0x66, 0x5f, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73,
	0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
	0x73, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e,
	0x61, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66,
	0x41, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x13,
	0x70, 0x72, 0x61, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69,
	0x74, 0x69, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x70, 0x72, 0x61, 0x63, 0x68, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x14, 0x6d,
	0x62, 0x73, 0x66, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e,
	0x66, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69,
	0x74, 0x69, 0x65, 0x73, 0x2e, 0x4d, 0x62, 0x73, 0x66, 0x6e, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61,
	0x6d, 0x65, 0x52, 0x12, 0x6d, 0x62, 0x73, 0x66, 0x6e, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d,
	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x63, 0x73, 0x67, 0x5f, 0x69, 0x64,
	0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x73, 0x67, 0x49, 0x64, 0x12, 0x3f, 0x0a,
	0x1c, 0x6d, 0x62, 0x6d, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x72,
	0x65, 0x61, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20,
	0x03, 0x28, 0x09, 0x52, 0x19, 0x6d, 0x62, 0x6d, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
	0x41, 0x72, 0x65, 0x61, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27,
	0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x62, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
	0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x62, 0x61,
	0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x64, 0x0a, 0x1c, 0x66, 0x72, 0x65, 0x71, 0x5f,
	0x62, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x70,
	0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x46, 0x72, 0x65, 0x71, 0x42, 0x61, 0x6e,
	0x64, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69,
	0x74, 0x79, 0x52, 0x19, 0x66, 0x72, 0x65, 0x71, 0x42, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x64, 0x69,
	0x63, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x4e, 0x0a,
	0x14, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x64, 0x75, 0x63,
	0x65, 0x64, 0x5f, 0x73, 0x69, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6e,
	0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68,
	0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x49, 0x52, 0x12, 0x62, 0x61, 0x6e, 0x64, 0x77,
	0x69, 0x64, 0x74, 0x68, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x53, 0x69, 0x12, 0x47, 0x0a,
	0x0f, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73,
	0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
	0x73, 0x2e, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72,
	0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x75,
	0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x63, 0x0a, 0x1b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6e,
	0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x43, 0x65, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x52, 0x19, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x6c, 0x6c,
	0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x0f, 0x43,
	0x68, 0x6f, 0x69, 0x63, 0x65, 0x45, 0x55, 0x54, 0x52, 0x41, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23,
	0x0a, 0x03, 0x66, 0x64, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6e,
	0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x46, 0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03,
	0x66, 0x64, 0x64, 0x12, 0x23, 0x0a, 0x03, 0x74, 0x64, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x11, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x64, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x52, 0x03, 0x74, 0x64, 0x64, 0x22, 0x2e, 0x0a, 0x05, 0x45, 0x75, 0x74, 0x72,
	0x61, 0x22, 0x25, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
	0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x44, 0x44, 0x10, 0x01, 0x12,
	0x07, 0x0a, 0x03, 0x54, 0x44, 0x44, 0x10, 0x02, 0x22, 0x67, 0x0a, 0x14, 0x4e, 0x65, 0x69, 0x67,
	0x68, 0x62, 0x6f, 0x75, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x12, 0x0a, 0x04, 0x65, 0x63, 0x67, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x65, 0x63, 0x67, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x63, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x03, 0x70, 0x63, 0x69, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63,
	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e, 0x12,
	0x10, 0x0a, 0x03, 0x74, 0x61, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61,
	0x63, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x4d, 0x62, 0x73, 0x66, 0x6e, 0x53, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x1c, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d,
	0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72,
	0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x65, 0x6e, 0x74, 0x69,
	0x74, 0x69, 0x65, 0x73, 0x2e, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41,
	0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52,
	0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x40, 0x0a, 0x1c, 0x72,
	0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x1a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x2f, 0x0a,
	0x13, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x75, 0x62, 0x66,
	0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a,
	0x0a, 0x18, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x20, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x66,
	0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79,
	0x70, 0x65, 0x52, 0x16, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f,
	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xad, 0x02, 0x0a, 0x12, 0x50,
	0x72, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e,
	0x63, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11,
	0x72, 0x6f, 0x6f, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65,
	0x78, 0x12, 0x4d, 0x0a, 0x23, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x20,
	0x7a, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5a,
	0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x26, 0x0a, 0x0f, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x5f, 0x66,
	0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x69, 0x67, 0x68, 0x53,
	0x70, 0x65, 0x65, 0x64, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x61, 0x63,
	0x68, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6f, 0x66, 0x66, 0x73,
	0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x70, 0x72, 0x61, 0x63, 0x68, 0x46,
	0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x3a,
	0x0a, 0x19, 0x70, 0x72, 0x61, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x17, 0x70, 0x72, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x9d, 0x04, 0x0a, 0x07, 0x54,
	0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63,
	0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e, 0x12,
	0x56, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
	0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x1f, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73,
	0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68,
	0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61,
	0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x4d, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e,
	0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65,
	0x6e, 0x74, 0x52, 0x12, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69,
	0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61,
	0x6c, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
	0x2e, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x13, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x70, 0x0a, 0x20, 0x61, 0x64, 0x64,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f,
	0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41,
	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c,
	0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x1d, 0x61, 0x64,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53,
	0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x8c, 0x01, 0x0a, 0x2a,
	0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69,
	0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65,
	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x30, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
	0x66, 0x6f, 0x52, 0x26, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70,
	0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x78, 0x74,
	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc8, 0x02, 0x0a, 0x26, 0x41,
	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c,
	0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
	0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x99, 0x01, 0x0a, 0x2e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x5f, 0x65,
	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35,
	0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65,
	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x2a, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
	0x6e, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x65, 0x66,
	0x69, 0x78, 0x5f, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65, 0x6e,
	0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65,
	0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69,
	0x78, 0x44, 0x6c, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72,
	0x65, 0x66, 0x69, 0x78, 0x5f, 0x75, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e,
	0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50,
	0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65,
	0x66, 0x69, 0x78, 0x55, 0x6c, 0x22, 0xa2, 0x02, 0x0a, 0x1d, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x7d, 0x0a, 0x24, 0x61, 0x64, 0x64, 0x69, 0x74,
	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75,
	0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
	0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69,
	0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x74, 0x74, 0x65,
	0x72, 0x6e, 0x73, 0x52, 0x21, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53,
	0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x61,
	0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63,
	0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x16, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c,
	0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63,
	0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x44, 0x6c, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c,
	0x69, 0x63, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x75, 0x6c, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79,
	0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c,
	0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x55, 0x6c, 0x22, 0xfd, 0x01, 0x0a, 0x07, 0x46,
	0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x6c, 0x65, 0x61, 0x72, 0x5f,
	0x66, 0x63, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x6c, 0x65, 0x61, 0x72,
	0x46, 0x63, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x66, 0x63, 0x6e,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x6c, 0x65, 0x61, 0x72, 0x46, 0x63, 0x6e,
	0x12, 0x5b, 0x0a, 0x19, 0x75, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73,
	0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54,
	0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77,
	0x69, 0x64, 0x74, 0x68, 0x52, 0x17, 0x75, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73,
	0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x5b, 0x0a,
	0x19, 0x64, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
	0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x1f, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e,
	0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74,
	0x68, 0x52, 0x17, 0x64, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
	0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x22, 0xf9, 0x01, 0x0a, 0x13, 0x53,
	0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x6e,
	0x66, 0x6f, 0x12, 0x5e, 0x0a, 0x19, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75,
	0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
	0x2e, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65,
	0x2e, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x52, 0x17, 0x73, 0x70, 0x65, 0x63, 0x69,
	0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
	0x6e, 0x73, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x65,
	0x66, 0x69, 0x78, 0x5f, 0x64, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x65,
	0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72,
	0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66,
	0x69, 0x78, 0x44, 0x6c, 0x12, 0x40, 0x0a, 0x10, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x5f, 0x70,
	0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x75, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16,
	0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63,
	0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72,
	0x65, 0x66, 0x69, 0x78, 0x55, 0x6c, 0x22, 0x84, 0x01, 0x0a, 0x0f, 0x53, 0x70, 0x65, 0x63, 0x69,
	0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x22, 0x71, 0x0a, 0x08, 0x50, 0x61,
	0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
	0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x30, 0x10, 0x01, 0x12, 0x08, 0x0a,
	0x04, 0x53, 0x53, 0x50, 0x31, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x32, 0x10,
	0x03, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x33, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53,
	0x53, 0x50, 0x34, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x35, 0x10, 0x06, 0x12,
	0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x36, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50,
	0x37, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x38, 0x10, 0x09, 0x22, 0x98, 0x01,
	0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63,
	0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x22, 0x7b, 0x0a, 0x08, 0x50,
	0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
	0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x30, 0x10, 0x01, 0x12, 0x08,
	0x0a, 0x04, 0x53, 0x53, 0x50, 0x31, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x32,
	0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x33, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04,
	0x53, 0x53, 0x50, 0x34, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x35, 0x10, 0x06,
	0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x36, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53,
	0x50, 0x37, 0x10, 0x08, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x53, 0x50, 0x38, 0x10, 0x09, 0x12, 0x08,
	0x0a, 0x04, 0x53, 0x53, 0x50, 0x39, 0x10, 0x0a, 0x22, 0x48, 0x0a, 0x21, 0x41, 0x64, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62,
	0x66, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x22, 0x23, 0x0a,
	0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
	0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x53, 0x50, 0x31, 0x30,
	0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x19, 0x46, 0x72, 0x65, 0x71, 0x42, 0x61, 0x6e, 0x64, 0x49, 0x6e,
	0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12,
	0x28, 0x0a, 0x24, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x5f,
	0x42, 0x41, 0x4e, 0x44, 0x5f, 0x49, 0x4e, 0x44, 0x49, 0x43, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x50,
	0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x54,
	0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f,
	0x0a, 0x0b, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a,
	0x45, 0x0a, 0x12, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x65, 0x64, 0x75,
	0x63, 0x65, 0x64, 0x53, 0x49, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
	0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x5f, 0x52, 0x45, 0x44, 0x55, 0x43,
	0x45, 0x44, 0x5f, 0x53, 0x49, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43, 0x48, 0x45, 0x44,
	0x55, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x2a, 0x5d, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x66, 0x72, 0x61,
	0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
	0x12, 0x24, 0x0a, 0x20, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x46,
	0x52, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f,
	0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x4e, 0x45, 0x5f, 0x46, 0x52,
	0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x55, 0x52, 0x5f, 0x46, 0x52,
	0x41, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0x78, 0x0a, 0x1a, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72,
	0x69, 0x6f, 0x64, 0x12, 0x28, 0x0a, 0x24, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x52,
	0x41, 0x44, 0x49, 0x4f, 0x46, 0x52, 0x41, 0x4d, 0x45, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x41,
	0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a,
	0x02, 0x4e, 0x31, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x32, 0x10, 0x02, 0x12, 0x06, 0x0a,
	0x02, 0x4e, 0x34, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x38, 0x10, 0x04, 0x12, 0x07, 0x0a,
	0x03, 0x4e, 0x31, 0x36, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x33, 0x32, 0x10, 0x06, 0x2a,
	0x56, 0x0a, 0x14, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x6e, 0x74, 0x65, 0x6e,
	0x6e, 0x61, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
	0x57, 0x4e, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x4f, 0x46, 0x5f, 0x41, 0x4e, 0x54,
	0x45, 0x4e, 0x4e, 0x41, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03,
	0x41, 0x4e, 0x31, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x32, 0x10, 0x02, 0x12, 0x07,
	0x0a, 0x03, 0x41, 0x4e, 0x34, 0x10, 0x03, 0x2a, 0x74, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x66, 0x72,
	0x61, 0x6d, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a,
	0x1b, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x55, 0x42, 0x46, 0x52, 0x41, 0x4d,
	0x45, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x07,
	0x0a, 0x03, 0x53, 0x41, 0x30, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x31, 0x10, 0x02,
	0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x32, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x33,
	0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x34, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x53,
	0x41, 0x35, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x41, 0x36, 0x10, 0x07, 0x2a, 0x43, 0x0a,
	0x0c, 0x43, 0x79, 0x63, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x19, 0x0a,
	0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x59, 0x43, 0x4c, 0x49, 0x43, 0x5f,
	0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d,
	0x41, 0x4c, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x44, 0x45, 0x44,
	0x10, 0x02, 0x2a, 0x80, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73,
	0x69, 0x6f, 0x6e, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x1e,
	0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d, 0x49, 0x53,
	0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x57, 0x49, 0x44, 0x54, 0x48, 0x10, 0x00,
	0x12, 0x07, 0x0a, 0x03, 0x42, 0x57, 0x36, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x57, 0x31,
	0x35, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x57, 0x32, 0x35, 0x10, 0x03, 0x12, 0x08, 0x0a,
	0x04, 0x42, 0x57, 0x35, 0x30, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x57, 0x37, 0x35, 0x10,
	0x05, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x57, 0x31, 0x30, 0x30, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03,
	0x42, 0x57, 0x31, 0x10, 0x07, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x2e,
	0x6f, 0x2d, 0x72, 0x61, 0x6e, 0x2d, 0x73, 0x63, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x2f, 0x72,
	0x69, 0x63, 0x2d, 0x70, 0x6c, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x62, 0x2d, 0x72, 0x6e, 0x69,
	0x62, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x33,
}

var (
	file_enb_proto_rawDescOnce sync.Once
	file_enb_proto_rawDescData = file_enb_proto_rawDesc
)

func file_enb_proto_rawDescGZIP() []byte {
	file_enb_proto_rawDescOnce.Do(func() {
		file_enb_proto_rawDescData = protoimpl.X.CompressGZIP(file_enb_proto_rawDescData)
	})
	return file_enb_proto_rawDescData
}

var file_enb_proto_enumTypes = make([]protoimpl.EnumInfo, 12)
var file_enb_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
var file_enb_proto_goTypes = []interface{}{
	(FreqBandIndicatorPriority)(0),                   // 0: entities.FreqBandIndicatorPriority
	(BandwidthReducedSI)(0),                          // 1: entities.BandwidthReducedSI
	(SubframeAllocationType)(0),                      // 2: entities.SubframeAllocationType
	(RadioframeAllocationPeriod)(0),                  // 3: entities.RadioframeAllocationPeriod
	(NumberOfAntennaPorts)(0),                        // 4: entities.NumberOfAntennaPorts
	(SubframeAssignment)(0),                          // 5: entities.SubframeAssignment
	(CyclicPrefix)(0),                                // 6: entities.CyclicPrefix
	(TransmissionBandwidth)(0),                       // 7: entities.TransmissionBandwidth
	(Eutra_Mode)(0),                                  // 8: entities.Eutra.Mode
	(SpecialSubframe_Patterns)(0),                    // 9: entities.SpecialSubframe.Patterns
	(AdditionalSpecialSubframe_Patterns)(0),          // 10: entities.AdditionalSpecialSubframe.Patterns
	(AdditionalSpecialSubframePatterns_Extension)(0), // 11: entities.AdditionalSpecialSubframePatterns.Extension
	(*Enb)(nil),                                      // 12: entities.Enb
	(*ServedCellInfo)(nil),                           // 13: entities.ServedCellInfo
	(*ChoiceEUTRAMode)(nil),                          // 14: entities.ChoiceEUTRAMode
	(*Eutra)(nil),                                    // 15: entities.Eutra
	(*NeighbourInformation)(nil),                     // 16: entities.NeighbourInformation
	(*MbsfnSubframe)(nil),                            // 17: entities.MbsfnSubframe
	(*PrachConfiguration)(nil),                       // 18: entities.PrachConfiguration
	(*TddInfo)(nil),                                  // 19: entities.TddInfo
	(*AdditionalSpecialSubframeExtensionInfo)(nil),   // 20: entities.AdditionalSpecialSubframeExtensionInfo
	(*AdditionalSpecialSubframeInfo)(nil),            // 21: entities.AdditionalSpecialSubframeInfo
	(*FddInfo)(nil),                                  // 22: entities.FddInfo
	(*SpecialSubframeInfo)(nil),                      // 23: entities.SpecialSubframeInfo
	(*SpecialSubframe)(nil),                          // 24: entities.SpecialSubframe
	(*AdditionalSpecialSubframe)(nil),                // 25: entities.AdditionalSpecialSubframe
	(*AdditionalSpecialSubframePatterns)(nil),        // 26: entities.AdditionalSpecialSubframePatterns
	(EnbType)(0),                                     // 27: entities.EnbType
	(*E2NodeComponentConfig)(nil),                    // 28: entities.E2nodeComponentConfig
	(*AdditionalCellInformation)(nil),                // 29: entities.AdditionalCellInformation
}
var file_enb_proto_depIdxs = []int32{
	27, // 0: entities.Enb.enb_type:type_name -> entities.EnbType
	13, // 1: entities.Enb.served_cells:type_name -> entities.ServedCellInfo
	28, // 2: entities.Enb.node_configs:type_name -> entities.E2nodeComponentConfig
	14, // 3: entities.ServedCellInfo.choice_eutra_mode:type_name -> entities.ChoiceEUTRAMode
	8,  // 4: entities.ServedCellInfo.eutra_mode:type_name -> entities.Eutra.Mode
	4,  // 5: entities.ServedCellInfo.number_of_antenna_ports:type_name -> entities.NumberOfAntennaPorts
	18, // 6: entities.ServedCellInfo.prach_configuration:type_name -> entities.PrachConfiguration
	17, // 7: entities.ServedCellInfo.mbsfn_subframe_infos:type_name -> entities.MbsfnSubframe
	0,  // 8: entities.ServedCellInfo.freq_band_indicator_priority:type_name -> entities.FreqBandIndicatorPriority
	1,  // 9: entities.ServedCellInfo.bandwidth_reduced_si:type_name -> entities.BandwidthReducedSI
	16, // 10: entities.ServedCellInfo.neighbour_infos:type_name -> entities.NeighbourInformation
	29, // 11: entities.ServedCellInfo.additional_cell_information:type_name -> entities.AdditionalCellInformation
	22, // 12: entities.ChoiceEUTRAMode.fdd:type_name -> entities.FddInfo
	19, // 13: entities.ChoiceEUTRAMode.tdd:type_name -> entities.TddInfo
	3,  // 14: entities.MbsfnSubframe.radioframe_allocation_period:type_name -> entities.RadioframeAllocationPeriod
	2,  // 15: entities.MbsfnSubframe.subframe_allocation_type:type_name -> entities.SubframeAllocationType
	7,  // 16: entities.TddInfo.transmission_bandwidth:type_name -> entities.TransmissionBandwidth
	5,  // 17: entities.TddInfo.subframe_assignment:type_name -> entities.SubframeAssignment
	23, // 18: entities.TddInfo.special_subframe_info:type_name -> entities.SpecialSubframeInfo
	21, // 19: entities.TddInfo.additional_special_subframe_info:type_name -> entities.AdditionalSpecialSubframeInfo
	20, // 20: entities.TddInfo.additional_special_subframe_extension_info:type_name -> entities.AdditionalSpecialSubframeExtensionInfo
	11, // 21: entities.AdditionalSpecialSubframeExtensionInfo.additional_special_subframe_patterns_extension:type_name -> entities.AdditionalSpecialSubframePatterns.Extension
	6,  // 22: entities.AdditionalSpecialSubframeExtensionInfo.cyclic_prefix_dl:type_name -> entities.CyclicPrefix
	6,  // 23: entities.AdditionalSpecialSubframeExtensionInfo.cyclic_prefix_ul:type_name -> entities.CyclicPrefix
	10, // 24: entities.AdditionalSpecialSubframeInfo.additional_special_subframe_patterns:type_name -> entities.AdditionalSpecialSubframe.Patterns
	6,  // 25: entities.AdditionalSpecialSubframeInfo.cyclic_prefix_dl:type_name -> entities.CyclicPrefix
	6,  // 26: entities.AdditionalSpecialSubframeInfo.cyclic_prefix_ul:type_name -> entities.CyclicPrefix
	7,  // 27: entities.FddInfo.ul_transmission_bandwidth:type_name -> entities.TransmissionBandwidth
	7,  // 28: entities.FddInfo.dl_transmission_bandwidth:type_name -> entities.TransmissionBandwidth
	9,  // 29: entities.SpecialSubframeInfo.special_subframe_patterns:type_name -> entities.SpecialSubframe.Patterns
	6,  // 30: entities.SpecialSubframeInfo.cyclic_prefix_dl:type_name -> entities.CyclicPrefix
	6,  // 31: entities.SpecialSubframeInfo.cyclic_prefix_ul:type_name -> entities.CyclicPrefix
	32, // [32:32] is the sub-list for method output_type
	32, // [32:32] is the sub-list for method input_type
	32, // [32:32] is the sub-list for extension type_name
	32, // [32:32] is the sub-list for extension extendee
	0,  // [0:32] is the sub-list for field type_name
}

func init() { file_enb_proto_init() }
func file_enb_proto_init() {
	if File_enb_proto != nil {
		return
	}
	file_additional_cell_information_proto_init()
	file_e2node_component_config_proto_init()
	file_nb_types_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_enb_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Enb); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ServedCellInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChoiceEUTRAMode); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Eutra); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NeighbourInformation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MbsfnSubframe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PrachConfiguration); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TddInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframeExtensionInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframeInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FddInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecialSubframeInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SpecialSubframe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_enb_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AdditionalSpecialSubframePatterns); 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_enb_proto_rawDesc,
			NumEnums:      12,
			NumMessages:   15,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_enb_proto_goTypes,
		DependencyIndexes: file_enb_proto_depIdxs,
		EnumInfos:         file_enb_proto_enumTypes,
		MessageInfos:      file_enb_proto_msgTypes,
	}.Build()
	File_enb_proto = out.File
	file_enb_proto_rawDesc = nil
	file_enb_proto_goTypes = nil
	file_enb_proto_depIdxs = nil
}
