Minor QA changes

1) Add ability to enable all pairs using the new pair manager
2) Add abiity to enable/disable database subsystem via gRPC
3) Fix spelling mistakes
This commit is contained in:
Adrian Gallagher
2019-10-04 19:31:04 +10:00
parent 62a528a064
commit 2a13551dd1
12 changed files with 1760 additions and 239 deletions

View File

@@ -200,7 +200,13 @@ func LoadExchange(name string, useWG bool, wg *sync.WaitGroup) error {
}
if Bot.Settings.EnableAllPairs {
exchCfg.EnabledPairs = exchCfg.AvailablePairs
if exchCfg.CurrencyPairs != nil {
assets := exchCfg.CurrencyPairs.GetAssetTypes()
for x := range assets {
pairs := exchCfg.CurrencyPairs.GetPairs(assets[x], false)
exchCfg.CurrencyPairs.StorePairs(assets[x], pairs, true)
}
}
}
if Bot.Settings.EnableExchangeVerbose {

View File

@@ -38,6 +38,7 @@ func GetSubsystemsStatus() map[string]bool {
systems["orders"] = Bot.OrderManager.Started()
systems["portfolio"] = Bot.PortfolioManager.Started()
systems["ntp_timekeeper"] = Bot.NTPManager.Started()
systems["database"] = Bot.DatabaseManager.Started()
systems["exchange_syncer"] = Bot.Settings.EnableExchangeSyncManager
systems["grpc"] = Bot.Settings.EnableGRPC
systems["grpc_proxy"] = Bot.Settings.EnableGRPCProxy
@@ -103,6 +104,11 @@ func SetSubsystem(subsys string, enable bool) error {
return Bot.NTPManager.Start()
}
return Bot.NTPManager.Stop()
case "database":
if enable {
return Bot.DatabaseManager.Start()
}
return Bot.DatabaseManager.Stop()
case "exchange_syncer":
if enable {
Bot.ExchangeCurrencyPairManager.Start()

View File

@@ -116,9 +116,6 @@ func StartRPCServer() {
// StartRPCRESTProxy starts a gRPC proxy
func StartRPCRESTProxy() {
log.Debugf(log.GRPCSys, "gRPC proxy server support enabled. Starting gRPC proxy server on http://%v.\n", Bot.Config.RemoteControl.GRPC.GRPCProxyListenAddress)
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel()
targetDir := utils.GetTLSDir(Bot.Settings.DataDir)
creds, err := credentials.NewClientTLSFromFile(filepath.Join(targetDir, "cert.pem"), "")
@@ -134,9 +131,11 @@ func StartRPCRESTProxy() {
Password: Bot.Config.RemoteControl.Password,
}),
}
err = gctrpc.RegisterGoCryptoTraderHandlerFromEndpoint(ctx, mux, Bot.Config.RemoteControl.GRPC.ListenAddress, opts)
err = gctrpc.RegisterGoCryptoTraderHandlerFromEndpoint(context.Background(),
mux, Bot.Config.RemoteControl.GRPC.ListenAddress, opts)
if err != nil {
log.Errorf(log.GRPCSys, "Failed to register gRPC proxy. Err: %s\n", err)
return
}
go func() {
@@ -568,7 +567,7 @@ func (s *RPCServer) GetForexProviders(ctx context.Context, r *gctrpc.GetForexPro
Name: providers[x].Name,
Enabled: providers[x].Enabled,
Verbose: providers[x].Verbose,
RestRollingDelay: providers[x].RESTPollingDelay.String(),
RestPollingDelay: providers[x].RESTPollingDelay.String(),
ApiKey: providers[x].APIKey,
ApiKeyLevel: int64(providers[x].APIKeyLvl),
PrimaryProvider: providers[x].PrimaryProvider,

View File

@@ -77,7 +77,7 @@ type WsAddSubUserRequest struct {
Memo string `json:"memo"`
Password string `json:"password"`
SubUserName string `json:"subUserName"`
No int64 `json:"no,string,omtempty"`
No int64 `json:"no,string,omitempty"`
Sign string `json:"sign,omitempty"`
}

View File

@@ -2566,7 +2566,7 @@ type ForexProvider struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
Verbose bool `protobuf:"varint,3,opt,name=verbose,proto3" json:"verbose,omitempty"`
RestRollingDelay string `protobuf:"bytes,4,opt,name=rest_rolling_delay,json=restRollingDelay,proto3" json:"rest_rolling_delay,omitempty"`
RestPollingDelay string `protobuf:"bytes,4,opt,name=rest_polling_delay,json=restPollingDelay,proto3" json:"rest_polling_delay,omitempty"`
ApiKey string `protobuf:"bytes,5,opt,name=api_key,json=apiKey,proto3" json:"api_key,omitempty"`
ApiKeyLevel int64 `protobuf:"varint,6,opt,name=api_key_level,json=apiKeyLevel,proto3" json:"api_key_level,omitempty"`
PrimaryProvider bool `protobuf:"varint,7,opt,name=primary_provider,json=primaryProvider,proto3" json:"primary_provider,omitempty"`
@@ -2621,9 +2621,9 @@ func (m *ForexProvider) GetVerbose() bool {
return false
}
func (m *ForexProvider) GetRestRollingDelay() string {
func (m *ForexProvider) GetRestPollingDelay() string {
if m != nil {
return m.RestRollingDelay
return m.RestPollingDelay
}
return ""
}
@@ -5020,12 +5020,12 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 4676 bytes of a gzipped FileDescriptorProto
// 4673 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3c, 0x4d, 0x6f, 0x1c, 0x57,
0x72, 0xe8, 0x21, 0x45, 0x72, 0x6a, 0x86, 0xe4, 0xf0, 0xf1, 0x6b, 0x34, 0x24, 0x45, 0xa9, 0xb5,
0x92, 0x25, 0xad, 0x4d, 0xd9, 0xb2, 0x92, 0x75, 0xd6, 0xce, 0x6e, 0x68, 0x5a, 0xe6, 0x2a, 0xf6,
0x5a, 0x4c, 0x53, 0x2b, 0x01, 0xde, 0xc0, 0x93, 0xe6, 0xf4, 0xe3, 0xb0, 0xa3, 0x9e, 0xee, 0x76,
0x77, 0x0f, 0x29, 0x3a, 0x09, 0xb2, 0x30, 0x90, 0x20, 0x08, 0x82, 0xe4, 0xb0, 0x08, 0x90, 0x43,
0x77, 0x0f, 0x29, 0x3a, 0x09, 0xb2, 0x30, 0x90, 0x20, 0x01, 0x82, 0xe4, 0xb0, 0x08, 0x90, 0x43,
0x4e, 0x39, 0x06, 0xc8, 0x25, 0xc8, 0x29, 0x87, 0x45, 0xae, 0x41, 0x8e, 0xb9, 0xe4, 0x07, 0x04,
0xb9, 0x25, 0x01, 0x02, 0xe4, 0x92, 0x53, 0xf0, 0xea, 0x7d, 0xf4, 0x7b, 0xdd, 0x3d, 0xc3, 0xe1,
0xae, 0xac, 0xbd, 0xd8, 0xd3, 0xf5, 0xea, 0x55, 0xd5, 0xab, 0x57, 0xaf, 0x5e, 0x55, 0xbd, 0xa2,
@@ -5149,171 +5149,171 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{
0x05, 0x9d, 0x5d, 0xcf, 0x2b, 0x39, 0xa7, 0xbc, 0x48, 0xf0, 0xba, 0x5d, 0xee, 0x16, 0x6c, 0x54,
0x0a, 0x24, 0xaa, 0x19, 0x2f, 0x61, 0xcb, 0xa1, 0x83, 0xe8, 0x94, 0xbe, 0x6e, 0x91, 0xed, 0xeb,
0x70, 0x6d, 0x14, 0x67, 0x21, 0x1b, 0x96, 0xf7, 0xcc, 0xf2, 0xb8, 0x0a, 0x8c, 0xfe, 0xd3, 0x82,
0x79, 0xb3, 0x70, 0xfe, 0xaa, 0x72, 0xf1, 0x37, 0x81, 0x24, 0x34, 0xcd, 0xba, 0x49, 0x14, 0x04,
0x2c, 0x25, 0xf7, 0x68, 0xe0, 0x9e, 0x8b, 0x92, 0x7d, 0x8b, 0x8d, 0x38, 0x7c, 0xe0, 0x23, 0x06,
0x27, 0xeb, 0x30, 0xeb, 0xc6, 0x7e, 0x97, 0x59, 0x0d, 0xcf, 0xc7, 0x67, 0xdc, 0xd8, 0xff, 0x84,
0x9e, 0x13, 0x1b, 0xe6, 0xc5, 0x40, 0x37, 0xa0, 0xa7, 0x34, 0xc0, 0x98, 0x6f, 0xca, 0x69, 0xf0,
0xe1, 0x4f, 0x19, 0x88, 0xdc, 0x85, 0x56, 0x9c, 0xf8, 0xcc, 0xfc, 0xf2, 0xb7, 0x81, 0x59, 0x94,
0x66, 0x51, 0xc0, 0xe5, 0xea, 0xec, 0x1f, 0xc3, 0xd5, 0x0a, 0x5d, 0x08, 0x1f, 0xf5, 0x3d, 0x58,
0x34, 0x5f, 0x18, 0xa4, 0x9f, 0x52, 0x51, 0xab, 0x31, 0xd1, 0x59, 0x38, 0x36, 0xe8, 0x88, 0xe8,
0x13, 0x71, 0x1c, 0x37, 0x53, 0x35, 0x2d, 0xfb, 0x4b, 0x58, 0xc9, 0x81, 0x7b, 0x51, 0x78, 0x4a,
0x93, 0x94, 0x59, 0x1b, 0x81, 0xe9, 0xe3, 0x24, 0x92, 0x05, 0x59, 0xfc, 0xcd, 0xe2, 0xb6, 0x2c,
0x12, 0x66, 0x50, 0xcb, 0x22, 0x86, 0x93, 0xb8, 0x99, 0xbc, 0xa5, 0xf0, 0x37, 0x8b, 0x93, 0x7d,
0x24, 0x42, 0xbb, 0x38, 0xc6, 0x4d, 0xb5, 0x21, 0x60, 0x8c, 0x8b, 0xfd, 0x0c, 0xc3, 0x47, 0x5d,
0x14, 0xb1, 0xc6, 0x5f, 0x87, 0x06, 0x5f, 0x23, 0x9b, 0x29, 0xd7, 0xb7, 0x69, 0xac, 0xaf, 0x20,
0xa6, 0x03, 0xc7, 0x0a, 0x6a, 0xff, 0x77, 0x0d, 0x9a, 0x18, 0xb1, 0x7e, 0x44, 0x33, 0xd7, 0x0f,
0xc6, 0xc7, 0xd2, 0x3c, 0x06, 0xad, 0xa9, 0x18, 0xf4, 0x26, 0xcc, 0xeb, 0x05, 0x91, 0x73, 0x99,
0xcc, 0x6a, 0xe5, 0x90, 0x73, 0x72, 0x0b, 0x16, 0x30, 0xb5, 0xce, 0xb1, 0xb8, 0xcd, 0xcc, 0x23,
0x54, 0xa1, 0x99, 0x89, 0xc0, 0x95, 0x42, 0x22, 0xc0, 0x86, 0x31, 0x98, 0xee, 0xa6, 0xbe, 0xa7,
0xf2, 0x04, 0x84, 0x1c, 0xfa, 0x9e, 0x36, 0x8c, 0xb3, 0x67, 0xb5, 0x61, 0x9c, 0xcd, 0x72, 0xa0,
0x84, 0xf2, 0x87, 0x02, 0x7c, 0xef, 0x9a, 0x43, 0xa3, 0x6b, 0x4a, 0xe0, 0x53, 0x7f, 0x80, 0xaf,
0x61, 0xa2, 0xb8, 0x5d, 0xe7, 0x16, 0xcb, 0xbf, 0xf2, 0x34, 0x0d, 0xf4, 0x34, 0x2d, 0x4f, 0xea,
0x1a, 0x46, 0x52, 0xb7, 0x0d, 0x8d, 0x28, 0xa6, 0x61, 0x57, 0xa4, 0xd8, 0x4d, 0x1e, 0x3d, 0x30,
0xd0, 0x33, 0x84, 0x88, 0x92, 0x09, 0xea, 0x3c, 0x9d, 0x24, 0x2f, 0x35, 0x15, 0x53, 0x2b, 0x2a,
0x46, 0x26, 0x82, 0x53, 0x17, 0x25, 0x82, 0xf6, 0x2e, 0x46, 0xc5, 0x92, 0xb1, 0x30, 0x9f, 0x37,
0x61, 0x06, 0xd5, 0x24, 0x2d, 0x67, 0xc5, 0x48, 0x63, 0x84, 0x51, 0x38, 0x02, 0xc7, 0xfe, 0x01,
0xbe, 0x21, 0xe2, 0xd0, 0x24, 0xa2, 0x5f, 0x85, 0x39, 0xbe, 0x2b, 0xca, 0x6a, 0x66, 0xf1, 0xfb,
0xb1, 0x67, 0xff, 0x9b, 0x05, 0xe4, 0x70, 0x78, 0x34, 0xf0, 0x27, 0xa7, 0x36, 0x79, 0x82, 0x4e,
0x60, 0x1a, 0xcd, 0x84, 0x9b, 0x23, 0xfe, 0x2e, 0x58, 0xc8, 0x74, 0xd1, 0x42, 0xf2, 0xed, 0xbc,
0x52, 0x9d, 0xa3, 0xcf, 0xe8, 0x9b, 0xcf, 0x5c, 0x7c, 0xe0, 0xd3, 0x30, 0xeb, 0x8a, 0x62, 0x0b,
0x73, 0xf1, 0x08, 0x78, 0xec, 0xd9, 0x87, 0xb0, 0x6c, 0xac, 0x4c, 0x68, 0xfa, 0x06, 0x34, 0xb9,
0x00, 0x71, 0xe0, 0xf6, 0x54, 0x35, 0xbc, 0x81, 0xb0, 0x03, 0x04, 0x8d, 0xd3, 0xd7, 0x9f, 0x58,
0xb0, 0x72, 0xe8, 0x0f, 0x86, 0x81, 0x9b, 0xd1, 0x6f, 0x40, 0x63, 0xf9, 0xf2, 0xa7, 0x8c, 0xe5,
0x4b, 0x4d, 0x4e, 0xe7, 0x9a, 0xb4, 0xff, 0xc7, 0x82, 0xd5, 0x82, 0x28, 0x2a, 0x26, 0x34, 0x8d,
0x69, 0x44, 0x71, 0x40, 0x20, 0x69, 0x4c, 0x6b, 0x06, 0xd3, 0x9b, 0x30, 0x3f, 0xf0, 0x43, 0x7f,
0x30, 0x1c, 0x74, 0xb9, 0xee, 0xb9, 0x4c, 0x4d, 0x01, 0x3c, 0xc0, 0x2d, 0x60, 0x48, 0xee, 0x4b,
0x0d, 0x69, 0x5a, 0x20, 0x71, 0x20, 0x47, 0x7a, 0x1b, 0x56, 0xf2, 0xb8, 0xbd, 0xdb, 0x77, 0xfd,
0xb0, 0x1b, 0x44, 0x69, 0x2a, 0xf6, 0x98, 0xe4, 0x63, 0xfb, 0xae, 0x1f, 0x7e, 0x1a, 0xa5, 0xa9,
0xe6, 0x04, 0x66, 0x74, 0x27, 0xc0, 0x02, 0x98, 0xd6, 0xf3, 0x13, 0x37, 0xa0, 0x1f, 0x46, 0x83,
0xa3, 0x57, 0xab, 0xfb, 0x1b, 0xd0, 0xe4, 0x75, 0xb7, 0xcc, 0x4d, 0xfa, 0x54, 0xee, 0x40, 0x03,
0x61, 0x4f, 0x11, 0x54, 0xb9, 0x0d, 0xff, 0x65, 0x01, 0xd9, 0x63, 0xa1, 0x4c, 0x30, 0xb1, 0x3d,
0x30, 0x57, 0xc2, 0xf3, 0xe6, 0xdc, 0xc2, 0xea, 0x02, 0xf2, 0xd8, 0x34, 0xbf, 0x29, 0xc3, 0xfc,
0xd4, 0x6a, 0xa6, 0x2f, 0x59, 0x1c, 0x2b, 0xf9, 0xf1, 0x5b, 0xb0, 0x70, 0xe6, 0x06, 0x01, 0xcd,
0xd4, 0x13, 0x9b, 0xa8, 0xc4, 0x73, 0xa8, 0xcc, 0xc1, 0xe5, 0x82, 0x67, 0xb5, 0x05, 0xaf, 0xc2,
0xb2, 0xb1, 0x5e, 0x11, 0x0d, 0x3d, 0x84, 0x35, 0x0e, 0xde, 0x0d, 0x82, 0x89, 0xbd, 0xaa, 0xfd,
0xd7, 0x35, 0x58, 0x2f, 0x4d, 0x53, 0x61, 0x83, 0x69, 0xc6, 0xb7, 0xd5, 0x72, 0xab, 0x27, 0xec,
0x88, 0x4f, 0x31, 0xab, 0xf3, 0x4f, 0x16, 0xcc, 0x70, 0xd0, 0xd8, 0xdd, 0xf8, 0x5c, 0x3a, 0x04,
0x61, 0x70, 0x3c, 0x23, 0xfa, 0xce, 0x64, 0xcc, 0xf8, 0xff, 0xf4, 0x67, 0x55, 0xee, 0x49, 0xc4,
0x8b, 0xea, 0xf7, 0xa0, 0x55, 0x44, 0xb8, 0xd4, 0x93, 0x13, 0xaf, 0xaa, 0x3c, 0x3a, 0xa5, 0xda,
0x33, 0xea, 0xcf, 0x2c, 0x58, 0xdc, 0x8b, 0x42, 0xcf, 0x67, 0x37, 0xe6, 0x81, 0x9b, 0xb8, 0x83,
0x54, 0xbc, 0xe4, 0x73, 0x90, 0x2c, 0xbb, 0x2b, 0xc0, 0x88, 0x02, 0xe7, 0x16, 0x40, 0xef, 0x84,
0xf6, 0x5e, 0x74, 0x45, 0xc5, 0x91, 0x3f, 0xff, 0x33, 0xc8, 0x87, 0xbe, 0x97, 0x92, 0xb7, 0x60,
0x39, 0x1f, 0xee, 0xba, 0xa1, 0xd7, 0x15, 0xe5, 0x46, 0x7c, 0xdd, 0x50, 0x78, 0xbb, 0xa1, 0xb7,
0x9b, 0xbe, 0x48, 0x59, 0xac, 0xa8, 0xaa, 0x6c, 0x5d, 0xc3, 0x85, 0x2f, 0x2a, 0xf8, 0x2e, 0x82,
0xed, 0xff, 0xb5, 0xf0, 0x06, 0x94, 0xab, 0x12, 0xbb, 0x9d, 0x17, 0xd6, 0xb0, 0xde, 0x6a, 0x6c,
0x59, 0xad, 0xb0, 0x65, 0x04, 0xa6, 0xfd, 0x8c, 0x0e, 0xe4, 0xc5, 0xc2, 0x7e, 0x93, 0x0f, 0xa1,
0xa5, 0x56, 0xdc, 0x8d, 0x51, 0x2d, 0xe2, 0x98, 0xac, 0xe7, 0x89, 0xa3, 0xa1, 0x35, 0x67, 0xb1,
0x57, 0x50, 0xa3, 0x3c, 0x5e, 0x57, 0x26, 0x72, 0xd4, 0x3d, 0xd4, 0xb6, 0xf0, 0x4f, 0xfc, 0x8b,
0x4b, 0x4d, 0x7b, 0xc3, 0x8c, 0x7a, 0x22, 0x54, 0x56, 0xdf, 0xf6, 0x7f, 0x58, 0xb0, 0xb8, 0xeb,
0x79, 0xb8, 0xee, 0x49, 0xdc, 0x84, 0x5c, 0x65, 0xed, 0x82, 0x55, 0x4e, 0xfd, 0x9c, 0xab, 0xfc,
0x85, 0x9d, 0xc8, 0x08, 0x25, 0xd8, 0x36, 0xb4, 0xf2, 0x75, 0x56, 0x6f, 0xaf, 0xfd, 0x2d, 0x20,
0x3c, 0xbd, 0x32, 0xd4, 0x51, 0xc4, 0x5a, 0x85, 0x65, 0x03, 0x4b, 0xf8, 0x9a, 0x8f, 0xe1, 0xce,
0x3e, 0xcd, 0xf6, 0x92, 0xf3, 0x38, 0x8b, 0x64, 0x38, 0xfb, 0x11, 0x8d, 0xa3, 0xd4, 0x97, 0x9e,
0x8b, 0x4e, 0xe4, 0x7d, 0xfe, 0xd9, 0x82, 0xbb, 0x13, 0x10, 0x12, 0x4b, 0xf8, 0xa2, 0x5c, 0x5f,
0xfa, 0x0d, 0xbd, 0xbd, 0x65, 0x22, 0x2a, 0x3b, 0x0a, 0x22, 0xba, 0x0c, 0x14, 0xc9, 0xce, 0x07,
0xb0, 0x60, 0x0e, 0x5e, 0xca, 0x55, 0x04, 0x70, 0xfb, 0x02, 0x21, 0x26, 0xb1, 0xb9, 0xdb, 0xb0,
0xd0, 0x33, 0x48, 0x08, 0x46, 0x05, 0xa8, 0xbd, 0x07, 0x6f, 0x5c, 0xc8, 0x4d, 0xa8, 0x6d, 0x64,
0x86, 0x6e, 0xff, 0xdd, 0x34, 0xac, 0x3f, 0xf7, 0xb3, 0x13, 0x2f, 0x71, 0xcf, 0xa4, 0xf5, 0x4d,
0x22, 0x64, 0x21, 0x79, 0xaf, 0x95, 0xeb, 0x0d, 0xf7, 0x60, 0x29, 0x0a, 0x29, 0xe6, 0x18, 0xdd,
0xd8, 0x4d, 0xd3, 0xb3, 0x28, 0x91, 0x77, 0xe9, 0x62, 0x14, 0x52, 0x96, 0x67, 0x1c, 0x08, 0x70,
0xe1, 0x36, 0x9e, 0x2e, 0xde, 0xc6, 0x2d, 0x98, 0x8a, 0xfd, 0x50, 0xbc, 0x99, 0xb0, 0x9f, 0xec,
0xee, 0xcc, 0x12, 0xd7, 0xd3, 0x28, 0x8b, 0xbb, 0x13, 0xa1, 0x8a, 0xae, 0x5e, 0xc5, 0x9f, 0x2d,
0x54, 0xf1, 0x35, 0x9d, 0xcc, 0x99, 0x55, 0x8b, 0x6d, 0x68, 0x88, 0x9f, 0xdd, 0xcc, 0xed, 0x8b,
0x14, 0x08, 0x04, 0xe8, 0xa9, 0xdb, 0xd7, 0xa2, 0x35, 0x30, 0xa2, 0xb5, 0x2d, 0x80, 0x63, 0x4a,
0xbb, 0x46, 0x32, 0x54, 0x3f, 0xa6, 0x94, 0x3b, 0x5d, 0x16, 0x2a, 0x1f, 0xb9, 0xe1, 0x8b, 0x2e,
0xd6, 0x20, 0x9a, 0x5c, 0x1c, 0x06, 0xf8, 0xcc, 0x1d, 0x60, 0x4c, 0x8c, 0x83, 0x52, 0xa6, 0x79,
0xae, 0x51, 0x06, 0xdb, 0xcd, 0xab, 0x29, 0x88, 0xd2, 0xf3, 0xb3, 0xf3, 0xf6, 0x42, 0x3e, 0x7f,
0xcf, 0xcf, 0xce, 0xd5, 0x7c, 0xd4, 0x59, 0x72, 0xde, 0x5e, 0xcc, 0xe7, 0xef, 0x71, 0x10, 0x13,
0x2f, 0x3d, 0xf3, 0x8f, 0x29, 0x6f, 0x0c, 0x69, 0x89, 0x56, 0x29, 0x06, 0xd9, 0x8b, 0x3c, 0x0c,
0x23, 0xcf, 0xfc, 0x44, 0x4b, 0x4e, 0x97, 0x78, 0x0a, 0xcb, 0x80, 0xd2, 0x34, 0xec, 0x7b, 0xd0,
0x92, 0xe6, 0xa2, 0xf7, 0x4e, 0x26, 0x34, 0x1d, 0x06, 0x99, 0xec, 0x9d, 0xe4, 0x5f, 0xf6, 0x3b,
0xd8, 0x15, 0xf1, 0x69, 0xd4, 0xef, 0xe7, 0xe9, 0x93, 0x30, 0xad, 0x35, 0x98, 0x09, 0x10, 0x2e,
0xa7, 0xf0, 0x2f, 0x3b, 0xc4, 0x7a, 0x4e, 0x61, 0x4a, 0xfe, 0x6a, 0xe1, 0x87, 0xc7, 0x91, 0xc8,
0x16, 0xf0, 0x37, 0x3b, 0x8b, 0x1e, 0x3d, 0x1a, 0xf6, 0x65, 0x0f, 0x14, 0x7e, 0x30, 0xcc, 0x33,
0x37, 0x09, 0xc5, 0x85, 0x8a, 0xbf, 0x19, 0x26, 0x4d, 0x92, 0x28, 0x11, 0xb7, 0x27, 0xff, 0xb0,
0xf7, 0x61, 0xfd, 0xf0, 0x72, 0x22, 0x32, 0x42, 0xbc, 0x5a, 0x23, 0x8e, 0x3f, 0x7e, 0xd8, 0x9f,
0x18, 0x1d, 0x20, 0xd8, 0x25, 0x30, 0xc9, 0x31, 0x5a, 0x81, 0x2b, 0xe8, 0xcb, 0x25, 0x31, 0xfc,
0x60, 0x19, 0x61, 0xbb, 0x4c, 0x4d, 0xf5, 0xa0, 0x95, 0x3b, 0x2a, 0xb8, 0x27, 0xfc, 0x95, 0x8a,
0x8e, 0x0a, 0x63, 0xee, 0x64, 0x2d, 0x15, 0xdf, 0x68, 0x97, 0xc4, 0x57, 0xb0, 0xac, 0x8b, 0xf6,
0x5a, 0xb3, 0xfe, 0x9f, 0x58, 0x58, 0x21, 0x53, 0x19, 0xd8, 0x61, 0x96, 0x50, 0x77, 0xf0, 0x5a,
0x1f, 0xc4, 0xbf, 0x0f, 0x37, 0xf4, 0x7e, 0xa9, 0x4b, 0x4b, 0x62, 0xff, 0x01, 0x3e, 0x23, 0xf2,
0x47, 0xfe, 0x5f, 0x82, 0xfc, 0x1f, 0xc0, 0x35, 0x4d, 0xfe, 0x4b, 0x8a, 0xf1, 0xe0, 0x4f, 0xef,
0xc1, 0xc2, 0x7e, 0xc4, 0x6f, 0xac, 0xa7, 0xcc, 0x51, 0x27, 0xe4, 0x09, 0xcc, 0x8a, 0x0e, 0x61,
0xb2, 0x56, 0x6a, 0x19, 0x46, 0x8a, 0x9d, 0xf5, 0x11, 0xad, 0xc4, 0xf6, 0xf2, 0xd7, 0xff, 0xfa,
0xef, 0x3f, 0xad, 0xcd, 0x93, 0xc6, 0xfd, 0xd3, 0x77, 0xee, 0xf7, 0x69, 0x86, 0x1e, 0xe1, 0x04,
0xe6, 0x8d, 0xa6, 0x4e, 0xb2, 0x69, 0x34, 0x66, 0x16, 0x7a, 0x3d, 0x3b, 0x5b, 0x63, 0xdb, 0x36,
0xed, 0x0e, 0xb2, 0x58, 0x21, 0x44, 0xb0, 0x48, 0x11, 0x85, 0x13, 0xfe, 0x12, 0x16, 0x1f, 0x61,
0xa9, 0x58, 0x51, 0x25, 0xdb, 0x39, 0xb5, 0xca, 0x66, 0xd5, 0xce, 0xf5, 0xd1, 0x08, 0x82, 0xe3,
0x06, 0x72, 0x5c, 0x25, 0xcb, 0x8c, 0x23, 0x2f, 0x45, 0xab, 0x26, 0x51, 0x92, 0x42, 0x4b, 0xb4,
0xbf, 0xbd, 0x52, 0x9e, 0x9b, 0xc8, 0x73, 0x8d, 0xac, 0x30, 0x9e, 0x1e, 0x67, 0x90, 0x33, 0x8d,
0xb0, 0xd2, 0xa5, 0xb7, 0x6b, 0x92, 0x6b, 0x23, 0xfb, 0x38, 0x39, 0xcb, 0xed, 0x0b, 0xfa, 0x3c,
0xcd, 0x55, 0xf6, 0x29, 0xc3, 0x55, 0xad, 0x9e, 0xe4, 0xa7, 0xdc, 0xfd, 0x55, 0x36, 0x16, 0x93,
0x37, 0x2e, 0xee, 0x66, 0xe6, 0x32, 0xdc, 0x99, 0xb4, 0xed, 0xd9, 0xfe, 0x16, 0x0a, 0x73, 0x8d,
0x6c, 0x0a, 0x61, 0x8c, 0x56, 0x67, 0xd9, 0x4c, 0x4d, 0x7a, 0xd0, 0xd4, 0x7b, 0x34, 0xc9, 0x46,
0x85, 0xb7, 0x55, 0xcc, 0x37, 0xab, 0x07, 0x05, 0xc3, 0x36, 0x32, 0x24, 0xa4, 0x25, 0x18, 0xaa,
0x96, 0x4e, 0xf2, 0x15, 0x2c, 0x16, 0xfa, 0x1b, 0x89, 0x5d, 0xd8, 0xbe, 0x8a, 0x5e, 0xd5, 0xce,
0xcd, 0xb1, 0x38, 0x82, 0xeb, 0x35, 0xe4, 0xda, 0xb6, 0x97, 0xb5, 0x5d, 0x96, 0x9c, 0xbf, 0x6b,
0xdd, 0x23, 0x29, 0xee, 0xb3, 0xde, 0x8a, 0x37, 0x11, 0xef, 0xed, 0x0b, 0xfa, 0xf8, 0x4a, 0x7b,
0x2d, 0x79, 0xe2, 0x71, 0x4d, 0xb1, 0xbd, 0x49, 0x6b, 0x20, 0xc5, 0x50, 0x64, 0x12, 0xbe, 0x5b,
0xd5, 0x0d, 0xa8, 0xa2, 0x07, 0xb6, 0x74, 0x72, 0x25, 0xd7, 0x28, 0x8b, 0x49, 0x6a, 0xf4, 0xe7,
0x0a, 0xa6, 0xa6, 0x55, 0x57, 0x74, 0xc8, 0x56, 0xae, 0x54, 0x6f, 0x79, 0x1d, 0xb9, 0xd2, 0x28,
0x8b, 0x53, 0xf2, 0x12, 0x16, 0xb8, 0xbb, 0x78, 0xf5, 0x3b, 0xbb, 0x85, 0x7c, 0xd7, 0x6d, 0x92,
0xfb, 0x0c, 0x7d, 0x63, 0x9f, 0x43, 0x5d, 0xdd, 0x19, 0xa4, 0xad, 0x2d, 0xc2, 0x68, 0x56, 0xec,
0x8c, 0x68, 0x45, 0x93, 0xd6, 0x6a, 0xcf, 0x8b, 0x55, 0xf1, 0xc6, 0x32, 0x46, 0xf8, 0xc7, 0x00,
0x79, 0x6f, 0x1a, 0xb9, 0x5a, 0xa2, 0xac, 0x34, 0xd7, 0xa9, 0x1a, 0x92, 0x5d, 0xf8, 0x48, 0xbe,
0x45, 0x16, 0x0c, 0xf2, 0xf2, 0xbc, 0xa9, 0x2b, 0xd2, 0x38, 0x6f, 0xc5, 0x6e, 0xb6, 0xce, 0xe8,
0x36, 0x26, 0xb9, 0x29, 0xb6, 0x3c, 0x6c, 0xaa, 0x14, 0xc2, 0x56, 0xd0, 0xc7, 0xdb, 0x42, 0xeb,
0x9f, 0xda, 0xac, 0xe2, 0x52, 0x79, 0x5b, 0x94, 0x9b, 0xa1, 0xec, 0xab, 0xc8, 0x6a, 0x99, 0x2c,
0x15, 0x59, 0xa5, 0xe4, 0x05, 0xfe, 0x15, 0x92, 0xd6, 0xfe, 0x43, 0x74, 0x5a, 0xe5, 0x5e, 0xa8,
0xce, 0xb5, 0x51, 0xc3, 0x23, 0x6e, 0x26, 0x91, 0x2d, 0xe1, 0xa1, 0xe2, 0x1b, 0xce, 0x9b, 0x7e,
0x8c, 0x0d, 0x37, 0x7a, 0x83, 0x3a, 0x57, 0x2b, 0x46, 0x04, 0xf5, 0x55, 0xa4, 0xbe, 0x48, 0xe6,
0x95, 0x4b, 0x44, 0x5a, 0x7c, 0x4f, 0xd4, 0x6b, 0xac, 0xb1, 0x27, 0xc5, 0x96, 0x1d, 0xc3, 0x07,
0x96, 0x1a, 0x77, 0x4a, 0x3e, 0x50, 0xb5, 0xe6, 0x90, 0x3f, 0x34, 0x3b, 0x80, 0x64, 0x47, 0x82,
0x3d, 0xb6, 0x85, 0xa0, 0x74, 0x5a, 0x46, 0xb6, 0x19, 0xd8, 0xdb, 0xc8, 0xf9, 0x2a, 0x59, 0x2f,
0x72, 0x16, 0x2d, 0x0b, 0xe4, 0x6b, 0x0b, 0x96, 0x2b, 0x1e, 0xc4, 0x73, 0x09, 0x46, 0x3f, 0xdf,
0xe7, 0x12, 0x8c, 0x7b, 0x51, 0xb7, 0x51, 0x82, 0x4d, 0x1b, 0x25, 0x70, 0x3d, 0x4f, 0x49, 0x20,
0x92, 0x3f, 0x66, 0x99, 0x7f, 0x6e, 0xc1, 0x5a, 0xf5, 0xe3, 0x37, 0xb9, 0xa5, 0xfe, 0xae, 0x61,
0xdc, 0xb3, 0x7c, 0xe7, 0xf6, 0x45, 0x68, 0x42, 0x9a, 0x5b, 0x28, 0xcd, 0xb6, 0xdd, 0x61, 0xd2,
0x24, 0x88, 0x5b, 0x25, 0xd0, 0x19, 0x56, 0x0c, 0xcd, 0xe7, 0x65, 0xa2, 0xc5, 0x16, 0xd5, 0xaf,
0xf0, 0x9d, 0x1b, 0x63, 0x30, 0x4c, 0xf7, 0x45, 0x56, 0xc5, 0x86, 0xe0, 0x9b, 0xac, 0x7a, 0xa7,
0x16, 0x67, 0x34, 0x7f, 0xbe, 0x35, 0xce, 0x68, 0xe9, 0x45, 0xda, 0x38, 0xa3, 0xe5, 0x47, 0xe2,
0xd2, 0x19, 0x45, 0x66, 0xf8, 0x60, 0x4c, 0x3e, 0xc7, 0x63, 0x23, 0xca, 0xd5, 0xed, 0xe2, 0x51,
0x4f, 0xab, 0x8e, 0x8d, 0x59, 0x90, 0x2e, 0xb9, 0x4a, 0x5e, 0x05, 0x67, 0xda, 0x73, 0x60, 0x4e,
0xa2, 0x93, 0xf5, 0x22, 0x01, 0x49, 0xb9, 0xf2, 0xc5, 0xd1, 0x5e, 0x47, 0xa2, 0x4b, 0x76, 0x53,
0x27, 0xca, 0x68, 0x1e, 0x41, 0x43, 0x7b, 0x5d, 0x23, 0xca, 0xc9, 0x96, 0x1f, 0x13, 0x3b, 0x1b,
0x95, 0x63, 0xa6, 0x2b, 0xb1, 0x17, 0x19, 0x83, 0x14, 0x11, 0x14, 0x8f, 0xdf, 0x85, 0x79, 0xe3,
0x81, 0x2b, 0x57, 0x7e, 0xd5, 0x13, 0x5c, 0xae, 0xfc, 0xca, 0x57, 0x31, 0x19, 0x68, 0xda, 0xa8,
0xfc, 0x54, 0xa0, 0x28, 0x5e, 0x5f, 0x40, 0x5d, 0xbd, 0x2b, 0xe5, 0xfa, 0x2f, 0x3e, 0x35, 0x5d,
0xc4, 0xc3, 0xd8, 0x83, 0x33, 0x36, 0xf9, 0x28, 0x1a, 0x1c, 0x09, 0x7d, 0x69, 0xaf, 0x26, 0xb9,
0xbe, 0xca, 0x4f, 0x47, 0xb9, 0xbe, 0xaa, 0x9e, 0x59, 0x0c, 0x7d, 0xf5, 0x10, 0x41, 0xad, 0x21,
0x81, 0xc5, 0xc2, 0x6b, 0x45, 0x1e, 0x56, 0x54, 0xbf, 0xcd, 0xe4, 0x61, 0xc5, 0x88, 0x67, 0x0e,
0x33, 0x70, 0xe3, 0xfc, 0xdc, 0x20, 0xc8, 0x6d, 0x8b, 0xbb, 0x7b, 0x5e, 0xcb, 0x37, 0xec, 0xd6,
0x78, 0xb4, 0x30, 0xec, 0xd6, 0x2c, 0xfc, 0x97, 0xdc, 0x3d, 0xe5, 0xb4, 0x9e, 0xc1, 0x9c, 0x2c,
0x22, 0xe7, 0x46, 0x5b, 0x28, 0x9f, 0x77, 0xda, 0xe5, 0x01, 0x41, 0xd5, 0x30, 0x5c, 0xd7, 0xf3,
0x90, 0xaa, 0xd8, 0x08, 0xad, 0xa4, 0x9c, 0x6f, 0x44, 0xb9, 0x1a, 0x9d, 0x6f, 0x44, 0x55, 0x0d,
0xda, 0xd8, 0x08, 0xee, 0xb9, 0x14, 0x8f, 0xbf, 0xb7, 0x30, 0xd5, 0x1e, 0x5f, 0x11, 0x26, 0x6f,
0x5f, 0xa2, 0x78, 0xcc, 0x05, 0x7a, 0xe7, 0xd2, 0xe5, 0x66, 0xfb, 0x0e, 0x8a, 0x69, 0xdb, 0x5b,
0xf2, 0x32, 0xc5, 0x69, 0x1e, 0x47, 0x57, 0xb5, 0x67, 0x26, 0xf4, 0xdf, 0x5a, 0xfc, 0x6f, 0x4c,
0xc7, 0xd0, 0x25, 0x3b, 0x13, 0x0a, 0x20, 0x05, 0xbe, 0x3f, 0x31, 0xbe, 0x10, 0xf7, 0x36, 0x8a,
0x7b, 0xdd, 0xde, 0x18, 0x23, 0x2e, 0x13, 0xf6, 0xf7, 0x61, 0x43, 0x55, 0x8e, 0x0d, 0xba, 0x1f,
0x0f, 0x43, 0x2f, 0xcd, 0xf3, 0xd2, 0x11, 0xe5, 0xe5, 0xdc, 0x70, 0x8a, 0x05, 0x45, 0xf3, 0x7e,
0x3c, 0x13, 0xa3, 0x5c, 0x8c, 0x63, 0x46, 0x9b, 0x71, 0x8f, 0x61, 0x49, 0xce, 0xfb, 0xd8, 0x77,
0xb3, 0x5f, 0x98, 0xe7, 0x75, 0xe4, 0xd9, 0xb1, 0x57, 0x75, 0x9e, 0xc7, 0xbe, 0x9b, 0x29, 0x8e,
0x29, 0x3e, 0x04, 0x1a, 0xb5, 0x42, 0x3d, 0xf9, 0xae, 0xac, 0x22, 0xea, 0xc9, 0x77, 0x75, 0x59,
0xd3, 0x4c, 0xbe, 0xfb, 0x34, 0xe3, 0x65, 0x46, 0x4f, 0x30, 0x38, 0x85, 0xd6, 0xe1, 0x48, 0xa6,
0x87, 0x3f, 0x37, 0x53, 0x11, 0x03, 0xd9, 0xc8, 0x34, 0x2d, 0x30, 0x65, 0x8b, 0x3d, 0xe5, 0xaf,
0x9e, 0x7a, 0x15, 0x91, 0x6c, 0x8f, 0xae, 0x2f, 0x96, 0xf9, 0x56, 0x16, 0x20, 0x4d, 0xbe, 0x5a,
0x86, 0x84, 0x7f, 0x5b, 0xc7, 0xf8, 0x9e, 0x03, 0x31, 0xb3, 0x24, 0xfc, 0x9b, 0x0c, 0xe5, 0x05,
0x2a, 0x6a, 0x87, 0x93, 0xa5, 0x48, 0x37, 0x90, 0xf1, 0x86, 0xbd, 0x56, 0x4e, 0x91, 0x18, 0x6f,
0xc6, 0xfa, 0xf7, 0x60, 0xb9, 0x90, 0x7b, 0xbf, 0x22, 0xde, 0x86, 0x39, 0x17, 0x12, 0x6f, 0xc9,
0x3c, 0xc3, 0x3c, 0xb8, 0x50, 0x10, 0x24, 0x37, 0xaa, 0xf2, 0x0d, 0xa3, 0xde, 0x36, 0x2e, 0xf3,
0x11, 0xf7, 0x06, 0x59, 0x2b, 0xa5, 0x23, 0x48, 0xe1, 0x6d, 0x8b, 0xfc, 0x99, 0x85, 0x6d, 0xf0,
0x23, 0xea, 0x91, 0xe4, 0x6e, 0x55, 0xc2, 0x7b, 0x69, 0x31, 0x84, 0x3f, 0x21, 0xd7, 0x8a, 0x59,
0x71, 0x49, 0x9c, 0x13, 0xac, 0x40, 0xe8, 0x55, 0x45, 0x23, 0x27, 0xaf, 0x28, 0x37, 0x8e, 0x4c,
0x5a, 0x8b, 0xa9, 0xb8, 0xc8, 0x3a, 0x25, 0xa7, 0x9f, 0x98, 0x7f, 0xec, 0x6a, 0xb0, 0xbc, 0x5d,
0xb1, 0xea, 0xcb, 0xb0, 0xbe, 0x89, 0xac, 0xb7, 0xc8, 0x46, 0x61, 0xbd, 0x99, 0x21, 0xc2, 0xd1,
0x0c, 0xfe, 0xf3, 0x14, 0xef, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc2, 0xa4, 0xbf, 0x47,
0xd1, 0x42, 0x00, 0x00,
0x79, 0xb3, 0x70, 0xfe, 0xaa, 0x72, 0xf1, 0x37, 0x81, 0x24, 0x34, 0xcd, 0xba, 0x71, 0x14, 0x04,
0x2c, 0x25, 0xf7, 0x68, 0xe0, 0x9e, 0x8b, 0x92, 0x7d, 0x8b, 0x8d, 0x1c, 0xf0, 0x81, 0x8f, 0x18,
0x9c, 0xac, 0xc3, 0xac, 0x1b, 0xfb, 0x5d, 0x66, 0x35, 0x3c, 0x1f, 0x9f, 0x71, 0x63, 0xff, 0x13,
0x7a, 0x4e, 0x6c, 0x98, 0x17, 0x03, 0xdd, 0x80, 0x9e, 0xd2, 0x00, 0x63, 0xbe, 0x29, 0xa7, 0xc1,
0x87, 0x3f, 0x65, 0x20, 0x72, 0x17, 0x5a, 0x71, 0xe2, 0x33, 0xf3, 0xcb, 0xdf, 0x06, 0x66, 0x51,
0x9a, 0x45, 0x01, 0x97, 0xab, 0xb3, 0x7f, 0x0c, 0x57, 0x2b, 0x74, 0x21, 0x7c, 0xd4, 0xf7, 0x60,
0xd1, 0x7c, 0x61, 0x90, 0x7e, 0x4a, 0x45, 0xad, 0xc6, 0x44, 0x67, 0xe1, 0xd8, 0xa0, 0x23, 0xa2,
0x4f, 0xc4, 0x71, 0xdc, 0x4c, 0xd5, 0xb4, 0xec, 0x2f, 0x61, 0x25, 0x07, 0xee, 0x45, 0xe1, 0x29,
0x4d, 0x52, 0x66, 0x6d, 0x04, 0xa6, 0x8f, 0x93, 0x48, 0x16, 0x64, 0xf1, 0x37, 0x8b, 0xdb, 0xb2,
0x48, 0x98, 0x41, 0x2d, 0x8b, 0x18, 0x4e, 0xe2, 0x66, 0xf2, 0x96, 0xc2, 0xdf, 0x2c, 0x4e, 0xf6,
0x91, 0x08, 0xed, 0xe2, 0x18, 0x37, 0xd5, 0x86, 0x80, 0x31, 0x2e, 0xf6, 0x33, 0x0c, 0x1f, 0x75,
0x51, 0xc4, 0x1a, 0x7f, 0x1d, 0x1a, 0x7c, 0x8d, 0x6c, 0xa6, 0x5c, 0xdf, 0xa6, 0xb1, 0xbe, 0x82,
0x98, 0x0e, 0x1c, 0x2b, 0xa8, 0xfd, 0xdf, 0x35, 0x68, 0x62, 0xc4, 0xfa, 0x11, 0xcd, 0x5c, 0x3f,
0x18, 0x1f, 0x4b, 0xf3, 0x18, 0xb4, 0xa6, 0x62, 0xd0, 0x9b, 0x30, 0xaf, 0x17, 0x44, 0xce, 0x65,
0x32, 0xab, 0x95, 0x43, 0xce, 0xc9, 0x2d, 0x58, 0xc0, 0xd4, 0x3a, 0xc7, 0xe2, 0x36, 0x33, 0x8f,
0x50, 0x85, 0x66, 0x26, 0x02, 0x57, 0x0a, 0x89, 0x00, 0x1b, 0xc6, 0x60, 0xba, 0x9b, 0xfa, 0x9e,
0xca, 0x13, 0x10, 0x72, 0xe8, 0x7b, 0xda, 0x30, 0xce, 0x9e, 0xd5, 0x86, 0x71, 0x36, 0xcb, 0x81,
0x12, 0xca, 0x1f, 0x0a, 0xf0, 0xbd, 0x6b, 0x0e, 0x8d, 0xae, 0x29, 0x81, 0x4f, 0xfd, 0x01, 0xbe,
0x86, 0x89, 0xe2, 0x76, 0x9d, 0x5b, 0x2c, 0xff, 0xca, 0xd3, 0x34, 0xd0, 0xd3, 0xb4, 0x3c, 0xa9,
0x6b, 0x18, 0x49, 0xdd, 0x36, 0x34, 0xa2, 0x98, 0x86, 0x5d, 0x91, 0x62, 0x37, 0x79, 0xf4, 0xc0,
0x40, 0xcf, 0x10, 0x22, 0x4a, 0x26, 0xa8, 0xf3, 0x74, 0x92, 0xbc, 0xd4, 0x54, 0x4c, 0xad, 0xa8,
0x18, 0x99, 0x08, 0x4e, 0x5d, 0x94, 0x08, 0xda, 0xbb, 0x18, 0x15, 0x4b, 0xc6, 0xc2, 0x7c, 0xde,
0x84, 0x19, 0x54, 0x93, 0xb4, 0x9c, 0x15, 0x23, 0x8d, 0x11, 0x46, 0xe1, 0x08, 0x1c, 0xfb, 0x07,
0xf8, 0x86, 0x88, 0x43, 0x93, 0x88, 0x7e, 0x15, 0xe6, 0xf8, 0xae, 0x28, 0xab, 0x99, 0xc5, 0xef,
0xc7, 0x9e, 0xfd, 0x6f, 0x16, 0x90, 0xc3, 0xe1, 0xd1, 0xc0, 0x9f, 0x9c, 0xda, 0xe4, 0x09, 0x3a,
0x81, 0x69, 0x34, 0x13, 0x6e, 0x8e, 0xf8, 0xbb, 0x60, 0x21, 0xd3, 0x45, 0x0b, 0xc9, 0xb7, 0xf3,
0x4a, 0x75, 0x8e, 0x3e, 0xa3, 0x6f, 0x3e, 0x73, 0xf1, 0x81, 0x4f, 0xc3, 0xac, 0x2b, 0x8a, 0x2d,
0xcc, 0xc5, 0x23, 0xe0, 0xb1, 0x67, 0x1f, 0xc2, 0xb2, 0xb1, 0x32, 0xa1, 0xe9, 0x1b, 0xd0, 0xe4,
0x02, 0xc4, 0x81, 0xdb, 0x53, 0xd5, 0xf0, 0x06, 0xc2, 0x0e, 0x10, 0x34, 0x4e, 0x5f, 0x7f, 0x62,
0xc1, 0xca, 0xa1, 0x3f, 0x18, 0x06, 0x6e, 0x46, 0xbf, 0x01, 0x8d, 0xe5, 0xcb, 0x9f, 0x32, 0x96,
0x2f, 0x35, 0x39, 0x9d, 0x6b, 0xd2, 0xfe, 0x1f, 0x0b, 0x56, 0x0b, 0xa2, 0xa8, 0x98, 0xd0, 0x34,
0xa6, 0x11, 0xc5, 0x01, 0x81, 0xa4, 0x31, 0xad, 0x19, 0x4c, 0x6f, 0xc2, 0xfc, 0xc0, 0x0f, 0xfd,
0xc1, 0x70, 0xd0, 0xe5, 0xba, 0xe7, 0x32, 0x35, 0x05, 0xf0, 0x00, 0xb7, 0x80, 0x21, 0xb9, 0x2f,
0x35, 0xa4, 0x69, 0x81, 0xc4, 0x81, 0x1c, 0xe9, 0x6d, 0x58, 0xc9, 0xe3, 0xf6, 0x6e, 0xdf, 0xf5,
0xc3, 0x6e, 0x10, 0xa5, 0xa9, 0xd8, 0x63, 0x92, 0x8f, 0xed, 0xbb, 0x7e, 0xf8, 0x69, 0x94, 0xa6,
0x9a, 0x13, 0x98, 0xd1, 0x9d, 0x00, 0x0b, 0x60, 0x5a, 0xcf, 0x4f, 0xdc, 0x80, 0x7e, 0x18, 0x0d,
0x8e, 0x5e, 0xad, 0xee, 0x6f, 0x40, 0x93, 0xd7, 0xdd, 0x32, 0x37, 0xe9, 0x53, 0xb9, 0x03, 0x0d,
0x84, 0x3d, 0x45, 0x50, 0xe5, 0x36, 0xfc, 0x97, 0x05, 0x64, 0x8f, 0x85, 0x32, 0xc1, 0xc4, 0xf6,
0xc0, 0x5c, 0x09, 0xcf, 0x9b, 0x73, 0x0b, 0xab, 0x0b, 0xc8, 0x63, 0xd3, 0xfc, 0xa6, 0x0c, 0xf3,
0x53, 0xab, 0x99, 0xbe, 0x64, 0x71, 0xac, 0xe4, 0xc7, 0x6f, 0xc1, 0xc2, 0x99, 0x1b, 0x04, 0x34,
0x53, 0x4f, 0x6c, 0xa2, 0x12, 0xcf, 0xa1, 0x32, 0x07, 0x97, 0x0b, 0x9e, 0xd5, 0x16, 0xbc, 0x0a,
0xcb, 0xc6, 0x7a, 0x45, 0x34, 0xf4, 0x10, 0xd6, 0x38, 0x78, 0x37, 0x08, 0x26, 0xf6, 0xaa, 0xf6,
0x5f, 0xd7, 0x60, 0xbd, 0x34, 0x4d, 0x85, 0x0d, 0xa6, 0x19, 0xdf, 0x56, 0xcb, 0xad, 0x9e, 0xb0,
0x23, 0x3e, 0xc5, 0xac, 0xce, 0x3f, 0x59, 0x30, 0xc3, 0x41, 0x63, 0x77, 0xe3, 0x73, 0xe9, 0x10,
0x84, 0xc1, 0xf1, 0x8c, 0xe8, 0x3b, 0x93, 0x31, 0xe3, 0xff, 0xd3, 0x9f, 0x55, 0xb9, 0x27, 0x11,
0x2f, 0xaa, 0xdf, 0x83, 0x56, 0x11, 0xe1, 0x52, 0x4f, 0x4e, 0xbc, 0xaa, 0xf2, 0xe8, 0x94, 0x6a,
0xcf, 0xa8, 0x3f, 0xb3, 0x60, 0x71, 0x2f, 0x0a, 0x3d, 0x9f, 0xdd, 0x98, 0x07, 0x6e, 0xe2, 0x0e,
0x52, 0xf1, 0x92, 0xcf, 0x41, 0xb2, 0xec, 0xae, 0x00, 0x23, 0x0a, 0x9c, 0x5b, 0x00, 0xbd, 0x13,
0xda, 0x7b, 0xd1, 0x15, 0x15, 0x47, 0xfe, 0xfc, 0xcf, 0x20, 0x1f, 0xfa, 0x5e, 0x4a, 0xde, 0x82,
0xe5, 0x7c, 0xb8, 0xeb, 0x86, 0x5e, 0x57, 0x94, 0x1b, 0xf1, 0x75, 0x43, 0xe1, 0xed, 0x86, 0xde,
0x6e, 0xfa, 0x22, 0x65, 0xb1, 0xa2, 0xaa, 0xb2, 0x75, 0x0d, 0x17, 0xbe, 0xa8, 0xe0, 0xbb, 0x08,
0xb6, 0xff, 0xd7, 0xc2, 0x1b, 0x50, 0xae, 0x4a, 0xec, 0x76, 0x5e, 0x58, 0xc3, 0x7a, 0xab, 0xb1,
0x65, 0xb5, 0xc2, 0x96, 0x11, 0x98, 0xf6, 0x33, 0x3a, 0x90, 0x17, 0x0b, 0xfb, 0x4d, 0x3e, 0x84,
0x96, 0x5a, 0x71, 0x37, 0x46, 0xb5, 0x88, 0x63, 0xb2, 0x9e, 0x27, 0x8e, 0x86, 0xd6, 0x9c, 0xc5,
0x5e, 0x41, 0x8d, 0xf2, 0x78, 0x5d, 0x99, 0xc8, 0x51, 0xf7, 0x50, 0xdb, 0xc2, 0x3f, 0xf1, 0x2f,
0x2e, 0x35, 0xed, 0x0d, 0x33, 0xea, 0x89, 0x50, 0x59, 0x7d, 0xdb, 0xff, 0x61, 0xc1, 0xe2, 0xae,
0xe7, 0xe1, 0xba, 0x27, 0x71, 0x13, 0x72, 0x95, 0xb5, 0x0b, 0x56, 0x39, 0xf5, 0x73, 0xae, 0xf2,
0x17, 0x76, 0x22, 0x23, 0x94, 0x60, 0xdb, 0xd0, 0xca, 0xd7, 0x59, 0xbd, 0xbd, 0xf6, 0xb7, 0x80,
0xf0, 0xf4, 0xca, 0x50, 0x47, 0x11, 0x6b, 0x15, 0x96, 0x0d, 0x2c, 0xe1, 0x6b, 0x3e, 0x86, 0x3b,
0xfb, 0x34, 0xdb, 0x4b, 0xce, 0xe3, 0x2c, 0x92, 0xe1, 0xec, 0x47, 0x34, 0x8e, 0x52, 0x5f, 0x7a,
0x2e, 0x3a, 0x91, 0xf7, 0xf9, 0x67, 0x0b, 0xee, 0x4e, 0x40, 0x48, 0x2c, 0xe1, 0x8b, 0x72, 0x7d,
0xe9, 0x37, 0xf4, 0xf6, 0x96, 0x89, 0xa8, 0xec, 0x28, 0x88, 0xe8, 0x32, 0x50, 0x24, 0x3b, 0x1f,
0xc0, 0x82, 0x39, 0x78, 0x29, 0x57, 0x11, 0xc0, 0xed, 0x0b, 0x84, 0x98, 0xc4, 0xe6, 0x6e, 0xc3,
0x42, 0xcf, 0x20, 0x21, 0x18, 0x15, 0xa0, 0xf6, 0x1e, 0xbc, 0x71, 0x21, 0x37, 0xa1, 0xb6, 0x91,
0x19, 0xba, 0xfd, 0x77, 0xd3, 0xb0, 0xfe, 0xdc, 0xcf, 0x4e, 0xbc, 0xc4, 0x3d, 0x93, 0xd6, 0x37,
0x89, 0x90, 0x85, 0xe4, 0xbd, 0x56, 0xae, 0x37, 0xdc, 0x83, 0xa5, 0x28, 0xa4, 0x98, 0x63, 0x74,
0x63, 0x37, 0x4d, 0xcf, 0xa2, 0x44, 0xde, 0xa5, 0x8b, 0x51, 0x48, 0x59, 0x9e, 0x71, 0x20, 0xc0,
0x85, 0xdb, 0x78, 0xba, 0x78, 0x1b, 0xb7, 0x60, 0x2a, 0xf6, 0x43, 0xf1, 0x66, 0xc2, 0x7e, 0xb2,
0xbb, 0x33, 0x4b, 0x5c, 0x4f, 0xa3, 0x2c, 0xee, 0x4e, 0x84, 0x2a, 0xba, 0x7a, 0x15, 0x7f, 0xb6,
0x50, 0xc5, 0xd7, 0x74, 0x32, 0x67, 0x56, 0x2d, 0xb6, 0xa1, 0x21, 0x7e, 0x76, 0x33, 0xb7, 0x2f,
0x52, 0x20, 0x10, 0xa0, 0xa7, 0x6e, 0x5f, 0x8b, 0xd6, 0xc0, 0x88, 0xd6, 0xb6, 0x00, 0x8e, 0x29,
0xed, 0x1a, 0xc9, 0x50, 0xfd, 0x98, 0x52, 0xee, 0x74, 0x59, 0xa8, 0x7c, 0xe4, 0x86, 0x2f, 0xba,
0x58, 0x83, 0x68, 0x72, 0x71, 0x18, 0xe0, 0x33, 0x77, 0x80, 0x31, 0x31, 0x0e, 0x4a, 0x99, 0xe6,
0xb9, 0x46, 0x19, 0x6c, 0x37, 0xaf, 0xa6, 0x20, 0x4a, 0xcf, 0xcf, 0xce, 0xdb, 0x0b, 0xf9, 0xfc,
0x3d, 0x3f, 0x3b, 0x57, 0xf3, 0x51, 0x67, 0xc9, 0x79, 0x7b, 0x31, 0x9f, 0xbf, 0xc7, 0x41, 0x4c,
0xbc, 0xf4, 0xcc, 0x3f, 0xa6, 0xbc, 0x31, 0xa4, 0x25, 0x5a, 0xa5, 0x18, 0x64, 0x2f, 0xf2, 0x30,
0x8c, 0x3c, 0xf3, 0x13, 0x2d, 0x39, 0x5d, 0xe2, 0x29, 0x2c, 0x03, 0x4a, 0xd3, 0xb0, 0xef, 0x41,
0x4b, 0x9a, 0x8b, 0xde, 0x3b, 0x99, 0xd0, 0x74, 0x18, 0x64, 0xb2, 0x77, 0x92, 0x7f, 0xd9, 0xef,
0x60, 0x57, 0xc4, 0xa7, 0x51, 0xbf, 0x9f, 0xa7, 0x4f, 0xc2, 0xb4, 0xd6, 0x60, 0x26, 0x40, 0xb8,
0x9c, 0xc2, 0xbf, 0xec, 0x10, 0xeb, 0x39, 0x85, 0x29, 0xf9, 0xab, 0x85, 0x1f, 0x1e, 0x47, 0x22,
0x5b, 0xc0, 0xdf, 0xec, 0x2c, 0x7a, 0xf4, 0x68, 0xd8, 0x97, 0x3d, 0x50, 0xf8, 0xc1, 0x30, 0xcf,
0xdc, 0x24, 0x14, 0x17, 0x2a, 0xfe, 0x66, 0x98, 0x34, 0x49, 0xa2, 0x44, 0xdc, 0x9e, 0xfc, 0xc3,
0xde, 0x87, 0xf5, 0xc3, 0xcb, 0x89, 0xc8, 0x08, 0xf1, 0x6a, 0x8d, 0x38, 0xfe, 0xf8, 0x61, 0x7f,
0x62, 0x74, 0x80, 0x60, 0x97, 0xc0, 0x24, 0xc7, 0x68, 0x05, 0xae, 0xa0, 0x2f, 0x97, 0xc4, 0xf0,
0x83, 0x65, 0x84, 0xed, 0x32, 0x35, 0xd5, 0x83, 0x56, 0xee, 0xa8, 0xe0, 0x9e, 0xf0, 0x57, 0x2a,
0x3a, 0x2a, 0x8c, 0xb9, 0x93, 0xb5, 0x54, 0x7c, 0xa3, 0x5d, 0x12, 0x5f, 0xc1, 0xb2, 0x2e, 0xda,
0x6b, 0xcd, 0xfa, 0x7f, 0x62, 0x61, 0x85, 0x4c, 0x65, 0x60, 0x87, 0x59, 0x42, 0xdd, 0xc1, 0x6b,
0x7d, 0x10, 0xff, 0x3e, 0xdc, 0xd0, 0xfb, 0xa5, 0x2e, 0x2d, 0x89, 0xfd, 0x07, 0xf8, 0x8c, 0xc8,
0x1f, 0xf9, 0x7f, 0x09, 0xf2, 0x7f, 0x00, 0xd7, 0x34, 0xf9, 0x2f, 0x29, 0xc6, 0x83, 0x3f, 0xbd,
0x07, 0x0b, 0xfb, 0x11, 0xbf, 0xb1, 0x9e, 0x32, 0x47, 0x9d, 0x90, 0x27, 0x30, 0x2b, 0x3a, 0x84,
0xc9, 0x5a, 0xa9, 0x65, 0x18, 0x29, 0x76, 0xd6, 0x47, 0xb4, 0x12, 0xdb, 0xcb, 0x5f, 0xff, 0xeb,
0xbf, 0xff, 0xb4, 0x36, 0x4f, 0x1a, 0xf7, 0x4f, 0xdf, 0xb9, 0xdf, 0xa7, 0x19, 0x7a, 0x84, 0x3e,
0xcc, 0x1b, 0x4d, 0x9d, 0x64, 0xd3, 0x68, 0xcc, 0x2c, 0xf4, 0x7a, 0x76, 0xb6, 0xc6, 0xb6, 0x6d,
0xda, 0x57, 0x91, 0xc5, 0x32, 0x59, 0x12, 0x2c, 0xf2, 0x7e, 0x4d, 0xf2, 0x25, 0x2c, 0x3e, 0xc2,
0x4a, 0xb1, 0x22, 0x4a, 0xb6, 0x73, 0x62, 0x95, 0xbd, 0xaa, 0x9d, 0xeb, 0xa3, 0x11, 0x04, 0xc3,
0x0d, 0x64, 0xb8, 0x4a, 0x96, 0x19, 0x43, 0x5e, 0x89, 0x56, 0x3c, 0x49, 0x0a, 0x2d, 0xd1, 0xfd,
0xf6, 0x4a, 0x79, 0x6e, 0x22, 0xcf, 0x35, 0xb2, 0xc2, 0x78, 0x7a, 0x9c, 0x41, 0xce, 0x34, 0xc2,
0x42, 0x97, 0xde, 0xad, 0x49, 0xae, 0x8d, 0x6c, 0xe3, 0xe4, 0x2c, 0xb7, 0x2f, 0x68, 0xf3, 0x34,
0x57, 0xd9, 0xa7, 0x0c, 0x57, 0x75, 0x7a, 0x92, 0x9f, 0x72, 0xef, 0x57, 0xd9, 0x57, 0x4c, 0xde,
0xb8, 0xb8, 0x99, 0x99, 0xcb, 0x70, 0x67, 0xd2, 0xae, 0x67, 0xfb, 0x5b, 0x28, 0xcc, 0x35, 0xb2,
0x29, 0x84, 0x31, 0x3a, 0x9d, 0x65, 0x2f, 0x35, 0xe9, 0x41, 0x53, 0x6f, 0xd1, 0x24, 0x1b, 0x15,
0xce, 0x56, 0x31, 0xdf, 0xac, 0x1e, 0x14, 0x0c, 0xdb, 0xc8, 0x90, 0x90, 0x96, 0x60, 0xa8, 0x3a,
0x3a, 0xc9, 0x57, 0xb0, 0x58, 0x68, 0x6f, 0x24, 0x76, 0x61, 0xfb, 0x2a, 0x5a, 0x55, 0x3b, 0x37,
0xc7, 0xe2, 0x08, 0xae, 0xd7, 0x90, 0x6b, 0xdb, 0x5e, 0xd6, 0x76, 0x59, 0x72, 0xfe, 0xae, 0x75,
0x8f, 0xa4, 0xb8, 0xcf, 0x7a, 0x27, 0xde, 0x44, 0xbc, 0xb7, 0x2f, 0x68, 0xe3, 0x2b, 0xed, 0xb5,
0xe4, 0x89, 0xa7, 0x35, 0xc5, 0xee, 0x26, 0xad, 0x7f, 0x14, 0x23, 0x91, 0x49, 0xf8, 0x6e, 0x55,
0xf7, 0x9f, 0x8a, 0x16, 0x58, 0xbb, 0x83, 0x5c, 0x57, 0x08, 0x29, 0x70, 0x8d, 0xb2, 0x98, 0xa4,
0x46, 0x7b, 0xae, 0x60, 0x6a, 0x5a, 0x75, 0x45, 0x83, 0x6c, 0xe5, 0x4a, 0xf5, 0x8e, 0xd7, 0x91,
0x2b, 0x8d, 0xb2, 0x38, 0x25, 0x2f, 0x61, 0x81, 0xbb, 0x8b, 0x57, 0xbf, 0xb3, 0x5b, 0xc8, 0x77,
0xdd, 0x26, 0xb9, 0xcf, 0xd0, 0x37, 0xf6, 0x39, 0xd4, 0xd5, 0x95, 0x41, 0xda, 0xda, 0x22, 0x8c,
0x5e, 0xc5, 0xce, 0x88, 0x4e, 0x34, 0x69, 0xad, 0xf6, 0xbc, 0x58, 0x15, 0xef, 0x2b, 0x63, 0x84,
0x7f, 0x0c, 0x90, 0xb7, 0xa6, 0x91, 0xab, 0x25, 0xca, 0x4a, 0x73, 0x9d, 0xaa, 0x21, 0xd9, 0x84,
0x8f, 0xe4, 0x5b, 0x64, 0xc1, 0x20, 0x2f, 0xcf, 0x9b, 0xba, 0x21, 0x8d, 0xf3, 0x56, 0x6c, 0x66,
0xeb, 0x8c, 0xee, 0x62, 0x92, 0x9b, 0x62, 0xcb, 0xc3, 0xa6, 0x2a, 0x21, 0x6c, 0x05, 0xfc, 0xb2,
0xd0, 0xda, 0xa7, 0x36, 0xab, 0xb8, 0x54, 0x5e, 0x16, 0xe5, 0x5e, 0xa8, 0xd2, 0x65, 0x91, 0xb7,
0x3c, 0x91, 0x17, 0xf8, 0x47, 0x48, 0x5a, 0xf7, 0x0f, 0xd1, 0x69, 0x95, 0x5b, 0xa1, 0x3a, 0xd7,
0x46, 0x0d, 0xa7, 0xd5, 0xf6, 0x2d, 0x92, 0x25, 0x3c, 0x54, 0x7c, 0xc3, 0x79, 0xcf, 0x8f, 0xb1,
0xe1, 0x46, 0x6b, 0x50, 0xe7, 0x6a, 0xc5, 0x88, 0xa0, 0xbe, 0x8a, 0xd4, 0x17, 0xc9, 0xbc, 0x72,
0x89, 0x48, 0x8b, 0xef, 0x89, 0x7a, 0x8c, 0x35, 0xf6, 0xa4, 0xd8, 0xb1, 0x63, 0xf8, 0xc0, 0x52,
0xdf, 0x4e, 0xc9, 0x07, 0xaa, 0xce, 0x1c, 0xf2, 0x87, 0x66, 0x03, 0x90, 0x6c, 0x48, 0xb0, 0xc7,
0x76, 0x10, 0x94, 0x4e, 0xcb, 0xc8, 0x2e, 0x03, 0x7b, 0x1b, 0x39, 0x5f, 0x25, 0xeb, 0x45, 0xce,
0xa2, 0x63, 0x81, 0x7c, 0x6d, 0xc1, 0x72, 0xc5, 0x7b, 0x78, 0x2e, 0xc1, 0xe8, 0xd7, 0xfb, 0x5c,
0x82, 0x71, 0x0f, 0xea, 0x36, 0x4a, 0xb0, 0x69, 0xa3, 0x04, 0xae, 0xe7, 0x29, 0x09, 0x44, 0xee,
0xc7, 0x2c, 0xf3, 0xcf, 0x2d, 0x58, 0xab, 0x7e, 0xfb, 0x26, 0xb7, 0xd4, 0x9f, 0x35, 0x8c, 0x7b,
0x95, 0xef, 0xdc, 0xbe, 0x08, 0x4d, 0x48, 0x73, 0x0b, 0xa5, 0xd9, 0xb6, 0x3b, 0x4c, 0x9a, 0x04,
0x71, 0xab, 0x04, 0x3a, 0xc3, 0x82, 0xa1, 0xf9, 0xba, 0x4c, 0xb4, 0xd8, 0xa2, 0xfa, 0x11, 0xbe,
0x73, 0x63, 0x0c, 0x86, 0xe9, 0xbe, 0xc8, 0xaa, 0xd8, 0x10, 0x7c, 0x92, 0x55, 0xcf, 0xd4, 0xe2,
0x8c, 0xe6, 0xaf, 0xb7, 0xc6, 0x19, 0x2d, 0x3d, 0x48, 0x1b, 0x67, 0xb4, 0xfc, 0x46, 0x5c, 0x3a,
0xa3, 0xc8, 0x0c, 0xdf, 0x8b, 0xc9, 0xe7, 0x78, 0x6c, 0x44, 0xb5, 0xba, 0x5d, 0x3c, 0xea, 0x69,
0xd5, 0xb1, 0x31, 0xeb, 0xd1, 0x25, 0x57, 0xc9, 0x8b, 0xe0, 0x4c, 0x7b, 0x0e, 0xcc, 0x49, 0x74,
0xb2, 0x5e, 0x24, 0x20, 0x29, 0x57, 0x3e, 0x38, 0xda, 0xeb, 0x48, 0x74, 0xc9, 0x6e, 0xea, 0x44,
0x19, 0xcd, 0x23, 0x68, 0x68, 0x8f, 0x6b, 0x44, 0x39, 0xd9, 0xf2, 0x5b, 0x62, 0x67, 0xa3, 0x72,
0xcc, 0x74, 0x25, 0xf6, 0x22, 0x63, 0x90, 0x22, 0x82, 0xe2, 0xf1, 0xbb, 0x30, 0x6f, 0xbc, 0x6f,
0xe5, 0xca, 0xaf, 0x7a, 0x81, 0xcb, 0x95, 0x5f, 0xf9, 0x28, 0x26, 0x03, 0x4d, 0x1b, 0x95, 0x9f,
0x0a, 0x14, 0xc5, 0xeb, 0x0b, 0xa8, 0xab, 0x67, 0xa5, 0x5c, 0xff, 0xc5, 0x97, 0xa6, 0x8b, 0x78,
0x18, 0x7b, 0x70, 0xc6, 0x26, 0x1f, 0x45, 0x83, 0x23, 0xa1, 0x2f, 0xed, 0xd1, 0x24, 0xd7, 0x57,
0xf9, 0xe5, 0x28, 0xd7, 0x57, 0xd5, 0x2b, 0x8b, 0xa1, 0xaf, 0x1e, 0x22, 0xa8, 0x35, 0x24, 0xb0,
0x58, 0x78, 0xac, 0xc8, 0xc3, 0x8a, 0xea, 0xa7, 0x99, 0x3c, 0xac, 0x18, 0xf1, 0xca, 0x61, 0x06,
0x6e, 0x9c, 0x9f, 0x1b, 0x04, 0xb9, 0x6d, 0x71, 0x77, 0xcf, 0x4b, 0xf9, 0x86, 0xdd, 0x1a, 0x6f,
0x16, 0x86, 0xdd, 0x9a, 0x75, 0xff, 0x92, 0xbb, 0xa7, 0x9c, 0xd6, 0x33, 0x98, 0x93, 0x35, 0xe4,
0xdc, 0x68, 0x0b, 0xd5, 0xf3, 0x4e, 0xbb, 0x3c, 0x20, 0xa8, 0x1a, 0x86, 0xeb, 0x7a, 0x1e, 0x52,
0x15, 0x1b, 0xa1, 0x55, 0x94, 0xf3, 0x8d, 0x28, 0x17, 0xa3, 0xf3, 0x8d, 0xa8, 0x2a, 0x41, 0x1b,
0x1b, 0xc1, 0x3d, 0x97, 0xe2, 0xf1, 0xf7, 0x16, 0x66, 0xda, 0xe3, 0x0b, 0xc2, 0xe4, 0xed, 0x4b,
0xd4, 0x8e, 0xb9, 0x40, 0xef, 0x5c, 0xba, 0xda, 0x6c, 0xdf, 0x41, 0x31, 0x6d, 0x7b, 0x4b, 0x5e,
0xa6, 0x38, 0xcd, 0xe3, 0xe8, 0xaa, 0xf4, 0xcc, 0x84, 0xfe, 0x5b, 0x8b, 0xff, 0x89, 0xe9, 0x18,
0xba, 0x64, 0x67, 0x42, 0x01, 0xa4, 0xc0, 0xf7, 0x27, 0xc6, 0x17, 0xe2, 0xde, 0x46, 0x71, 0xaf,
0xdb, 0x1b, 0x63, 0xc4, 0x65, 0xc2, 0xfe, 0x3e, 0x6c, 0xa8, 0xc2, 0xb1, 0x41, 0xf7, 0xe3, 0x61,
0xe8, 0xa5, 0x79, 0x5e, 0x3a, 0xa2, 0xba, 0x9c, 0x1b, 0x4e, 0xb1, 0x9e, 0x68, 0xde, 0x8f, 0x67,
0x62, 0x94, 0x8b, 0x71, 0xcc, 0x68, 0x33, 0xee, 0x31, 0x2c, 0xc9, 0x79, 0x1f, 0xfb, 0x6e, 0xf6,
0x0b, 0xf3, 0xbc, 0x8e, 0x3c, 0x3b, 0xf6, 0xaa, 0xce, 0xf3, 0xd8, 0x77, 0x33, 0xc5, 0x31, 0xc5,
0x77, 0x40, 0xa3, 0x54, 0xa8, 0x27, 0xdf, 0x95, 0x45, 0x44, 0x3d, 0xf9, 0xae, 0xae, 0x6a, 0x9a,
0xc9, 0x77, 0x9f, 0x66, 0xbc, 0xca, 0xe8, 0x09, 0x06, 0xa7, 0xd0, 0x3a, 0x1c, 0xc9, 0xf4, 0xf0,
0xe7, 0x66, 0x2a, 0x62, 0x20, 0x1b, 0x99, 0xa6, 0x05, 0xa6, 0x6c, 0xb1, 0xa7, 0xfc, 0xd1, 0x53,
0x2f, 0x22, 0x92, 0xed, 0xd1, 0xe5, 0xc5, 0x32, 0xdf, 0xca, 0xfa, 0xa3, 0xc9, 0x57, 0xcb, 0x90,
0xf0, 0x4f, 0xeb, 0x18, 0xdf, 0x73, 0x20, 0x66, 0x96, 0x84, 0x7f, 0x92, 0xa1, 0xbc, 0x40, 0x45,
0xe9, 0x70, 0xb2, 0x14, 0xe9, 0x06, 0x32, 0xde, 0xb0, 0xd7, 0xca, 0x29, 0x12, 0xe3, 0xcd, 0x58,
0xff, 0x1e, 0x2c, 0x17, 0x72, 0xef, 0x57, 0xc4, 0xdb, 0x30, 0xe7, 0x42, 0xe2, 0x2d, 0x99, 0x67,
0x98, 0x07, 0x17, 0xea, 0x81, 0xe4, 0x46, 0x55, 0xbe, 0x61, 0x94, 0xdb, 0xc6, 0x65, 0x3e, 0xe2,
0xde, 0x20, 0x6b, 0xa5, 0x74, 0x04, 0x29, 0xbc, 0x6d, 0x91, 0x3f, 0xb3, 0xb0, 0x0b, 0x7e, 0x44,
0x39, 0x92, 0xdc, 0xad, 0x4a, 0x78, 0x2f, 0x2d, 0x86, 0xf0, 0x27, 0xe4, 0x5a, 0x31, 0x2b, 0x2e,
0x89, 0x73, 0x82, 0x15, 0x08, 0xbd, 0xa8, 0x68, 0xe4, 0xe4, 0x15, 0xd5, 0xc6, 0x91, 0x49, 0x6b,
0x31, 0x15, 0x17, 0x59, 0xa5, 0xe4, 0xf4, 0x13, 0xf3, 0x6f, 0x5d, 0x0d, 0x96, 0xb7, 0x2b, 0x56,
0x7d, 0x19, 0xd6, 0x37, 0x91, 0xf5, 0x16, 0xd9, 0x28, 0xac, 0xd7, 0x14, 0xe1, 0x68, 0x06, 0xff,
0x75, 0x8a, 0x77, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x60, 0x0b, 0x6d, 0xd0, 0x42, 0x00,
0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

File diff suppressed because it is too large Load Diff

View File

@@ -262,7 +262,7 @@ message ForexProvider {
string name = 1;
bool enabled = 2;
bool verbose = 3;
string rest_rolling_delay = 4;
string rest_polling_delay = 4;
string api_key = 5;
int64 api_key_level =6;
bool primary_provider = 7;
@@ -518,7 +518,7 @@ service GoCryptoTrader {
rpc GetSubsystems (GetSubsystemsRequest) returns (GetSusbsytemsResponse) {
option (google.api.http) = {
get: "/v1/getsusbsystems"
get: "/v1/getsubsystems"
};
}
@@ -806,7 +806,7 @@ service GoCryptoTrader {
rpc GetTickerStream(GetTickerStreamRequest) returns (stream TickerResponse) {
option (google.api.http) = {
get: "/v1/getTickerstream"
get: "/v1/gettickerstream"
};
}

View File

@@ -271,54 +271,6 @@
]
}
},
"/v1/getTickerstream": {
"get": {
"operationId": "GetTickerStream",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/x-stream-definitions/gctrpcTickerResponse"
}
}
},
"parameters": [
{
"name": "exchange",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pair.delimiter",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pair.base",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pair.quote",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "asset_type",
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"GoCryptoTrader"
]
}
},
"/v1/getaccountinfo": {
"get": {
"operationId": "GetAccountInfo",
@@ -868,7 +820,7 @@
]
}
},
"/v1/getsusbsystems": {
"/v1/getsubsystems": {
"get": {
"operationId": "GetSubsystems",
"responses": {
@@ -926,6 +878,54 @@
]
}
},
"/v1/gettickerstream": {
"get": {
"operationId": "GetTickerStream",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/x-stream-definitions/gctrpcTickerResponse"
}
}
},
"parameters": [
{
"name": "exchange",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pair.delimiter",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pair.base",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pair.quote",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "asset_type",
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"GoCryptoTrader"
]
}
},
"/v1/removeevent": {
"post": {
"operationId": "RemoveEvent",
@@ -1379,7 +1379,7 @@
"type": "boolean",
"format": "boolean"
},
"rest_rolling_delay": {
"rest_polling_delay": {
"type": "string"
},
"api_key": {

9
go.mod
View File

@@ -6,12 +6,12 @@ require (
github.com/cockroachdb/apd v1.1.0 // indirect
github.com/gofrs/uuid v3.2.0+incompatible
github.com/gogo/protobuf v1.2.1 // indirect
github.com/golang/protobuf v1.3.1
github.com/golang/protobuf v1.3.2
github.com/google/go-querystring v1.0.0
github.com/gorilla/mux v1.7.3
github.com/gorilla/websocket v1.4.0
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0
github.com/grpc-ecosystem/grpc-gateway v1.9.2
github.com/grpc-ecosystem/grpc-gateway v1.11.3
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 // indirect
github.com/jackc/pgx v3.5.0+incompatible
github.com/jmoiron/sqlx v1.2.0
@@ -23,7 +23,8 @@ require (
github.com/toorop/go-pusher v0.0.0-20180521062818-4521e2eb39fb
github.com/urfave/cli v1.20.0
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5
golang.org/x/net v0.0.0-20190606173856-1492cefac77f // indirect
google.golang.org/genproto v0.0.0-20190605220351-eb0b1bdb6ae6
golang.org/x/net v0.0.0-20190606173856-1492cefac77f
google.golang.org/genproto v0.0.0-20191002211648-c459b9ce5143
google.golang.org/grpc v1.21.1
gopkg.in/yaml.v2 v2.2.4 // indirect
)

11
go.sum
View File

@@ -8,6 +8,7 @@ github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
@@ -21,6 +22,8 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
@@ -32,6 +35,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmo
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/grpc-gateway v1.9.2 h1:S+ef0492XaIknb8LMjcwgW2i3cNTzDYMmDrOThOJNWc=
github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.11.3 h1:h8+NsYENhxNTuq+dobk3+ODoJtwY4Fu0WQXsxJfL8aM=
github.com/grpc-ecosystem/grpc-gateway v1.11.3/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc=
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
github.com/jackc/pgx v3.5.0+incompatible h1:BRJ4G3UPtvml5R1ey0biqqGuYUGayMYekm3woO75orY=
@@ -104,11 +109,17 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190605220351-eb0b1bdb6ae6 h1:XRqWpmQ5ACYxWuYX495S0sHawhPGOVrh62WzgXsQnWs=
google.golang.org/genproto v0.0.0-20190605220351-eb0b1bdb6ae6/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
google.golang.org/genproto v0.0.0-20191002211648-c459b9ce5143 h1:tikhlQEJeezbnu0Zcblj7g5vm/L7xt6g1vnfq8mRCS4=
google.golang.org/genproto v0.0.0-20191002211648-c459b9ce5143/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

View File

@@ -16,9 +16,9 @@ var (
)
// AdjustGoMaxProcs sets the runtime GOMAXPROCS val
// Since Go 1.5, Go will use the total number of logical processers that the
// Since Go 1.5, Go will use the total number of logical processors that the
// system has available. Caveats to this are if someone has set the GOMAXPROCS
// env var set or wish to limit usage of the number of logical processers
// env var set or wish to limit usage of the number of logical processors
// between a range from 1 to NumCPUs
func AdjustGoMaxProcs(procs int) error {
// Check for default settings, plus respecting GOMAXPROCS env but

View File

@@ -51,7 +51,7 @@ func TestAdjustGoMaxProcs(t *testing.T) {
for x := range tester {
if err := checker(tester[x].Setting, tester[x].Expected); err != nil {
t.Errorf("%d failed. %s", tester[x], err)
t.Errorf("%d failed. %s", x, err)
}
}
}