// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.19.1
// source: signalling.proto

// TODO: We're using proto2 because it's the default on Ubuntu 16.04.
// At some point we will want to migrate to proto3, but we are not
// using any proto3 features yet.

package tdproto

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 KeyType int32

const (
	KeyType_AES_GCM_128 KeyType = 90
	KeyType_AES_GCM_256 KeyType = 91 // not supported atm
)

// Enum value maps for KeyType.
var (
	KeyType_name = map[int32]string{
		90: "AES_GCM_128",
		91: "AES_GCM_256",
	}
	KeyType_value = map[string]int32{
		"AES_GCM_128": 90,
		"AES_GCM_256": 91,
	}
)

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

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

func (KeyType) Descriptor() protoreflect.EnumDescriptor {
	return file_signalling_proto_enumTypes[0].Descriptor()
}

func (KeyType) Type() protoreflect.EnumType {
	return &file_signalling_proto_enumTypes[0]
}

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

// Deprecated: Do not use.
func (x *KeyType) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = KeyType(num)
	return nil
}

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

// State transitions of the client
type C2S_Transition int32

const (
	C2S_Transition_C2S_NO_CHANGE                C2S_Transition = 0
	C2S_Transition_C2S_SESSION_INIT             C2S_Transition = 1  // connect me to squid
	C2S_Transition_C2S_SESSION_COVERT_INIT      C2S_Transition = 11 // connect me to provided covert
	C2S_Transition_C2S_EXPECT_RECONNECT         C2S_Transition = 2
	C2S_Transition_C2S_SESSION_CLOSE            C2S_Transition = 3
	C2S_Transition_C2S_YIELD_UPLOAD             C2S_Transition = 4
	C2S_Transition_C2S_ACQUIRE_UPLOAD           C2S_Transition = 5
	C2S_Transition_C2S_EXPECT_UPLOADONLY_RECONN C2S_Transition = 6
	C2S_Transition_C2S_ERROR                    C2S_Transition = 255
)

// Enum value maps for C2S_Transition.
var (
	C2S_Transition_name = map[int32]string{
		0:   "C2S_NO_CHANGE",
		1:   "C2S_SESSION_INIT",
		11:  "C2S_SESSION_COVERT_INIT",
		2:   "C2S_EXPECT_RECONNECT",
		3:   "C2S_SESSION_CLOSE",
		4:   "C2S_YIELD_UPLOAD",
		5:   "C2S_ACQUIRE_UPLOAD",
		6:   "C2S_EXPECT_UPLOADONLY_RECONN",
		255: "C2S_ERROR",
	}
	C2S_Transition_value = map[string]int32{
		"C2S_NO_CHANGE":                0,
		"C2S_SESSION_INIT":             1,
		"C2S_SESSION_COVERT_INIT":      11,
		"C2S_EXPECT_RECONNECT":         2,
		"C2S_SESSION_CLOSE":            3,
		"C2S_YIELD_UPLOAD":             4,
		"C2S_ACQUIRE_UPLOAD":           5,
		"C2S_EXPECT_UPLOADONLY_RECONN": 6,
		"C2S_ERROR":                    255,
	}
)

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

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

func (C2S_Transition) Descriptor() protoreflect.EnumDescriptor {
	return file_signalling_proto_enumTypes[1].Descriptor()
}

func (C2S_Transition) Type() protoreflect.EnumType {
	return &file_signalling_proto_enumTypes[1]
}

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

// Deprecated: Do not use.
func (x *C2S_Transition) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = C2S_Transition(num)
	return nil
}

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

// State transitions of the server
type S2C_Transition int32

const (
	S2C_Transition_S2C_NO_CHANGE           S2C_Transition = 0
	S2C_Transition_S2C_SESSION_INIT        S2C_Transition = 1  // connected to squid
	S2C_Transition_S2C_SESSION_COVERT_INIT S2C_Transition = 11 // connected to covert host
	S2C_Transition_S2C_CONFIRM_RECONNECT   S2C_Transition = 2
	S2C_Transition_S2C_SESSION_CLOSE       S2C_Transition = 3
	// TODO should probably also allow EXPECT_RECONNECT here, for DittoTap
	S2C_Transition_S2C_ERROR S2C_Transition = 255
)

// Enum value maps for S2C_Transition.
var (
	S2C_Transition_name = map[int32]string{
		0:   "S2C_NO_CHANGE",
		1:   "S2C_SESSION_INIT",
		11:  "S2C_SESSION_COVERT_INIT",
		2:   "S2C_CONFIRM_RECONNECT",
		3:   "S2C_SESSION_CLOSE",
		255: "S2C_ERROR",
	}
	S2C_Transition_value = map[string]int32{
		"S2C_NO_CHANGE":           0,
		"S2C_SESSION_INIT":        1,
		"S2C_SESSION_COVERT_INIT": 11,
		"S2C_CONFIRM_RECONNECT":   2,
		"S2C_SESSION_CLOSE":       3,
		"S2C_ERROR":               255,
	}
)

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

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

func (S2C_Transition) Descriptor() protoreflect.EnumDescriptor {
	return file_signalling_proto_enumTypes[2].Descriptor()
}

func (S2C_Transition) Type() protoreflect.EnumType {
	return &file_signalling_proto_enumTypes[2]
}

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

// Deprecated: Do not use.
func (x *S2C_Transition) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = S2C_Transition(num)
	return nil
}

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

// Should accompany all S2C_ERROR messages.
type ErrorReasonS2C int32

const (
	ErrorReasonS2C_NO_ERROR         ErrorReasonS2C = 0
	ErrorReasonS2C_COVERT_STREAM    ErrorReasonS2C = 1   // Squid TCP connection broke
	ErrorReasonS2C_CLIENT_REPORTED  ErrorReasonS2C = 2   // You told me something was wrong, client
	ErrorReasonS2C_CLIENT_PROTOCOL  ErrorReasonS2C = 3   // You messed up, client (e.g. sent a bad protobuf)
	ErrorReasonS2C_STATION_INTERNAL ErrorReasonS2C = 4   // I broke
	ErrorReasonS2C_DECOY_OVERLOAD   ErrorReasonS2C = 5   // Everything's fine, but don't use this decoy right now
	ErrorReasonS2C_CLIENT_STREAM    ErrorReasonS2C = 100 // My stream to you broke. (This is impossible to send)
	ErrorReasonS2C_CLIENT_TIMEOUT   ErrorReasonS2C = 101 // You never came back. (This is impossible to send)
)

// Enum value maps for ErrorReasonS2C.
var (
	ErrorReasonS2C_name = map[int32]string{
		0:   "NO_ERROR",
		1:   "COVERT_STREAM",
		2:   "CLIENT_REPORTED",
		3:   "CLIENT_PROTOCOL",
		4:   "STATION_INTERNAL",
		5:   "DECOY_OVERLOAD",
		100: "CLIENT_STREAM",
		101: "CLIENT_TIMEOUT",
	}
	ErrorReasonS2C_value = map[string]int32{
		"NO_ERROR":         0,
		"COVERT_STREAM":    1,
		"CLIENT_REPORTED":  2,
		"CLIENT_PROTOCOL":  3,
		"STATION_INTERNAL": 4,
		"DECOY_OVERLOAD":   5,
		"CLIENT_STREAM":    100,
		"CLIENT_TIMEOUT":   101,
	}
)

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

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

func (ErrorReasonS2C) Descriptor() protoreflect.EnumDescriptor {
	return file_signalling_proto_enumTypes[3].Descriptor()
}

func (ErrorReasonS2C) Type() protoreflect.EnumType {
	return &file_signalling_proto_enumTypes[3]
}

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

// Deprecated: Do not use.
func (x *ErrorReasonS2C) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = ErrorReasonS2C(num)
	return nil
}

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

type TransportType int32

const (
	TransportType_Null   TransportType = 0
	TransportType_Min    TransportType = 1  // Send a 32-byte HMAC id to let the station distinguish registrations to same host
	TransportType_Obfs4  TransportType = 2  // Not implemented yet?
	TransportType_Webrtc TransportType = 99 // UDP transport: WebRTC DataChannel
)

// Enum value maps for TransportType.
var (
	TransportType_name = map[int32]string{
		0:  "Null",
		1:  "Min",
		2:  "Obfs4",
		99: "Webrtc",
	}
	TransportType_value = map[string]int32{
		"Null":   0,
		"Min":    1,
		"Obfs4":  2,
		"Webrtc": 99,
	}
)

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

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

func (TransportType) Descriptor() protoreflect.EnumDescriptor {
	return file_signalling_proto_enumTypes[4].Descriptor()
}

func (TransportType) Type() protoreflect.EnumType {
	return &file_signalling_proto_enumTypes[4]
}

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

// Deprecated: Do not use.
func (x *TransportType) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = TransportType(num)
	return nil
}

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

type RegistrationSource int32

const (
	RegistrationSource_Unspecified      RegistrationSource = 0
	RegistrationSource_Detector         RegistrationSource = 1
	RegistrationSource_API              RegistrationSource = 2
	RegistrationSource_DetectorPrescan  RegistrationSource = 3
	RegistrationSource_BidirectionalAPI RegistrationSource = 4
)

// Enum value maps for RegistrationSource.
var (
	RegistrationSource_name = map[int32]string{
		0: "Unspecified",
		1: "Detector",
		2: "API",
		3: "DetectorPrescan",
		4: "BidirectionalAPI",
	}
	RegistrationSource_value = map[string]int32{
		"Unspecified":      0,
		"Detector":         1,
		"API":              2,
		"DetectorPrescan":  3,
		"BidirectionalAPI": 4,
	}
)

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

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

func (RegistrationSource) Descriptor() protoreflect.EnumDescriptor {
	return file_signalling_proto_enumTypes[5].Descriptor()
}

func (RegistrationSource) Type() protoreflect.EnumType {
	return &file_signalling_proto_enumTypes[5]
}

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

// Deprecated: Do not use.
func (x *RegistrationSource) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = RegistrationSource(num)
	return nil
}

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

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

	// A public key, as used by the station.
	Key  []byte   `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
	Type *KeyType `protobuf:"varint,2,opt,name=type,enum=tapdance.KeyType" json:"type,omitempty"`
}

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

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

func (*PubKey) ProtoMessage() {}

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

func (x *PubKey) GetKey() []byte {
	if x != nil {
		return x.Key
	}
	return nil
}

func (x *PubKey) GetType() KeyType {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return KeyType_AES_GCM_128
}

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

	// The hostname/SNI to use for this host
	//
	// The hostname is the only required field, although other
	// fields are expected to be present in most cases.
	Hostname *string `protobuf:"bytes,1,opt,name=hostname" json:"hostname,omitempty"`
	// The 32-bit ipv4 address, in network byte order
	//
	// If the IPv4 address is absent, then it may be resolved via
	// DNS by the client, or the client may discard this decoy spec
	// if local DNS is untrusted, or the service may be multihomed.
	Ipv4Addr *uint32 `protobuf:"fixed32,2,opt,name=ipv4addr" json:"ipv4addr,omitempty"`
	// The 128-bit ipv6 address, in network byte order
	Ipv6Addr []byte `protobuf:"bytes,6,opt,name=ipv6addr" json:"ipv6addr,omitempty"`
	// The Tapdance station public key to use when contacting this
	// decoy
	//
	// If omitted, the default station public key (if any) is used.
	Pubkey *PubKey `protobuf:"bytes,3,opt,name=pubkey" json:"pubkey,omitempty"`
	// The maximum duration, in milliseconds, to maintain an open
	// connection to this decoy (because the decoy may close the
	// connection itself after this length of time)
	//
	// If omitted, a default of 30,000 milliseconds is assumed.
	Timeout *uint32 `protobuf:"varint,4,opt,name=timeout" json:"timeout,omitempty"`
	// The maximum TCP window size to attempt to use for this decoy.
	//
	// If omitted, a default of 15360 is assumed.
	//
	// TODO: the default is based on the current heuristic of only
	// using decoys that permit windows of 15KB or larger.  If this
	// heuristic changes, then this default doesn't make sense.
	Tcpwin *uint32 `protobuf:"varint,5,opt,name=tcpwin" json:"tcpwin,omitempty"`
}

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

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

func (*TLSDecoySpec) ProtoMessage() {}

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

func (x *TLSDecoySpec) GetHostname() string {
	if x != nil && x.Hostname != nil {
		return *x.Hostname
	}
	return ""
}

func (x *TLSDecoySpec) GetIpv4Addr() uint32 {
	if x != nil && x.Ipv4Addr != nil {
		return *x.Ipv4Addr
	}
	return 0
}

func (x *TLSDecoySpec) GetIpv6Addr() []byte {
	if x != nil {
		return x.Ipv6Addr
	}
	return nil
}

func (x *TLSDecoySpec) GetPubkey() *PubKey {
	if x != nil {
		return x.Pubkey
	}
	return nil
}

func (x *TLSDecoySpec) GetTimeout() uint32 {
	if x != nil && x.Timeout != nil {
		return *x.Timeout
	}
	return 0
}

func (x *TLSDecoySpec) GetTcpwin() uint32 {
	if x != nil && x.Tcpwin != nil {
		return *x.Tcpwin
	}
	return 0
}

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

	DecoyList          *DecoyList          `protobuf:"bytes,1,opt,name=decoy_list,json=decoyList" json:"decoy_list,omitempty"`
	Generation         *uint32             `protobuf:"varint,2,opt,name=generation" json:"generation,omitempty"`
	DefaultPubkey      *PubKey             `protobuf:"bytes,3,opt,name=default_pubkey,json=defaultPubkey" json:"default_pubkey,omitempty"`
	PhantomSubnetsList *PhantomSubnetsList `protobuf:"bytes,4,opt,name=phantom_subnets_list,json=phantomSubnetsList" json:"phantom_subnets_list,omitempty"`
	ConjurePubkey      *PubKey             `protobuf:"bytes,5,opt,name=conjure_pubkey,json=conjurePubkey" json:"conjure_pubkey,omitempty"`
}

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

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

func (*ClientConf) ProtoMessage() {}

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

func (x *ClientConf) GetDecoyList() *DecoyList {
	if x != nil {
		return x.DecoyList
	}
	return nil
}

func (x *ClientConf) GetGeneration() uint32 {
	if x != nil && x.Generation != nil {
		return *x.Generation
	}
	return 0
}

func (x *ClientConf) GetDefaultPubkey() *PubKey {
	if x != nil {
		return x.DefaultPubkey
	}
	return nil
}

func (x *ClientConf) GetPhantomSubnetsList() *PhantomSubnetsList {
	if x != nil {
		return x.PhantomSubnetsList
	}
	return nil
}

func (x *ClientConf) GetConjurePubkey() *PubKey {
	if x != nil {
		return x.ConjurePubkey
	}
	return nil
}

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

	TlsDecoys []*TLSDecoySpec `protobuf:"bytes,1,rep,name=tls_decoys,json=tlsDecoys" json:"tls_decoys,omitempty"`
}

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

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

func (*DecoyList) ProtoMessage() {}

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

func (x *DecoyList) GetTlsDecoys() []*TLSDecoySpec {
	if x != nil {
		return x.TlsDecoys
	}
	return nil
}

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

	WeightedSubnets []*PhantomSubnets `protobuf:"bytes,1,rep,name=weighted_subnets,json=weightedSubnets" json:"weighted_subnets,omitempty"`
}

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

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

func (*PhantomSubnetsList) ProtoMessage() {}

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

func (x *PhantomSubnetsList) GetWeightedSubnets() []*PhantomSubnets {
	if x != nil {
		return x.WeightedSubnets
	}
	return nil
}

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

	Weight  *uint32  `protobuf:"varint,1,opt,name=weight" json:"weight,omitempty"`
	Subnets []string `protobuf:"bytes,2,rep,name=subnets" json:"subnets,omitempty"`
}

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

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

func (*PhantomSubnets) ProtoMessage() {}

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

func (x *PhantomSubnets) GetWeight() uint32 {
	if x != nil && x.Weight != nil {
		return *x.Weight
	}
	return 0
}

func (x *PhantomSubnets) GetSubnets() []string {
	if x != nil {
		return x.Subnets
	}
	return nil
}

// Deflated ICE Candidate by seed2sdp package
type WebRTCICECandidate struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// IP is represented in its 16-byte form
	IpUpper *uint64 `protobuf:"varint,1,req,name=ip_upper,json=ipUpper" json:"ip_upper,omitempty"`
	IpLower *uint64 `protobuf:"varint,2,req,name=ip_lower,json=ipLower" json:"ip_lower,omitempty"`
	// Composed info includes port, tcptype (unset if not tcp), candidate type (host, srflx, prflx), protocol (TCP/UDP), and component (RTP/RTCP)
	ComposedInfo *uint32 `protobuf:"varint,3,req,name=composed_info,json=composedInfo" json:"composed_info,omitempty"`
}

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

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

func (*WebRTCICECandidate) ProtoMessage() {}

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

func (x *WebRTCICECandidate) GetIpUpper() uint64 {
	if x != nil && x.IpUpper != nil {
		return *x.IpUpper
	}
	return 0
}

func (x *WebRTCICECandidate) GetIpLower() uint64 {
	if x != nil && x.IpLower != nil {
		return *x.IpLower
	}
	return 0
}

func (x *WebRTCICECandidate) GetComposedInfo() uint32 {
	if x != nil && x.ComposedInfo != nil {
		return *x.ComposedInfo
	}
	return 0
}

// Deflated SDP for WebRTC by seed2sdp package
type WebRTCSDP struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Type       *uint32               `protobuf:"varint,1,req,name=type" json:"type,omitempty"`
	Candidates []*WebRTCICECandidate `protobuf:"bytes,2,rep,name=candidates" json:"candidates,omitempty"` // there could be multiple candidates
}

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

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

func (*WebRTCSDP) ProtoMessage() {}

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

func (x *WebRTCSDP) GetType() uint32 {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return 0
}

func (x *WebRTCSDP) GetCandidates() []*WebRTCICECandidate {
	if x != nil {
		return x.Candidates
	}
	return nil
}

// WebRTCSignal includes a deflated SDP and a seed
type WebRTCSignal struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Seed *string    `protobuf:"bytes,1,req,name=seed" json:"seed,omitempty"`
	Sdp  *WebRTCSDP `protobuf:"bytes,2,req,name=sdp" json:"sdp,omitempty"`
}

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

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

func (*WebRTCSignal) ProtoMessage() {}

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

func (x *WebRTCSignal) GetSeed() string {
	if x != nil && x.Seed != nil {
		return *x.Seed
	}
	return ""
}

func (x *WebRTCSignal) GetSdp() *WebRTCSDP {
	if x != nil {
		return x.Sdp
	}
	return nil
}

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

	// Should accompany (at least) SESSION_INIT and CONFIRM_RECONNECT.
	ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"`
	// There might be a state transition. May be absent; absence should be
	// treated identically to NO_CHANGE.
	StateTransition *S2C_Transition `protobuf:"varint,2,opt,name=state_transition,json=stateTransition,enum=tapdance.S2C_Transition" json:"state_transition,omitempty"`
	// The station can send client config info piggybacked
	// on any message, as it sees fit
	ConfigInfo *ClientConf `protobuf:"bytes,3,opt,name=config_info,json=configInfo" json:"config_info,omitempty"`
	// If state_transition == S2C_ERROR, this field is the explanation.
	ErrReason *ErrorReasonS2C `protobuf:"varint,4,opt,name=err_reason,json=errReason,enum=tapdance.ErrorReasonS2C" json:"err_reason,omitempty"`
	// Signals client to stop connecting for following amount of seconds
	TmpBackoff *uint32 `protobuf:"varint,5,opt,name=tmp_backoff,json=tmpBackoff" json:"tmp_backoff,omitempty"`
	// Sent in SESSION_INIT, identifies the station that picked up
	StationId *string `protobuf:"bytes,6,opt,name=station_id,json=stationId" json:"station_id,omitempty"`
	// Random-sized junk to defeat packet size fingerprinting.
	Padding []byte `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"`
}

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

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

func (*StationToClient) ProtoMessage() {}

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

func (x *StationToClient) GetProtocolVersion() uint32 {
	if x != nil && x.ProtocolVersion != nil {
		return *x.ProtocolVersion
	}
	return 0
}

func (x *StationToClient) GetStateTransition() S2C_Transition {
	if x != nil && x.StateTransition != nil {
		return *x.StateTransition
	}
	return S2C_Transition_S2C_NO_CHANGE
}

func (x *StationToClient) GetConfigInfo() *ClientConf {
	if x != nil {
		return x.ConfigInfo
	}
	return nil
}

func (x *StationToClient) GetErrReason() ErrorReasonS2C {
	if x != nil && x.ErrReason != nil {
		return *x.ErrReason
	}
	return ErrorReasonS2C_NO_ERROR
}

func (x *StationToClient) GetTmpBackoff() uint32 {
	if x != nil && x.TmpBackoff != nil {
		return *x.TmpBackoff
	}
	return 0
}

func (x *StationToClient) GetStationId() string {
	if x != nil && x.StationId != nil {
		return *x.StationId
	}
	return ""
}

func (x *StationToClient) GetPadding() []byte {
	if x != nil {
		return x.Padding
	}
	return nil
}

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

	UploadOnly  *bool `protobuf:"varint,1,opt,name=upload_only,json=uploadOnly" json:"upload_only,omitempty"`
	DarkDecoy   *bool `protobuf:"varint,2,opt,name=dark_decoy,json=darkDecoy" json:"dark_decoy,omitempty"`
	ProxyHeader *bool `protobuf:"varint,3,opt,name=proxy_header,json=proxyHeader" json:"proxy_header,omitempty"`
	Use_TIL     *bool `protobuf:"varint,4,opt,name=use_TIL,json=useTIL" json:"use_TIL,omitempty"`
	Prescanned  *bool `protobuf:"varint,5,opt,name=prescanned" json:"prescanned,omitempty"`
}

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

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

func (*RegistrationFlags) ProtoMessage() {}

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

func (x *RegistrationFlags) GetUploadOnly() bool {
	if x != nil && x.UploadOnly != nil {
		return *x.UploadOnly
	}
	return false
}

func (x *RegistrationFlags) GetDarkDecoy() bool {
	if x != nil && x.DarkDecoy != nil {
		return *x.DarkDecoy
	}
	return false
}

func (x *RegistrationFlags) GetProxyHeader() bool {
	if x != nil && x.ProxyHeader != nil {
		return *x.ProxyHeader
	}
	return false
}

func (x *RegistrationFlags) GetUse_TIL() bool {
	if x != nil && x.Use_TIL != nil {
		return *x.Use_TIL
	}
	return false
}

func (x *RegistrationFlags) GetPrescanned() bool {
	if x != nil && x.Prescanned != nil {
		return *x.Prescanned
	}
	return false
}

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

	ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"`
	// The client reports its decoy list's version number here, which the
	// station can use to decide whether to send an updated one. The station
	// should always send a list if this field is set to 0.
	DecoyListGeneration *uint32         `protobuf:"varint,2,opt,name=decoy_list_generation,json=decoyListGeneration" json:"decoy_list_generation,omitempty"`
	StateTransition     *C2S_Transition `protobuf:"varint,3,opt,name=state_transition,json=stateTransition,enum=tapdance.C2S_Transition" json:"state_transition,omitempty"`
	// The position in the overall session's upload sequence where the current
	// YIELD=>ACQUIRE switchover is happening.
	UploadSync *uint64 `protobuf:"varint,4,opt,name=upload_sync,json=uploadSync" json:"upload_sync,omitempty"`
	// List of decoys that client have unsuccessfully tried in current session.
	// Could be sent in chunks
	FailedDecoys []string      `protobuf:"bytes,10,rep,name=failed_decoys,json=failedDecoys" json:"failed_decoys,omitempty"`
	Stats        *SessionStats `protobuf:"bytes,11,opt,name=stats" json:"stats,omitempty"`
	// NullTransport, MinTransport, Obfs4Transport, etc. Transport type we want from phantom proxy
	Transport *TransportType `protobuf:"varint,12,opt,name=transport,enum=tapdance.TransportType" json:"transport,omitempty"`
	// Station is only required to check this variable during session initialization.
	// If set, station must facilitate connection to said target by itself, i.e. write into squid
	// socket an HTTP/SOCKS/any other connection request.
	// covert_address must have exactly one ':' colon, that separates host (literal IP address or
	// resolvable hostname) and port
	// TODO: make it required for initialization, and stop connecting any client straight to squid?
	CovertAddress *string `protobuf:"bytes,20,opt,name=covert_address,json=covertAddress" json:"covert_address,omitempty"`
	// Used in dark decoys to signal which dark decoy it will connect to.
	MaskedDecoyServerName *string `protobuf:"bytes,21,opt,name=masked_decoy_server_name,json=maskedDecoyServerName" json:"masked_decoy_server_name,omitempty"`
	// Used to indicate to server if client is registering v4, v6 or both
	V6Support *bool `protobuf:"varint,22,opt,name=v6_support,json=v6Support" json:"v6_support,omitempty"`
	V4Support *bool `protobuf:"varint,23,opt,name=v4_support,json=v4Support" json:"v4_support,omitempty"`
	// A collection of optional flags for the registration.
	Flags *RegistrationFlags `protobuf:"bytes,24,opt,name=flags" json:"flags,omitempty"`
	// Transport Extensions
	WebrtcSignal *WebRTCSignal `protobuf:"bytes,31,opt,name=webrtc_signal,json=webrtcSignal" json:"webrtc_signal,omitempty"`
	// Random-sized junk to defeat packet size fingerprinting.
	Padding []byte `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"`
}

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

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

func (*ClientToStation) ProtoMessage() {}

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

func (x *ClientToStation) GetProtocolVersion() uint32 {
	if x != nil && x.ProtocolVersion != nil {
		return *x.ProtocolVersion
	}
	return 0
}

func (x *ClientToStation) GetDecoyListGeneration() uint32 {
	if x != nil && x.DecoyListGeneration != nil {
		return *x.DecoyListGeneration
	}
	return 0
}

func (x *ClientToStation) GetStateTransition() C2S_Transition {
	if x != nil && x.StateTransition != nil {
		return *x.StateTransition
	}
	return C2S_Transition_C2S_NO_CHANGE
}

func (x *ClientToStation) GetUploadSync() uint64 {
	if x != nil && x.UploadSync != nil {
		return *x.UploadSync
	}
	return 0
}

func (x *ClientToStation) GetFailedDecoys() []string {
	if x != nil {
		return x.FailedDecoys
	}
	return nil
}

func (x *ClientToStation) GetStats() *SessionStats {
	if x != nil {
		return x.Stats
	}
	return nil
}

func (x *ClientToStation) GetTransport() TransportType {
	if x != nil && x.Transport != nil {
		return *x.Transport
	}
	return TransportType_Null
}

func (x *ClientToStation) GetCovertAddress() string {
	if x != nil && x.CovertAddress != nil {
		return *x.CovertAddress
	}
	return ""
}

func (x *ClientToStation) GetMaskedDecoyServerName() string {
	if x != nil && x.MaskedDecoyServerName != nil {
		return *x.MaskedDecoyServerName
	}
	return ""
}

func (x *ClientToStation) GetV6Support() bool {
	if x != nil && x.V6Support != nil {
		return *x.V6Support
	}
	return false
}

func (x *ClientToStation) GetV4Support() bool {
	if x != nil && x.V4Support != nil {
		return *x.V4Support
	}
	return false
}

func (x *ClientToStation) GetFlags() *RegistrationFlags {
	if x != nil {
		return x.Flags
	}
	return nil
}

func (x *ClientToStation) GetWebrtcSignal() *WebRTCSignal {
	if x != nil {
		return x.WebrtcSignal
	}
	return nil
}

func (x *ClientToStation) GetPadding() []byte {
	if x != nil {
		return x.Padding
	}
	return nil
}

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

	SharedSecret        []byte              `protobuf:"bytes,1,opt,name=shared_secret,json=sharedSecret" json:"shared_secret,omitempty"`
	RegistrationPayload *ClientToStation    `protobuf:"bytes,3,opt,name=registration_payload,json=registrationPayload" json:"registration_payload,omitempty"`
	RegistrationSource  *RegistrationSource `protobuf:"varint,4,opt,name=registration_source,json=registrationSource,enum=tapdance.RegistrationSource" json:"registration_source,omitempty"`
	// client source address when receiving a registration
	RegistrationAddress []byte `protobuf:"bytes,6,opt,name=registration_address,json=registrationAddress" json:"registration_address,omitempty"`
	// Decoy address used when registering over Decoy registrar
	DecoyAddress         []byte                `protobuf:"bytes,7,opt,name=decoy_address,json=decoyAddress" json:"decoy_address,omitempty"`
	RegistrationResponse *RegistrationResponse `protobuf:"bytes,8,opt,name=registration_response,json=registrationResponse" json:"registration_response,omitempty"`
}

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

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

func (*C2SWrapper) ProtoMessage() {}

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

func (x *C2SWrapper) GetSharedSecret() []byte {
	if x != nil {
		return x.SharedSecret
	}
	return nil
}

func (x *C2SWrapper) GetRegistrationPayload() *ClientToStation {
	if x != nil {
		return x.RegistrationPayload
	}
	return nil
}

func (x *C2SWrapper) GetRegistrationSource() RegistrationSource {
	if x != nil && x.RegistrationSource != nil {
		return *x.RegistrationSource
	}
	return RegistrationSource_Unspecified
}

func (x *C2SWrapper) GetRegistrationAddress() []byte {
	if x != nil {
		return x.RegistrationAddress
	}
	return nil
}

func (x *C2SWrapper) GetDecoyAddress() []byte {
	if x != nil {
		return x.DecoyAddress
	}
	return nil
}

func (x *C2SWrapper) GetRegistrationResponse() *RegistrationResponse {
	if x != nil {
		return x.RegistrationResponse
	}
	return nil
}

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

	FailedDecoysAmount *uint32 `protobuf:"varint,20,opt,name=failed_decoys_amount,json=failedDecoysAmount" json:"failed_decoys_amount,omitempty"` // how many decoys were tried before success
	// Applicable to whole session:
	TotalTimeToConnect *uint32 `protobuf:"varint,31,opt,name=total_time_to_connect,json=totalTimeToConnect" json:"total_time_to_connect,omitempty"` // includes failed attempts
	// Last (i.e. successful) decoy:
	RttToStation *uint32 `protobuf:"varint,33,opt,name=rtt_to_station,json=rttToStation" json:"rtt_to_station,omitempty"` // measured during initial handshake
	TlsToDecoy   *uint32 `protobuf:"varint,38,opt,name=tls_to_decoy,json=tlsToDecoy" json:"tls_to_decoy,omitempty"`       // includes tcp to decoy
	TcpToDecoy   *uint32 `protobuf:"varint,39,opt,name=tcp_to_decoy,json=tcpToDecoy" json:"tcp_to_decoy,omitempty"`       // measured when establishing tcp connection to decot
}

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

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

func (*SessionStats) ProtoMessage() {}

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

func (x *SessionStats) GetFailedDecoysAmount() uint32 {
	if x != nil && x.FailedDecoysAmount != nil {
		return *x.FailedDecoysAmount
	}
	return 0
}

func (x *SessionStats) GetTotalTimeToConnect() uint32 {
	if x != nil && x.TotalTimeToConnect != nil {
		return *x.TotalTimeToConnect
	}
	return 0
}

func (x *SessionStats) GetRttToStation() uint32 {
	if x != nil && x.RttToStation != nil {
		return *x.RttToStation
	}
	return 0
}

func (x *SessionStats) GetTlsToDecoy() uint32 {
	if x != nil && x.TlsToDecoy != nil {
		return *x.TlsToDecoy
	}
	return 0
}

func (x *SessionStats) GetTcpToDecoy() uint32 {
	if x != nil && x.TcpToDecoy != nil {
		return *x.TcpToDecoy
	}
	return 0
}

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

	PhantomIp *string `protobuf:"bytes,1,opt,name=phantom_ip,json=phantomIp" json:"phantom_ip,omitempty"`
	ClientIp  *string `protobuf:"bytes,2,opt,name=client_ip,json=clientIp" json:"client_ip,omitempty"`
	TimeoutNs *uint64 `protobuf:"varint,3,opt,name=timeout_ns,json=timeoutNs" json:"timeout_ns,omitempty"`
}

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

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

func (*StationToDetector) ProtoMessage() {}

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

func (x *StationToDetector) GetPhantomIp() string {
	if x != nil && x.PhantomIp != nil {
		return *x.PhantomIp
	}
	return ""
}

func (x *StationToDetector) GetClientIp() string {
	if x != nil && x.ClientIp != nil {
		return *x.ClientIp
	}
	return ""
}

func (x *StationToDetector) GetTimeoutNs() uint64 {
	if x != nil && x.TimeoutNs != nil {
		return *x.TimeoutNs
	}
	return 0
}

// Adding message response from Station to Client for birdirectional API
type RegistrationResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Ipv4Addr *uint32 `protobuf:"fixed32,1,opt,name=ipv4addr" json:"ipv4addr,omitempty"`
	// The 128-bit ipv6 address, in network byte order
	Ipv6Addr []byte `protobuf:"bytes,2,opt,name=ipv6addr" json:"ipv6addr,omitempty"`
	// Respond with randomized port
	Port *uint32 `protobuf:"varint,3,opt,name=port" json:"port,omitempty"`
	// Future: station provides client with secret, want chanel present
	// Leave null for now
	ServerRandom []byte `protobuf:"bytes,4,opt,name=serverRandom" json:"serverRandom,omitempty"`
	// If registration wrong, populate this error string
	Error *string `protobuf:"bytes,5,opt,name=error" json:"error,omitempty"`
	// ClientConf field (optional)
	ClientConf *ClientConf `protobuf:"bytes,6,opt,name=clientConf" json:"clientConf,omitempty"`
}

func (x *RegistrationResponse) Reset() {
	*x = RegistrationResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_signalling_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*RegistrationResponse) ProtoMessage() {}

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

func (x *RegistrationResponse) GetIpv4Addr() uint32 {
	if x != nil && x.Ipv4Addr != nil {
		return *x.Ipv4Addr
	}
	return 0
}

func (x *RegistrationResponse) GetIpv6Addr() []byte {
	if x != nil {
		return x.Ipv6Addr
	}
	return nil
}

func (x *RegistrationResponse) GetPort() uint32 {
	if x != nil && x.Port != nil {
		return *x.Port
	}
	return 0
}

func (x *RegistrationResponse) GetServerRandom() []byte {
	if x != nil {
		return x.ServerRandom
	}
	return nil
}

func (x *RegistrationResponse) GetError() string {
	if x != nil && x.Error != nil {
		return *x.Error
	}
	return ""
}

func (x *RegistrationResponse) GetClientConf() *ClientConf {
	if x != nil {
		return x.ClientConf
	}
	return nil
}

var File_signalling_proto protoreflect.FileDescriptor

var file_signalling_proto_rawDesc = []byte{
	0x0a, 0x10, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x12, 0x08, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x41, 0x0a, 0x06,
	0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63,
	0x65, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22,
	0xbe, 0x01, 0x0a, 0x0c, 0x54, 0x4c, 0x53, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x53, 0x70, 0x65, 0x63,
	0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08,
	0x69, 0x70, 0x76, 0x34, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x08,
	0x69, 0x70, 0x76, 0x34, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x70, 0x76, 0x36,
	0x61, 0x64, 0x64, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x69, 0x70, 0x76, 0x36,
	0x61, 0x64, 0x64, 0x72, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e,
	0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x18,
	0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
	0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x63, 0x70, 0x77,
	0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x63, 0x70, 0x77, 0x69, 0x6e,
	0x22, 0xa2, 0x02, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x12,
	0x32, 0x0a, 0x0a, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x44,
	0x65, 0x63, 0x6f, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x4c,
	0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70,
	0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x61,
	0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x64,
	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x14,
	0x70, 0x68, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x5f,
	0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x61, 0x70,
	0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x53, 0x75, 0x62,
	0x6e, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x12, 0x70, 0x68, 0x61, 0x6e, 0x74, 0x6f,
	0x6d, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0e,
	0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x72, 0x65, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e,
	0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x72, 0x65, 0x50,
	0x75, 0x62, 0x6b, 0x65, 0x79, 0x22, 0x42, 0x0a, 0x09, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x4c, 0x69,
	0x73, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x6c, 0x73, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63,
	0x65, 0x2e, 0x54, 0x4c, 0x53, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09,
	0x74, 0x6c, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x73, 0x22, 0x59, 0x0a, 0x12, 0x50, 0x68, 0x61,
	0x6e, 0x74, 0x6f, 0x6d, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12,
	0x43, 0x0a, 0x10, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x6e,
	0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x64,
	0x61, 0x6e, 0x63, 0x65, 0x2e, 0x50, 0x68, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x53, 0x75, 0x62, 0x6e,
	0x65, 0x74, 0x73, 0x52, 0x0f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62,
	0x6e, 0x65, 0x74, 0x73, 0x22, 0x42, 0x0a, 0x0e, 0x50, 0x68, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x53,
	0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18,
	0x0a, 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x22, 0x6f, 0x0a, 0x12, 0x57, 0x65, 0x62, 0x52,
	0x54, 0x43, 0x49, 0x43, 0x45, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x19,
	0x0a, 0x08, 0x69, 0x70, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x18, 0x01, 0x20, 0x02, 0x28, 0x04,
	0x52, 0x07, 0x69, 0x70, 0x55, 0x70, 0x70, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x70, 0x5f,
	0x6c, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x07, 0x69, 0x70, 0x4c,
	0x6f, 0x77, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64,
	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, 0x6d,
	0x70, 0x6f, 0x73, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x09, 0x57, 0x65, 0x62,
	0x52, 0x54, 0x43, 0x53, 0x44, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
	0x20, 0x02, 0x28, 0x0d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x61,
	0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c,
	0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x57, 0x65, 0x62, 0x52, 0x54, 0x43,
	0x49, 0x43, 0x45, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x63, 0x61,
	0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0x49, 0x0a, 0x0c, 0x57, 0x65, 0x62, 0x52,
	0x54, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64,
	0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x03,
	0x73, 0x64, 0x70, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x61, 0x70, 0x64,
	0x61, 0x6e, 0x63, 0x65, 0x2e, 0x57, 0x65, 0x62, 0x52, 0x54, 0x43, 0x53, 0x44, 0x50, 0x52, 0x03,
	0x73, 0x64, 0x70, 0x22, 0xcb, 0x02, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54,
	0x6f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x63, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x6e,
	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x74,
	0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x53, 0x32, 0x43, 0x5f, 0x54, 0x72, 0x61, 0x6e,
	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61,
	0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74,
	0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f,
	0x6e, 0x66, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37,
	0x0a, 0x0a, 0x65, 0x72, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x72,
	0x72, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x53, 0x32, 0x43, 0x52, 0x09, 0x65, 0x72,
	0x72, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6d, 0x70, 0x5f, 0x62,
	0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6d,
	0x70, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69,
	0x6e, 0x67, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e,
	0x67, 0x22, 0xaf, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61,
	0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x70,
	0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x72, 0x6b,
	0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x64, 0x61,
	0x72, 0x6b, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79,
	0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70,
	0x72, 0x6f, 0x78, 0x79, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73,
	0x65, 0x5f, 0x54, 0x49, 0x4c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x73, 0x65,
	0x54, 0x49, 0x4c, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65,
	0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6e,
	0x6e, 0x65, 0x64, 0x22, 0x88, 0x05, 0x0a, 0x0f, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x6f,
	0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x63, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74,
	0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x13, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x6e, 0x65,
	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f,
	0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x43, 0x32, 0x53, 0x5f,
	0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74,
	0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x75,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04,
	0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x23, 0x0a, 0x0d,
	0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x73, 0x18, 0x0a, 0x20,
	0x03, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x44, 0x65, 0x63, 0x6f, 0x79,
	0x73, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x16, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x73, 0x73,
	0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12,
	0x35, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x54, 0x72,
	0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x74, 0x72, 0x61,
	0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x74,
	0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
	0x63, 0x6f, 0x76, 0x65, 0x72, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a,
	0x18, 0x6d, 0x61, 0x73, 0x6b, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x5f, 0x73, 0x65,
	0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x15, 0x6d, 0x61, 0x73, 0x6b, 0x65, 0x64, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x36, 0x5f, 0x73, 0x75, 0x70,
	0x70, 0x6f, 0x72, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x76, 0x36, 0x53, 0x75,
	0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x34, 0x5f, 0x73, 0x75, 0x70, 0x70,
	0x6f, 0x72, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x76, 0x34, 0x53, 0x75, 0x70,
	0x70, 0x6f, 0x72, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x18, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x52,
	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6c, 0x61, 0x67, 0x73,
	0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x0d, 0x77, 0x65, 0x62, 0x72, 0x74,
	0x63, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
	0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x57, 0x65, 0x62, 0x52, 0x54, 0x43,
	0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x0c, 0x77, 0x65, 0x62, 0x72, 0x74, 0x63, 0x53, 0x69,
	0x67, 0x6e, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18,
	0x64, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xfb,
	0x02, 0x0a, 0x0a, 0x43, 0x32, 0x53, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x23, 0x0a,
	0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72,
	0x65, 0x74, 0x12, 0x4c, 0x0a, 0x14, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65,
	0x6e, 0x74, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x72, 0x65, 0x67,
	0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64,
	0x12, 0x4d, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e,
	0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x12, 0x72, 0x65, 0x67,
	0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
	0x31, 0x0a, 0x14, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
	0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x72,
	0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65,
	0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x5f, 0x61, 0x64, 0x64, 0x72,
	0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x6f, 0x79,
	0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x53, 0x0a, 0x15, 0x72, 0x65, 0x67, 0x69, 0x73,
	0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63,
	0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x14, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x01, 0x0a,
	0x0c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a,
	0x14, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x73, 0x5f, 0x61,
	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x66, 0x61, 0x69,
	0x6c, 0x65, 0x64, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x73, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12,
	0x31, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x6f,
	0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12,
	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x6f, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
	0x63, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x74, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x74, 0x74, 0x54,
	0x6f, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x6c, 0x73, 0x5f,
	0x74, 0x6f, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a,
	0x74, 0x6c, 0x73, 0x54, 0x6f, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x63,
	0x70, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x79, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0d,
	0x52, 0x0a, 0x74, 0x63, 0x70, 0x54, 0x6f, 0x44, 0x65, 0x63, 0x6f, 0x79, 0x22, 0x6e, 0x0a, 0x11,
	0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f,
	0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x68, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x5f, 0x69, 0x70, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x68, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x49, 0x70,
	0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x12, 0x1d, 0x0a,
	0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x22, 0xd2, 0x01, 0x0a,
	0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x70, 0x76, 0x34, 0x61, 0x64, 0x64,
	0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x08, 0x69, 0x70, 0x76, 0x34, 0x61, 0x64, 0x64,
	0x72, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x70, 0x76, 0x36, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x08, 0x69, 0x70, 0x76, 0x36, 0x61, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a,
	0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72,
	0x74, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x61, 0x6e, 0x64, 0x6f,
	0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52,
	0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x0a, 0x63,
	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x14, 0x2e, 0x74, 0x61, 0x70, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e,
	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
	0x66, 0x2a, 0x2b, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b,
	0x41, 0x45, 0x53, 0x5f, 0x47, 0x43, 0x4d, 0x5f, 0x31, 0x32, 0x38, 0x10, 0x5a, 0x12, 0x0f, 0x0a,
	0x0b, 0x41, 0x45, 0x53, 0x5f, 0x47, 0x43, 0x4d, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x5b, 0x2a, 0xe7,
	0x01, 0x0a, 0x0e, 0x43, 0x32, 0x53, 0x5f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x32, 0x53, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x48, 0x41, 0x4e,
	0x47, 0x45, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x32, 0x53, 0x5f, 0x53, 0x45, 0x53, 0x53,
	0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x32,
	0x53, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x54,
	0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x0b, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x32, 0x53, 0x5f, 0x45,
	0x58, 0x50, 0x45, 0x43, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10,
	0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x32, 0x53, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e,
	0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x32, 0x53, 0x5f,
	0x59, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x04, 0x12, 0x16,
	0x0a, 0x12, 0x43, 0x32, 0x53, 0x5f, 0x41, 0x43, 0x51, 0x55, 0x49, 0x52, 0x45, 0x5f, 0x55, 0x50,
	0x4c, 0x4f, 0x41, 0x44, 0x10, 0x05, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x32, 0x53, 0x5f, 0x45, 0x58,
	0x50, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x5f,
	0x52, 0x45, 0x43, 0x4f, 0x4e, 0x4e, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x43, 0x32, 0x53, 0x5f,
	0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0xff, 0x01, 0x2a, 0x98, 0x01, 0x0a, 0x0e, 0x53, 0x32, 0x43,
	0x5f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x11, 0x0a, 0x0d, 0x53,
	0x32, 0x43, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x00, 0x12, 0x14,
	0x0a, 0x10, 0x53, 0x32, 0x43, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e,
	0x49, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x32, 0x43, 0x5f, 0x53, 0x45, 0x53, 0x53,
	0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10,
	0x0b, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x32, 0x43, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d,
	0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11,
	0x53, 0x32, 0x43, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4c, 0x4f, 0x53,
	0x45, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x09, 0x53, 0x32, 0x43, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52,
	0x10, 0xff, 0x01, 0x2a, 0xac, 0x01, 0x0a, 0x0e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x61,
	0x73, 0x6f, 0x6e, 0x53, 0x32, 0x43, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x45, 0x52, 0x52,
	0x4f, 0x52, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x54, 0x5f, 0x53,
	0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x49, 0x45, 0x4e,
	0x54, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f,
	0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x10,
	0x03, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x54,
	0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x43, 0x4f, 0x59,
	0x5f, 0x4f, 0x56, 0x45, 0x52, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x43,
	0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x64, 0x12, 0x12,
	0x0a, 0x0e, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54,
	0x10, 0x65, 0x2a, 0x39, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x54,
	0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x07, 0x0a,
	0x03, 0x4d, 0x69, 0x6e, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x62, 0x66, 0x73, 0x34, 0x10,
	0x02, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x65, 0x62, 0x72, 0x74, 0x63, 0x10, 0x63, 0x2a, 0x67, 0x0a,
	0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75,
	0x72, 0x63, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
	0x65, 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72,
	0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x44,
	0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x10, 0x03,
	0x12, 0x14, 0x0a, 0x10, 0x42, 0x69, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x41, 0x50, 0x49, 0x10, 0x04,
}

var (
	file_signalling_proto_rawDescOnce sync.Once
	file_signalling_proto_rawDescData = file_signalling_proto_rawDesc
)

func file_signalling_proto_rawDescGZIP() []byte {
	file_signalling_proto_rawDescOnce.Do(func() {
		file_signalling_proto_rawDescData = protoimpl.X.CompressGZIP(file_signalling_proto_rawDescData)
	})
	return file_signalling_proto_rawDescData
}

var file_signalling_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
var file_signalling_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
var file_signalling_proto_goTypes = []interface{}{
	(KeyType)(0),                 // 0: tapdance.KeyType
	(C2S_Transition)(0),          // 1: tapdance.C2S_Transition
	(S2C_Transition)(0),          // 2: tapdance.S2C_Transition
	(ErrorReasonS2C)(0),          // 3: tapdance.ErrorReasonS2C
	(TransportType)(0),           // 4: tapdance.TransportType
	(RegistrationSource)(0),      // 5: tapdance.RegistrationSource
	(*PubKey)(nil),               // 6: tapdance.PubKey
	(*TLSDecoySpec)(nil),         // 7: tapdance.TLSDecoySpec
	(*ClientConf)(nil),           // 8: tapdance.ClientConf
	(*DecoyList)(nil),            // 9: tapdance.DecoyList
	(*PhantomSubnetsList)(nil),   // 10: tapdance.PhantomSubnetsList
	(*PhantomSubnets)(nil),       // 11: tapdance.PhantomSubnets
	(*WebRTCICECandidate)(nil),   // 12: tapdance.WebRTCICECandidate
	(*WebRTCSDP)(nil),            // 13: tapdance.WebRTCSDP
	(*WebRTCSignal)(nil),         // 14: tapdance.WebRTCSignal
	(*StationToClient)(nil),      // 15: tapdance.StationToClient
	(*RegistrationFlags)(nil),    // 16: tapdance.RegistrationFlags
	(*ClientToStation)(nil),      // 17: tapdance.ClientToStation
	(*C2SWrapper)(nil),           // 18: tapdance.C2SWrapper
	(*SessionStats)(nil),         // 19: tapdance.SessionStats
	(*StationToDetector)(nil),    // 20: tapdance.StationToDetector
	(*RegistrationResponse)(nil), // 21: tapdance.RegistrationResponse
}
var file_signalling_proto_depIdxs = []int32{
	0,  // 0: tapdance.PubKey.type:type_name -> tapdance.KeyType
	6,  // 1: tapdance.TLSDecoySpec.pubkey:type_name -> tapdance.PubKey
	9,  // 2: tapdance.ClientConf.decoy_list:type_name -> tapdance.DecoyList
	6,  // 3: tapdance.ClientConf.default_pubkey:type_name -> tapdance.PubKey
	10, // 4: tapdance.ClientConf.phantom_subnets_list:type_name -> tapdance.PhantomSubnetsList
	6,  // 5: tapdance.ClientConf.conjure_pubkey:type_name -> tapdance.PubKey
	7,  // 6: tapdance.DecoyList.tls_decoys:type_name -> tapdance.TLSDecoySpec
	11, // 7: tapdance.PhantomSubnetsList.weighted_subnets:type_name -> tapdance.PhantomSubnets
	12, // 8: tapdance.WebRTCSDP.candidates:type_name -> tapdance.WebRTCICECandidate
	13, // 9: tapdance.WebRTCSignal.sdp:type_name -> tapdance.WebRTCSDP
	2,  // 10: tapdance.StationToClient.state_transition:type_name -> tapdance.S2C_Transition
	8,  // 11: tapdance.StationToClient.config_info:type_name -> tapdance.ClientConf
	3,  // 12: tapdance.StationToClient.err_reason:type_name -> tapdance.ErrorReasonS2C
	1,  // 13: tapdance.ClientToStation.state_transition:type_name -> tapdance.C2S_Transition
	19, // 14: tapdance.ClientToStation.stats:type_name -> tapdance.SessionStats
	4,  // 15: tapdance.ClientToStation.transport:type_name -> tapdance.TransportType
	16, // 16: tapdance.ClientToStation.flags:type_name -> tapdance.RegistrationFlags
	14, // 17: tapdance.ClientToStation.webrtc_signal:type_name -> tapdance.WebRTCSignal
	17, // 18: tapdance.C2SWrapper.registration_payload:type_name -> tapdance.ClientToStation
	5,  // 19: tapdance.C2SWrapper.registration_source:type_name -> tapdance.RegistrationSource
	21, // 20: tapdance.C2SWrapper.registration_response:type_name -> tapdance.RegistrationResponse
	8,  // 21: tapdance.RegistrationResponse.clientConf:type_name -> tapdance.ClientConf
	22, // [22:22] is the sub-list for method output_type
	22, // [22:22] is the sub-list for method input_type
	22, // [22:22] is the sub-list for extension type_name
	22, // [22:22] is the sub-list for extension extendee
	0,  // [0:22] is the sub-list for field type_name
}

func init() { file_signalling_proto_init() }
func file_signalling_proto_init() {
	if File_signalling_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_signalling_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PubKey); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TLSDecoySpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ClientConf); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DecoyList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PhantomSubnetsList); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PhantomSubnets); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*WebRTCICECandidate); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*WebRTCSDP); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*WebRTCSignal); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StationToClient); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RegistrationFlags); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ClientToStation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*C2SWrapper); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SessionStats); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StationToDetector); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_signalling_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RegistrationResponse); 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_signalling_proto_rawDesc,
			NumEnums:      6,
			NumMessages:   16,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_signalling_proto_goTypes,
		DependencyIndexes: file_signalling_proto_depIdxs,
		EnumInfos:         file_signalling_proto_enumTypes,
		MessageInfos:      file_signalling_proto_msgTypes,
	}.Build()
	File_signalling_proto = out.File
	file_signalling_proto_rawDesc = nil
	file_signalling_proto_goTypes = nil
	file_signalling_proto_depIdxs = nil
}