// Code generated by protoc-gen-go. DO NOT EDIT.
// source: recipes/fuchsia.proto

package recipes

/*
"from PB.recipe_modules.infra.fuchsia import Fuchsia"
*/

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"

// 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

// Fuchsia fully describes how to execute a Fuchsia CI/CQ task:
//
//  * How to fetch the Fuchsia sources.
//  * How to build Fuchsia.
//  * How to test Fuchsia.
//  * How to archive and log outputs to various places.
//
// See the fuchsia.py recipe for full documentation on task execution.
//
// TODO(IN-1102):
//
// * Improve the docs of the fields in this message, since this is the User
//   facing API for the recipe.
// * Use Enums instead of strings where appropriate once we have starlark and
//   support for human-readable constant values. Enums are just int literals in
//   textprotos.
type Fuchsia struct {
	// (required) How to obtain the Fuchsia build inputs. See Checkout docs.
	Checkout *Fuchsia_Checkout `protobuf:"bytes,1,opt,name=checkout,proto3" json:"checkout,omitempty"`
	// (required) How to build Fuchsia. See Build docs.
	Build *Fuchsia_Build `protobuf:"bytes,2,opt,name=build,proto3" json:"build,omitempty"`
	// How to test Fuchsia. See Test docs.
	Test *Fuchsia_Test `protobuf:"bytes,3,opt,name=test,proto3" json:"test,omitempty"`
	// The GCS bucket to upload results to.
	GcsBucket            string   `protobuf:"bytes,4,opt,name=gcs_bucket,json=gcsBucket,proto3" json:"gcs_bucket,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Fuchsia) Reset()         { *m = Fuchsia{} }
func (m *Fuchsia) String() string { return proto.CompactTextString(m) }
func (*Fuchsia) ProtoMessage()    {}
func (*Fuchsia) Descriptor() ([]byte, []int) {
	return fileDescriptor_fuchsia_8a0d81e7dfdadf36, []int{0}
}
func (m *Fuchsia) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Fuchsia.Unmarshal(m, b)
}
func (m *Fuchsia) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Fuchsia.Marshal(b, m, deterministic)
}
func (dst *Fuchsia) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Fuchsia.Merge(dst, src)
}
func (m *Fuchsia) XXX_Size() int {
	return xxx_messageInfo_Fuchsia.Size(m)
}
func (m *Fuchsia) XXX_DiscardUnknown() {
	xxx_messageInfo_Fuchsia.DiscardUnknown(m)
}

var xxx_messageInfo_Fuchsia proto.InternalMessageInfo

func (m *Fuchsia) GetCheckout() *Fuchsia_Checkout {
	if m != nil {
		return m.Checkout
	}
	return nil
}

func (m *Fuchsia) GetBuild() *Fuchsia_Build {
	if m != nil {
		return m.Build
	}
	return nil
}

func (m *Fuchsia) GetTest() *Fuchsia_Test {
	if m != nil {
		return m.Test
	}
	return nil
}

func (m *Fuchsia) GetGcsBucket() string {
	if m != nil {
		return m.GcsBucket
	}
	return ""
}

// Describes how to fetch the Fuchsia build inputs.
type Fuchsia_Checkout struct {
	// Jiri <package> atttribute values indicating additional packages to fetch
	// from the input manifest. By default, packages with attribute tags are
	// skipped unless one or more of the attribute values are specified here.
	Attributes []string `protobuf:"bytes,1,rep,name=attributes,proto3" json:"attributes,omitempty"`
	// Whether to checkout from a Jiri snapshot.
	UseSnapshot bool `protobuf:"varint,2,opt,name=use_snapshot,json=useSnapshot,proto3" json:"use_snapshot,omitempty"`
	// The name of the manifest to import from the integration repository.
	Manifest string `protobuf:"bytes,4,opt,name=manifest,proto3" json:"manifest,omitempty"`
	// Jiri remote manifest project,
	//
	// TODO(IN-1102): This should always be "integration" and is redundant
	// because we can select the proper integration repo using the build input.
	// Delete this in favor of a hard-coded constant since this value will only
	// ever change if we completely restructure our CI/CD model or rename the
	// integration repo, and thus this recipe.
	Project string `protobuf:"bytes,6,opt,name=project,proto3" json:"project,omitempty"`
	// The remote integration manifest repository.
	Remote string `protobuf:"bytes,7,opt,name=remote,proto3" json:"remote,omitempty"`
	// Whether or not checkout is a release version.
	IsReleaseVersion     bool     `protobuf:"varint,8,opt,name=is_release_version,json=isReleaseVersion,proto3" json:"is_release_version,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Fuchsia_Checkout) Reset()         { *m = Fuchsia_Checkout{} }
func (m *Fuchsia_Checkout) String() string { return proto.CompactTextString(m) }
func (*Fuchsia_Checkout) ProtoMessage()    {}
func (*Fuchsia_Checkout) Descriptor() ([]byte, []int) {
	return fileDescriptor_fuchsia_8a0d81e7dfdadf36, []int{0, 0}
}
func (m *Fuchsia_Checkout) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Fuchsia_Checkout.Unmarshal(m, b)
}
func (m *Fuchsia_Checkout) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Fuchsia_Checkout.Marshal(b, m, deterministic)
}
func (dst *Fuchsia_Checkout) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Fuchsia_Checkout.Merge(dst, src)
}
func (m *Fuchsia_Checkout) XXX_Size() int {
	return xxx_messageInfo_Fuchsia_Checkout.Size(m)
}
func (m *Fuchsia_Checkout) XXX_DiscardUnknown() {
	xxx_messageInfo_Fuchsia_Checkout.DiscardUnknown(m)
}

var xxx_messageInfo_Fuchsia_Checkout proto.InternalMessageInfo

func (m *Fuchsia_Checkout) GetAttributes() []string {
	if m != nil {
		return m.Attributes
	}
	return nil
}

func (m *Fuchsia_Checkout) GetUseSnapshot() bool {
	if m != nil {
		return m.UseSnapshot
	}
	return false
}

func (m *Fuchsia_Checkout) GetManifest() string {
	if m != nil {
		return m.Manifest
	}
	return ""
}

func (m *Fuchsia_Checkout) GetProject() string {
	if m != nil {
		return m.Project
	}
	return ""
}

func (m *Fuchsia_Checkout) GetRemote() string {
	if m != nil {
		return m.Remote
	}
	return ""
}

func (m *Fuchsia_Checkout) GetIsReleaseVersion() bool {
	if m != nil {
		return m.IsReleaseVersion
	}
	return false
}

// Describes how to build Fuchsia.
type Fuchsia_Build struct {
	// The build type
	BuildType string `protobuf:"bytes,1,opt,name=build_type,json=buildType,proto3" json:"build_type,omitempty"`
	// Board to build
	Board string `protobuf:"bytes,2,opt,name=board,proto3" json:"board,omitempty"`
	// GCS bucket for uploading debug symbols.
	DebugSymbolBucket string `protobuf:"bytes,3,opt,name=debug_symbol_bucket,json=debugSymbolBucket,proto3" json:"debug_symbol_bucket,omitempty"`
	// Tags of environments on which the testsharder will key
	EnvironmentTags []string `protobuf:"bytes,4,rep,name=environment_tags,json=environmentTags,proto3" json:"environment_tags,omitempty"`
	// Whether to exclude images during the build.
	ExcludeImages bool `protobuf:"varint,5,opt,name=exclude_images,json=excludeImages,proto3" json:"exclude_images,omitempty"`
	// Extra args to pass to GN.
	GnArgs []string `protobuf:"bytes,6,rep,name=gn_args,json=gnArgs,proto3" json:"gn_args,omitempty"`
	// Whether to generate and upload breakpad symbols as part of this build.
	IncludeBreakpadSymbols bool `protobuf:"varint,7,opt,name=include_breakpad_symbols,json=includeBreakpadSymbols,proto3" json:"include_breakpad_symbols,omitempty"`
	// Whether to build and upload an archive of debug binaries.
	IncludeSymbolArchive bool `protobuf:"varint,8,opt,name=include_symbol_archive,json=includeSymbolArchive,proto3" json:"include_symbol_archive,omitempty"`
	// Extra targets to pass to Ninja.
	NinjaTargets []string `protobuf:"bytes,9,rep,name=ninja_targets,json=ninjaTargets,proto3" json:"ninja_targets,omitempty"`
	// A list of Fuchsia packages to build.
	Packages []string `protobuf:"bytes,10,rep,name=packages,proto3" json:"packages,omitempty"`
	// The product to build.
	Product string `protobuf:"bytes,11,opt,name=product,proto3" json:"product,omitempty"`
	// Whether to run any tests.
	RunTests bool `protobuf:"varint,12,opt,name=run_tests,json=runTests,proto3" json:"run_tests,omitempty"`
	// The target architecture. One of x64 or arm64.
	Target string `protobuf:"bytes,13,opt,name=target,proto3" json:"target,omitempty"`
	// Packages to build and add to the universe set
	UniversePackages []string `protobuf:"bytes,14,rep,name=universe_packages,json=universePackages,proto3" json:"universe_packages,omitempty"`
	// --variant arguments to GN in `select_variant`
	Variants []string `protobuf:"bytes,15,rep,name=variants,proto3" json:"variants,omitempty"`
	// Additional args to pass to zircon build using standard FOO=bar syntax.
	ZirconArgs           []string `protobuf:"bytes,16,rep,name=zircon_args,json=zirconArgs,proto3" json:"zircon_args,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Fuchsia_Build) Reset()         { *m = Fuchsia_Build{} }
func (m *Fuchsia_Build) String() string { return proto.CompactTextString(m) }
func (*Fuchsia_Build) ProtoMessage()    {}
func (*Fuchsia_Build) Descriptor() ([]byte, []int) {
	return fileDescriptor_fuchsia_8a0d81e7dfdadf36, []int{0, 1}
}
func (m *Fuchsia_Build) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Fuchsia_Build.Unmarshal(m, b)
}
func (m *Fuchsia_Build) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Fuchsia_Build.Marshal(b, m, deterministic)
}
func (dst *Fuchsia_Build) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Fuchsia_Build.Merge(dst, src)
}
func (m *Fuchsia_Build) XXX_Size() int {
	return xxx_messageInfo_Fuchsia_Build.Size(m)
}
func (m *Fuchsia_Build) XXX_DiscardUnknown() {
	xxx_messageInfo_Fuchsia_Build.DiscardUnknown(m)
}

var xxx_messageInfo_Fuchsia_Build proto.InternalMessageInfo

func (m *Fuchsia_Build) GetBuildType() string {
	if m != nil {
		return m.BuildType
	}
	return ""
}

func (m *Fuchsia_Build) GetBoard() string {
	if m != nil {
		return m.Board
	}
	return ""
}

func (m *Fuchsia_Build) GetDebugSymbolBucket() string {
	if m != nil {
		return m.DebugSymbolBucket
	}
	return ""
}

func (m *Fuchsia_Build) GetEnvironmentTags() []string {
	if m != nil {
		return m.EnvironmentTags
	}
	return nil
}

func (m *Fuchsia_Build) GetExcludeImages() bool {
	if m != nil {
		return m.ExcludeImages
	}
	return false
}

func (m *Fuchsia_Build) GetGnArgs() []string {
	if m != nil {
		return m.GnArgs
	}
	return nil
}

func (m *Fuchsia_Build) GetIncludeBreakpadSymbols() bool {
	if m != nil {
		return m.IncludeBreakpadSymbols
	}
	return false
}

func (m *Fuchsia_Build) GetIncludeSymbolArchive() bool {
	if m != nil {
		return m.IncludeSymbolArchive
	}
	return false
}

func (m *Fuchsia_Build) GetNinjaTargets() []string {
	if m != nil {
		return m.NinjaTargets
	}
	return nil
}

func (m *Fuchsia_Build) GetPackages() []string {
	if m != nil {
		return m.Packages
	}
	return nil
}

func (m *Fuchsia_Build) GetProduct() string {
	if m != nil {
		return m.Product
	}
	return ""
}

func (m *Fuchsia_Build) GetRunTests() bool {
	if m != nil {
		return m.RunTests
	}
	return false
}

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

func (m *Fuchsia_Build) GetUniversePackages() []string {
	if m != nil {
		return m.UniversePackages
	}
	return nil
}

func (m *Fuchsia_Build) GetVariants() []string {
	if m != nil {
		return m.Variants
	}
	return nil
}

func (m *Fuchsia_Build) GetZirconArgs() []string {
	if m != nil {
		return m.ZirconArgs
	}
	return nil
}

// Describes how to test Fuchsia.
type Fuchsia_Test struct {
	// The type of device to execute tests on, if the value is
	// ot QEMU it will be passed to Swarming as the device_type
	// dimension.
	DeviceType string `protobuf:"bytes,1,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"`
	// Whether to pave images the device for testing. (Ignored if
	// device_type == QEMU)
	Pave bool `protobuf:"varint,2,opt,name=pave,proto3" json:"pave,omitempty"`
	// Swarming pool from which a test task will be drawn
	Pool string `protobuf:"bytes,3,opt,name=pool,proto3" json:"pool,omitempty"`
	// Shell-quoted string to add to the runtests commandline
	RuntestsArgs string `protobuf:"bytes,4,opt,name=runtests_args,json=runtestsArgs,proto3" json:"runtests_args,omitempty"`
	// Whether any plaintext needs to be supplied to the tests
	RequiresSecrets bool `protobuf:"varint,5,opt,name=requires_secrets,json=requiresSecrets,proto3" json:"requires_secrets,omitempty"`
	// How long to wait for Swarming to find a bot on which to test
	SwarmingExpirationTimeoutSecs int32 `protobuf:"varint,6,opt,name=swarming_expiration_timeout_secs,json=swarmingExpirationTimeoutSecs,proto3" json:"swarming_expiration_timeout_secs,omitempty"`
	// How long to wait (in seconds) before killing the test
	// swarming task if there\'s no output being produced
	SwarmingIoTimeoutSecs int32 `protobuf:"varint,7,opt,name=swarming_io_timeout_secs,json=swarmingIoTimeoutSecs,proto3" json:"swarming_io_timeout_secs,omitempty"`
	// Whether to run tests as shards.
	TestInShards bool `protobuf:"varint,8,opt,name=test_in_shards,json=testInShards,proto3" json:"test_in_shards,omitempty"`
	// How long to wait until timing out on tests.
	TimeoutSecs          int32    `protobuf:"varint,9,opt,name=timeout_secs,json=timeoutSecs,proto3" json:"timeout_secs,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Fuchsia_Test) Reset()         { *m = Fuchsia_Test{} }
func (m *Fuchsia_Test) String() string { return proto.CompactTextString(m) }
func (*Fuchsia_Test) ProtoMessage()    {}
func (*Fuchsia_Test) Descriptor() ([]byte, []int) {
	return fileDescriptor_fuchsia_8a0d81e7dfdadf36, []int{0, 2}
}
func (m *Fuchsia_Test) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Fuchsia_Test.Unmarshal(m, b)
}
func (m *Fuchsia_Test) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Fuchsia_Test.Marshal(b, m, deterministic)
}
func (dst *Fuchsia_Test) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Fuchsia_Test.Merge(dst, src)
}
func (m *Fuchsia_Test) XXX_Size() int {
	return xxx_messageInfo_Fuchsia_Test.Size(m)
}
func (m *Fuchsia_Test) XXX_DiscardUnknown() {
	xxx_messageInfo_Fuchsia_Test.DiscardUnknown(m)
}

var xxx_messageInfo_Fuchsia_Test proto.InternalMessageInfo

func (m *Fuchsia_Test) GetDeviceType() string {
	if m != nil {
		return m.DeviceType
	}
	return ""
}

func (m *Fuchsia_Test) GetPave() bool {
	if m != nil {
		return m.Pave
	}
	return false
}

func (m *Fuchsia_Test) GetPool() string {
	if m != nil {
		return m.Pool
	}
	return ""
}

func (m *Fuchsia_Test) GetRuntestsArgs() string {
	if m != nil {
		return m.RuntestsArgs
	}
	return ""
}

func (m *Fuchsia_Test) GetRequiresSecrets() bool {
	if m != nil {
		return m.RequiresSecrets
	}
	return false
}

func (m *Fuchsia_Test) GetSwarmingExpirationTimeoutSecs() int32 {
	if m != nil {
		return m.SwarmingExpirationTimeoutSecs
	}
	return 0
}

func (m *Fuchsia_Test) GetSwarmingIoTimeoutSecs() int32 {
	if m != nil {
		return m.SwarmingIoTimeoutSecs
	}
	return 0
}

func (m *Fuchsia_Test) GetTestInShards() bool {
	if m != nil {
		return m.TestInShards
	}
	return false
}

func (m *Fuchsia_Test) GetTimeoutSecs() int32 {
	if m != nil {
		return m.TimeoutSecs
	}
	return 0
}

func init() {
	proto.RegisterType((*Fuchsia)(nil), "recipe_modules.infra.fuchsia.Fuchsia")
	proto.RegisterType((*Fuchsia_Checkout)(nil), "recipe_modules.infra.fuchsia.Fuchsia.Checkout")
	proto.RegisterType((*Fuchsia_Build)(nil), "recipe_modules.infra.fuchsia.Fuchsia.Build")
	proto.RegisterType((*Fuchsia_Test)(nil), "recipe_modules.infra.fuchsia.Fuchsia.Test")
}

func init() { proto.RegisterFile("recipes/fuchsia.proto", fileDescriptor_fuchsia_8a0d81e7dfdadf36) }

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