// Code generated by protoc-gen-go. // source: golang.conradwood.net/apis/goeasyops/goeasyops.proto // DO NOT EDIT! /* Package goeasyops is a generated protocol buffer package. It is generated from these files: golang.conradwood.net/apis/goeasyops/goeasyops.proto It has these top-level messages: InContext ImmutableContext MutableContext ServiceTrace Experiment CTXRoutingTags GRPCErrorList Config GRPCError PostgresConfig StopUpdate */ package goeasyops import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import auth "golang.conradwood.net/apis/auth" import _ "golang.conradwood.net/apis/common" import session "golang.yacloud.eu/apis/session" // 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 // this is transported within the Context of a call. This proto is on-purpose very brief and static so that old versions of go-easyops can handle it type InContext struct { ImCtx *ImmutableContext `protobuf:"bytes,1,opt,name=ImCtx" json:"ImCtx,omitempty"` MCtx *MutableContext `protobuf:"bytes,2,opt,name=MCtx" json:"MCtx,omitempty"` } func (m *InContext) Reset() { *m = InContext{} } func (m *InContext) String() string { return proto.CompactTextString(m) } func (*InContext) ProtoMessage() {} func (*InContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } func (m *InContext) GetImCtx() *ImmutableContext { if m != nil { return m.ImCtx } return nil } func (m *InContext) GetMCtx() *MutableContext { if m != nil { return m.MCtx } return nil } // this must not be changed throughout its lifetime. furthermore, go-easyops _must_ transport this as-is (preserving unknown fields) type ImmutableContext struct { RequestID string `protobuf:"bytes,1,opt,name=RequestID" json:"RequestID,omitempty"` CreatorService *auth.SignedUser `protobuf:"bytes,2,opt,name=CreatorService" json:"CreatorService,omitempty"` User *auth.SignedUser `protobuf:"bytes,3,opt,name=User" json:"User,omitempty"` SudoUser *auth.SignedUser `protobuf:"bytes,4,opt,name=SudoUser" json:"SudoUser,omitempty"` Session *session.Session `protobuf:"bytes,5,opt,name=Session" json:"Session,omitempty"` AuthTags []string `protobuf:"bytes,6,rep,name=AuthTags" json:"AuthTags,omitempty"` } func (m *ImmutableContext) Reset() { *m = ImmutableContext{} } func (m *ImmutableContext) String() string { return proto.CompactTextString(m) } func (*ImmutableContext) ProtoMessage() {} func (*ImmutableContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (m *ImmutableContext) GetRequestID() string { if m != nil { return m.RequestID } return "" } func (m *ImmutableContext) GetCreatorService() *auth.SignedUser { if m != nil { return m.CreatorService } return nil } func (m *ImmutableContext) GetUser() *auth.SignedUser { if m != nil { return m.User } return nil } func (m *ImmutableContext) GetSudoUser() *auth.SignedUser { if m != nil { return m.SudoUser } return nil } func (m *ImmutableContext) GetSession() *session.Session { if m != nil { return m.Session } return nil } func (m *ImmutableContext) GetAuthTags() []string { if m != nil { return m.AuthTags } return nil } // this may change. fields are not guaranteed to be preserved type MutableContext struct { CallingService *auth.SignedUser `protobuf:"bytes,1,opt,name=CallingService" json:"CallingService,omitempty"` Debug bool `protobuf:"varint,2,opt,name=Debug" json:"Debug,omitempty"` Trace bool `protobuf:"varint,3,opt,name=Trace" json:"Trace,omitempty"` Tags *CTXRoutingTags `protobuf:"bytes,4,opt,name=Tags" json:"Tags,omitempty"` ServiceIDs []string `protobuf:"bytes,5,rep,name=ServiceIDs" json:"ServiceIDs,omitempty"` Experiments []*Experiment `protobuf:"bytes,6,rep,name=Experiments" json:"Experiments,omitempty"` Services []*ServiceTrace `protobuf:"bytes,7,rep,name=Services" json:"Services,omitempty"` } func (m *MutableContext) Reset() { *m = MutableContext{} } func (m *MutableContext) String() string { return proto.CompactTextString(m) } func (*MutableContext) ProtoMessage() {} func (*MutableContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *MutableContext) GetCallingService() *auth.SignedUser { if m != nil { return m.CallingService } return nil } func (m *MutableContext) GetDebug() bool { if m != nil { return m.Debug } return false } func (m *MutableContext) GetTrace() bool { if m != nil { return m.Trace } return false } func (m *MutableContext) GetTags() *CTXRoutingTags { if m != nil { return m.Tags } return nil } func (m *MutableContext) GetServiceIDs() []string { if m != nil { return m.ServiceIDs } return nil } func (m *MutableContext) GetExperiments() []*Experiment { if m != nil { return m.Experiments } return nil } func (m *MutableContext) GetServices() []*ServiceTrace { if m != nil { return m.Services } return nil } // each service that receives an RPC adds itself to the servicetrace, potentially with a stacktrace or so type ServiceTrace struct { ID string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` } func (m *ServiceTrace) Reset() { *m = ServiceTrace{} } func (m *ServiceTrace) String() string { return proto.CompactTextString(m) } func (*ServiceTrace) ProtoMessage() {} func (*ServiceTrace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } func (m *ServiceTrace) GetID() string { if m != nil { return m.ID } return "" } type Experiment struct { Name string `protobuf:"bytes,1,opt,name=Name" json:"Name,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=Enabled" json:"Enabled,omitempty"` } func (m *Experiment) Reset() { *m = Experiment{} } func (m *Experiment) String() string { return proto.CompactTextString(m) } func (*Experiment) ProtoMessage() {} func (*Experiment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *Experiment) GetName() string { if m != nil { return m.Name } return "" } func (m *Experiment) GetEnabled() bool { if m != nil { return m.Enabled } return false } // // Routing tags are part of a context. Rules to match tags when looking for a suitable target service instance are as follows: // // If FallbackToPlain == false then: // // - if context has no tags - use any instance // // - if context has tags - only use instance that matches exactly (with all tags) // // If FallbackToPlain == true then: // // - if context has no tags - use any instance // // - if context has tags - if at least one instance matches exactly (with all tags), use only that. if none matches, but at least one instance has no tags, use that. // // Propagate: If it is true, the routing tags are kept as-is, otherwise the first target service will strip routing tags out // type CTXRoutingTags struct { Tags map[string]string `protobuf:"bytes,1,rep,name=Tags" json:"Tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` FallbackToPlain bool `protobuf:"varint,2,opt,name=FallbackToPlain" json:"FallbackToPlain,omitempty"` Propagate bool `protobuf:"varint,3,opt,name=Propagate" json:"Propagate,omitempty"` } func (m *CTXRoutingTags) Reset() { *m = CTXRoutingTags{} } func (m *CTXRoutingTags) String() string { return proto.CompactTextString(m) } func (*CTXRoutingTags) ProtoMessage() {} func (*CTXRoutingTags) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *CTXRoutingTags) GetTags() map[string]string { if m != nil { return m.Tags } return nil } func (m *CTXRoutingTags) GetFallbackToPlain() bool { if m != nil { return m.FallbackToPlain } return false } func (m *CTXRoutingTags) GetPropagate() bool { if m != nil { return m.Propagate } return false } // a single error can only hold a single proto type GRPCErrorList struct { Errors []*GRPCError `protobuf:"bytes,1,rep,name=Errors" json:"Errors,omitempty"` } func (m *GRPCErrorList) Reset() { *m = GRPCErrorList{} } func (m *GRPCErrorList) String() string { return proto.CompactTextString(m) } func (*GRPCErrorList) ProtoMessage() {} func (*GRPCErrorList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *GRPCErrorList) GetErrors() []*GRPCError { if m != nil { return m.Errors } return nil } // parsed on boot type Config struct { Registry string `protobuf:"bytes,1,opt,name=Registry" json:"Registry,omitempty"` } func (m *Config) Reset() { *m = Config{} } func (m *Config) String() string { return proto.CompactTextString(m) } func (*Config) ProtoMessage() {} func (*Config) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *Config) GetRegistry() string { if m != nil { return m.Registry } return "" } type GRPCError struct { UserMessage string `protobuf:"bytes,1,opt,name=UserMessage" json:"UserMessage,omitempty"` LogMessage string `protobuf:"bytes,2,opt,name=LogMessage" json:"LogMessage,omitempty"` MethodName string `protobuf:"bytes,3,opt,name=MethodName" json:"MethodName,omitempty"` ServiceName string `protobuf:"bytes,4,opt,name=ServiceName" json:"ServiceName,omitempty"` CallingServiceID string `protobuf:"bytes,5,opt,name=CallingServiceID" json:"CallingServiceID,omitempty"` CallingServiceEmail string `protobuf:"bytes,6,opt,name=CallingServiceEmail" json:"CallingServiceEmail,omitempty"` } func (m *GRPCError) Reset() { *m = GRPCError{} } func (m *GRPCError) String() string { return proto.CompactTextString(m) } func (*GRPCError) ProtoMessage() {} func (*GRPCError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *GRPCError) GetUserMessage() string { if m != nil { return m.UserMessage } return "" } func (m *GRPCError) GetLogMessage() string { if m != nil { return m.LogMessage } return "" } func (m *GRPCError) GetMethodName() string { if m != nil { return m.MethodName } return "" } func (m *GRPCError) GetServiceName() string { if m != nil { return m.ServiceName } return "" } func (m *GRPCError) GetCallingServiceID() string { if m != nil { return m.CallingServiceID } return "" } func (m *GRPCError) GetCallingServiceEmail() string { if m != nil { return m.CallingServiceEmail } return "" } // a postgres configuration type PostgresConfig struct { Host string `protobuf:"bytes,1,opt,name=Host" json:"Host,omitempty"` DB string `protobuf:"bytes,2,opt,name=DB" json:"DB,omitempty"` User string `protobuf:"bytes,3,opt,name=User" json:"User,omitempty"` PW string `protobuf:"bytes,4,opt,name=PW" json:"PW,omitempty"` MaxConnections uint32 `protobuf:"varint,5,opt,name=MaxConnections" json:"MaxConnections,omitempty"` MaxIdleSecs uint32 `protobuf:"varint,6,opt,name=MaxIdleSecs" json:"MaxIdleSecs,omitempty"` } func (m *PostgresConfig) Reset() { *m = PostgresConfig{} } func (m *PostgresConfig) String() string { return proto.CompactTextString(m) } func (*PostgresConfig) ProtoMessage() {} func (*PostgresConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *PostgresConfig) GetHost() string { if m != nil { return m.Host } return "" } func (m *PostgresConfig) GetDB() string { if m != nil { return m.DB } return "" } func (m *PostgresConfig) GetUser() string { if m != nil { return m.User } return "" } func (m *PostgresConfig) GetPW() string { if m != nil { return m.PW } return "" } func (m *PostgresConfig) GetMaxConnections() uint32 { if m != nil { return m.MaxConnections } return 0 } func (m *PostgresConfig) GetMaxIdleSecs() uint32 { if m != nil { return m.MaxIdleSecs } return 0 } // send in response to unixipc STOPREQUEST type StopUpdate struct { Stopping bool `protobuf:"varint,1,opt,name=Stopping" json:"Stopping,omitempty"` ActiveRPCs uint32 `protobuf:"varint,2,opt,name=ActiveRPCs" json:"ActiveRPCs,omitempty"` } func (m *StopUpdate) Reset() { *m = StopUpdate{} } func (m *StopUpdate) String() string { return proto.CompactTextString(m) } func (*StopUpdate) ProtoMessage() {} func (*StopUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *StopUpdate) GetStopping() bool { if m != nil { return m.Stopping } return false } func (m *StopUpdate) GetActiveRPCs() uint32 { if m != nil { return m.ActiveRPCs } return 0 } func init() { proto.RegisterType((*InContext)(nil), "goeasyops.InContext") proto.RegisterType((*ImmutableContext)(nil), "goeasyops.ImmutableContext") proto.RegisterType((*MutableContext)(nil), "goeasyops.MutableContext") proto.RegisterType((*ServiceTrace)(nil), "goeasyops.ServiceTrace") proto.RegisterType((*Experiment)(nil), "goeasyops.Experiment") proto.RegisterType((*CTXRoutingTags)(nil), "goeasyops.CTXRoutingTags") proto.RegisterType((*GRPCErrorList)(nil), "goeasyops.GRPCErrorList") proto.RegisterType((*Config)(nil), "goeasyops.Config") proto.RegisterType((*GRPCError)(nil), "goeasyops.GRPCError") proto.RegisterType((*PostgresConfig)(nil), "goeasyops.PostgresConfig") proto.RegisterType((*StopUpdate)(nil), "goeasyops.StopUpdate") } func init() { proto.RegisterFile("golang.conradwood.net/apis/goeasyops/goeasyops.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 825 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x55, 0xe1, 0x8e, 0xdb, 0x44, 0x10, 0x96, 0x7d, 0xb9, 0x5c, 0x3c, 0xc7, 0x85, 0x68, 0x29, 0xc2, 0x04, 0x54, 0x4e, 0xe6, 0x84, 0x4e, 0xa7, 0xc3, 0x85, 0x16, 0xe9, 0xaa, 0x4a, 0xfc, 0xe8, 0x39, 0xa1, 0xb5, 0xd4, 0xa0, 0x68, 0x93, 0xaa, 0x88, 0x7f, 0x1b, 0x7b, 0xf1, 0x59, 0xb5, 0x77, 0x8d, 0x77, 0x7d, 0x24, 0x2f, 0xc0, 0x83, 0xf0, 0x0a, 0xbc, 0x05, 0xef, 0xc2, 0x3b, 0xa0, 0x5d, 0xaf, 0x1d, 0x27, 0x6d, 0x2a, 0xfe, 0x24, 0x3b, 0xdf, 0x7c, 0xb3, 0x33, 0xf3, 0xcd, 0xd8, 0x86, 0x1f, 0x12, 0x9e, 0x11, 0x96, 0xf8, 0x11, 0x67, 0x25, 0x89, 0xff, 0xe0, 0x3c, 0xf6, 0x19, 0x95, 0x8f, 0x48, 0x91, 0x8a, 0x47, 0x09, 0xa7, 0x44, 0x6c, 0x78, 0xd1, 0x39, 0xf9, 0x45, 0xc9, 0x25, 0x47, 0x4e, 0x0b, 0x8c, 0xaf, 0x3e, 0x70, 0x01, 0xa9, 0xe4, 0x9d, 0xfe, 0xa9, 0xc3, 0xc6, 0xfe, 0x07, 0xb8, 0x11, 0xcf, 0x73, 0xce, 0xcc, 0x9f, 0xe1, 0x5f, 0x1b, 0xfe, 0x86, 0x44, 0x19, 0xaf, 0x62, 0x9f, 0x56, 0x35, 0x57, 0x50, 0x21, 0x52, 0xce, 0x9a, 0xff, 0x9a, 0xed, 0xe5, 0xe0, 0x84, 0x2c, 0xe0, 0x4c, 0xd2, 0xb5, 0x44, 0xdf, 0xc3, 0x71, 0x98, 0x07, 0x72, 0xed, 0x5a, 0xe7, 0xd6, 0xe5, 0xe9, 0xe3, 0x2f, 0xfc, 0x6d, 0x0b, 0x61, 0x9e, 0x57, 0x92, 0xac, 0x32, 0x6a, 0xb8, 0xb8, 0x66, 0xa2, 0x6f, 0xa1, 0x37, 0x53, 0x11, 0xb6, 0x8e, 0xf8, 0xbc, 0x13, 0x31, 0xdb, 0xe5, 0x6b, 0x9a, 0xf7, 0xa7, 0x0d, 0xa3, 0xfd, 0xab, 0xd0, 0x97, 0xe0, 0x60, 0xfa, 0x7b, 0x45, 0x85, 0x0c, 0x27, 0x3a, 0xb5, 0x83, 0xb7, 0x00, 0x7a, 0x0a, 0xc3, 0xa0, 0xa4, 0x44, 0xf2, 0x72, 0x41, 0xcb, 0xfb, 0x34, 0xa2, 0x26, 0xd7, 0xc8, 0xd7, 0x22, 0x2d, 0xd2, 0x84, 0xd1, 0xf8, 0xb5, 0xa0, 0x25, 0xde, 0xe3, 0xa1, 0x0b, 0xe8, 0x29, 0xdc, 0x3d, 0x3a, 0xc0, 0xd7, 0x5e, 0x74, 0x0d, 0x83, 0x45, 0x15, 0x73, 0xcd, 0xec, 0x1d, 0x60, 0xb6, 0x0c, 0x74, 0x05, 0x27, 0x8b, 0x5a, 0x40, 0xf7, 0xd8, 0x90, 0x1b, 0x41, 0x0d, 0x8e, 0x1b, 0x02, 0x1a, 0xc3, 0xe0, 0x79, 0x25, 0xef, 0x96, 0x24, 0x11, 0x6e, 0xff, 0xfc, 0xe8, 0xd2, 0xc1, 0xad, 0xed, 0xfd, 0x6d, 0xc3, 0x70, 0x57, 0x21, 0xdd, 0x28, 0xc9, 0xb2, 0x94, 0x25, 0x4d, 0xa3, 0xd6, 0xc1, 0x46, 0x77, 0x78, 0xe8, 0x01, 0x1c, 0x4f, 0xe8, 0xaa, 0x4a, 0xb4, 0x32, 0x03, 0x5c, 0x1b, 0x0a, 0x5d, 0x96, 0x24, 0xa2, 0xba, 0xff, 0x01, 0xae, 0x0d, 0x35, 0x30, 0x5d, 0x50, 0xef, 0x9d, 0x81, 0x05, 0xcb, 0x5f, 0x30, 0xaf, 0x64, 0xca, 0x12, 0x45, 0xc0, 0x9a, 0x86, 0x1e, 0x02, 0x98, 0x2c, 0xe1, 0x44, 0xb8, 0xc7, 0xba, 0x8b, 0x0e, 0x82, 0x6e, 0xe0, 0x74, 0xba, 0x2e, 0x68, 0x99, 0xe6, 0x94, 0xc9, 0xba, 0xcd, 0xd3, 0xc7, 0x9f, 0x76, 0x6e, 0xdd, 0x7a, 0x71, 0x97, 0x89, 0x9e, 0xc0, 0xc0, 0x5c, 0x23, 0xdc, 0x13, 0x1d, 0xf5, 0x59, 0x27, 0xca, 0xb8, 0x74, 0xc9, 0xb8, 0x25, 0x7a, 0x0f, 0xe1, 0xa3, 0xae, 0x07, 0x0d, 0xc1, 0x6e, 0x57, 0xc6, 0x0e, 0x27, 0xde, 0x33, 0x80, 0x6d, 0x0e, 0x84, 0xa0, 0xf7, 0x33, 0xc9, 0xa9, 0xf1, 0xeb, 0x33, 0x72, 0xe1, 0x64, 0xca, 0x94, 0xea, 0xb1, 0x11, 0xab, 0x31, 0xbd, 0x7f, 0x2c, 0x18, 0xee, 0x4a, 0x80, 0x6e, 0x8c, 0x56, 0x96, 0xae, 0xef, 0xeb, 0x83, 0x5a, 0xf9, 0xea, 0x67, 0xca, 0x64, 0xb9, 0x31, 0xaa, 0x5d, 0xc2, 0xc7, 0x3f, 0x91, 0x2c, 0x5b, 0x91, 0xe8, 0xed, 0x92, 0xcf, 0x33, 0x92, 0x32, 0x93, 0x6d, 0x1f, 0x56, 0xbb, 0x3f, 0x2f, 0x79, 0x41, 0x12, 0x22, 0x9b, 0x41, 0x6d, 0x81, 0xf1, 0x0d, 0x38, 0xed, 0xd5, 0x68, 0x04, 0x47, 0x6f, 0xe9, 0xc6, 0x74, 0xa3, 0x8e, 0x6a, 0xc2, 0xf7, 0x24, 0xab, 0xea, 0x27, 0xc2, 0xc1, 0xb5, 0xf1, 0xcc, 0x7e, 0x6a, 0x79, 0x3f, 0xc2, 0xd9, 0x0b, 0x3c, 0x0f, 0xa6, 0x65, 0xc9, 0xcb, 0x57, 0xa9, 0x90, 0xe8, 0x1a, 0xfa, 0xda, 0x68, 0x9a, 0x79, 0xd0, 0x69, 0xa6, 0x65, 0x62, 0xc3, 0xf1, 0x2e, 0xa0, 0x1f, 0x70, 0xf6, 0x5b, 0x9a, 0xa8, 0x1d, 0xc6, 0x34, 0x49, 0x85, 0x2c, 0x9b, 0xcc, 0xad, 0xed, 0xfd, 0x6b, 0x81, 0xd3, 0xc6, 0xa2, 0x73, 0x38, 0x55, 0xcb, 0x39, 0xa3, 0x42, 0x90, 0xa4, 0x11, 0xbd, 0x0b, 0xa9, 0x5d, 0x7a, 0xc5, 0x93, 0x86, 0x50, 0xd7, 0xdc, 0x41, 0x94, 0x7f, 0x46, 0xe5, 0x1d, 0x8f, 0xf5, 0xd4, 0x8e, 0x6a, 0xff, 0x16, 0x51, 0x19, 0xcc, 0xf4, 0x35, 0xa1, 0x57, 0x67, 0xe8, 0x40, 0xe8, 0x0a, 0x46, 0xbb, 0x8f, 0x46, 0x38, 0xd1, 0x8f, 0xa9, 0x83, 0xdf, 0xc1, 0xd1, 0x77, 0xf0, 0xc9, 0x2e, 0x36, 0xcd, 0x49, 0x9a, 0xb9, 0x7d, 0x4d, 0x7f, 0x9f, 0xcb, 0xfb, 0xcb, 0x82, 0xe1, 0x9c, 0x0b, 0x99, 0x94, 0x54, 0x18, 0x79, 0x10, 0xf4, 0x5e, 0x72, 0x21, 0x9b, 0x15, 0x53, 0x67, 0xb5, 0x94, 0x93, 0x5b, 0xd3, 0x9e, 0x3d, 0xb9, 0x55, 0x9c, 0xf6, 0x35, 0xe4, 0x98, 0x97, 0xce, 0x10, 0xec, 0xf9, 0x1b, 0xd3, 0x81, 0x3d, 0x7f, 0x83, 0xbe, 0x81, 0xe1, 0x8c, 0xac, 0x03, 0xce, 0x18, 0x8d, 0x64, 0xca, 0x99, 0xd0, 0x65, 0x9f, 0xe1, 0x3d, 0x54, 0x49, 0x30, 0x23, 0xeb, 0x30, 0xce, 0xe8, 0x82, 0x46, 0x42, 0x17, 0x7b, 0x86, 0xbb, 0x90, 0xf7, 0x12, 0x60, 0x21, 0x79, 0xf1, 0xba, 0x88, 0x89, 0xa4, 0x6a, 0x7c, 0xca, 0x2a, 0x52, 0x96, 0xe8, 0x1a, 0x07, 0xb8, 0xb5, 0x95, 0xdc, 0xcf, 0x23, 0x99, 0xde, 0x53, 0x3c, 0x0f, 0x84, 0xae, 0xf7, 0x0c, 0x77, 0x90, 0xdb, 0x17, 0xf0, 0xd5, 0x7b, 0x3f, 0x3d, 0xdb, 0xcd, 0xf9, 0xf5, 0xe2, 0xff, 0x7c, 0x08, 0x57, 0x7d, 0xfd, 0xa9, 0x79, 0xf2, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xcf, 0x3e, 0xd2, 0x37, 0x07, 0x00, 0x00, }