// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: route.proto

package route

import (
	fmt "fmt"
	github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
	proto "github.com/gogo/protobuf/proto"
	io "io"
	math "math"
	reflect "reflect"
	strconv "strconv"
	strings "strings"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package

type OperatorType int32

const (
	OperatorUnDefined    OperatorType = 0
	OperatorEqual        OperatorType = 1
	OperatorGreater      OperatorType = 2
	OperatorLess         OperatorType = 3
	OperatorGreaterEqual OperatorType = 4
	OperatorLessEqual    OperatorType = 5
)

var OperatorType_name = map[int32]string{
	0: "OperatorUnDefined",
	1: "OperatorEqual",
	2: "OperatorGreater",
	3: "OperatorLess",
	4: "OperatorGreaterEqual",
	5: "OperatorLessEqual",
}

var OperatorType_value = map[string]int32{
	"OperatorUnDefined":    0,
	"OperatorEqual":        1,
	"OperatorGreater":      2,
	"OperatorLess":         3,
	"OperatorGreaterEqual": 4,
	"OperatorLessEqual":    5,
}

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

func (x OperatorType) MarshalJSON() ([]byte, error) {
	return proto.MarshalJSONEnum(OperatorType_name, int32(x))
}

func (x *OperatorType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(OperatorType_value, data, "OperatorType")
	if err != nil {
		return err
	}
	*x = OperatorType(value)
	return nil
}

func (OperatorType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{0}
}

type LocationType int32

const (
	LocUnDefined  LocationType = 0
	LocHttpHeader LocationType = 1
	LocHttpQuery  LocationType = 2
	LocNginxVar   LocationType = 3
	LocXBizInfo   LocationType = 4
	LocHttpCookie LocationType = 5
)

var LocationType_name = map[int32]string{
	0: "LocUnDefined",
	1: "LocHttpHeader",
	2: "LocHttpQuery",
	3: "LocNginxVar",
	4: "LocXBizInfo",
	5: "LocHttpCookie",
}

var LocationType_value = map[string]int32{
	"LocUnDefined":  0,
	"LocHttpHeader": 1,
	"LocHttpQuery":  2,
	"LocNginxVar":   3,
	"LocXBizInfo":   4,
	"LocHttpCookie": 5,
}

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

func (x LocationType) MarshalJSON() ([]byte, error) {
	return proto.MarshalJSONEnum(LocationType_name, int32(x))
}

func (x *LocationType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(LocationType_value, data, "LocationType")
	if err != nil {
		return err
	}
	*x = LocationType(value)
	return nil
}

func (LocationType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{1}
}

type MatchType int32

const (
	MatchUnDefined MatchType = 0
	WholeMatch     MatchType = 1
	StrListInMatch MatchType = 2
	ModCompare     MatchType = 3
)

var MatchType_name = map[int32]string{
	0: "MatchUnDefined",
	1: "WholeMatch",
	2: "StrListInMatch",
	3: "ModCompare",
}

var MatchType_value = map[string]int32{
	"MatchUnDefined": 0,
	"WholeMatch":     1,
	"StrListInMatch": 2,
	"ModCompare":     3,
}

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

func (x MatchType) MarshalJSON() ([]byte, error) {
	return proto.MarshalJSONEnum(MatchType_name, int32(x))
}

func (x *MatchType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(MatchType_value, data, "MatchType")
	if err != nil {
		return err
	}
	*x = MatchType(value)
	return nil
}

func (MatchType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{2}
}

type HostType int32

const (
	Web  HostType = 0
	MTOP HostType = 1
)

var HostType_name = map[int32]string{
	0: "Web",
	1: "MTOP",
}

var HostType_value = map[string]int32{
	"Web":  0,
	"MTOP": 1,
}

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

func (x HostType) MarshalJSON() ([]byte, error) {
	return proto.MarshalJSONEnum(HostType_name, int32(x))
}

func (x *HostType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(HostType_value, data, "HostType")
	if err != nil {
		return err
	}
	*x = HostType(value)
	return nil
}

func (HostType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{3}
}

type ActionType int32

const (
	ActionUnDefined        ActionType = 0
	ActionAddReqHeader     ActionType = 1
	ActionAppendReqHeader  ActionType = 2
	ActionAddRespHeader    ActionType = 3
	ActionAppendRespHeader ActionType = 4
	ActionAddParam         ActionType = 5
)

var ActionType_name = map[int32]string{
	0: "ActionUnDefined",
	1: "ActionAddReqHeader",
	2: "ActionAppendReqHeader",
	3: "ActionAddRespHeader",
	4: "ActionAppendRespHeader",
	5: "ActionAddParam",
}

var ActionType_value = map[string]int32{
	"ActionUnDefined":        0,
	"ActionAddReqHeader":     1,
	"ActionAppendReqHeader":  2,
	"ActionAddRespHeader":    3,
	"ActionAppendRespHeader": 4,
	"ActionAddParam":         5,
}

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

func (x ActionType) MarshalJSON() ([]byte, error) {
	return proto.MarshalJSONEnum(ActionType_name, int32(x))
}

func (x *ActionType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(ActionType_value, data, "ActionType")
	if err != nil {
		return err
	}
	*x = ActionType(value)
	return nil
}

func (ActionType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{4}
}

type ActionValueType int32

const (
	ActionValueUnDefined ActionValueType = 0
	ActionStaticValue    ActionValueType = 1
	ActionDynamicValue   ActionValueType = 2
)

var ActionValueType_name = map[int32]string{
	0: "ActionValueUnDefined",
	1: "ActionStaticValue",
	2: "ActionDynamicValue",
}

var ActionValueType_value = map[string]int32{
	"ActionValueUnDefined": 0,
	"ActionStaticValue":    1,
	"ActionDynamicValue":   2,
}

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

func (x ActionValueType) MarshalJSON() ([]byte, error) {
	return proto.MarshalJSONEnum(ActionValueType_name, int32(x))
}

func (x *ActionValueType) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(ActionValueType_value, data, "ActionValueType")
	if err != nil {
		return err
	}
	*x = ActionValueType(value)
	return nil
}

func (ActionValueType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{5}
}

type TagValueStrList struct {
	Value []string `protobuf:"bytes,1,rep,name=value" json:"value,omitempty"`
}

func (m *TagValueStrList) Reset()      { *m = TagValueStrList{} }
func (*TagValueStrList) ProtoMessage() {}
func (*TagValueStrList) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{0}
}
func (m *TagValueStrList) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *TagValueStrList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_TagValueStrList.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *TagValueStrList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TagValueStrList.Merge(m, src)
}
func (m *TagValueStrList) XXX_Size() int {
	return m.Size()
}
func (m *TagValueStrList) XXX_DiscardUnknown() {
	xxx_messageInfo_TagValueStrList.DiscardUnknown(m)
}

var xxx_messageInfo_TagValueStrList proto.InternalMessageInfo

func (m *TagValueStrList) GetValue() []string {
	if m != nil {
		return m.Value
	}
	return nil
}

type TagItemCondition struct {
	ValueStr  string           `protobuf:"bytes,1,opt,name=value_str" json:"value_str"`
	ValueList *TagValueStrList `protobuf:"bytes,2,opt,name=value_list" json:"value_list,omitempty"`
	Divisor   uint64           `protobuf:"varint,3,opt,name=divisor" json:"divisor"`
	Remainder uint64           `protobuf:"varint,4,opt,name=remainder" json:"remainder"`
	Operator  OperatorType     `protobuf:"varint,5,opt,name=operator,enum=route.OperatorType" json:"operator"`
}

func (m *TagItemCondition) Reset()      { *m = TagItemCondition{} }
func (*TagItemCondition) ProtoMessage() {}
func (*TagItemCondition) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{1}
}
func (m *TagItemCondition) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *TagItemCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_TagItemCondition.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *TagItemCondition) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TagItemCondition.Merge(m, src)
}
func (m *TagItemCondition) XXX_Size() int {
	return m.Size()
}
func (m *TagItemCondition) XXX_DiscardUnknown() {
	xxx_messageInfo_TagItemCondition.DiscardUnknown(m)
}

var xxx_messageInfo_TagItemCondition proto.InternalMessageInfo

func (m *TagItemCondition) GetValueStr() string {
	if m != nil {
		return m.ValueStr
	}
	return ""
}

func (m *TagItemCondition) GetValueList() *TagValueStrList {
	if m != nil {
		return m.ValueList
	}
	return nil
}

func (m *TagItemCondition) GetDivisor() uint64 {
	if m != nil {
		return m.Divisor
	}
	return 0
}

func (m *TagItemCondition) GetRemainder() uint64 {
	if m != nil {
		return m.Remainder
	}
	return 0
}

func (m *TagItemCondition) GetOperator() OperatorType {
	if m != nil {
		return m.Operator
	}
	return OperatorUnDefined
}

type TagItem struct {
	Location  LocationType      `protobuf:"varint,1,opt,name=location,enum=route.LocationType" json:"location"`
	Key       string            `protobuf:"bytes,2,opt,name=key" json:"key"`
	Condition *TagItemCondition `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"`
	MatchType MatchType         `protobuf:"varint,4,opt,name=match_type,enum=route.MatchType" json:"match_type"`
}

func (m *TagItem) Reset()      { *m = TagItem{} }
func (*TagItem) ProtoMessage() {}
func (*TagItem) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{2}
}
func (m *TagItem) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *TagItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_TagItem.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *TagItem) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TagItem.Merge(m, src)
}
func (m *TagItem) XXX_Size() int {
	return m.Size()
}
func (m *TagItem) XXX_DiscardUnknown() {
	xxx_messageInfo_TagItem.DiscardUnknown(m)
}

var xxx_messageInfo_TagItem proto.InternalMessageInfo

func (m *TagItem) GetLocation() LocationType {
	if m != nil {
		return m.Location
	}
	return LocUnDefined
}

func (m *TagItem) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *TagItem) GetCondition() *TagItemCondition {
	if m != nil {
		return m.Condition
	}
	return nil
}

func (m *TagItem) GetMatchType() MatchType {
	if m != nil {
		return m.MatchType
	}
	return MatchUnDefined
}

type TagRule struct {
	Items []*TagItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
}

func (m *TagRule) Reset()      { *m = TagRule{} }
func (*TagRule) ProtoMessage() {}
func (*TagRule) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{3}
}
func (m *TagRule) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *TagRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_TagRule.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *TagRule) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TagRule.Merge(m, src)
}
func (m *TagRule) XXX_Size() int {
	return m.Size()
}
func (m *TagRule) XXX_DiscardUnknown() {
	xxx_messageInfo_TagRule.DiscardUnknown(m)
}

var xxx_messageInfo_TagRule proto.InternalMessageInfo

func (m *TagRule) GetItems() []*TagItem {
	if m != nil {
		return m.Items
	}
	return nil
}

type TagRouter struct {
	ServiceName string     `protobuf:"bytes,1,opt,name=service_name" json:"service_name"`
	Rules       []*TagRule `protobuf:"bytes,2,rep,name=rules" json:"rules,omitempty"`
}

func (m *TagRouter) Reset()      { *m = TagRouter{} }
func (*TagRouter) ProtoMessage() {}
func (*TagRouter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{4}
}
func (m *TagRouter) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *TagRouter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_TagRouter.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *TagRouter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TagRouter.Merge(m, src)
}
func (m *TagRouter) XXX_Size() int {
	return m.Size()
}
func (m *TagRouter) XXX_DiscardUnknown() {
	xxx_messageInfo_TagRouter.DiscardUnknown(m)
}

var xxx_messageInfo_TagRouter proto.InternalMessageInfo

func (m *TagRouter) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *TagRouter) GetRules() []*TagRule {
	if m != nil {
		return m.Rules
	}
	return nil
}

type PathRouter struct {
	Prefix      string       `protobuf:"bytes,1,opt,name=prefix" json:"prefix"`
	ServiceName string       `protobuf:"bytes,2,opt,name=service_name" json:"service_name"`
	Tags        []*TagRouter `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"`
}

func (m *PathRouter) Reset()      { *m = PathRouter{} }
func (*PathRouter) ProtoMessage() {}
func (*PathRouter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{5}
}
func (m *PathRouter) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *PathRouter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_PathRouter.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *PathRouter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PathRouter.Merge(m, src)
}
func (m *PathRouter) XXX_Size() int {
	return m.Size()
}
func (m *PathRouter) XXX_DiscardUnknown() {
	xxx_messageInfo_PathRouter.DiscardUnknown(m)
}

var xxx_messageInfo_PathRouter proto.InternalMessageInfo

func (m *PathRouter) GetPrefix() string {
	if m != nil {
		return m.Prefix
	}
	return ""
}

func (m *PathRouter) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *PathRouter) GetTags() []*TagRouter {
	if m != nil {
		return m.Tags
	}
	return nil
}

type HostRouter struct {
	Host        string        `protobuf:"bytes,1,opt,name=host" json:"host"`
	ServiceName string        `protobuf:"bytes,2,opt,name=service_name" json:"service_name"`
	Paths       []*PathRouter `protobuf:"bytes,3,rep,name=paths" json:"paths,omitempty"`
	Tags        []*TagRouter  `protobuf:"bytes,4,rep,name=tags" json:"tags,omitempty"`
	Type        HostType      `protobuf:"varint,5,opt,name=type,enum=route.HostType" json:"type"`
}

func (m *HostRouter) Reset()      { *m = HostRouter{} }
func (*HostRouter) ProtoMessage() {}
func (*HostRouter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{6}
}
func (m *HostRouter) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *HostRouter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_HostRouter.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *HostRouter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HostRouter.Merge(m, src)
}
func (m *HostRouter) XXX_Size() int {
	return m.Size()
}
func (m *HostRouter) XXX_DiscardUnknown() {
	xxx_messageInfo_HostRouter.DiscardUnknown(m)
}

var xxx_messageInfo_HostRouter proto.InternalMessageInfo

func (m *HostRouter) GetHost() string {
	if m != nil {
		return m.Host
	}
	return ""
}

func (m *HostRouter) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *HostRouter) GetPaths() []*PathRouter {
	if m != nil {
		return m.Paths
	}
	return nil
}

func (m *HostRouter) GetTags() []*TagRouter {
	if m != nil {
		return m.Tags
	}
	return nil
}

func (m *HostRouter) GetType() HostType {
	if m != nil {
		return m.Type
	}
	return Web
}

type AppnameRouter struct {
	Appname     string       `protobuf:"bytes,1,opt,name=appname" json:"appname"`
	ServiceName string       `protobuf:"bytes,2,opt,name=service_name" json:"service_name"`
	Tags        []*TagRouter `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"`
}

func (m *AppnameRouter) Reset()      { *m = AppnameRouter{} }
func (*AppnameRouter) ProtoMessage() {}
func (*AppnameRouter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{7}
}
func (m *AppnameRouter) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *AppnameRouter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_AppnameRouter.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *AppnameRouter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_AppnameRouter.Merge(m, src)
}
func (m *AppnameRouter) XXX_Size() int {
	return m.Size()
}
func (m *AppnameRouter) XXX_DiscardUnknown() {
	xxx_messageInfo_AppnameRouter.DiscardUnknown(m)
}

var xxx_messageInfo_AppnameRouter proto.InternalMessageInfo

func (m *AppnameRouter) GetAppname() string {
	if m != nil {
		return m.Appname
	}
	return ""
}

func (m *AppnameRouter) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *AppnameRouter) GetTags() []*TagRouter {
	if m != nil {
		return m.Tags
	}
	return nil
}

type APIRouter struct {
	ServiceName string       `protobuf:"bytes,1,opt,name=service_name" json:"service_name"`
	Api         string       `protobuf:"bytes,2,opt,name=api" json:"api"`
	Tags        []*TagRouter `protobuf:"bytes,3,rep,name=tags" json:"tags,omitempty"`
}

func (m *APIRouter) Reset()      { *m = APIRouter{} }
func (*APIRouter) ProtoMessage() {}
func (*APIRouter) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{8}
}
func (m *APIRouter) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *APIRouter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_APIRouter.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *APIRouter) XXX_Merge(src proto.Message) {
	xxx_messageInfo_APIRouter.Merge(m, src)
}
func (m *APIRouter) XXX_Size() int {
	return m.Size()
}
func (m *APIRouter) XXX_DiscardUnknown() {
	xxx_messageInfo_APIRouter.DiscardUnknown(m)
}

var xxx_messageInfo_APIRouter proto.InternalMessageInfo

func (m *APIRouter) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *APIRouter) GetApi() string {
	if m != nil {
		return m.Api
	}
	return ""
}

func (m *APIRouter) GetTags() []*TagRouter {
	if m != nil {
		return m.Tags
	}
	return nil
}

type Router struct {
	HostRouter    *HostRouter    `protobuf:"bytes,1,opt,name=host_router" json:"host_router,omitempty"`
	AppnameRouter *AppnameRouter `protobuf:"bytes,2,opt,name=appname_router" json:"appname_router,omitempty"`
	ApiRouter     *APIRouter     `protobuf:"bytes,3,opt,name=api_router" json:"api_router,omitempty"`
}

func (m *Router) Reset()      { *m = Router{} }
func (*Router) ProtoMessage() {}
func (*Router) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{9}
}
func (m *Router) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Router) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Router.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Router) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Router.Merge(m, src)
}
func (m *Router) XXX_Size() int {
	return m.Size()
}
func (m *Router) XXX_DiscardUnknown() {
	xxx_messageInfo_Router.DiscardUnknown(m)
}

var xxx_messageInfo_Router proto.InternalMessageInfo

func (m *Router) GetHostRouter() *HostRouter {
	if m != nil {
		return m.HostRouter
	}
	return nil
}

func (m *Router) GetAppnameRouter() *AppnameRouter {
	if m != nil {
		return m.AppnameRouter
	}
	return nil
}

func (m *Router) GetApiRouter() *APIRouter {
	if m != nil {
		return m.ApiRouter
	}
	return nil
}

type Upstream struct {
	Target string `protobuf:"bytes,1,opt,name=target" json:"target"`
	Weight uint32 `protobuf:"varint,2,opt,name=weight" json:"weight"`
}

func (m *Upstream) Reset()      { *m = Upstream{} }
func (*Upstream) ProtoMessage() {}
func (*Upstream) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{10}
}
func (m *Upstream) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Upstream) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Upstream.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Upstream) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Upstream.Merge(m, src)
}
func (m *Upstream) XXX_Size() int {
	return m.Size()
}
func (m *Upstream) XXX_DiscardUnknown() {
	xxx_messageInfo_Upstream.DiscardUnknown(m)
}

var xxx_messageInfo_Upstream proto.InternalMessageInfo

func (m *Upstream) GetTarget() string {
	if m != nil {
		return m.Target
	}
	return ""
}

func (m *Upstream) GetWeight() uint32 {
	if m != nil {
		return m.Weight
	}
	return 0
}

type Timeout struct {
	ConnectTimeout uint32 `protobuf:"varint,1,opt,name=connect_timeout" json:"connect_timeout"`
	ReadTimeout    uint32 `protobuf:"varint,2,opt,name=read_timeout" json:"read_timeout"`
	WriteTimeout   uint32 `protobuf:"varint,3,opt,name=write_timeout" json:"write_timeout"`
}

func (m *Timeout) Reset()      { *m = Timeout{} }
func (*Timeout) ProtoMessage() {}
func (*Timeout) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{11}
}
func (m *Timeout) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Timeout) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Timeout.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Timeout) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Timeout.Merge(m, src)
}
func (m *Timeout) XXX_Size() int {
	return m.Size()
}
func (m *Timeout) XXX_DiscardUnknown() {
	xxx_messageInfo_Timeout.DiscardUnknown(m)
}

var xxx_messageInfo_Timeout proto.InternalMessageInfo

func (m *Timeout) GetConnectTimeout() uint32 {
	if m != nil {
		return m.ConnectTimeout
	}
	return 0
}

func (m *Timeout) GetReadTimeout() uint32 {
	if m != nil {
		return m.ReadTimeout
	}
	return 0
}

func (m *Timeout) GetWriteTimeout() uint32 {
	if m != nil {
		return m.WriteTimeout
	}
	return 0
}

type Metadata struct {
	Key   string `protobuf:"bytes,1,opt,name=key" json:"key"`
	Value string `protobuf:"bytes,2,opt,name=value" json:"value"`
}

func (m *Metadata) Reset()      { *m = Metadata{} }
func (*Metadata) ProtoMessage() {}
func (*Metadata) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{12}
}
func (m *Metadata) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Metadata.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Metadata) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Metadata.Merge(m, src)
}
func (m *Metadata) XXX_Size() int {
	return m.Size()
}
func (m *Metadata) XXX_DiscardUnknown() {
	xxx_messageInfo_Metadata.DiscardUnknown(m)
}

var xxx_messageInfo_Metadata proto.InternalMessageInfo

func (m *Metadata) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *Metadata) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

type Action struct {
	ActionType ActionType      `protobuf:"varint,1,opt,name=action_type,enum=route.ActionType" json:"action_type"`
	ValueType  ActionValueType `protobuf:"varint,2,opt,name=value_type,enum=route.ActionValueType" json:"value_type"`
	Key        string          `protobuf:"bytes,3,opt,name=key" json:"key"`
	Value      string          `protobuf:"bytes,4,opt,name=value" json:"value"`
}

func (m *Action) Reset()      { *m = Action{} }
func (*Action) ProtoMessage() {}
func (*Action) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{13}
}
func (m *Action) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Action.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Action) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Action.Merge(m, src)
}
func (m *Action) XXX_Size() int {
	return m.Size()
}
func (m *Action) XXX_DiscardUnknown() {
	xxx_messageInfo_Action.DiscardUnknown(m)
}

var xxx_messageInfo_Action proto.InternalMessageInfo

func (m *Action) GetActionType() ActionType {
	if m != nil {
		return m.ActionType
	}
	return ActionUnDefined
}

func (m *Action) GetValueType() ActionValueType {
	if m != nil {
		return m.ValueType
	}
	return ActionValueUnDefined
}

func (m *Action) GetKey() string {
	if m != nil {
		return m.Key
	}
	return ""
}

func (m *Action) GetValue() string {
	if m != nil {
		return m.Value
	}
	return ""
}

type VirtualService struct {
	ServiceName string      `protobuf:"bytes,1,req,name=service_name" json:"service_name"`
	Upstreams   []*Upstream `protobuf:"bytes,2,rep,name=upstreams" json:"upstreams,omitempty"`
	TimeoutMs   *Timeout    `protobuf:"bytes,3,opt,name=timeout_ms" json:"timeout_ms,omitempty"`
	ForceHttps  bool        `protobuf:"varint,4,opt,name=force_https" json:"force_https"`
	Metadata    []*Metadata `protobuf:"bytes,5,rep,name=metadata" json:"metadata,omitempty"`
	Action      []*Action   `protobuf:"bytes,6,rep,name=action" json:"action,omitempty"`
}

func (m *VirtualService) Reset()      { *m = VirtualService{} }
func (*VirtualService) ProtoMessage() {}
func (*VirtualService) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{14}
}
func (m *VirtualService) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *VirtualService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_VirtualService.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *VirtualService) XXX_Merge(src proto.Message) {
	xxx_messageInfo_VirtualService.Merge(m, src)
}
func (m *VirtualService) XXX_Size() int {
	return m.Size()
}
func (m *VirtualService) XXX_DiscardUnknown() {
	xxx_messageInfo_VirtualService.DiscardUnknown(m)
}

var xxx_messageInfo_VirtualService proto.InternalMessageInfo

func (m *VirtualService) GetServiceName() string {
	if m != nil {
		return m.ServiceName
	}
	return ""
}

func (m *VirtualService) GetUpstreams() []*Upstream {
	if m != nil {
		return m.Upstreams
	}
	return nil
}

func (m *VirtualService) GetTimeoutMs() *Timeout {
	if m != nil {
		return m.TimeoutMs
	}
	return nil
}

func (m *VirtualService) GetForceHttps() bool {
	if m != nil {
		return m.ForceHttps
	}
	return false
}

func (m *VirtualService) GetMetadata() []*Metadata {
	if m != nil {
		return m.Metadata
	}
	return nil
}

func (m *VirtualService) GetAction() []*Action {
	if m != nil {
		return m.Action
	}
	return nil
}

type Config struct {
	Routers  []*Router         `protobuf:"bytes,1,rep,name=routers" json:"routers,omitempty"`
	Services []*VirtualService `protobuf:"bytes,2,rep,name=services" json:"services,omitempty"`
}

func (m *Config) Reset()      { *m = Config{} }
func (*Config) ProtoMessage() {}
func (*Config) Descriptor() ([]byte, []int) {
	return fileDescriptor_0984d49a362b6b9f, []int{15}
}
func (m *Config) XXX_Unmarshal(b []byte) error {
	return m.Unmarshal(b)
}
func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	if deterministic {
		return xxx_messageInfo_Config.Marshal(b, m, deterministic)
	} else {
		b = b[:cap(b)]
		n, err := m.MarshalTo(b)
		if err != nil {
			return nil, err
		}
		return b[:n], nil
	}
}
func (m *Config) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Config.Merge(m, src)
}
func (m *Config) XXX_Size() int {
	return m.Size()
}
func (m *Config) XXX_DiscardUnknown() {
	xxx_messageInfo_Config.DiscardUnknown(m)
}

var xxx_messageInfo_Config proto.InternalMessageInfo

func (m *Config) GetRouters() []*Router {
	if m != nil {
		return m.Routers
	}
	return nil
}

func (m *Config) GetServices() []*VirtualService {
	if m != nil {
		return m.Services
	}
	return nil
}

func init() {
	proto.RegisterEnum("route.OperatorType", OperatorType_name, OperatorType_value)
	proto.RegisterEnum("route.LocationType", LocationType_name, LocationType_value)
	proto.RegisterEnum("route.MatchType", MatchType_name, MatchType_value)
	proto.RegisterEnum("route.HostType", HostType_name, HostType_value)
	proto.RegisterEnum("route.ActionType", ActionType_name, ActionType_value)
	proto.RegisterEnum("route.ActionValueType", ActionValueType_name, ActionValueType_value)
	proto.RegisterType((*TagValueStrList)(nil), "route.TagValueStrList")
	proto.RegisterType((*TagItemCondition)(nil), "route.TagItemCondition")
	proto.RegisterType((*TagItem)(nil), "route.TagItem")
	proto.RegisterType((*TagRule)(nil), "route.TagRule")
	proto.RegisterType((*TagRouter)(nil), "route.TagRouter")
	proto.RegisterType((*PathRouter)(nil), "route.PathRouter")
	proto.RegisterType((*HostRouter)(nil), "route.HostRouter")
	proto.RegisterType((*AppnameRouter)(nil), "route.AppnameRouter")
	proto.RegisterType((*APIRouter)(nil), "route.APIRouter")
	proto.RegisterType((*Router)(nil), "route.Router")
	proto.RegisterType((*Upstream)(nil), "route.Upstream")
	proto.RegisterType((*Timeout)(nil), "route.Timeout")
	proto.RegisterType((*Metadata)(nil), "route.Metadata")
	proto.RegisterType((*Action)(nil), "route.Action")
	proto.RegisterType((*VirtualService)(nil), "route.VirtualService")
	proto.RegisterType((*Config)(nil), "route.Config")
}

func init() { proto.RegisterFile("route.proto", fileDescriptor_0984d49a362b6b9f) }

var fileDescriptor_0984d49a362b6b9f = []byte{
	// 1103 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x4f, 0x6f, 0x1b, 0x45,
	0x14, 0xf7, 0x78, 0xd7, 0xff, 0x9e, 0x6b, 0x67, 0x33, 0x89, 0x13, 0xb7, 0x28, 0x8b, 0x31, 0x08,
	0x2c, 0x53, 0x15, 0xe4, 0x03, 0x17, 0x24, 0xa4, 0x24, 0x05, 0x12, 0xc9, 0xa1, 0x69, 0x93, 0xa6,
	0x28, 0x07, 0xac, 0xe9, 0x7a, 0x62, 0xaf, 0xea, 0xdd, 0xd9, 0xce, 0x8e, 0xd3, 0xa6, 0x27, 0x0e,
	0x7c, 0x80, 0x7c, 0x01, 0x0e, 0x88, 0x0b, 0x1f, 0x80, 0x0f, 0xd1, 0x63, 0xb8, 0xf5, 0x84, 0x88,
	0x73, 0xe1, 0xd8, 0x8f, 0x80, 0x76, 0x76, 0x66, 0x3d, 0x0e, 0x39, 0x14, 0x89, 0xdb, 0xce, 0x7b,
	0xbf, 0xf9, 0xbd, 0xdf, 0xfc, 0xde, 0xcc, 0x5b, 0xa8, 0x72, 0x36, 0x15, 0xf4, 0x5e, 0xc4, 0x99,
	0x60, 0xb8, 0x20, 0x17, 0xed, 0x16, 0x2c, 0x1d, 0x92, 0xd1, 0x11, 0x99, 0x4c, 0xe9, 0x81, 0xe0,
	0x7d, 0x3f, 0x16, 0xb8, 0x06, 0x85, 0xd3, 0x64, 0xdd, 0x44, 0x2d, 0xab, 0x53, 0x69, 0xff, 0x8e,
	0xc0, 0x39, 0x24, 0xa3, 0x5d, 0x41, 0x83, 0x6d, 0x16, 0x0e, 0x7d, 0xe1, 0xb3, 0x10, 0xaf, 0x43,
	0x45, 0x62, 0x06, 0xb1, 0xe0, 0x4d, 0xd4, 0x42, 0x9d, 0xca, 0x96, 0xfd, 0xfa, 0xcf, 0xf7, 0x73,
	0xb8, 0x0b, 0x90, 0x26, 0x26, 0x7e, 0x2c, 0x9a, 0xf9, 0x16, 0xea, 0x54, 0x7b, 0x6b, 0xf7, 0xd2,
	0xc2, 0xd7, 0x0b, 0x35, 0xa0, 0x34, 0xf4, 0x4f, 0xfd, 0x98, 0xf1, 0xa6, 0xd5, 0x42, 0x1d, 0x5b,
	0x51, 0xac, 0x43, 0x85, 0xd3, 0x80, 0xf8, 0xe1, 0x90, 0xf2, 0xa6, 0x6d, 0x24, 0x3e, 0x85, 0x32,
	0x8b, 0x28, 0x27, 0x82, 0xf1, 0x66, 0xa1, 0x85, 0x3a, 0xf5, 0xde, 0x8a, 0x62, 0x7e, 0xa0, 0xc2,
	0x87, 0x67, 0x11, 0x4d, 0xc1, 0xed, 0x5f, 0x10, 0x94, 0x94, 0xec, 0x64, 0xe3, 0x84, 0x79, 0x24,
	0x51, 0x2e, 0xc5, 0xce, 0x37, 0xf6, 0x55, 0x78, 0xbe, 0x11, 0x2f, 0x83, 0xf5, 0x8c, 0x9e, 0x49,
	0xe9, 0xf3, 0x43, 0x55, 0x3c, 0x7d, 0x74, 0x29, 0xb5, 0xda, 0x5b, 0x9f, 0x9f, 0x69, 0xd1, 0x99,
	0x2e, 0x40, 0x40, 0x84, 0x37, 0x1e, 0x88, 0xb3, 0x88, 0x4a, 0xf9, 0xf5, 0x9e, 0xa3, 0xc0, 0x7b,
	0x49, 0xc2, 0xd0, 0xd8, 0x91, 0x12, 0x1f, 0x4d, 0x27, 0x14, 0x6f, 0x40, 0xc1, 0x17, 0x34, 0x88,
	0xa5, 0xe9, 0xd5, 0x5e, 0x7d, 0x91, 0xbe, 0xfd, 0x0d, 0x54, 0x12, 0x64, 0x12, 0xe3, 0xf8, 0x0e,
	0xdc, 0x8a, 0x29, 0x3f, 0xf5, 0x3d, 0x3a, 0x08, 0x49, 0x40, 0x17, 0xfc, 0xdf, 0x80, 0x02, 0x9f,
	0x4e, 0x68, 0xdc, 0xcc, 0x5f, 0xe7, 0x49, 0xca, 0xb4, 0x7f, 0x00, 0xd8, 0x27, 0x62, 0xac, 0x88,
	0x56, 0xa1, 0x18, 0x71, 0x7a, 0xe2, 0xbf, 0x5c, 0xa0, 0xb8, 0x4e, 0x6f, 0x3a, 0xe1, 0x82, 0x2d,
	0xc8, 0x28, 0x6e, 0x5a, 0x92, 0xdd, 0x31, 0xd8, 0x25, 0x63, 0xfb, 0x57, 0x04, 0xb0, 0xc3, 0x62,
	0xa1, 0x0a, 0x60, 0xb0, 0xc7, 0x2c, 0x16, 0xef, 0x4c, 0xdf, 0x82, 0x42, 0x44, 0xc4, 0x58, 0xf3,
	0x2f, 0x2b, 0x7e, 0x43, 0xb2, 0x16, 0x60, 0xdf, 0x2c, 0x00, 0x7f, 0x08, 0xb6, 0x34, 0x3e, 0xbd,
	0x1f, 0x4b, 0x2a, 0x9f, 0x48, 0x32, 0x7c, 0x7f, 0x0a, 0xb5, 0xcd, 0x28, 0x4a, 0xaa, 0xab, 0x5d,
	0x0d, 0x28, 0x91, 0x34, 0xf0, 0xbf, 0x39, 0x71, 0x0c, 0x95, 0xcd, 0xfd, 0xdd, 0x77, 0xe8, 0xd8,
	0x32, 0x58, 0x24, 0xf2, 0xff, 0x13, 0xf7, 0x4f, 0x08, 0x8a, 0x8a, 0xf9, 0x63, 0xa8, 0x26, 0x0e,
	0x0f, 0x24, 0x24, 0x7d, 0x8a, 0x73, 0xdf, 0x8c, 0x4e, 0xdc, 0x85, 0xba, 0x3a, 0xa1, 0x86, 0xa6,
	0x6f, 0x73, 0x55, 0x41, 0x17, 0xfd, 0xf8, 0x08, 0x80, 0x44, 0xbe, 0x46, 0xa6, 0x37, 0x5e, 0xcb,
	0xc8, 0x4e, 0xd5, 0xfe, 0x02, 0xca, 0x8f, 0xa3, 0x58, 0x70, 0x4a, 0x82, 0xe4, 0x2a, 0x09, 0xc2,
	0x47, 0x74, 0xb1, 0xd7, 0xab, 0x50, 0x7c, 0x41, 0xfd, 0xd1, 0x38, 0x9d, 0x04, 0x35, 0x65, 0x3f,
	0x81, 0xd2, 0xa1, 0x1f, 0x50, 0x36, 0x15, 0x78, 0x03, 0x96, 0x3c, 0x16, 0x86, 0xd4, 0x13, 0x03,
	0x91, 0x86, 0xe4, 0xfe, 0xda, 0xbc, 0x01, 0x9c, 0x92, 0x61, 0x96, 0x33, 0x58, 0xf0, 0x7b, 0x50,
	0x7b, 0xc1, 0x7d, 0x41, 0xb3, 0xa4, 0x65, 0x94, 0xe8, 0x41, 0x79, 0x8f, 0x0a, 0x32, 0x24, 0x82,
	0xe8, 0x07, 0x6d, 0xea, 0x5a, 0xd1, 0x23, 0xce, 0x70, 0xbd, 0x7d, 0x8e, 0xa0, 0xb8, 0xe9, 0xc9,
	0x47, 0x7c, 0x17, 0xaa, 0x44, 0x7e, 0xa5, 0xaf, 0x38, 0x9d, 0x19, 0xda, 0xd5, 0x14, 0x63, 0x4c,
	0x8c, 0xcf, 0xf5, 0xcc, 0x93, 0xe0, 0xbc, 0x04, 0xaf, 0x2d, 0x80, 0xe5, 0xd8, 0xfb, 0xf7, 0x8c,
	0xb1, 0x6e, 0x92, 0x64, 0x1b, 0x92, 0xfe, 0x40, 0x50, 0x3f, 0xf2, 0xb9, 0x98, 0x92, 0xc9, 0x41,
	0x7a, 0x7f, 0x6e, 0xb8, 0x4a, 0xf9, 0x8c, 0xa3, 0x0d, 0x95, 0xa9, 0x6a, 0x88, 0x1e, 0x00, 0xfa,
	0x05, 0x64, 0x8d, 0x6a, 0x03, 0x28, 0xc3, 0x06, 0x41, 0xac, 0x5a, 0x9b, 0x4d, 0x09, 0xd5, 0x95,
	0xdb, 0x50, 0x3d, 0x61, 0xdc, 0xa3, 0x83, 0xb1, 0x10, 0x51, 0x2c, 0x15, 0x95, 0x55, 0x89, 0x0f,
	0xa0, 0x1c, 0x28, 0x63, 0x9b, 0x85, 0x85, 0x0a, 0x99, 0xdf, 0x1b, 0x50, 0x4c, 0xcd, 0x6b, 0x16,
	0x25, 0xa0, 0xb6, 0x60, 0x45, 0xfb, 0x21, 0x14, 0xb7, 0x59, 0x78, 0xe2, 0x8f, 0xb0, 0x0b, 0xa5,
	0xf4, 0x86, 0xe9, 0xa9, 0xa7, 0x91, 0xea, 0x16, 0x7e, 0x02, 0x65, 0x75, 0x54, 0x7d, 0x9a, 0x86,
	0x02, 0x2c, 0x7a, 0xd2, 0x3d, 0x47, 0x70, 0xcb, 0xfc, 0x05, 0xe0, 0x06, 0x2c, 0xeb, 0xf5, 0xe3,
	0xf0, 0x3e, 0x3d, 0xf1, 0x43, 0x3a, 0x74, 0x12, 0xdb, 0x6b, 0x3a, 0xfc, 0xf5, 0xf3, 0x29, 0x99,
	0x38, 0x08, 0xaf, 0xc0, 0x92, 0x0e, 0x7d, 0xcb, 0x29, 0x11, 0x94, 0x3b, 0x79, 0xec, 0xcc, 0xe9,
	0xfa, 0x34, 0x8e, 0x1d, 0x0b, 0x37, 0x61, 0xf5, 0x1a, 0x2c, 0x25, 0xb0, 0xcd, 0x52, 0x09, 0x36,
	0x0d, 0x17, 0xba, 0xaf, 0xe0, 0x96, 0xf9, 0x6f, 0x49, 0x28, 0xfb, 0xcc, 0xbb, 0x26, 0xa6, 0xcf,
	0xbc, 0x1d, 0x21, 0xa2, 0x1d, 0x4a, 0x86, 0x94, 0x3b, 0x48, 0x81, 0x92, 0xd0, 0xc3, 0x29, 0xe5,
	0x67, 0x4e, 0x1e, 0x2f, 0x41, 0xb5, 0xcf, 0xbc, 0xef, 0x46, 0x7e, 0xf8, 0xf2, 0x88, 0x70, 0xc7,
	0x52, 0x81, 0xef, 0xb7, 0xfc, 0x57, 0xbb, 0xe1, 0x09, 0x73, 0x6c, 0x83, 0x66, 0x9b, 0xb1, 0x67,
	0x3e, 0x75, 0x0a, 0xdd, 0x03, 0xa8, 0x64, 0x7f, 0x1a, 0x8c, 0xa1, 0x2e, 0x17, 0x66, 0xe9, 0x3a,
	0xc0, 0x93, 0x31, 0x9b, 0x50, 0x99, 0x70, 0x50, 0x82, 0x51, 0xff, 0xe4, 0xdd, 0x30, 0x8d, 0xe5,
	0x13, 0xcc, 0x1e, 0x1b, 0x6e, 0xb3, 0x20, 0x22, 0x9c, 0x3a, 0x56, 0x77, 0x03, 0xca, 0x7a, 0x8a,
	0xe2, 0x12, 0x58, 0x4f, 0xe8, 0x53, 0x27, 0x87, 0xcb, 0x60, 0xef, 0x1d, 0x3e, 0xd8, 0x77, 0x50,
	0xf7, 0x67, 0x04, 0x30, 0x7f, 0x18, 0x89, 0xad, 0xe9, 0xca, 0x2c, 0xbb, 0x06, 0x38, 0x0d, 0x6e,
	0x0e, 0x87, 0x8f, 0xe8, 0xf3, 0xec, 0xd8, 0xb7, 0xa1, 0xa1, 0xe2, 0x51, 0x44, 0x43, 0x23, 0x95,
	0xc7, 0xeb, 0xb0, 0x62, 0x6c, 0x89, 0xb5, 0x55, 0x16, 0xbe, 0x03, 0x6b, 0x8b, 0x7b, 0xb2, 0x9c,
	0x9d, 0x1c, 0x27, 0xdb, 0xb4, 0x4f, 0x38, 0x09, 0x9c, 0x42, 0xf7, 0x58, 0x0b, 0xca, 0x9e, 0x62,
	0xd2, 0x53, 0x23, 0x64, 0x0a, 0x6d, 0xc0, 0x72, 0x9a, 0x39, 0x10, 0x44, 0xf8, 0x9e, 0xcc, 0x3b,
	0x68, 0xae, 0xff, 0xfe, 0x59, 0x48, 0x02, 0x1d, 0xcf, 0x6f, 0x7d, 0x75, 0x71, 0xe9, 0xe6, 0xde,
	0x5c, 0xba, 0xb9, 0xb7, 0x97, 0x2e, 0xfa, 0x71, 0xe6, 0xa2, 0xdf, 0x66, 0x2e, 0x7a, 0x3d, 0x73,
	0xd1, 0xc5, 0xcc, 0x45, 0x7f, 0xcd, 0x5c, 0xf4, 0xf7, 0xcc, 0xcd, 0xbd, 0x9d, 0xb9, 0xe8, 0xfc,
	0xca, 0xcd, 0x5d, 0x5c, 0xb9, 0xb9, 0x37, 0x57, 0x6e, 0xee, 0xb8, 0x7c, 0xef, 0xb3, 0x2f, 0xe5,
	0x6d, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x6c, 0x24, 0xd1, 0x98, 0x09, 0x00, 0x00,
}

func (x OperatorType) String() string {
	s, ok := OperatorType_name[int32(x)]
	if ok {
		return s
	}
	return strconv.Itoa(int(x))
}
func (x LocationType) String() string {
	s, ok := LocationType_name[int32(x)]
	if ok {
		return s
	}
	return strconv.Itoa(int(x))
}
func (x MatchType) String() string {
	s, ok := MatchType_name[int32(x)]
	if ok {
		return s
	}
	return strconv.Itoa(int(x))
}
func (x HostType) String() string {
	s, ok := HostType_name[int32(x)]
	if ok {
		return s
	}
	return strconv.Itoa(int(x))
}
func (x ActionType) String() string {
	s, ok := ActionType_name[int32(x)]
	if ok {
		return s
	}
	return strconv.Itoa(int(x))
}
func (x ActionValueType) String() string {
	s, ok := ActionValueType_name[int32(x)]
	if ok {
		return s
	}
	return strconv.Itoa(int(x))
}
func (this *TagValueStrList) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*TagValueStrList)
	if !ok {
		that2, ok := that.(TagValueStrList)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if len(this.Value) != len(that1.Value) {
		return false
	}
	for i := range this.Value {
		if this.Value[i] != that1.Value[i] {
			return false
		}
	}
	return true
}
func (this *TagItemCondition) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*TagItemCondition)
	if !ok {
		that2, ok := that.(TagItemCondition)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.ValueStr != that1.ValueStr {
		return false
	}
	if !this.ValueList.Equal(that1.ValueList) {
		return false
	}
	if this.Divisor != that1.Divisor {
		return false
	}
	if this.Remainder != that1.Remainder {
		return false
	}
	if this.Operator != that1.Operator {
		return false
	}
	return true
}
func (this *TagItem) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*TagItem)
	if !ok {
		that2, ok := that.(TagItem)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.Location != that1.Location {
		return false
	}
	if this.Key != that1.Key {
		return false
	}
	if !this.Condition.Equal(that1.Condition) {
		return false
	}
	if this.MatchType != that1.MatchType {
		return false
	}
	return true
}
func (this *TagRule) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*TagRule)
	if !ok {
		that2, ok := that.(TagRule)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if len(this.Items) != len(that1.Items) {
		return false
	}
	for i := range this.Items {
		if !this.Items[i].Equal(that1.Items[i]) {
			return false
		}
	}
	return true
}
func (this *TagRouter) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*TagRouter)
	if !ok {
		that2, ok := that.(TagRouter)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.ServiceName != that1.ServiceName {
		return false
	}
	if len(this.Rules) != len(that1.Rules) {
		return false
	}
	for i := range this.Rules {
		if !this.Rules[i].Equal(that1.Rules[i]) {
			return false
		}
	}
	return true
}
func (this *PathRouter) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*PathRouter)
	if !ok {
		that2, ok := that.(PathRouter)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.Prefix != that1.Prefix {
		return false
	}
	if this.ServiceName != that1.ServiceName {
		return false
	}
	if len(this.Tags) != len(that1.Tags) {
		return false
	}
	for i := range this.Tags {
		if !this.Tags[i].Equal(that1.Tags[i]) {
			return false
		}
	}
	return true
}
func (this *HostRouter) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*HostRouter)
	if !ok {
		that2, ok := that.(HostRouter)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.Host != that1.Host {
		return false
	}
	if this.ServiceName != that1.ServiceName {
		return false
	}
	if len(this.Paths) != len(that1.Paths) {
		return false
	}
	for i := range this.Paths {
		if !this.Paths[i].Equal(that1.Paths[i]) {
			return false
		}
	}
	if len(this.Tags) != len(that1.Tags) {
		return false
	}
	for i := range this.Tags {
		if !this.Tags[i].Equal(that1.Tags[i]) {
			return false
		}
	}
	if this.Type != that1.Type {
		return false
	}
	return true
}
func (this *AppnameRouter) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*AppnameRouter)
	if !ok {
		that2, ok := that.(AppnameRouter)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.Appname != that1.Appname {
		return false
	}
	if this.ServiceName != that1.ServiceName {
		return false
	}
	if len(this.Tags) != len(that1.Tags) {
		return false
	}
	for i := range this.Tags {
		if !this.Tags[i].Equal(that1.Tags[i]) {
			return false
		}
	}
	return true
}
func (this *APIRouter) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*APIRouter)
	if !ok {
		that2, ok := that.(APIRouter)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.ServiceName != that1.ServiceName {
		return false
	}
	if this.Api != that1.Api {
		return false
	}
	if len(this.Tags) != len(that1.Tags) {
		return false
	}
	for i := range this.Tags {
		if !this.Tags[i].Equal(that1.Tags[i]) {
			return false
		}
	}
	return true
}
func (this *Router) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*Router)
	if !ok {
		that2, ok := that.(Router)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if !this.HostRouter.Equal(that1.HostRouter) {
		return false
	}
	if !this.AppnameRouter.Equal(that1.AppnameRouter) {
		return false
	}
	if !this.ApiRouter.Equal(that1.ApiRouter) {
		return false
	}
	return true
}
func (this *Upstream) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*Upstream)
	if !ok {
		that2, ok := that.(Upstream)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.Target != that1.Target {
		return false
	}
	if this.Weight != that1.Weight {
		return false
	}
	return true
}
func (this *Timeout) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*Timeout)
	if !ok {
		that2, ok := that.(Timeout)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.ConnectTimeout != that1.ConnectTimeout {
		return false
	}
	if this.ReadTimeout != that1.ReadTimeout {
		return false
	}
	if this.WriteTimeout != that1.WriteTimeout {
		return false
	}
	return true
}
func (this *Metadata) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*Metadata)
	if !ok {
		that2, ok := that.(Metadata)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.Key != that1.Key {
		return false
	}
	if this.Value != that1.Value {
		return false
	}
	return true
}
func (this *Action) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*Action)
	if !ok {
		that2, ok := that.(Action)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.ActionType != that1.ActionType {
		return false
	}
	if this.ValueType != that1.ValueType {
		return false
	}
	if this.Key != that1.Key {
		return false
	}
	if this.Value != that1.Value {
		return false
	}
	return true
}
func (this *VirtualService) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*VirtualService)
	if !ok {
		that2, ok := that.(VirtualService)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if this.ServiceName != that1.ServiceName {
		return false
	}
	if len(this.Upstreams) != len(that1.Upstreams) {
		return false
	}
	for i := range this.Upstreams {
		if !this.Upstreams[i].Equal(that1.Upstreams[i]) {
			return false
		}
	}
	if !this.TimeoutMs.Equal(that1.TimeoutMs) {
		return false
	}
	if this.ForceHttps != that1.ForceHttps {
		return false
	}
	if len(this.Metadata) != len(that1.Metadata) {
		return false
	}
	for i := range this.Metadata {
		if !this.Metadata[i].Equal(that1.Metadata[i]) {
			return false
		}
	}
	if len(this.Action) != len(that1.Action) {
		return false
	}
	for i := range this.Action {
		if !this.Action[i].Equal(that1.Action[i]) {
			return false
		}
	}
	return true
}
func (this *Config) Equal(that interface{}) bool {
	if that == nil {
		return this == nil
	}

	that1, ok := that.(*Config)
	if !ok {
		that2, ok := that.(Config)
		if ok {
			that1 = &that2
		} else {
			return false
		}
	}
	if that1 == nil {
		return this == nil
	} else if this == nil {
		return false
	}
	if len(this.Routers) != len(that1.Routers) {
		return false
	}
	for i := range this.Routers {
		if !this.Routers[i].Equal(that1.Routers[i]) {
			return false
		}
	}
	if len(this.Services) != len(that1.Services) {
		return false
	}
	for i := range this.Services {
		if !this.Services[i].Equal(that1.Services[i]) {
			return false
		}
	}
	return true
}
func (this *TagValueStrList) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&route.TagValueStrList{")
	if this.Value != nil {
		s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *TagItemCondition) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 9)
	s = append(s, "&route.TagItemCondition{")
	s = append(s, "ValueStr: "+fmt.Sprintf("%#v", this.ValueStr)+",\n")
	if this.ValueList != nil {
		s = append(s, "ValueList: "+fmt.Sprintf("%#v", this.ValueList)+",\n")
	}
	s = append(s, "Divisor: "+fmt.Sprintf("%#v", this.Divisor)+",\n")
	s = append(s, "Remainder: "+fmt.Sprintf("%#v", this.Remainder)+",\n")
	s = append(s, "Operator: "+fmt.Sprintf("%#v", this.Operator)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *TagItem) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 8)
	s = append(s, "&route.TagItem{")
	s = append(s, "Location: "+fmt.Sprintf("%#v", this.Location)+",\n")
	s = append(s, "Key: "+fmt.Sprintf("%#v", this.Key)+",\n")
	if this.Condition != nil {
		s = append(s, "Condition: "+fmt.Sprintf("%#v", this.Condition)+",\n")
	}
	s = append(s, "MatchType: "+fmt.Sprintf("%#v", this.MatchType)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *TagRule) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 5)
	s = append(s, "&route.TagRule{")
	if this.Items != nil {
		s = append(s, "Items: "+fmt.Sprintf("%#v", this.Items)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *TagRouter) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&route.TagRouter{")
	s = append(s, "ServiceName: "+fmt.Sprintf("%#v", this.ServiceName)+",\n")
	if this.Rules != nil {
		s = append(s, "Rules: "+fmt.Sprintf("%#v", this.Rules)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *PathRouter) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&route.PathRouter{")
	s = append(s, "Prefix: "+fmt.Sprintf("%#v", this.Prefix)+",\n")
	s = append(s, "ServiceName: "+fmt.Sprintf("%#v", this.ServiceName)+",\n")
	if this.Tags != nil {
		s = append(s, "Tags: "+fmt.Sprintf("%#v", this.Tags)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *HostRouter) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 9)
	s = append(s, "&route.HostRouter{")
	s = append(s, "Host: "+fmt.Sprintf("%#v", this.Host)+",\n")
	s = append(s, "ServiceName: "+fmt.Sprintf("%#v", this.ServiceName)+",\n")
	if this.Paths != nil {
		s = append(s, "Paths: "+fmt.Sprintf("%#v", this.Paths)+",\n")
	}
	if this.Tags != nil {
		s = append(s, "Tags: "+fmt.Sprintf("%#v", this.Tags)+",\n")
	}
	s = append(s, "Type: "+fmt.Sprintf("%#v", this.Type)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *AppnameRouter) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&route.AppnameRouter{")
	s = append(s, "Appname: "+fmt.Sprintf("%#v", this.Appname)+",\n")
	s = append(s, "ServiceName: "+fmt.Sprintf("%#v", this.ServiceName)+",\n")
	if this.Tags != nil {
		s = append(s, "Tags: "+fmt.Sprintf("%#v", this.Tags)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *APIRouter) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&route.APIRouter{")
	s = append(s, "ServiceName: "+fmt.Sprintf("%#v", this.ServiceName)+",\n")
	s = append(s, "Api: "+fmt.Sprintf("%#v", this.Api)+",\n")
	if this.Tags != nil {
		s = append(s, "Tags: "+fmt.Sprintf("%#v", this.Tags)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *Router) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&route.Router{")
	if this.HostRouter != nil {
		s = append(s, "HostRouter: "+fmt.Sprintf("%#v", this.HostRouter)+",\n")
	}
	if this.AppnameRouter != nil {
		s = append(s, "AppnameRouter: "+fmt.Sprintf("%#v", this.AppnameRouter)+",\n")
	}
	if this.ApiRouter != nil {
		s = append(s, "ApiRouter: "+fmt.Sprintf("%#v", this.ApiRouter)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *Upstream) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&route.Upstream{")
	s = append(s, "Target: "+fmt.Sprintf("%#v", this.Target)+",\n")
	s = append(s, "Weight: "+fmt.Sprintf("%#v", this.Weight)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *Timeout) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 7)
	s = append(s, "&route.Timeout{")
	s = append(s, "ConnectTimeout: "+fmt.Sprintf("%#v", this.ConnectTimeout)+",\n")
	s = append(s, "ReadTimeout: "+fmt.Sprintf("%#v", this.ReadTimeout)+",\n")
	s = append(s, "WriteTimeout: "+fmt.Sprintf("%#v", this.WriteTimeout)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *Metadata) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&route.Metadata{")
	s = append(s, "Key: "+fmt.Sprintf("%#v", this.Key)+",\n")
	s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *Action) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 8)
	s = append(s, "&route.Action{")
	s = append(s, "ActionType: "+fmt.Sprintf("%#v", this.ActionType)+",\n")
	s = append(s, "ValueType: "+fmt.Sprintf("%#v", this.ValueType)+",\n")
	s = append(s, "Key: "+fmt.Sprintf("%#v", this.Key)+",\n")
	s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n")
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *VirtualService) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 10)
	s = append(s, "&route.VirtualService{")
	s = append(s, "ServiceName: "+fmt.Sprintf("%#v", this.ServiceName)+",\n")
	if this.Upstreams != nil {
		s = append(s, "Upstreams: "+fmt.Sprintf("%#v", this.Upstreams)+",\n")
	}
	if this.TimeoutMs != nil {
		s = append(s, "TimeoutMs: "+fmt.Sprintf("%#v", this.TimeoutMs)+",\n")
	}
	s = append(s, "ForceHttps: "+fmt.Sprintf("%#v", this.ForceHttps)+",\n")
	if this.Metadata != nil {
		s = append(s, "Metadata: "+fmt.Sprintf("%#v", this.Metadata)+",\n")
	}
	if this.Action != nil {
		s = append(s, "Action: "+fmt.Sprintf("%#v", this.Action)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func (this *Config) GoString() string {
	if this == nil {
		return "nil"
	}
	s := make([]string, 0, 6)
	s = append(s, "&route.Config{")
	if this.Routers != nil {
		s = append(s, "Routers: "+fmt.Sprintf("%#v", this.Routers)+",\n")
	}
	if this.Services != nil {
		s = append(s, "Services: "+fmt.Sprintf("%#v", this.Services)+",\n")
	}
	s = append(s, "}")
	return strings.Join(s, "")
}
func valueToGoStringRoute(v interface{}, typ string) string {
	rv := reflect.ValueOf(v)
	if rv.IsNil() {
		return "nil"
	}
	pv := reflect.Indirect(rv).Interface()
	return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
}
func (m *TagValueStrList) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *TagValueStrList) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if len(m.Value) > 0 {
		for _, s := range m.Value {
			dAtA[i] = 0xa
			i++
			l = len(s)
			for l >= 1<<7 {
				dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
				l >>= 7
				i++
			}
			dAtA[i] = uint8(l)
			i++
			i += copy(dAtA[i:], s)
		}
	}
	return i, nil
}

func (m *TagItemCondition) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *TagItemCondition) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ValueStr)))
	i += copy(dAtA[i:], m.ValueStr)
	if m.ValueList != nil {
		dAtA[i] = 0x12
		i++
		i = encodeVarintRoute(dAtA, i, uint64(m.ValueList.Size()))
		n1, err := m.ValueList.MarshalTo(dAtA[i:])
		if err != nil {
			return 0, err
		}
		i += n1
	}
	dAtA[i] = 0x18
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.Divisor))
	dAtA[i] = 0x20
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.Remainder))
	dAtA[i] = 0x28
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.Operator))
	return i, nil
}

func (m *TagItem) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *TagItem) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0x8
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.Location))
	dAtA[i] = 0x12
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Key)))
	i += copy(dAtA[i:], m.Key)
	if m.Condition != nil {
		dAtA[i] = 0x1a
		i++
		i = encodeVarintRoute(dAtA, i, uint64(m.Condition.Size()))
		n2, err := m.Condition.MarshalTo(dAtA[i:])
		if err != nil {
			return 0, err
		}
		i += n2
	}
	dAtA[i] = 0x20
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.MatchType))
	return i, nil
}

func (m *TagRule) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *TagRule) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if len(m.Items) > 0 {
		for _, msg := range m.Items {
			dAtA[i] = 0xa
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func (m *TagRouter) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *TagRouter) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ServiceName)))
	i += copy(dAtA[i:], m.ServiceName)
	if len(m.Rules) > 0 {
		for _, msg := range m.Rules {
			dAtA[i] = 0x12
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func (m *PathRouter) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *PathRouter) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Prefix)))
	i += copy(dAtA[i:], m.Prefix)
	dAtA[i] = 0x12
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ServiceName)))
	i += copy(dAtA[i:], m.ServiceName)
	if len(m.Tags) > 0 {
		for _, msg := range m.Tags {
			dAtA[i] = 0x1a
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func (m *HostRouter) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *HostRouter) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Host)))
	i += copy(dAtA[i:], m.Host)
	dAtA[i] = 0x12
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ServiceName)))
	i += copy(dAtA[i:], m.ServiceName)
	if len(m.Paths) > 0 {
		for _, msg := range m.Paths {
			dAtA[i] = 0x1a
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	if len(m.Tags) > 0 {
		for _, msg := range m.Tags {
			dAtA[i] = 0x22
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	dAtA[i] = 0x28
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.Type))
	return i, nil
}

func (m *AppnameRouter) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *AppnameRouter) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Appname)))
	i += copy(dAtA[i:], m.Appname)
	dAtA[i] = 0x12
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ServiceName)))
	i += copy(dAtA[i:], m.ServiceName)
	if len(m.Tags) > 0 {
		for _, msg := range m.Tags {
			dAtA[i] = 0x1a
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func (m *APIRouter) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *APIRouter) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ServiceName)))
	i += copy(dAtA[i:], m.ServiceName)
	dAtA[i] = 0x12
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Api)))
	i += copy(dAtA[i:], m.Api)
	if len(m.Tags) > 0 {
		for _, msg := range m.Tags {
			dAtA[i] = 0x1a
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func (m *Router) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Router) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if m.HostRouter != nil {
		dAtA[i] = 0xa
		i++
		i = encodeVarintRoute(dAtA, i, uint64(m.HostRouter.Size()))
		n3, err := m.HostRouter.MarshalTo(dAtA[i:])
		if err != nil {
			return 0, err
		}
		i += n3
	}
	if m.AppnameRouter != nil {
		dAtA[i] = 0x12
		i++
		i = encodeVarintRoute(dAtA, i, uint64(m.AppnameRouter.Size()))
		n4, err := m.AppnameRouter.MarshalTo(dAtA[i:])
		if err != nil {
			return 0, err
		}
		i += n4
	}
	if m.ApiRouter != nil {
		dAtA[i] = 0x1a
		i++
		i = encodeVarintRoute(dAtA, i, uint64(m.ApiRouter.Size()))
		n5, err := m.ApiRouter.MarshalTo(dAtA[i:])
		if err != nil {
			return 0, err
		}
		i += n5
	}
	return i, nil
}

func (m *Upstream) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Upstream) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Target)))
	i += copy(dAtA[i:], m.Target)
	dAtA[i] = 0x10
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.Weight))
	return i, nil
}

func (m *Timeout) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Timeout) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0x8
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.ConnectTimeout))
	dAtA[i] = 0x10
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.ReadTimeout))
	dAtA[i] = 0x18
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.WriteTimeout))
	return i, nil
}

func (m *Metadata) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Metadata) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Key)))
	i += copy(dAtA[i:], m.Key)
	dAtA[i] = 0x12
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Value)))
	i += copy(dAtA[i:], m.Value)
	return i, nil
}

func (m *Action) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Action) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0x8
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.ActionType))
	dAtA[i] = 0x10
	i++
	i = encodeVarintRoute(dAtA, i, uint64(m.ValueType))
	dAtA[i] = 0x1a
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Key)))
	i += copy(dAtA[i:], m.Key)
	dAtA[i] = 0x22
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.Value)))
	i += copy(dAtA[i:], m.Value)
	return i, nil
}

func (m *VirtualService) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *VirtualService) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	dAtA[i] = 0xa
	i++
	i = encodeVarintRoute(dAtA, i, uint64(len(m.ServiceName)))
	i += copy(dAtA[i:], m.ServiceName)
	if len(m.Upstreams) > 0 {
		for _, msg := range m.Upstreams {
			dAtA[i] = 0x12
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	if m.TimeoutMs != nil {
		dAtA[i] = 0x1a
		i++
		i = encodeVarintRoute(dAtA, i, uint64(m.TimeoutMs.Size()))
		n6, err := m.TimeoutMs.MarshalTo(dAtA[i:])
		if err != nil {
			return 0, err
		}
		i += n6
	}
	dAtA[i] = 0x20
	i++
	if m.ForceHttps {
		dAtA[i] = 1
	} else {
		dAtA[i] = 0
	}
	i++
	if len(m.Metadata) > 0 {
		for _, msg := range m.Metadata {
			dAtA[i] = 0x2a
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	if len(m.Action) > 0 {
		for _, msg := range m.Action {
			dAtA[i] = 0x32
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func (m *Config) Marshal() (dAtA []byte, err error) {
	size := m.Size()
	dAtA = make([]byte, size)
	n, err := m.MarshalTo(dAtA)
	if err != nil {
		return nil, err
	}
	return dAtA[:n], nil
}

func (m *Config) MarshalTo(dAtA []byte) (int, error) {
	var i int
	_ = i
	var l int
	_ = l
	if len(m.Routers) > 0 {
		for _, msg := range m.Routers {
			dAtA[i] = 0xa
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	if len(m.Services) > 0 {
		for _, msg := range m.Services {
			dAtA[i] = 0x12
			i++
			i = encodeVarintRoute(dAtA, i, uint64(msg.Size()))
			n, err := msg.MarshalTo(dAtA[i:])
			if err != nil {
				return 0, err
			}
			i += n
		}
	}
	return i, nil
}

func encodeVarintRoute(dAtA []byte, offset int, v uint64) int {
	for v >= 1<<7 {
		dAtA[offset] = uint8(v&0x7f | 0x80)
		v >>= 7
		offset++
	}
	dAtA[offset] = uint8(v)
	return offset + 1
}
func (m *TagValueStrList) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if len(m.Value) > 0 {
		for _, s := range m.Value {
			l = len(s)
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *TagItemCondition) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.ValueStr)
	n += 1 + l + sovRoute(uint64(l))
	if m.ValueList != nil {
		l = m.ValueList.Size()
		n += 1 + l + sovRoute(uint64(l))
	}
	n += 1 + sovRoute(uint64(m.Divisor))
	n += 1 + sovRoute(uint64(m.Remainder))
	n += 1 + sovRoute(uint64(m.Operator))
	return n
}

func (m *TagItem) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	n += 1 + sovRoute(uint64(m.Location))
	l = len(m.Key)
	n += 1 + l + sovRoute(uint64(l))
	if m.Condition != nil {
		l = m.Condition.Size()
		n += 1 + l + sovRoute(uint64(l))
	}
	n += 1 + sovRoute(uint64(m.MatchType))
	return n
}

func (m *TagRule) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if len(m.Items) > 0 {
		for _, e := range m.Items {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *TagRouter) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.ServiceName)
	n += 1 + l + sovRoute(uint64(l))
	if len(m.Rules) > 0 {
		for _, e := range m.Rules {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *PathRouter) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Prefix)
	n += 1 + l + sovRoute(uint64(l))
	l = len(m.ServiceName)
	n += 1 + l + sovRoute(uint64(l))
	if len(m.Tags) > 0 {
		for _, e := range m.Tags {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *HostRouter) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Host)
	n += 1 + l + sovRoute(uint64(l))
	l = len(m.ServiceName)
	n += 1 + l + sovRoute(uint64(l))
	if len(m.Paths) > 0 {
		for _, e := range m.Paths {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	if len(m.Tags) > 0 {
		for _, e := range m.Tags {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	n += 1 + sovRoute(uint64(m.Type))
	return n
}

func (m *AppnameRouter) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Appname)
	n += 1 + l + sovRoute(uint64(l))
	l = len(m.ServiceName)
	n += 1 + l + sovRoute(uint64(l))
	if len(m.Tags) > 0 {
		for _, e := range m.Tags {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *APIRouter) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.ServiceName)
	n += 1 + l + sovRoute(uint64(l))
	l = len(m.Api)
	n += 1 + l + sovRoute(uint64(l))
	if len(m.Tags) > 0 {
		for _, e := range m.Tags {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *Router) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.HostRouter != nil {
		l = m.HostRouter.Size()
		n += 1 + l + sovRoute(uint64(l))
	}
	if m.AppnameRouter != nil {
		l = m.AppnameRouter.Size()
		n += 1 + l + sovRoute(uint64(l))
	}
	if m.ApiRouter != nil {
		l = m.ApiRouter.Size()
		n += 1 + l + sovRoute(uint64(l))
	}
	return n
}

func (m *Upstream) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Target)
	n += 1 + l + sovRoute(uint64(l))
	n += 1 + sovRoute(uint64(m.Weight))
	return n
}

func (m *Timeout) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	n += 1 + sovRoute(uint64(m.ConnectTimeout))
	n += 1 + sovRoute(uint64(m.ReadTimeout))
	n += 1 + sovRoute(uint64(m.WriteTimeout))
	return n
}

func (m *Metadata) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.Key)
	n += 1 + l + sovRoute(uint64(l))
	l = len(m.Value)
	n += 1 + l + sovRoute(uint64(l))
	return n
}

func (m *Action) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	n += 1 + sovRoute(uint64(m.ActionType))
	n += 1 + sovRoute(uint64(m.ValueType))
	l = len(m.Key)
	n += 1 + l + sovRoute(uint64(l))
	l = len(m.Value)
	n += 1 + l + sovRoute(uint64(l))
	return n
}

func (m *VirtualService) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	l = len(m.ServiceName)
	n += 1 + l + sovRoute(uint64(l))
	if len(m.Upstreams) > 0 {
		for _, e := range m.Upstreams {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	if m.TimeoutMs != nil {
		l = m.TimeoutMs.Size()
		n += 1 + l + sovRoute(uint64(l))
	}
	n += 2
	if len(m.Metadata) > 0 {
		for _, e := range m.Metadata {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	if len(m.Action) > 0 {
		for _, e := range m.Action {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func (m *Config) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if len(m.Routers) > 0 {
		for _, e := range m.Routers {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	if len(m.Services) > 0 {
		for _, e := range m.Services {
			l = e.Size()
			n += 1 + l + sovRoute(uint64(l))
		}
	}
	return n
}

func sovRoute(x uint64) (n int) {
	for {
		n++
		x >>= 7
		if x == 0 {
			break
		}
	}
	return n
}
func sozRoute(x uint64) (n int) {
	return sovRoute(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
func (this *TagValueStrList) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&TagValueStrList{`,
		`Value:` + fmt.Sprintf("%v", this.Value) + `,`,
		`}`,
	}, "")
	return s
}
func (this *TagItemCondition) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&TagItemCondition{`,
		`ValueStr:` + fmt.Sprintf("%v", this.ValueStr) + `,`,
		`ValueList:` + strings.Replace(fmt.Sprintf("%v", this.ValueList), "TagValueStrList", "TagValueStrList", 1) + `,`,
		`Divisor:` + fmt.Sprintf("%v", this.Divisor) + `,`,
		`Remainder:` + fmt.Sprintf("%v", this.Remainder) + `,`,
		`Operator:` + fmt.Sprintf("%v", this.Operator) + `,`,
		`}`,
	}, "")
	return s
}
func (this *TagItem) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&TagItem{`,
		`Location:` + fmt.Sprintf("%v", this.Location) + `,`,
		`Key:` + fmt.Sprintf("%v", this.Key) + `,`,
		`Condition:` + strings.Replace(fmt.Sprintf("%v", this.Condition), "TagItemCondition", "TagItemCondition", 1) + `,`,
		`MatchType:` + fmt.Sprintf("%v", this.MatchType) + `,`,
		`}`,
	}, "")
	return s
}
func (this *TagRule) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&TagRule{`,
		`Items:` + strings.Replace(fmt.Sprintf("%v", this.Items), "TagItem", "TagItem", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *TagRouter) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&TagRouter{`,
		`ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`,
		`Rules:` + strings.Replace(fmt.Sprintf("%v", this.Rules), "TagRule", "TagRule", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *PathRouter) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&PathRouter{`,
		`Prefix:` + fmt.Sprintf("%v", this.Prefix) + `,`,
		`ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`,
		`Tags:` + strings.Replace(fmt.Sprintf("%v", this.Tags), "TagRouter", "TagRouter", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *HostRouter) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&HostRouter{`,
		`Host:` + fmt.Sprintf("%v", this.Host) + `,`,
		`ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`,
		`Paths:` + strings.Replace(fmt.Sprintf("%v", this.Paths), "PathRouter", "PathRouter", 1) + `,`,
		`Tags:` + strings.Replace(fmt.Sprintf("%v", this.Tags), "TagRouter", "TagRouter", 1) + `,`,
		`Type:` + fmt.Sprintf("%v", this.Type) + `,`,
		`}`,
	}, "")
	return s
}
func (this *AppnameRouter) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&AppnameRouter{`,
		`Appname:` + fmt.Sprintf("%v", this.Appname) + `,`,
		`ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`,
		`Tags:` + strings.Replace(fmt.Sprintf("%v", this.Tags), "TagRouter", "TagRouter", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *APIRouter) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&APIRouter{`,
		`ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`,
		`Api:` + fmt.Sprintf("%v", this.Api) + `,`,
		`Tags:` + strings.Replace(fmt.Sprintf("%v", this.Tags), "TagRouter", "TagRouter", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Router) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Router{`,
		`HostRouter:` + strings.Replace(fmt.Sprintf("%v", this.HostRouter), "HostRouter", "HostRouter", 1) + `,`,
		`AppnameRouter:` + strings.Replace(fmt.Sprintf("%v", this.AppnameRouter), "AppnameRouter", "AppnameRouter", 1) + `,`,
		`ApiRouter:` + strings.Replace(fmt.Sprintf("%v", this.ApiRouter), "APIRouter", "APIRouter", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Upstream) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Upstream{`,
		`Target:` + fmt.Sprintf("%v", this.Target) + `,`,
		`Weight:` + fmt.Sprintf("%v", this.Weight) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Timeout) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Timeout{`,
		`ConnectTimeout:` + fmt.Sprintf("%v", this.ConnectTimeout) + `,`,
		`ReadTimeout:` + fmt.Sprintf("%v", this.ReadTimeout) + `,`,
		`WriteTimeout:` + fmt.Sprintf("%v", this.WriteTimeout) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Metadata) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Metadata{`,
		`Key:` + fmt.Sprintf("%v", this.Key) + `,`,
		`Value:` + fmt.Sprintf("%v", this.Value) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Action) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Action{`,
		`ActionType:` + fmt.Sprintf("%v", this.ActionType) + `,`,
		`ValueType:` + fmt.Sprintf("%v", this.ValueType) + `,`,
		`Key:` + fmt.Sprintf("%v", this.Key) + `,`,
		`Value:` + fmt.Sprintf("%v", this.Value) + `,`,
		`}`,
	}, "")
	return s
}
func (this *VirtualService) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&VirtualService{`,
		`ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`,
		`Upstreams:` + strings.Replace(fmt.Sprintf("%v", this.Upstreams), "Upstream", "Upstream", 1) + `,`,
		`TimeoutMs:` + strings.Replace(fmt.Sprintf("%v", this.TimeoutMs), "Timeout", "Timeout", 1) + `,`,
		`ForceHttps:` + fmt.Sprintf("%v", this.ForceHttps) + `,`,
		`Metadata:` + strings.Replace(fmt.Sprintf("%v", this.Metadata), "Metadata", "Metadata", 1) + `,`,
		`Action:` + strings.Replace(fmt.Sprintf("%v", this.Action), "Action", "Action", 1) + `,`,
		`}`,
	}, "")
	return s
}
func (this *Config) String() string {
	if this == nil {
		return "nil"
	}
	s := strings.Join([]string{`&Config{`,
		`Routers:` + strings.Replace(fmt.Sprintf("%v", this.Routers), "Router", "Router", 1) + `,`,
		`Services:` + strings.Replace(fmt.Sprintf("%v", this.Services), "VirtualService", "VirtualService", 1) + `,`,
		`}`,
	}, "")
	return s
}
func valueToStringRoute(v interface{}) string {
	rv := reflect.ValueOf(v)
	if rv.IsNil() {
		return "nil"
	}
	pv := reflect.Indirect(rv).Interface()
	return fmt.Sprintf("*%v", pv)
}
func (m *TagValueStrList) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: TagValueStrList: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: TagValueStrList: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Value = append(m.Value, string(dAtA[iNdEx:postIndex]))
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *TagItemCondition) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: TagItemCondition: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: TagItemCondition: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ValueStr", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ValueStr = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ValueList", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.ValueList == nil {
				m.ValueList = &TagValueStrList{}
			}
			if err := m.ValueList.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Divisor", wireType)
			}
			m.Divisor = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Divisor |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Remainder", wireType)
			}
			m.Remainder = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Remainder |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 5:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType)
			}
			m.Operator = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Operator |= OperatorType(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *TagItem) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: TagItem: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: TagItem: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
			}
			m.Location = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Location |= LocationType(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Key = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Condition", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.Condition == nil {
				m.Condition = &TagItemCondition{}
			}
			if err := m.Condition.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field MatchType", wireType)
			}
			m.MatchType = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.MatchType |= MatchType(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *TagRule) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: TagRule: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: TagRule: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Items = append(m.Items, &TagItem{})
			if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *TagRouter) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: TagRouter: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: TagRouter: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ServiceName = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Rules = append(m.Rules, &TagRule{})
			if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *PathRouter) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: PathRouter: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: PathRouter: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Prefix", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Prefix = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ServiceName = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Tags = append(m.Tags, &TagRouter{})
			if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *HostRouter) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: HostRouter: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: HostRouter: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Host = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ServiceName = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Paths", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Paths = append(m.Paths, &PathRouter{})
			if err := m.Paths[len(m.Paths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 4:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Tags = append(m.Tags, &TagRouter{})
			if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 5:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
			}
			m.Type = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Type |= HostType(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *AppnameRouter) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: AppnameRouter: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: AppnameRouter: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Appname", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Appname = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ServiceName = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Tags = append(m.Tags, &TagRouter{})
			if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *APIRouter) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: APIRouter: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: APIRouter: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ServiceName = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Api", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Api = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Tags = append(m.Tags, &TagRouter{})
			if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Router) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Router: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Router: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field HostRouter", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.HostRouter == nil {
				m.HostRouter = &HostRouter{}
			}
			if err := m.HostRouter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field AppnameRouter", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.AppnameRouter == nil {
				m.AppnameRouter = &AppnameRouter{}
			}
			if err := m.AppnameRouter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ApiRouter", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.ApiRouter == nil {
				m.ApiRouter = &APIRouter{}
			}
			if err := m.ApiRouter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Upstream) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Upstream: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Upstream: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Target = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType)
			}
			m.Weight = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.Weight |= uint32(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Timeout) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Timeout: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Timeout: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ConnectTimeout", wireType)
			}
			m.ConnectTimeout = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ConnectTimeout |= uint32(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ReadTimeout", wireType)
			}
			m.ReadTimeout = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ReadTimeout |= uint32(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field WriteTimeout", wireType)
			}
			m.WriteTimeout = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.WriteTimeout |= uint32(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Metadata) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Metadata: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Key = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Value = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Action) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Action: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Action: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ActionType", wireType)
			}
			m.ActionType = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ActionType |= ActionType(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 2:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ValueType", wireType)
			}
			m.ValueType = 0
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				m.ValueType |= ActionValueType(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Key = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		case 4:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Value = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *VirtualService) Unmarshal(dAtA []byte) error {
	var hasFields [1]uint64
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: VirtualService: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: VirtualService: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field ServiceName", wireType)
			}
			var stringLen uint64
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				stringLen |= uint64(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			intStringLen := int(stringLen)
			if intStringLen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + intStringLen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.ServiceName = string(dAtA[iNdEx:postIndex])
			iNdEx = postIndex
			hasFields[0] |= uint64(0x00000001)
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Upstreams", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Upstreams = append(m.Upstreams, &Upstream{})
			if err := m.Upstreams[len(m.Upstreams)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 3:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field TimeoutMs", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			if m.TimeoutMs == nil {
				m.TimeoutMs = &Timeout{}
			}
			if err := m.TimeoutMs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 4:
			if wireType != 0 {
				return fmt.Errorf("proto: wrong wireType = %d for field ForceHttps", wireType)
			}
			var v int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				v |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			m.ForceHttps = bool(v != 0)
		case 5:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Metadata = append(m.Metadata, &Metadata{})
			if err := m.Metadata[len(m.Metadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 6:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Action = append(m.Action, &Action{})
			if err := m.Action[len(m.Action)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}
	if hasFields[0]&uint64(0x00000001) == 0 {
		return github_com_gogo_protobuf_proto.NewRequiredNotSetError("service_name")
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func (m *Config) Unmarshal(dAtA []byte) error {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		preIndex := iNdEx
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= uint64(b&0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		fieldNum := int32(wire >> 3)
		wireType := int(wire & 0x7)
		if wireType == 4 {
			return fmt.Errorf("proto: Config: wiretype end group for non-group")
		}
		if fieldNum <= 0 {
			return fmt.Errorf("proto: Config: illegal tag %d (wire type %d)", fieldNum, wire)
		}
		switch fieldNum {
		case 1:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Routers", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Routers = append(m.Routers, &Router{})
			if err := m.Routers[len(m.Routers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		case 2:
			if wireType != 2 {
				return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType)
			}
			var msglen int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				msglen |= int(b&0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if msglen < 0 {
				return ErrInvalidLengthRoute
			}
			postIndex := iNdEx + msglen
			if postIndex < 0 {
				return ErrInvalidLengthRoute
			}
			if postIndex > l {
				return io.ErrUnexpectedEOF
			}
			m.Services = append(m.Services, &VirtualService{})
			if err := m.Services[len(m.Services)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
				return err
			}
			iNdEx = postIndex
		default:
			iNdEx = preIndex
			skippy, err := skipRoute(dAtA[iNdEx:])
			if err != nil {
				return err
			}
			if skippy < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) < 0 {
				return ErrInvalidLengthRoute
			}
			if (iNdEx + skippy) > l {
				return io.ErrUnexpectedEOF
			}
			iNdEx += skippy
		}
	}

	if iNdEx > l {
		return io.ErrUnexpectedEOF
	}
	return nil
}
func skipRoute(dAtA []byte) (n int, err error) {
	l := len(dAtA)
	iNdEx := 0
	for iNdEx < l {
		var wire uint64
		for shift := uint(0); ; shift += 7 {
			if shift >= 64 {
				return 0, ErrIntOverflowRoute
			}
			if iNdEx >= l {
				return 0, io.ErrUnexpectedEOF
			}
			b := dAtA[iNdEx]
			iNdEx++
			wire |= (uint64(b) & 0x7F) << shift
			if b < 0x80 {
				break
			}
		}
		wireType := int(wire & 0x7)
		switch wireType {
		case 0:
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return 0, ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return 0, io.ErrUnexpectedEOF
				}
				iNdEx++
				if dAtA[iNdEx-1] < 0x80 {
					break
				}
			}
			return iNdEx, nil
		case 1:
			iNdEx += 8
			return iNdEx, nil
		case 2:
			var length int
			for shift := uint(0); ; shift += 7 {
				if shift >= 64 {
					return 0, ErrIntOverflowRoute
				}
				if iNdEx >= l {
					return 0, io.ErrUnexpectedEOF
				}
				b := dAtA[iNdEx]
				iNdEx++
				length |= (int(b) & 0x7F) << shift
				if b < 0x80 {
					break
				}
			}
			if length < 0 {
				return 0, ErrInvalidLengthRoute
			}
			iNdEx += length
			if iNdEx < 0 {
				return 0, ErrInvalidLengthRoute
			}
			return iNdEx, nil
		case 3:
			for {
				var innerWire uint64
				var start int = iNdEx
				for shift := uint(0); ; shift += 7 {
					if shift >= 64 {
						return 0, ErrIntOverflowRoute
					}
					if iNdEx >= l {
						return 0, io.ErrUnexpectedEOF
					}
					b := dAtA[iNdEx]
					iNdEx++
					innerWire |= (uint64(b) & 0x7F) << shift
					if b < 0x80 {
						break
					}
				}
				innerWireType := int(innerWire & 0x7)
				if innerWireType == 4 {
					break
				}
				next, err := skipRoute(dAtA[start:])
				if err != nil {
					return 0, err
				}
				iNdEx = start + next
				if iNdEx < 0 {
					return 0, ErrInvalidLengthRoute
				}
			}
			return iNdEx, nil
		case 4:
			return iNdEx, nil
		case 5:
			iNdEx += 4
			return iNdEx, nil
		default:
			return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
		}
	}
	panic("unreachable")
}

var (
	ErrInvalidLengthRoute = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowRoute   = fmt.Errorf("proto: integer overflow")
)
