// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/monitoring/v3/service.proto

package monitoring

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	_ "github.com/golang/protobuf/ptypes/timestamp"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	_ "google.golang.org/genproto/googleapis/api/monitoredres"
	calendarperiod "google.golang.org/genproto/googleapis/type/calendarperiod"
)

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

// `ServiceLevelObjective.View` determines what form of
// `ServiceLevelObjective` is returned from `GetServiceLevelObjective`,
// `ListServiceLevelObjectives`, and `ListServiceLevelObjectiveVersions` RPCs.
type ServiceLevelObjective_View int32

const (
	// Same as FULL.
	ServiceLevelObjective_VIEW_UNSPECIFIED ServiceLevelObjective_View = 0
	// Return the embedded `ServiceLevelIndicator` in the form in which it was
	// defined. If it was defined using a `BasicSli`, return that `BasicSli`.
	ServiceLevelObjective_FULL ServiceLevelObjective_View = 2
	// For `ServiceLevelIndicator`s using `BasicSli` articulation, instead
	// return the `ServiceLevelIndicator` with its mode of computation fully
	// spelled out as a `RequestBasedSli`. For `ServiceLevelIndicator`s using
	// `RequestBasedSli` or `WindowsBasedSli`, return the
	// `ServiceLevelIndicator` as it was provided.
	ServiceLevelObjective_EXPLICIT ServiceLevelObjective_View = 1
)

var ServiceLevelObjective_View_name = map[int32]string{
	0: "VIEW_UNSPECIFIED",
	2: "FULL",
	1: "EXPLICIT",
}

var ServiceLevelObjective_View_value = map[string]int32{
	"VIEW_UNSPECIFIED": 0,
	"FULL":             2,
	"EXPLICIT":         1,
}

func (x ServiceLevelObjective_View) String() string {
	return proto.EnumName(ServiceLevelObjective_View_name, int32(x))
}

func (ServiceLevelObjective_View) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{1, 0}
}

// A `Service` is a discrete, autonomous, and network-accessible unit, designed
// to solve an individual concern
// ([Wikipedia](https://en.wikipedia.org/wiki/Service-orientation)). In
// Stackdriver Monitoring, a `Service` acts as the root resource under which
// operational aspects of the service are accessible.
type Service struct {
	// Resource name for this Service. Of the form
	// `projects/{project_id}/services/{service_id}`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Name used for UI elements listing this Service.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// REQUIRED. Service-identifying atoms specifying the underlying service.
	//
	// Types that are valid to be assigned to Identifier:
	//	*Service_Custom_
	//	*Service_AppEngine_
	//	*Service_CloudEndpoints_
	//	*Service_ClusterIstio_
	Identifier isService_Identifier `protobuf_oneof:"identifier"`
	// Configuration for how to query telemetry on a Service.
	Telemetry            *Service_Telemetry `protobuf:"bytes,13,opt,name=telemetry,proto3" json:"telemetry,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *Service) Reset()         { *m = Service{} }
func (m *Service) String() string { return proto.CompactTextString(m) }
func (*Service) ProtoMessage()    {}
func (*Service) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{0}
}

func (m *Service) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Service.Unmarshal(m, b)
}
func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Service.Marshal(b, m, deterministic)
}
func (m *Service) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Service.Merge(m, src)
}
func (m *Service) XXX_Size() int {
	return xxx_messageInfo_Service.Size(m)
}
func (m *Service) XXX_DiscardUnknown() {
	xxx_messageInfo_Service.DiscardUnknown(m)
}

var xxx_messageInfo_Service proto.InternalMessageInfo

func (m *Service) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Service) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

type isService_Identifier interface {
	isService_Identifier()
}

type Service_Custom_ struct {
	Custom *Service_Custom `protobuf:"bytes,6,opt,name=custom,proto3,oneof"`
}

type Service_AppEngine_ struct {
	AppEngine *Service_AppEngine `protobuf:"bytes,7,opt,name=app_engine,json=appEngine,proto3,oneof"`
}

type Service_CloudEndpoints_ struct {
	CloudEndpoints *Service_CloudEndpoints `protobuf:"bytes,8,opt,name=cloud_endpoints,json=cloudEndpoints,proto3,oneof"`
}

type Service_ClusterIstio_ struct {
	ClusterIstio *Service_ClusterIstio `protobuf:"bytes,9,opt,name=cluster_istio,json=clusterIstio,proto3,oneof"`
}

func (*Service_Custom_) isService_Identifier() {}

func (*Service_AppEngine_) isService_Identifier() {}

func (*Service_CloudEndpoints_) isService_Identifier() {}

func (*Service_ClusterIstio_) isService_Identifier() {}

func (m *Service) GetIdentifier() isService_Identifier {
	if m != nil {
		return m.Identifier
	}
	return nil
}

func (m *Service) GetCustom() *Service_Custom {
	if x, ok := m.GetIdentifier().(*Service_Custom_); ok {
		return x.Custom
	}
	return nil
}

func (m *Service) GetAppEngine() *Service_AppEngine {
	if x, ok := m.GetIdentifier().(*Service_AppEngine_); ok {
		return x.AppEngine
	}
	return nil
}

func (m *Service) GetCloudEndpoints() *Service_CloudEndpoints {
	if x, ok := m.GetIdentifier().(*Service_CloudEndpoints_); ok {
		return x.CloudEndpoints
	}
	return nil
}

func (m *Service) GetClusterIstio() *Service_ClusterIstio {
	if x, ok := m.GetIdentifier().(*Service_ClusterIstio_); ok {
		return x.ClusterIstio
	}
	return nil
}

func (m *Service) GetTelemetry() *Service_Telemetry {
	if m != nil {
		return m.Telemetry
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Service) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Service_Custom_)(nil),
		(*Service_AppEngine_)(nil),
		(*Service_CloudEndpoints_)(nil),
		(*Service_ClusterIstio_)(nil),
	}
}

// Custom view of service telemetry. Currently a place-holder pending final
// design.
type Service_Custom struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Service_Custom) Reset()         { *m = Service_Custom{} }
func (m *Service_Custom) String() string { return proto.CompactTextString(m) }
func (*Service_Custom) ProtoMessage()    {}
func (*Service_Custom) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{0, 0}
}

func (m *Service_Custom) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Service_Custom.Unmarshal(m, b)
}
func (m *Service_Custom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Service_Custom.Marshal(b, m, deterministic)
}
func (m *Service_Custom) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Service_Custom.Merge(m, src)
}
func (m *Service_Custom) XXX_Size() int {
	return xxx_messageInfo_Service_Custom.Size(m)
}
func (m *Service_Custom) XXX_DiscardUnknown() {
	xxx_messageInfo_Service_Custom.DiscardUnknown(m)
}

var xxx_messageInfo_Service_Custom proto.InternalMessageInfo

// App Engine service. Learn more at https://cloud.google.com/appengine.
type Service_AppEngine struct {
	// The ID of the App Engine module underlying this service. Corresponds to
	// the `module_id` resource label in the `gae_app` monitored resource:
	// https://cloud.google.com/monitoring/api/resources#tag_gae_app
	ModuleId             string   `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Service_AppEngine) Reset()         { *m = Service_AppEngine{} }
func (m *Service_AppEngine) String() string { return proto.CompactTextString(m) }
func (*Service_AppEngine) ProtoMessage()    {}
func (*Service_AppEngine) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{0, 1}
}

func (m *Service_AppEngine) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Service_AppEngine.Unmarshal(m, b)
}
func (m *Service_AppEngine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Service_AppEngine.Marshal(b, m, deterministic)
}
func (m *Service_AppEngine) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Service_AppEngine.Merge(m, src)
}
func (m *Service_AppEngine) XXX_Size() int {
	return xxx_messageInfo_Service_AppEngine.Size(m)
}
func (m *Service_AppEngine) XXX_DiscardUnknown() {
	xxx_messageInfo_Service_AppEngine.DiscardUnknown(m)
}

var xxx_messageInfo_Service_AppEngine proto.InternalMessageInfo

func (m *Service_AppEngine) GetModuleId() string {
	if m != nil {
		return m.ModuleId
	}
	return ""
}

// Cloud Endpoints service. Learn more at https://cloud.google.com/endpoints.
type Service_CloudEndpoints struct {
	// The name of the Cloud Endpoints service underlying this service.
	// Corresponds to the `service` resource label in the `api` monitored
	// resource: https://cloud.google.com/monitoring/api/resources#tag_api
	Service              string   `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Service_CloudEndpoints) Reset()         { *m = Service_CloudEndpoints{} }
func (m *Service_CloudEndpoints) String() string { return proto.CompactTextString(m) }
func (*Service_CloudEndpoints) ProtoMessage()    {}
func (*Service_CloudEndpoints) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{0, 2}
}

func (m *Service_CloudEndpoints) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Service_CloudEndpoints.Unmarshal(m, b)
}
func (m *Service_CloudEndpoints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Service_CloudEndpoints.Marshal(b, m, deterministic)
}
func (m *Service_CloudEndpoints) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Service_CloudEndpoints.Merge(m, src)
}
func (m *Service_CloudEndpoints) XXX_Size() int {
	return xxx_messageInfo_Service_CloudEndpoints.Size(m)
}
func (m *Service_CloudEndpoints) XXX_DiscardUnknown() {
	xxx_messageInfo_Service_CloudEndpoints.DiscardUnknown(m)
}

var xxx_messageInfo_Service_CloudEndpoints proto.InternalMessageInfo

func (m *Service_CloudEndpoints) GetService() string {
	if m != nil {
		return m.Service
	}
	return ""
}

// Istio service. Learn more at http://istio.io.
type Service_ClusterIstio struct {
	// The location of the Kubernetes cluster in which this Istio service is
	// defined. Corresponds to the `location` resource label in `k8s_cluster`
	// resources.
	Location string `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
	// The name of the Kubernetes cluster in which this Istio service is
	// defined. Corresponds to the `cluster_name` resource label in
	// `k8s_cluster` resources.
	ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"`
	// The namespace of the Istio service underlying this service. Corresponds
	// to the `destination_service_namespace` metric label in Istio metrics.
	ServiceNamespace string `protobuf:"bytes,3,opt,name=service_namespace,json=serviceNamespace,proto3" json:"service_namespace,omitempty"`
	// The name of the Istio service underlying this service. Corresponds to the
	// `destination_service_name` metric label in Istio metrics.
	ServiceName          string   `protobuf:"bytes,4,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Service_ClusterIstio) Reset()         { *m = Service_ClusterIstio{} }
func (m *Service_ClusterIstio) String() string { return proto.CompactTextString(m) }
func (*Service_ClusterIstio) ProtoMessage()    {}
func (*Service_ClusterIstio) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{0, 3}
}

func (m *Service_ClusterIstio) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Service_ClusterIstio.Unmarshal(m, b)
}
func (m *Service_ClusterIstio) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Service_ClusterIstio.Marshal(b, m, deterministic)
}
func (m *Service_ClusterIstio) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Service_ClusterIstio.Merge(m, src)
}
func (m *Service_ClusterIstio) XXX_Size() int {
	return xxx_messageInfo_Service_ClusterIstio.Size(m)
}
func (m *Service_ClusterIstio) XXX_DiscardUnknown() {
	xxx_messageInfo_Service_ClusterIstio.DiscardUnknown(m)
}

var xxx_messageInfo_Service_ClusterIstio proto.InternalMessageInfo

func (m *Service_ClusterIstio) GetLocation() string {
	if m != nil {
		return m.Location
	}
	return ""
}

func (m *Service_ClusterIstio) GetClusterName() string {
	if m != nil {
		return m.ClusterName
	}
	return ""
}

func (m *Service_ClusterIstio) GetServiceNamespace() string {
	if m != nil {
		return m.ServiceNamespace
	}
	return ""
}

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

// Configuration for how to query telemetry on a Service.
type Service_Telemetry struct {
	// The full name of the resource that defines this service. Formatted as
	// described in https://cloud.google.com/apis/design/resource_names.
	ResourceName         string   `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Service_Telemetry) Reset()         { *m = Service_Telemetry{} }
func (m *Service_Telemetry) String() string { return proto.CompactTextString(m) }
func (*Service_Telemetry) ProtoMessage()    {}
func (*Service_Telemetry) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{0, 4}
}

func (m *Service_Telemetry) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Service_Telemetry.Unmarshal(m, b)
}
func (m *Service_Telemetry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Service_Telemetry.Marshal(b, m, deterministic)
}
func (m *Service_Telemetry) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Service_Telemetry.Merge(m, src)
}
func (m *Service_Telemetry) XXX_Size() int {
	return xxx_messageInfo_Service_Telemetry.Size(m)
}
func (m *Service_Telemetry) XXX_DiscardUnknown() {
	xxx_messageInfo_Service_Telemetry.DiscardUnknown(m)
}

var xxx_messageInfo_Service_Telemetry proto.InternalMessageInfo

func (m *Service_Telemetry) GetResourceName() string {
	if m != nil {
		return m.ResourceName
	}
	return ""
}

// A Service-Level Objective (SLO) describes a level of desired good service. It
// consists of a service-level indicator (SLI), a performance goal, and a period
// over which the objective is to be evaluated against that goal. The SLO can
// use SLIs defined in a number of different manners. Typical SLOs might include
// "99% of requests in each rolling week have latency below 200 milliseconds" or
// "99.5% of requests in each calendar month return successfully."
type ServiceLevelObjective struct {
	// Resource name for this `ServiceLevelObjective`.
	// Of the form
	// `projects/{project_id}/services/{service_id}/serviceLevelObjectives/{slo_name}`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Name used for UI elements listing this SLO.
	DisplayName string `protobuf:"bytes,11,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// The definition of good service, used to measure and calculate the quality
	// of the `Service`'s performance with respect to a single aspect of service
	// quality.
	ServiceLevelIndicator *ServiceLevelIndicator `protobuf:"bytes,3,opt,name=service_level_indicator,json=serviceLevelIndicator,proto3" json:"service_level_indicator,omitempty"`
	// The fraction of service that must be good in order for this objective to be
	// met. `0 < goal <= 0.999`.
	Goal float64 `protobuf:"fixed64,4,opt,name=goal,proto3" json:"goal,omitempty"`
	// The time period over which the objective will be evaluated.
	//
	// Types that are valid to be assigned to Period:
	//	*ServiceLevelObjective_RollingPeriod
	//	*ServiceLevelObjective_CalendarPeriod
	Period               isServiceLevelObjective_Period `protobuf_oneof:"period"`
	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
	XXX_unrecognized     []byte                         `json:"-"`
	XXX_sizecache        int32                          `json:"-"`
}

func (m *ServiceLevelObjective) Reset()         { *m = ServiceLevelObjective{} }
func (m *ServiceLevelObjective) String() string { return proto.CompactTextString(m) }
func (*ServiceLevelObjective) ProtoMessage()    {}
func (*ServiceLevelObjective) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{1}
}

func (m *ServiceLevelObjective) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ServiceLevelObjective.Unmarshal(m, b)
}
func (m *ServiceLevelObjective) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ServiceLevelObjective.Marshal(b, m, deterministic)
}
func (m *ServiceLevelObjective) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ServiceLevelObjective.Merge(m, src)
}
func (m *ServiceLevelObjective) XXX_Size() int {
	return xxx_messageInfo_ServiceLevelObjective.Size(m)
}
func (m *ServiceLevelObjective) XXX_DiscardUnknown() {
	xxx_messageInfo_ServiceLevelObjective.DiscardUnknown(m)
}

var xxx_messageInfo_ServiceLevelObjective proto.InternalMessageInfo

func (m *ServiceLevelObjective) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ServiceLevelObjective) GetDisplayName() string {
	if m != nil {
		return m.DisplayName
	}
	return ""
}

func (m *ServiceLevelObjective) GetServiceLevelIndicator() *ServiceLevelIndicator {
	if m != nil {
		return m.ServiceLevelIndicator
	}
	return nil
}

func (m *ServiceLevelObjective) GetGoal() float64 {
	if m != nil {
		return m.Goal
	}
	return 0
}

type isServiceLevelObjective_Period interface {
	isServiceLevelObjective_Period()
}

type ServiceLevelObjective_RollingPeriod struct {
	RollingPeriod *duration.Duration `protobuf:"bytes,5,opt,name=rolling_period,json=rollingPeriod,proto3,oneof"`
}

type ServiceLevelObjective_CalendarPeriod struct {
	CalendarPeriod calendarperiod.CalendarPeriod `protobuf:"varint,6,opt,name=calendar_period,json=calendarPeriod,proto3,enum=google.type.CalendarPeriod,oneof"`
}

func (*ServiceLevelObjective_RollingPeriod) isServiceLevelObjective_Period() {}

func (*ServiceLevelObjective_CalendarPeriod) isServiceLevelObjective_Period() {}

func (m *ServiceLevelObjective) GetPeriod() isServiceLevelObjective_Period {
	if m != nil {
		return m.Period
	}
	return nil
}

func (m *ServiceLevelObjective) GetRollingPeriod() *duration.Duration {
	if x, ok := m.GetPeriod().(*ServiceLevelObjective_RollingPeriod); ok {
		return x.RollingPeriod
	}
	return nil
}

func (m *ServiceLevelObjective) GetCalendarPeriod() calendarperiod.CalendarPeriod {
	if x, ok := m.GetPeriod().(*ServiceLevelObjective_CalendarPeriod); ok {
		return x.CalendarPeriod
	}
	return calendarperiod.CalendarPeriod_CALENDAR_PERIOD_UNSPECIFIED
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ServiceLevelObjective) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ServiceLevelObjective_RollingPeriod)(nil),
		(*ServiceLevelObjective_CalendarPeriod)(nil),
	}
}

// A Service-Level Indicator (SLI) describes the "performance" of a service. For
// some services, the SLI is well-defined. In such cases, the SLI can be
// described easily by referencing the well-known SLI and providing the needed
// parameters. Alternatively, a "custom" SLI can be defined with a query to the
// underlying metric store. An SLI is defined to be `good_service /
// total_service` over any queried time interval. The value of performance
// always falls into the range `0 <= performance <= 1`. A custom SLI describes
// how to compute this ratio, whether this is by dividing values from a pair of
// time series, cutting a `Distribution` into good and bad counts, or counting
// time windows in which the service complies with a criterion. For separation
// of concerns, a single Service-Level Indicator measures performance for only
// one aspect of service quality, such as fraction of successful queries or
// fast-enough queries.
type ServiceLevelIndicator struct {
	// Service level indicators can be grouped by whether the "unit" of service
	// being measured is based on counts of good requests or on counts of good
	// time windows
	//
	// Types that are valid to be assigned to Type:
	//	*ServiceLevelIndicator_BasicSli
	//	*ServiceLevelIndicator_RequestBased
	//	*ServiceLevelIndicator_WindowsBased
	Type                 isServiceLevelIndicator_Type `protobuf_oneof:"type"`
	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
	XXX_unrecognized     []byte                       `json:"-"`
	XXX_sizecache        int32                        `json:"-"`
}

func (m *ServiceLevelIndicator) Reset()         { *m = ServiceLevelIndicator{} }
func (m *ServiceLevelIndicator) String() string { return proto.CompactTextString(m) }
func (*ServiceLevelIndicator) ProtoMessage()    {}
func (*ServiceLevelIndicator) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{2}
}

func (m *ServiceLevelIndicator) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ServiceLevelIndicator.Unmarshal(m, b)
}
func (m *ServiceLevelIndicator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ServiceLevelIndicator.Marshal(b, m, deterministic)
}
func (m *ServiceLevelIndicator) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ServiceLevelIndicator.Merge(m, src)
}
func (m *ServiceLevelIndicator) XXX_Size() int {
	return xxx_messageInfo_ServiceLevelIndicator.Size(m)
}
func (m *ServiceLevelIndicator) XXX_DiscardUnknown() {
	xxx_messageInfo_ServiceLevelIndicator.DiscardUnknown(m)
}

var xxx_messageInfo_ServiceLevelIndicator proto.InternalMessageInfo

type isServiceLevelIndicator_Type interface {
	isServiceLevelIndicator_Type()
}

type ServiceLevelIndicator_BasicSli struct {
	BasicSli *BasicSli `protobuf:"bytes,4,opt,name=basic_sli,json=basicSli,proto3,oneof"`
}

type ServiceLevelIndicator_RequestBased struct {
	RequestBased *RequestBasedSli `protobuf:"bytes,1,opt,name=request_based,json=requestBased,proto3,oneof"`
}

type ServiceLevelIndicator_WindowsBased struct {
	WindowsBased *WindowsBasedSli `protobuf:"bytes,2,opt,name=windows_based,json=windowsBased,proto3,oneof"`
}

func (*ServiceLevelIndicator_BasicSli) isServiceLevelIndicator_Type() {}

func (*ServiceLevelIndicator_RequestBased) isServiceLevelIndicator_Type() {}

func (*ServiceLevelIndicator_WindowsBased) isServiceLevelIndicator_Type() {}

func (m *ServiceLevelIndicator) GetType() isServiceLevelIndicator_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *ServiceLevelIndicator) GetBasicSli() *BasicSli {
	if x, ok := m.GetType().(*ServiceLevelIndicator_BasicSli); ok {
		return x.BasicSli
	}
	return nil
}

func (m *ServiceLevelIndicator) GetRequestBased() *RequestBasedSli {
	if x, ok := m.GetType().(*ServiceLevelIndicator_RequestBased); ok {
		return x.RequestBased
	}
	return nil
}

func (m *ServiceLevelIndicator) GetWindowsBased() *WindowsBasedSli {
	if x, ok := m.GetType().(*ServiceLevelIndicator_WindowsBased); ok {
		return x.WindowsBased
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ServiceLevelIndicator) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ServiceLevelIndicator_BasicSli)(nil),
		(*ServiceLevelIndicator_RequestBased)(nil),
		(*ServiceLevelIndicator_WindowsBased)(nil),
	}
}

// An SLI measuring performance on a well-known service type. Performance will
// be computed on the basis of pre-defined metrics. The type of the
// `service_resource` determines the metrics to use and the
// `service_resource.labels` and `metric_labels` are used to construct a
// monitoring filter to filter that metric down to just the data relevant to
// this service.
type BasicSli struct {
	// OPTIONAL: The set of RPCs to which this SLI is relevant. Telemetry from
	// other methods will not be used to calculate performance for this SLI. If
	// omitted, this SLI applies to all the Service's methods. For service types
	// that don't support breaking down by method, setting this field will result
	// in an error.
	Method []string `protobuf:"bytes,7,rep,name=method,proto3" json:"method,omitempty"`
	// OPTIONAL: The set of locations to which this SLI is relevant. Telemetry
	// from other locations will not be used to calculate performance for this
	// SLI. If omitted, this SLI applies to all locations in which the Service has
	// activity. For service types that don't support breaking down by location,
	// setting this field will result in an error.
	Location []string `protobuf:"bytes,8,rep,name=location,proto3" json:"location,omitempty"`
	// OPTIONAL: The set of API versions to which this SLI is relevant. Telemetry
	// from other API versions will not be used to calculate performance for this
	// SLI. If omitted, this SLI applies to all API versions. For service types
	// that don't support breaking down by version, setting this field will result
	// in an error.
	Version []string `protobuf:"bytes,9,rep,name=version,proto3" json:"version,omitempty"`
	// This SLI can be evaluated on the basis of availability or latency.
	//
	// Types that are valid to be assigned to SliCriteria:
	//	*BasicSli_Availability
	//	*BasicSli_Latency
	SliCriteria          isBasicSli_SliCriteria `protobuf_oneof:"sli_criteria"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

func (m *BasicSli) Reset()         { *m = BasicSli{} }
func (m *BasicSli) String() string { return proto.CompactTextString(m) }
func (*BasicSli) ProtoMessage()    {}
func (*BasicSli) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{3}
}

func (m *BasicSli) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BasicSli.Unmarshal(m, b)
}
func (m *BasicSli) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BasicSli.Marshal(b, m, deterministic)
}
func (m *BasicSli) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BasicSli.Merge(m, src)
}
func (m *BasicSli) XXX_Size() int {
	return xxx_messageInfo_BasicSli.Size(m)
}
func (m *BasicSli) XXX_DiscardUnknown() {
	xxx_messageInfo_BasicSli.DiscardUnknown(m)
}

var xxx_messageInfo_BasicSli proto.InternalMessageInfo

func (m *BasicSli) GetMethod() []string {
	if m != nil {
		return m.Method
	}
	return nil
}

func (m *BasicSli) GetLocation() []string {
	if m != nil {
		return m.Location
	}
	return nil
}

func (m *BasicSli) GetVersion() []string {
	if m != nil {
		return m.Version
	}
	return nil
}

type isBasicSli_SliCriteria interface {
	isBasicSli_SliCriteria()
}

type BasicSli_Availability struct {
	Availability *BasicSli_AvailabilityCriteria `protobuf:"bytes,2,opt,name=availability,proto3,oneof"`
}

type BasicSli_Latency struct {
	Latency *BasicSli_LatencyCriteria `protobuf:"bytes,3,opt,name=latency,proto3,oneof"`
}

func (*BasicSli_Availability) isBasicSli_SliCriteria() {}

func (*BasicSli_Latency) isBasicSli_SliCriteria() {}

func (m *BasicSli) GetSliCriteria() isBasicSli_SliCriteria {
	if m != nil {
		return m.SliCriteria
	}
	return nil
}

func (m *BasicSli) GetAvailability() *BasicSli_AvailabilityCriteria {
	if x, ok := m.GetSliCriteria().(*BasicSli_Availability); ok {
		return x.Availability
	}
	return nil
}

func (m *BasicSli) GetLatency() *BasicSli_LatencyCriteria {
	if x, ok := m.GetSliCriteria().(*BasicSli_Latency); ok {
		return x.Latency
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*BasicSli) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*BasicSli_Availability)(nil),
		(*BasicSli_Latency)(nil),
	}
}

// Future parameters for the availability SLI.
type BasicSli_AvailabilityCriteria struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *BasicSli_AvailabilityCriteria) Reset()         { *m = BasicSli_AvailabilityCriteria{} }
func (m *BasicSli_AvailabilityCriteria) String() string { return proto.CompactTextString(m) }
func (*BasicSli_AvailabilityCriteria) ProtoMessage()    {}
func (*BasicSli_AvailabilityCriteria) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{3, 0}
}

func (m *BasicSli_AvailabilityCriteria) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BasicSli_AvailabilityCriteria.Unmarshal(m, b)
}
func (m *BasicSli_AvailabilityCriteria) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BasicSli_AvailabilityCriteria.Marshal(b, m, deterministic)
}
func (m *BasicSli_AvailabilityCriteria) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BasicSli_AvailabilityCriteria.Merge(m, src)
}
func (m *BasicSli_AvailabilityCriteria) XXX_Size() int {
	return xxx_messageInfo_BasicSli_AvailabilityCriteria.Size(m)
}
func (m *BasicSli_AvailabilityCriteria) XXX_DiscardUnknown() {
	xxx_messageInfo_BasicSli_AvailabilityCriteria.DiscardUnknown(m)
}

var xxx_messageInfo_BasicSli_AvailabilityCriteria proto.InternalMessageInfo

// Parameters for a latency threshold SLI.
type BasicSli_LatencyCriteria struct {
	// Good service is defined to be the count of requests made to this service
	// that return in no more than `threshold`.
	Threshold            *duration.Duration `protobuf:"bytes,3,opt,name=threshold,proto3" json:"threshold,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *BasicSli_LatencyCriteria) Reset()         { *m = BasicSli_LatencyCriteria{} }
func (m *BasicSli_LatencyCriteria) String() string { return proto.CompactTextString(m) }
func (*BasicSli_LatencyCriteria) ProtoMessage()    {}
func (*BasicSli_LatencyCriteria) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{3, 1}
}

func (m *BasicSli_LatencyCriteria) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BasicSli_LatencyCriteria.Unmarshal(m, b)
}
func (m *BasicSli_LatencyCriteria) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BasicSli_LatencyCriteria.Marshal(b, m, deterministic)
}
func (m *BasicSli_LatencyCriteria) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BasicSli_LatencyCriteria.Merge(m, src)
}
func (m *BasicSli_LatencyCriteria) XXX_Size() int {
	return xxx_messageInfo_BasicSli_LatencyCriteria.Size(m)
}
func (m *BasicSli_LatencyCriteria) XXX_DiscardUnknown() {
	xxx_messageInfo_BasicSli_LatencyCriteria.DiscardUnknown(m)
}

var xxx_messageInfo_BasicSli_LatencyCriteria proto.InternalMessageInfo

func (m *BasicSli_LatencyCriteria) GetThreshold() *duration.Duration {
	if m != nil {
		return m.Threshold
	}
	return nil
}

// Range of numerical values, inclusive of `min` and exclusive of `max`. If the
// open range "< range.max" is desired, set `range.min = -infinity`. If the open
// range ">= range.min" is desired, set `range.max = infinity`.
type Range struct {
	// Range minimum.
	Min float64 `protobuf:"fixed64,1,opt,name=min,proto3" json:"min,omitempty"`
	// Range maximum.
	Max                  float64  `protobuf:"fixed64,2,opt,name=max,proto3" json:"max,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Range) Reset()         { *m = Range{} }
func (m *Range) String() string { return proto.CompactTextString(m) }
func (*Range) ProtoMessage()    {}
func (*Range) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{4}
}

func (m *Range) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Range.Unmarshal(m, b)
}
func (m *Range) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Range.Marshal(b, m, deterministic)
}
func (m *Range) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Range.Merge(m, src)
}
func (m *Range) XXX_Size() int {
	return xxx_messageInfo_Range.Size(m)
}
func (m *Range) XXX_DiscardUnknown() {
	xxx_messageInfo_Range.DiscardUnknown(m)
}

var xxx_messageInfo_Range proto.InternalMessageInfo

func (m *Range) GetMin() float64 {
	if m != nil {
		return m.Min
	}
	return 0
}

func (m *Range) GetMax() float64 {
	if m != nil {
		return m.Max
	}
	return 0
}

// Service Level Indicators for which atomic units of service are counted
// directly.
type RequestBasedSli struct {
	// The means to compute a ratio of `good_service` to `total_service`.
	//
	// Types that are valid to be assigned to Method:
	//	*RequestBasedSli_GoodTotalRatio
	//	*RequestBasedSli_DistributionCut
	Method               isRequestBasedSli_Method `protobuf_oneof:"method"`
	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
	XXX_unrecognized     []byte                   `json:"-"`
	XXX_sizecache        int32                    `json:"-"`
}

func (m *RequestBasedSli) Reset()         { *m = RequestBasedSli{} }
func (m *RequestBasedSli) String() string { return proto.CompactTextString(m) }
func (*RequestBasedSli) ProtoMessage()    {}
func (*RequestBasedSli) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{5}
}

func (m *RequestBasedSli) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RequestBasedSli.Unmarshal(m, b)
}
func (m *RequestBasedSli) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RequestBasedSli.Marshal(b, m, deterministic)
}
func (m *RequestBasedSli) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RequestBasedSli.Merge(m, src)
}
func (m *RequestBasedSli) XXX_Size() int {
	return xxx_messageInfo_RequestBasedSli.Size(m)
}
func (m *RequestBasedSli) XXX_DiscardUnknown() {
	xxx_messageInfo_RequestBasedSli.DiscardUnknown(m)
}

var xxx_messageInfo_RequestBasedSli proto.InternalMessageInfo

type isRequestBasedSli_Method interface {
	isRequestBasedSli_Method()
}

type RequestBasedSli_GoodTotalRatio struct {
	GoodTotalRatio *TimeSeriesRatio `protobuf:"bytes,1,opt,name=good_total_ratio,json=goodTotalRatio,proto3,oneof"`
}

type RequestBasedSli_DistributionCut struct {
	DistributionCut *DistributionCut `protobuf:"bytes,3,opt,name=distribution_cut,json=distributionCut,proto3,oneof"`
}

func (*RequestBasedSli_GoodTotalRatio) isRequestBasedSli_Method() {}

func (*RequestBasedSli_DistributionCut) isRequestBasedSli_Method() {}

func (m *RequestBasedSli) GetMethod() isRequestBasedSli_Method {
	if m != nil {
		return m.Method
	}
	return nil
}

func (m *RequestBasedSli) GetGoodTotalRatio() *TimeSeriesRatio {
	if x, ok := m.GetMethod().(*RequestBasedSli_GoodTotalRatio); ok {
		return x.GoodTotalRatio
	}
	return nil
}

func (m *RequestBasedSli) GetDistributionCut() *DistributionCut {
	if x, ok := m.GetMethod().(*RequestBasedSli_DistributionCut); ok {
		return x.DistributionCut
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*RequestBasedSli) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*RequestBasedSli_GoodTotalRatio)(nil),
		(*RequestBasedSli_DistributionCut)(nil),
	}
}

// A `TimeSeriesRatio` specifies two `TimeSeries` to use for computing the
// `good_service / total_service` ratio. The specified `TimeSeries` must have
// `ValueType = DOUBLE` or `ValueType = INT64` and must have `MetricKind =
// DELTA` or `MetricKind = CUMULATIVE`. The `TimeSeriesRatio` must specify
// exactly two of good, bad, and total, and the relationship `good_service +
// bad_service = total_service` will be assumed.
type TimeSeriesRatio struct {
	// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
	// specifying a `TimeSeries` quantifying good service provided. Must have
	// `ValueType = DOUBLE` or `ValueType = INT64` and must have `MetricKind =
	// DELTA` or `MetricKind = CUMULATIVE`.
	GoodServiceFilter string `protobuf:"bytes,4,opt,name=good_service_filter,json=goodServiceFilter,proto3" json:"good_service_filter,omitempty"`
	// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
	// specifying a `TimeSeries` quantifying bad service, either demanded service
	// that was not provided or demanded service that was of inadequate quality.
	// Must have `ValueType = DOUBLE` or `ValueType = INT64` and must have
	// `MetricKind = DELTA` or `MetricKind = CUMULATIVE`.
	BadServiceFilter string `protobuf:"bytes,5,opt,name=bad_service_filter,json=badServiceFilter,proto3" json:"bad_service_filter,omitempty"`
	// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
	// specifying a `TimeSeries` quantifying total demanded service. Must have
	// `ValueType = DOUBLE` or `ValueType = INT64` and must have `MetricKind =
	// DELTA` or `MetricKind = CUMULATIVE`.
	TotalServiceFilter   string   `protobuf:"bytes,6,opt,name=total_service_filter,json=totalServiceFilter,proto3" json:"total_service_filter,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TimeSeriesRatio) Reset()         { *m = TimeSeriesRatio{} }
func (m *TimeSeriesRatio) String() string { return proto.CompactTextString(m) }
func (*TimeSeriesRatio) ProtoMessage()    {}
func (*TimeSeriesRatio) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{6}
}

func (m *TimeSeriesRatio) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TimeSeriesRatio.Unmarshal(m, b)
}
func (m *TimeSeriesRatio) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TimeSeriesRatio.Marshal(b, m, deterministic)
}
func (m *TimeSeriesRatio) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TimeSeriesRatio.Merge(m, src)
}
func (m *TimeSeriesRatio) XXX_Size() int {
	return xxx_messageInfo_TimeSeriesRatio.Size(m)
}
func (m *TimeSeriesRatio) XXX_DiscardUnknown() {
	xxx_messageInfo_TimeSeriesRatio.DiscardUnknown(m)
}

var xxx_messageInfo_TimeSeriesRatio proto.InternalMessageInfo

func (m *TimeSeriesRatio) GetGoodServiceFilter() string {
	if m != nil {
		return m.GoodServiceFilter
	}
	return ""
}

func (m *TimeSeriesRatio) GetBadServiceFilter() string {
	if m != nil {
		return m.BadServiceFilter
	}
	return ""
}

func (m *TimeSeriesRatio) GetTotalServiceFilter() string {
	if m != nil {
		return m.TotalServiceFilter
	}
	return ""
}

// A `DistributionCut` defines a `TimeSeries` and thresholds used for measuring
// good service and total service. The `TimeSeries` must have `ValueType =
// DISTRIBUTION` and `MetricKind = DELTA` or `MetricKind = CUMULATIVE`. The
// computed `good_service` will be the count of values x in the `Distribution`
// such that `range.min <= x < range.max`.
type DistributionCut struct {
	// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
	// specifying a `TimeSeries` aggregating values. Must have `ValueType =
	// DISTRIBUTION` and `MetricKind = DELTA` or `MetricKind = CUMULATIVE`.
	DistributionFilter string `protobuf:"bytes,4,opt,name=distribution_filter,json=distributionFilter,proto3" json:"distribution_filter,omitempty"`
	// Range of values considered "good." For a one-sided range, set one bound to
	// an infinite value.
	Range                *Range   `protobuf:"bytes,5,opt,name=range,proto3" json:"range,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DistributionCut) Reset()         { *m = DistributionCut{} }
func (m *DistributionCut) String() string { return proto.CompactTextString(m) }
func (*DistributionCut) ProtoMessage()    {}
func (*DistributionCut) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{7}
}

func (m *DistributionCut) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_DistributionCut.Unmarshal(m, b)
}
func (m *DistributionCut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_DistributionCut.Marshal(b, m, deterministic)
}
func (m *DistributionCut) XXX_Merge(src proto.Message) {
	xxx_messageInfo_DistributionCut.Merge(m, src)
}
func (m *DistributionCut) XXX_Size() int {
	return xxx_messageInfo_DistributionCut.Size(m)
}
func (m *DistributionCut) XXX_DiscardUnknown() {
	xxx_messageInfo_DistributionCut.DiscardUnknown(m)
}

var xxx_messageInfo_DistributionCut proto.InternalMessageInfo

func (m *DistributionCut) GetDistributionFilter() string {
	if m != nil {
		return m.DistributionFilter
	}
	return ""
}

func (m *DistributionCut) GetRange() *Range {
	if m != nil {
		return m.Range
	}
	return nil
}

// A `WindowsBasedSli` defines `good_service` as the count of time windows for
// which the provided service was of good quality. Criteria for determining
// if service was good are embedded in the `window_criterion`.
type WindowsBasedSli struct {
	// The criterion to use for evaluating window goodness.
	//
	// Types that are valid to be assigned to WindowCriterion:
	//	*WindowsBasedSli_GoodBadMetricFilter
	//	*WindowsBasedSli_GoodTotalRatioThreshold
	//	*WindowsBasedSli_MetricMeanInRange
	//	*WindowsBasedSli_MetricSumInRange
	WindowCriterion isWindowsBasedSli_WindowCriterion `protobuf_oneof:"window_criterion"`
	// Duration over which window quality is evaluated. Must be an integer
	// fraction of a day and at least `60s`.
	WindowPeriod         *duration.Duration `protobuf:"bytes,4,opt,name=window_period,json=windowPeriod,proto3" json:"window_period,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *WindowsBasedSli) Reset()         { *m = WindowsBasedSli{} }
func (m *WindowsBasedSli) String() string { return proto.CompactTextString(m) }
func (*WindowsBasedSli) ProtoMessage()    {}
func (*WindowsBasedSli) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{8}
}

func (m *WindowsBasedSli) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WindowsBasedSli.Unmarshal(m, b)
}
func (m *WindowsBasedSli) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WindowsBasedSli.Marshal(b, m, deterministic)
}
func (m *WindowsBasedSli) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WindowsBasedSli.Merge(m, src)
}
func (m *WindowsBasedSli) XXX_Size() int {
	return xxx_messageInfo_WindowsBasedSli.Size(m)
}
func (m *WindowsBasedSli) XXX_DiscardUnknown() {
	xxx_messageInfo_WindowsBasedSli.DiscardUnknown(m)
}

var xxx_messageInfo_WindowsBasedSli proto.InternalMessageInfo

type isWindowsBasedSli_WindowCriterion interface {
	isWindowsBasedSli_WindowCriterion()
}

type WindowsBasedSli_GoodBadMetricFilter struct {
	GoodBadMetricFilter string `protobuf:"bytes,5,opt,name=good_bad_metric_filter,json=goodBadMetricFilter,proto3,oneof"`
}

type WindowsBasedSli_GoodTotalRatioThreshold struct {
	GoodTotalRatioThreshold *WindowsBasedSli_PerformanceThreshold `protobuf:"bytes,2,opt,name=good_total_ratio_threshold,json=goodTotalRatioThreshold,proto3,oneof"`
}

type WindowsBasedSli_MetricMeanInRange struct {
	MetricMeanInRange *WindowsBasedSli_MetricRange `protobuf:"bytes,6,opt,name=metric_mean_in_range,json=metricMeanInRange,proto3,oneof"`
}

type WindowsBasedSli_MetricSumInRange struct {
	MetricSumInRange *WindowsBasedSli_MetricRange `protobuf:"bytes,7,opt,name=metric_sum_in_range,json=metricSumInRange,proto3,oneof"`
}

func (*WindowsBasedSli_GoodBadMetricFilter) isWindowsBasedSli_WindowCriterion() {}

func (*WindowsBasedSli_GoodTotalRatioThreshold) isWindowsBasedSli_WindowCriterion() {}

func (*WindowsBasedSli_MetricMeanInRange) isWindowsBasedSli_WindowCriterion() {}

func (*WindowsBasedSli_MetricSumInRange) isWindowsBasedSli_WindowCriterion() {}

func (m *WindowsBasedSli) GetWindowCriterion() isWindowsBasedSli_WindowCriterion {
	if m != nil {
		return m.WindowCriterion
	}
	return nil
}

func (m *WindowsBasedSli) GetGoodBadMetricFilter() string {
	if x, ok := m.GetWindowCriterion().(*WindowsBasedSli_GoodBadMetricFilter); ok {
		return x.GoodBadMetricFilter
	}
	return ""
}

func (m *WindowsBasedSli) GetGoodTotalRatioThreshold() *WindowsBasedSli_PerformanceThreshold {
	if x, ok := m.GetWindowCriterion().(*WindowsBasedSli_GoodTotalRatioThreshold); ok {
		return x.GoodTotalRatioThreshold
	}
	return nil
}

func (m *WindowsBasedSli) GetMetricMeanInRange() *WindowsBasedSli_MetricRange {
	if x, ok := m.GetWindowCriterion().(*WindowsBasedSli_MetricMeanInRange); ok {
		return x.MetricMeanInRange
	}
	return nil
}

func (m *WindowsBasedSli) GetMetricSumInRange() *WindowsBasedSli_MetricRange {
	if x, ok := m.GetWindowCriterion().(*WindowsBasedSli_MetricSumInRange); ok {
		return x.MetricSumInRange
	}
	return nil
}

func (m *WindowsBasedSli) GetWindowPeriod() *duration.Duration {
	if m != nil {
		return m.WindowPeriod
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*WindowsBasedSli) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*WindowsBasedSli_GoodBadMetricFilter)(nil),
		(*WindowsBasedSli_GoodTotalRatioThreshold)(nil),
		(*WindowsBasedSli_MetricMeanInRange)(nil),
		(*WindowsBasedSli_MetricSumInRange)(nil),
	}
}

// A `PerformanceThreshold` is used when each window is good when that window
// has a sufficiently high `performance`.
type WindowsBasedSli_PerformanceThreshold struct {
	// The means, either a request-based SLI or a basic SLI, by which to compute
	// performance over a window.
	//
	// Types that are valid to be assigned to Type:
	//	*WindowsBasedSli_PerformanceThreshold_Performance
	//	*WindowsBasedSli_PerformanceThreshold_BasicSliPerformance
	Type isWindowsBasedSli_PerformanceThreshold_Type `protobuf_oneof:"type"`
	// If window `performance >= threshold`, the window is counted as good.
	Threshold            float64  `protobuf:"fixed64,2,opt,name=threshold,proto3" json:"threshold,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *WindowsBasedSli_PerformanceThreshold) Reset()         { *m = WindowsBasedSli_PerformanceThreshold{} }
func (m *WindowsBasedSli_PerformanceThreshold) String() string { return proto.CompactTextString(m) }
func (*WindowsBasedSli_PerformanceThreshold) ProtoMessage()    {}
func (*WindowsBasedSli_PerformanceThreshold) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{8, 0}
}

func (m *WindowsBasedSli_PerformanceThreshold) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WindowsBasedSli_PerformanceThreshold.Unmarshal(m, b)
}
func (m *WindowsBasedSli_PerformanceThreshold) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WindowsBasedSli_PerformanceThreshold.Marshal(b, m, deterministic)
}
func (m *WindowsBasedSli_PerformanceThreshold) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WindowsBasedSli_PerformanceThreshold.Merge(m, src)
}
func (m *WindowsBasedSli_PerformanceThreshold) XXX_Size() int {
	return xxx_messageInfo_WindowsBasedSli_PerformanceThreshold.Size(m)
}
func (m *WindowsBasedSli_PerformanceThreshold) XXX_DiscardUnknown() {
	xxx_messageInfo_WindowsBasedSli_PerformanceThreshold.DiscardUnknown(m)
}

var xxx_messageInfo_WindowsBasedSli_PerformanceThreshold proto.InternalMessageInfo

type isWindowsBasedSli_PerformanceThreshold_Type interface {
	isWindowsBasedSli_PerformanceThreshold_Type()
}

type WindowsBasedSli_PerformanceThreshold_Performance struct {
	Performance *RequestBasedSli `protobuf:"bytes,1,opt,name=performance,proto3,oneof"`
}

type WindowsBasedSli_PerformanceThreshold_BasicSliPerformance struct {
	BasicSliPerformance *BasicSli `protobuf:"bytes,3,opt,name=basic_sli_performance,json=basicSliPerformance,proto3,oneof"`
}

func (*WindowsBasedSli_PerformanceThreshold_Performance) isWindowsBasedSli_PerformanceThreshold_Type() {
}

func (*WindowsBasedSli_PerformanceThreshold_BasicSliPerformance) isWindowsBasedSli_PerformanceThreshold_Type() {
}

func (m *WindowsBasedSli_PerformanceThreshold) GetType() isWindowsBasedSli_PerformanceThreshold_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *WindowsBasedSli_PerformanceThreshold) GetPerformance() *RequestBasedSli {
	if x, ok := m.GetType().(*WindowsBasedSli_PerformanceThreshold_Performance); ok {
		return x.Performance
	}
	return nil
}

func (m *WindowsBasedSli_PerformanceThreshold) GetBasicSliPerformance() *BasicSli {
	if x, ok := m.GetType().(*WindowsBasedSli_PerformanceThreshold_BasicSliPerformance); ok {
		return x.BasicSliPerformance
	}
	return nil
}

func (m *WindowsBasedSli_PerformanceThreshold) GetThreshold() float64 {
	if m != nil {
		return m.Threshold
	}
	return 0
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*WindowsBasedSli_PerformanceThreshold) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*WindowsBasedSli_PerformanceThreshold_Performance)(nil),
		(*WindowsBasedSli_PerformanceThreshold_BasicSliPerformance)(nil),
	}
}

// A `MetricRange` is used when each window is good when the value x of a
// single `TimeSeries` satisfies `range.min <= x < range.max`. The provided
// `TimeSeries` must have `ValueType = INT64` or `ValueType = DOUBLE` and
// `MetricKind = GAUGE`.
type WindowsBasedSli_MetricRange struct {
	// A [monitoring filter](https://cloud.google.com/monitoring/api/v3/filters)
	// specifying the `TimeSeries` to use for evaluating window quality.
	TimeSeries string `protobuf:"bytes,1,opt,name=time_series,json=timeSeries,proto3" json:"time_series,omitempty"`
	// Range of values considered "good." For a one-sided range, set one bound
	// to an infinite value.
	Range                *Range   `protobuf:"bytes,4,opt,name=range,proto3" json:"range,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *WindowsBasedSli_MetricRange) Reset()         { *m = WindowsBasedSli_MetricRange{} }
func (m *WindowsBasedSli_MetricRange) String() string { return proto.CompactTextString(m) }
func (*WindowsBasedSli_MetricRange) ProtoMessage()    {}
func (*WindowsBasedSli_MetricRange) Descriptor() ([]byte, []int) {
	return fileDescriptor_72cc01277ee8f421, []int{8, 1}
}

func (m *WindowsBasedSli_MetricRange) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_WindowsBasedSli_MetricRange.Unmarshal(m, b)
}
func (m *WindowsBasedSli_MetricRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_WindowsBasedSli_MetricRange.Marshal(b, m, deterministic)
}
func (m *WindowsBasedSli_MetricRange) XXX_Merge(src proto.Message) {
	xxx_messageInfo_WindowsBasedSli_MetricRange.Merge(m, src)
}
func (m *WindowsBasedSli_MetricRange) XXX_Size() int {
	return xxx_messageInfo_WindowsBasedSli_MetricRange.Size(m)
}
func (m *WindowsBasedSli_MetricRange) XXX_DiscardUnknown() {
	xxx_messageInfo_WindowsBasedSli_MetricRange.DiscardUnknown(m)
}

var xxx_messageInfo_WindowsBasedSli_MetricRange proto.InternalMessageInfo

func (m *WindowsBasedSli_MetricRange) GetTimeSeries() string {
	if m != nil {
		return m.TimeSeries
	}
	return ""
}

func (m *WindowsBasedSli_MetricRange) GetRange() *Range {
	if m != nil {
		return m.Range
	}
	return nil
}

func init() {
	proto.RegisterEnum("google.monitoring.v3.ServiceLevelObjective_View", ServiceLevelObjective_View_name, ServiceLevelObjective_View_value)
	proto.RegisterType((*Service)(nil), "google.monitoring.v3.Service")
	proto.RegisterType((*Service_Custom)(nil), "google.monitoring.v3.Service.Custom")
	proto.RegisterType((*Service_AppEngine)(nil), "google.monitoring.v3.Service.AppEngine")
	proto.RegisterType((*Service_CloudEndpoints)(nil), "google.monitoring.v3.Service.CloudEndpoints")
	proto.RegisterType((*Service_ClusterIstio)(nil), "google.monitoring.v3.Service.ClusterIstio")
	proto.RegisterType((*Service_Telemetry)(nil), "google.monitoring.v3.Service.Telemetry")
	proto.RegisterType((*ServiceLevelObjective)(nil), "google.monitoring.v3.ServiceLevelObjective")
	proto.RegisterType((*ServiceLevelIndicator)(nil), "google.monitoring.v3.ServiceLevelIndicator")
	proto.RegisterType((*BasicSli)(nil), "google.monitoring.v3.BasicSli")
	proto.RegisterType((*BasicSli_AvailabilityCriteria)(nil), "google.monitoring.v3.BasicSli.AvailabilityCriteria")
	proto.RegisterType((*BasicSli_LatencyCriteria)(nil), "google.monitoring.v3.BasicSli.LatencyCriteria")
	proto.RegisterType((*Range)(nil), "google.monitoring.v3.Range")
	proto.RegisterType((*RequestBasedSli)(nil), "google.monitoring.v3.RequestBasedSli")
	proto.RegisterType((*TimeSeriesRatio)(nil), "google.monitoring.v3.TimeSeriesRatio")
	proto.RegisterType((*DistributionCut)(nil), "google.monitoring.v3.DistributionCut")
	proto.RegisterType((*WindowsBasedSli)(nil), "google.monitoring.v3.WindowsBasedSli")
	proto.RegisterType((*WindowsBasedSli_PerformanceThreshold)(nil), "google.monitoring.v3.WindowsBasedSli.PerformanceThreshold")
	proto.RegisterType((*WindowsBasedSli_MetricRange)(nil), "google.monitoring.v3.WindowsBasedSli.MetricRange")
}

func init() {
	proto.RegisterFile("google/monitoring/v3/service.proto", fileDescriptor_72cc01277ee8f421)
}

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