// Code generated by protoc-gen-go.
// source: google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto
// DO NOT EDIT!

/*
Package google_api is a generated protocol buffer package.

It is generated from these files:
	google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/auth.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/backend.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/billing.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/consumer.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/context.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/control.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/documentation.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/http.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/log.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/logging.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/service.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.proto
	google.golang.org/genproto/googleapis/api/serviceconfig/usage.proto

It has these top-level messages:
	Authentication
	AuthenticationRule
	AuthProvider
	OAuthRequirements
	AuthRequirement
	Backend
	BackendRule
	Billing
	BillingStatusRule
	ProjectProperties
	Property
	Context
	ContextRule
	Control
	Documentation
	DocumentationRule
	Page
	Endpoint
	Http
	HttpRule
	CustomHttpPattern
	LogDescriptor
	Logging
	Monitoring
	Service
	SystemParameters
	SystemParameterRule
	SystemParameter
	Usage
	UsageRule
*/
package google_api

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import google_protobuf "google.golang.org/genproto/protobuf"

// 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.ProtoPackageIsVersion2 // please upgrade the proto package

var E_Http = &proto.ExtensionDesc{
	ExtendedType:  (*google_protobuf.MethodOptions)(nil),
	ExtensionType: (*HttpRule)(nil),
	Field:         72295728,
	Name:          "google.api.http",
	Tag:           "bytes,72295728,opt,name=http",
}

func init() {
	proto.RegisterExtension(E_Http)
}

func init() {
	proto.RegisterFile("google.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto", fileDescriptor0)
}

var fileDescriptor0 = []byte{
	// 211 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xf2, 0x4c, 0xcf, 0xcf, 0x4f,
	0xcf, 0x49, 0xd5, 0x4b, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0xcb, 0x2f, 0x4a, 0xd7, 0x4f, 0x4f,
	0xcd, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0xeb, 0x03, 0x09,
	0xfd, 0xe2, 0xd4, 0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0xe4, 0xfc, 0xbc, 0xb4, 0xcc, 0x74, 0xfd, 0xc4,
	0xbc, 0xbc, 0xfc, 0x92, 0xc4, 0x92, 0xcc, 0xfc, 0xbc, 0x62, 0x3d, 0xb0, 0x72, 0x21, 0x2e, 0xa8,
	0x51, 0x40, 0xb5, 0x52, 0x4e, 0xe4, 0x1a, 0x9b, 0x51, 0x52, 0x52, 0x00, 0x31, 0x4f, 0xca, 0x04,
	0x8f, 0x19, 0x60, 0x32, 0xa9, 0x34, 0x4d, 0x3f, 0x25, 0xb5, 0x38, 0xb9, 0x28, 0xb3, 0xa0, 0x24,
	0xbf, 0x08, 0xa2, 0xcb, 0xca, 0x9b, 0x8b, 0x05, 0x64, 0x86, 0x90, 0x9c, 0x1e, 0x54, 0x3b, 0x4c,
	0xa9, 0x9e, 0x6f, 0x6a, 0x49, 0x46, 0x7e, 0x8a, 0x7f, 0x01, 0xd8, 0xcd, 0x12, 0x1b, 0x4e, 0xed,
	0x51, 0x52, 0x60, 0xd4, 0xe0, 0x36, 0x12, 0xd1, 0x43, 0xb8, 0x5b, 0xcf, 0x03, 0xa8, 0x35, 0xa8,
	0x34, 0x27, 0x35, 0x08, 0x6c, 0x88, 0x93, 0x36, 0x17, 0x5f, 0x72, 0x7e, 0x2e, 0x92, 0x02, 0x27,
	0x01, 0x47, 0x84, 0xbf, 0x03, 0x40, 0x26, 0x07, 0x30, 0x2e, 0x62, 0x62, 0x71, 0x77, 0x0c, 0xf0,
	0x4c, 0x62, 0x03, 0xdb, 0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x01, 0xd8, 0x8e, 0xc1, 0x53,
	0x01, 0x00, 0x00,
}
