diff --git a/go-client/README.md b/go-client/README.md index 2607f87..0928471 100644 --- a/go-client/README.md +++ b/go-client/README.md @@ -23,15 +23,23 @@ FTSOv2 Top Level system (see [link](https://github.com/flare-foundation/ftso-v2- where it registers its **sortition private kay** (see below on how to generate the sortition key). +Set private information in environment variables + +```bash +# voters private key registered in the VoterRegistry, aka signingPolicy private key +SIGNING_PRIVATE_KEY="0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb" +# voters sortition key registered in the VoterRegistry contract that enables generating verifiable +# randomness to determine the order of clients submitting the fast updates +SORTITION_PRIVATE_KEY="0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb" +# private keys of accounts from which the fast updates will be +# submitted - the client needs multiple addresses to not miss the +# submission window in case multiple fast updates can be submitted +# for blocks in a short interval +ACCOUNTS="0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb,0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569,0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131" +``` + ```toml [client] -# private key corresponding to voter's "signingPolicyAddress" -# can also be set up with environment variable PRIVATE_KEY -signing_private_key = "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb" -# voters sortition key registered in the VoterRegistry contract that enables to generate verifiable -# randomness to determine the order of clients submitting the fast updates -# can also be set up with environment variable SORTITION_PRIVATE_KEY -sortition_private_key = "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb" # address of the FastUpdater contract fast_updater_address = "0xbe65A1F9a31D5E81d5e2B863AEf15bF9b3d92891" # address of the Submission contract to which the updates are sent @@ -44,16 +52,6 @@ incentive_manager_address = "0x919b4b4B561C72c990DC868F751328eF127c45F4" submission_window = 10 [transactions] -# private keys of accounts from which the fast updates will be -# submitted - the client needs multiple addresses to not miss the -# submission window in case multiple fast updates can be submitted -# for blocks in a short interval -# can also be set up with environment variable ACCOUNTS -accounts = [ - "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb", - "0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569", - "0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131", -] gas_limit = 8000000 value = 0 gas_price_multiplier = 1.2 @@ -63,6 +61,9 @@ gas_price_multiplier = 1.2 level = "INFO" file = "./logger/logs/fast_updates_client.log" console = true +# when the balance (in WEI) of the provided accounts falls bellow this value +# the logger will show warnings +min_balance = 10000000000000000000 [chain] node_url = "https://coston2-api.flare.network/ext/C/rpc" @@ -71,8 +72,9 @@ api_key = "" chain_id = 114 ``` -It is advised that the private key, sortition private key, and accounts private keys -are set using environment variables to avoid accidentally exposing them. +The private key, sortition private key, and accounts private keys can also be set in +the configuration file, but we strongly suggest to set them using environment variables +to avoid accidentally exposing them. ## Price Updates Provider @@ -94,8 +96,8 @@ one can define in `main.go` which price provider will be used. ## Running the FTSO Fast Updates Client -Assuming that the configuration file was set and the provider is -registered, simply run +Assuming that the configuration file and configuration environment variables ware set and +the provider is registered, simply run ```bash go run main.go --config config.toml diff --git a/go-client/client/client.go b/go-client/client/client.go index fb764f7..65822eb 100644 --- a/go-client/client/client.go +++ b/go-client/client/client.go @@ -38,6 +38,7 @@ type FastUpdatesClient struct { transactionQueue *TransactionQueue allFeeds []provider.FeedId loggingParams config.LoggerConfig + Stats UpdatesStats } type Account struct { @@ -45,6 +46,11 @@ type Account struct { PrivateKey *ecdsa.PrivateKey } +type UpdatesStats struct { + NumUpdates uint64 + NumSuccessfulUpdates uint64 +} + const ( refreshFeedsBlockInterval = 100 ) @@ -238,9 +244,9 @@ func (client *FastUpdatesClient) Run(startBlock, endBlock uint64) error { } logger.Info("new epoch, my weight weight %d, current block %d", weight, blockNum) } - cutoff, err := client.GetCurrentScoreCutoff() + cutoff, err := client.GetBlockScoreCutoff(big.NewInt(int64(blockNum))) // todo if err != nil { - return fmt.Errorf("Run: GetCurrentScoreCutoff: %w", err) + return fmt.Errorf("Run: GetCurrentScoreCutoff for block %d: %w", blockNum, err) } updateProofs, err := sortition.FindUpdateProofs(client.key, seed, cutoff, big.NewInt(int64(blockNum)), weight) @@ -250,6 +256,17 @@ func (client *FastUpdatesClient) Run(startBlock, endBlock uint64) error { for _, updateProof := range updateProofs { logger.Info("scheduling update for block %d replicate %d", updateProof.BlockNumber, updateProof.Replicate) client.SubmitUpdates(updateProof) + client.Stats.NumUpdates++ + } + + if len(updateProofs) > 0 { + balances, err := client.GetBalances() + if err != nil { + logger.Error("could not obtain balances: %s", err) + } + if !CheckBalances(balances, client.loggingParams.MinBalance) { + logger.Warn("account balance low: %s", balances) + } } if client.loggingParams.FeedValuesLog != 0 && blockNum%uint64(client.loggingParams.FeedValuesLog) == 0 { @@ -263,7 +280,7 @@ func (client *FastUpdatesClient) Run(startBlock, endBlock uint64) error { } // do not calculate in advance more than specified - err = WaitForBlock(client.transactionQueue, blockNum-uint64(client.params.AdvanceBlocks)) + err = WaitForBlock(client.transactionQueue, blockNum) if err != nil { return fmt.Errorf("Run: WaitForBlock: %w", err) } diff --git a/go-client/client/client_requests.go b/go-client/client/client_requests.go index adb1620..3bbbf45 100644 --- a/go-client/client/client_requests.go +++ b/go-client/client/client_requests.go @@ -36,6 +36,15 @@ func (client *FastUpdatesClient) GetCurrentScoreCutoff() (*big.Int, error) { return score, err } +func (client *FastUpdatesClient) GetBlockScoreCutoff(blockNum *big.Int) (*big.Int, error) { + ctx, cancelFunc := context.WithTimeout(context.Background(), time.Duration(config.CallTimeoutMillisDefault)*time.Millisecond) + ops := &bind.CallOpts{Context: ctx} + score, err := client.fastUpdater.BlockScoreCutoff(ops, blockNum) + cancelFunc() + + return score, err +} + func (client *FastUpdatesClient) GetSeed(rewardEpochId int64) (*big.Int, error) { ctx, cancelFunc := context.WithTimeout(context.Background(), time.Duration(config.CallTimeoutMillisDefault)*time.Millisecond) ops := &bind.CallOpts{Context: ctx} @@ -54,6 +63,15 @@ func (client *FastUpdatesClient) GetScale() (*big.Int, error) { return scale, err } +func (client *FastUpdatesClient) GetExpectedSampleSize() (*big.Int, error) { + ctx, cancelFunc := context.WithTimeout(context.Background(), time.Duration(config.CallTimeoutMillisDefault)*time.Millisecond) + ops := &bind.CallOpts{Context: ctx} + sampleSize, err := client.IncentiveManager.GetExpectedSampleSize(ops) + cancelFunc() + + return sampleSize, err +} + func (client *FastUpdatesClient) GetCurrentRewardEpochId() (int64, error) { ctx, cancelFunc := context.WithTimeout(context.Background(), time.Duration(config.CallTimeoutMillisDefault)*time.Millisecond) ops := &bind.CallOpts{Context: ctx} @@ -78,7 +96,7 @@ func (client *FastUpdatesClient) GetMyWeight() (uint64, error) { return weight.Uint64(), nil } -func (client *FastUpdatesClient) GetPrices(feedIndexes []int) ([]float64, error) { +func (client *FastUpdatesClient) GetFeeds(feedIndexes []int) ([]float64, uint64, error) { ctx, cancelFunc := context.WithTimeout(context.Background(), time.Duration(config.CallTimeoutMillisDefault)*time.Millisecond) ops := &bind.CallOpts{Context: ctx} @@ -91,7 +109,7 @@ func (client *FastUpdatesClient) GetPrices(feedIndexes []int) ([]float64, error) cancelFunc() floatValues := RawChainValuesToFloats(feedValues) - return floatValues, err + return floatValues, feedValues.Timestamp, err } func (client *FastUpdatesClient) GetCurrentFeedIds() ([]provider.FeedId, error) { @@ -119,6 +137,21 @@ func (client *FastUpdatesClient) Register(epoch int64) { client.transactionQueue.InputChan <- compReq } +func (client *FastUpdatesClient) GetBalances() ([]*big.Int, error) { + balances := make([]*big.Int, len(client.transactionAccounts)) + for i, account := range client.transactionAccounts { + balance, err := client.chainClient.BalanceAt(context.Background(), + account.Address, nil) + if err != nil { + return nil, err + } + + balances[i] = balance + } + + return balances, nil +} + // only on mocked func (client *FastUpdatesClient) register(epoch int64, txOpts *bind.TransactOpts) error { policy := mock.FlareSystemMockPolicy{Pk1: client.key.Pk.X.Bytes(), Pk2: client.key.Pk.Y.Bytes(), Weight: uint16(1000)} @@ -176,7 +209,7 @@ func (client *FastUpdatesClient) getOnlineOfflineValues() ([]int, []float64, []f } // get current prices from on-chain - chainValues, err := client.GetPrices(supportedFeedIndexes) + chainValues, _, err := client.GetFeeds(supportedFeedIndexes) if err != nil { return nil, nil, nil, err } @@ -191,6 +224,12 @@ func (client *FastUpdatesClient) submitUpdates(updateProof *sortition.UpdateProo return err } + // get current expectedSampleSize + sampleSize, err := client.GetExpectedSampleSize() + if err != nil { + return err + } + logger.Info("chain feeds values in block %d (before update): %v", client.transactionQueue.CurrentBlockNum, chainValues) logger.Info("provider feeds values: %v", providerValues) @@ -201,7 +240,7 @@ func (client *FastUpdatesClient) submitUpdates(updateProof *sortition.UpdateProo } // calculate deltas for provider and on-chain prices - deltas, deltasString, err := provider.GetDeltas(chainValues, providerValues, supportedFeedIndexes, scale) + deltas, deltasString, err := provider.GetDeltas(chainValues, providerValues, supportedFeedIndexes, scale, sampleSize) if err != nil { return err } @@ -248,9 +287,10 @@ func (client *FastUpdatesClient) submitUpdates(updateProof *sortition.UpdateProo return fmt.Errorf("transaction failed") } logger.Info("successful update for block %d replicate %d in block %d", updateProof.BlockNumber, updateProof.Replicate, receipt.BlockNumber.Int64()) + client.Stats.NumSuccessfulUpdates++ // get current prices from on-chain - chainValues, err = client.GetPrices(supportedFeedIndexes) + chainValues, _, err = client.GetFeeds(supportedFeedIndexes) if err != nil { return err } diff --git a/go-client/client/client_test.go b/go-client/client/client_test.go index 1a067fc..b603bd2 100644 --- a/go-client/client/client_test.go +++ b/go-client/client/client_test.go @@ -7,6 +7,7 @@ import ( "fast-updates-client/logger" "fast-updates-client/provider" "fast-updates-client/tests/test_utils" + "math" "os" "os/exec" "testing" @@ -23,18 +24,16 @@ func TestClient(t *testing.T) { chainAddress = "http://ganache:8545" valueProviderBaseUrl = "http://value-provider:3101" } else { - // running a ganache node - logger.Info("starting a ganache chain node") - // cmd := exec.Command("bash", "-c", "docker run --publish 8544:8545 trufflesuite/ganache:latest --chain.hardfork=\"london\" --miner.blockTime=5 --wallet.accounts \"0xc5e8f61d1ab959b397eecc0a37a6517b8e67a0e7cf1f4bce5591f3ed80199122, 10000000000000000000000\" \"0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb, 10000000000000000000000\" \"0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569, 10000000000000000000000\" \"0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131, 10000000000000000000000\"") - cmd := exec.Command("bash", "-c", "docker compose up ganache") + // running a ganache node and an external provider that returns fixed values for testing + logger.Info("starting a ganache chain node and data provider") + // Can set VALUE_PROVIDER_IMPL to "fixed" or "random" to return 0.01 or random values for all feeds. + cmd := exec.Command("bash", "-c", "docker compose up ganache --detach && VALUE_PROVIDER_IMPL=random docker compose up value-provider --detach") cmd.Dir = "../tests" - // cmd.Stdout = os.Stdout - // cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr go cmd.Run() //nolint:errcheck - chainAddress = "http://127.0.0.1:8545" - // runs an external provider that returns fixed values for testing - runValueProvider() + chainAddress = "http://127.0.0.1:8545" valueProviderBaseUrl = "http://localhost:3101" } @@ -57,14 +56,14 @@ func TestClient(t *testing.T) { cfgClient := config.FastUpdateClientConfig{ SigningPrivateKey: "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb", SortitionPrivateKey: "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb", - SubmissionWindow: 5, + SubmissionWindow: 4, MaxWeight: 1024, } cfgTransactions := config.TransactionsConfig{ Accounts: []string{"0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb", "0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569", "0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131"}, - GasLimit: 8000000, + GasLimit: 80000000, GasPriceMultiplier: 1.2, } cfgLog := config.LoggerConfig{Level: "DEBUG", Console: true, File: "../logger/logs/flare-ftso-indexer_test.log"} @@ -100,36 +99,62 @@ func TestClient(t *testing.T) { t.Fatal(err) } + feedIds, err := client.GetCurrentFeedIds() + if err != nil { + t.Fatal(err) + } + indexes := make([]int, len(feedIds)) + for i := range indexes { + indexes[i] = i + } + startingFeeds, _, err := client.GetFeeds(indexes) + if err != nil { + t.Fatal(err) + } + err = client.Run(blockNum, blockNum+10) if err != nil { t.Fatal(err) } client.Stop() - if chainNode != "docker_ganache" { - time.Sleep(time.Second) - // stopping a ganache node - cmd := exec.Command("bash", "-c", "docker compose stop ganache") - cmd.Dir = "../tests" - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err = cmd.Run() //nolint:errcheck + feeds, _, err := client.GetFeeds(indexes) + if err != nil { + t.Fatal(err) + } + scaleBig, err := client.GetScale() + if err != nil { + t.Fatal(err) + } + scaleFloat, _ := scaleBig.Float64() + scale := scaleFloat / math.Pow(2, 127) + + downDockerContainers() + if client.Stats.NumUpdates == 0 { if err != nil { - t.Fatal(err) + t.Fatal("no updates submitted") } - stopValueProvider() } -} -// Can set VALUE_PROVIDER_IMPL to "fixed" or "random" to return 0.01 or random values for all feeds. -func runValueProvider() { - cmd := exec.Command("bash", "-c", "VALUE_PROVIDER_IMPL=random docker compose up value-provider") - cmd.Dir = "../tests" - go cmd.Run() //nolint:errcheck + if client.Stats.NumSuccessfulUpdates == 0 { + if err != nil { + t.Fatal("no successful update") + } + } + + for i, val := range feeds { + // all updates are expected to be negative + expectedVal := startingFeeds[i] * math.Pow(scale, -float64(client.Stats.NumSuccessfulUpdates)) + if expectedVal*0.999 > val && expectedVal*1.001 < val { + if err != nil { + t.Fatal("final feed values not correct:", expectedVal, val) + } + } + } } -func stopValueProvider() { - cmd := exec.Command("bash", "-c", "docker compose stop value-provider") +func downDockerContainers() { + cmd := exec.Command("bash", "-c", "docker compose down ganache value-provider") cmd.Dir = "../tests" - go cmd.Run() //nolint:errcheck + cmd.Run() //nolint:errcheck } diff --git a/go-client/client/utils.go b/go-client/client/utils.go index a646523..ce5ddcb 100644 --- a/go-client/client/utils.go +++ b/go-client/client/utils.go @@ -26,3 +26,14 @@ func RawChainValuesToFloats(rawChainValues provider.ValuesDecimals) []float64 { } return floatValues } + +func CheckBalances(balances []*big.Int, minBalance float64) bool { + for _, balance := range balances { + balanceFloat, _ := balance.Float64() + if balanceFloat < minBalance { + return false + } + } + + return true +} diff --git a/go-client/config.toml b/go-client/config.toml index d889fd4..53b233b 100644 --- a/go-client/config.toml +++ b/go-client/config.toml @@ -4,14 +4,13 @@ [client] signing_private_key = "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb" sortition_private_key = "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb" -fast_updater_address = "0x8280D40C9E9F04229D2435EAad6e0011309ce81B" -fast_updates_configuration_address = "0xee61C304E6b07a0a4BB36e956cFDBbD7D665173E" -submission_address = "0x18b9306737eaf6E8FC8e737F488a1AE077b18053" +fast_updater_address = "0x9B931f5d3e24fc8C9064DB35bDc8FB4bE0E862f9" +fast_updates_configuration_address = "0x9A53e14B58383642cdB2bb4D5C46989F05C6B5f9" +submission_address = "0x2cA6571Daa15ce734Bbd0Bf27D5C9D16787fc33f" mock_address = "0xd4e934C2749CA8C1618659D02E7B28B074bf4df7" -flare_system_manager = "0xd4e934C2749CA8C1618659D02E7B28B074bf4df7" -incentive_manager_address = "0x78Aeff0658Fa67735fBF99Ce7CDB01Fe5D520259" +flare_system_manager = "0x85680Dd93755Fe5d0789773fd0896cEE51F9e358" +incentive_manager_address = "0xc1a22A1d295e829Caf3be61bd1E11E5eEd7f0F15" submission_window = 10 -advance_blocks = 0 max_weight = 512 value_provider_base_url = "http://localhost:3101" @@ -32,5 +31,5 @@ file = "./logger/logs/fast_updates_client.log" console = true [chain] -node_url = "http://127.0.0.1:8545" -chain_id = 1337 +node_url = "https://coston-api.flare.network/ext/bc/C/rpc" +chain_id = 16 diff --git a/go-client/config/config.go b/go-client/config/config.go index e7eeed0..996daab 100644 --- a/go-client/config/config.go +++ b/go-client/config/config.go @@ -32,10 +32,11 @@ type Config struct { } type LoggerConfig struct { - Level string `toml:"level"` // valid values are: DEBUG, INFO, WARN, ERROR, DPANIC, PANIC, FATAL (zap) - File string `toml:"file"` - MaxFileSize int `toml:"max_file_size"` // In megabytes - Console bool `toml:"console"` + Level string `toml:"level"` // valid values are: DEBUG, INFO, WARN, ERROR, DPANIC, PANIC, FATAL (zap) + File string `toml:"file"` + MaxFileSize int `toml:"max_file_size"` // In megabytes + Console bool `toml:"console"` + MinBalance float64 `toml:"min_balance"` FeedValuesLog int `toml:"feed_values_log"` } @@ -52,9 +53,8 @@ type FastUpdateClientConfig struct { IncentiveManagerAddress string `toml:"incentive_manager_address"` FlareSystemManagerAddress string `toml:"flare_system_manager"` MockAddress string `toml:"mock_address"` - SigningPrivateKey string `toml:"signing_private_key" envconfig:"PRIVATE_KEY"` + SigningPrivateKey string `toml:"signing_private_key" envconfig:"SIGNING_PRIVATE_KEY"` SortitionPrivateKey string `toml:"sortition_private_key" envconfig:"SORTITION_PRIVATE_KEY"` - AdvanceBlocks int `toml:"advance_blocks"` SubmissionWindow int `toml:"submission_window"` MaxWeight int `toml:"max_weight"` ValueProviderUrl string `toml:"value_provider_base_url"` diff --git a/go-client/contracts-interface/CircularListManager.abi b/go-client/contracts-interface/CircularListManager.abi index ae25a3e..0637a08 100644 --- a/go-client/contracts-interface/CircularListManager.abi +++ b/go-client/contracts-interface/CircularListManager.abi @@ -1 +1 @@ -[{"inputs":[],"name":"circularLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] \ No newline at end of file +[] \ No newline at end of file diff --git a/go-client/contracts-interface/FastUpdateIncentiveManager.abi b/go-client/contracts-interface/FastUpdateIncentiveManager.abi index 4187a25..2b2a6e8 100644 --- a/go-client/contracts-interface/FastUpdateIncentiveManager.abi +++ b/go-client/contracts-interface/FastUpdateIncentiveManager.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"},{"internalType":"address","name":"_addressUpdater","type":"address"},{"internalType":"SampleSize","name":"_ss","type":"uint256"},{"internalType":"Range","name":"_r","type":"uint256"},{"internalType":"SampleSize","name":"_sil","type":"uint256"},{"internalType":"Fee","name":"_rip","type":"uint256"},{"internalType":"uint256","name":"_dur","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"authorizedAmountWei","type":"uint256"}],"name":"DailyAuthorizedInflationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"encodedCall","type":"bytes"}],"name":"GovernanceCallTimelocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"initialGovernance","type":"address"}],"name":"GovernanceInitialised","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governanceSettings","type":"address"}],"name":"GovernedProductionModeEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"indexed":false,"internalType":"SampleSize","name":"sampleSizeIncrease","type":"uint256"},{"indexed":false,"internalType":"Fee","name":"offerAmount","type":"uint256"}],"name":"IncentiveOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountReceivedWei","type":"uint256"}],"name":"InflationReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"indexed":false,"internalType":"bytes","name":"feedIds","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"rewardBandValues","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"inflationShares","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationRewardsOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallExecuted","type":"event"},{"inputs":[],"name":"advance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"cancelGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"circularLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyAuthorizedInflation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"executeGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastUpdater","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastUpdatesConfiguration","outputs":[{"internalType":"contract IFastUpdatesConfiguration","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flareSystemsManager","outputs":[{"internalType":"contract IIFlareSystemsManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressUpdater","outputs":[{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getExpectedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpectedSampleSize","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInflationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrecision","outputs":[{"internalType":"Precision","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRange","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPoolSupplyData","outputs":[{"internalType":"uint256","name":"_lockedFundsWei","type":"uint256"},{"internalType":"uint256","name":"_totalInflationAuthorizedWei","type":"uint256"},{"internalType":"uint256","name":"_totalClaimedWei","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceSettings","outputs":[{"internalType":"contract IGovernanceSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExecutor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastInflationAuthorizationReceivedTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastInflationReceivedTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"internalType":"Range","name":"rangeLimit","type":"uint256"}],"internalType":"struct IFastUpdateIncentiveManager.IncentiveOffer","name":"_offer","type":"tuple"}],"name":"offerIncentive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"productionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rangeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveInflation","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rewardManager","outputs":[{"internalType":"contract IIRewardManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sampleIncreaseLimit","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toAuthorizeWei","type":"uint256"}],"name":"setDailyAuthorizedInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"SampleSize","name":"_ss","type":"uint256"},{"internalType":"Range","name":"_r","type":"uint256"},{"internalType":"uint256","name":"_dur","type":"uint256"}],"name":"setIncentiveParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"Fee","name":"_price","type":"uint256"}],"name":"setRangeIncreasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"SampleSize","name":"_lim","type":"uint256"}],"name":"setSampleIncreaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToProductionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"timelockedCalls","outputs":[{"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"internalType":"bytes","name":"encodedCall","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInflationAuthorizedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInflationReceivedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInflationRewardsOfferedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"_currentRewardEpochId","type":"uint24"},{"internalType":"uint64","name":"_currentRewardEpochExpectedEndTs","type":"uint64"},{"internalType":"uint64","name":"_rewardEpochDurationSeconds","type":"uint64"}],"name":"triggerRewardEpochSwitchover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_contractNameHashes","type":"bytes32[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"},{"internalType":"address","name":"_addressUpdater","type":"address"},{"internalType":"SampleSize","name":"_ss","type":"uint256"},{"internalType":"Range","name":"_r","type":"uint256"},{"internalType":"SampleSize","name":"_sil","type":"uint256"},{"internalType":"Range","name":"_ril","type":"uint256"},{"internalType":"Fee","name":"_x","type":"uint256"},{"internalType":"Fee","name":"_rip","type":"uint256"},{"internalType":"uint256","name":"_dur","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"authorizedAmountWei","type":"uint256"}],"name":"DailyAuthorizedInflationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"encodedCall","type":"bytes"}],"name":"GovernanceCallTimelocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"initialGovernance","type":"address"}],"name":"GovernanceInitialised","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governanceSettings","type":"address"}],"name":"GovernedProductionModeEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"indexed":false,"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"indexed":false,"internalType":"SampleSize","name":"sampleSizeIncrease","type":"uint256"},{"indexed":false,"internalType":"Fee","name":"offerAmount","type":"uint256"}],"name":"IncentiveOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountReceivedWei","type":"uint256"}],"name":"InflationReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"indexed":false,"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"feedConfigurations","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationRewardsOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallExecuted","type":"event"},{"inputs":[],"name":"advance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"cancelGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyAuthorizedInflation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"executeGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastUpdater","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastUpdatesConfiguration","outputs":[{"internalType":"contract IFastUpdatesConfiguration","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flareSystemsManager","outputs":[{"internalType":"contract IIFlareSystemsManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressUpdater","outputs":[{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCurrentSampleSizeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpectedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpectedSampleSize","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInflationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrecision","outputs":[{"internalType":"Precision","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRange","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPoolSupplyData","outputs":[{"internalType":"uint256","name":"_lockedFundsWei","type":"uint256"},{"internalType":"uint256","name":"_totalInflationAuthorizedWei","type":"uint256"},{"internalType":"uint256","name":"_totalClaimedWei","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceSettings","outputs":[{"internalType":"contract IGovernanceSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExecutor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastInflationAuthorizationReceivedTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastInflationReceivedTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"internalType":"Range","name":"rangeLimit","type":"uint256"}],"internalType":"struct IFastUpdateIncentiveManager.IncentiveOffer","name":"_offer","type":"tuple"}],"name":"offerIncentive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"productionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rangeIncreaseLimit","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rangeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveInflation","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rewardManager","outputs":[{"internalType":"contract IIRewardManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sampleIncreaseLimit","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toAuthorizeWei","type":"uint256"}],"name":"setDailyAuthorizedInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"SampleSize","name":"_ss","type":"uint256"},{"internalType":"Range","name":"_r","type":"uint256"},{"internalType":"Fee","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_dur","type":"uint256"}],"name":"setIncentiveParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"Range","name":"_lim","type":"uint256"}],"name":"setRangeIncreaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"Fee","name":"_price","type":"uint256"}],"name":"setRangeIncreasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"SampleSize","name":"_lim","type":"uint256"}],"name":"setSampleIncreaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToProductionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"timelockedCalls","outputs":[{"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"internalType":"bytes","name":"encodedCall","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInflationAuthorizedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInflationReceivedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInflationRewardsOfferedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"_currentRewardEpochId","type":"uint24"},{"internalType":"uint64","name":"_currentRewardEpochExpectedEndTs","type":"uint64"},{"internalType":"uint64","name":"_rewardEpochDurationSeconds","type":"uint64"}],"name":"triggerRewardEpochSwitchover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_contractNameHashes","type":"bytes32[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/FastUpdateIncentiveManager.bin b/go-client/contracts-interface/FastUpdateIncentiveManager.bin index 3171a57..3af0b44 100644 --- a/go-client/contracts-interface/FastUpdateIncentiveManager.bin +++ b/go-client/contracts-interface/FastUpdateIncentiveManager.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200344f3803806200344f8339810160408190526200003491620006c0565b878787808084848b8b60018a806200004c81620000cc565b506200005b848484846200014d565b50505050620000718282620001e560201b60201c565b506200009d9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5050505050620000b3836200035a60201b60201c565b620000be82620003b8565b50505050505050506200075a565b60008111620001485760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e2030000000000060648201526084015b60405180910390fd5b600055565b620001588462000416565b620001638362000474565b828411620001c05760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b60648201526084016200013f565b620001ca82600655565b620001d581620000cc565b620001df620004c4565b50505050565b600754600160a01b900460ff1615620002415760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064016200013f565b6001600160a01b038216620002995760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016200013f565b6001600160a01b038116620002e45760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016200013f565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b62000365816200060d565b620003b35760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c617267650060448201526064016200013f565b601555565b620003c3816200060d565b620004115760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c61726765000060448201526064016200013f565b601655565b62000421816200060d565b6200046f5760405162461bcd60e51b815260206004820152601560248201527f53616d706c652073697a6520746f6f206c61726765000000000000000000000060448201526064016200013f565b600455565b6200047f816200060d565b620004bf5760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b60448201526064016200013f565b600555565b620004d26001600062000623565b620004e06002600062000623565b620004ee6003600062000623565b6000546001600160401b038111156200050b576200050b62000744565b60405190808252806020026020018201604052801562000535578160200160208202803683370190505b5080516200054c9160019160209091019062000643565b506000546001600160401b038111156200056a576200056a62000744565b60405190808252806020026020018201604052801562000594578160200160208202803683370190505b508051620005ab9160029160209091019062000643565b506000546001600160401b03811115620005c957620005c962000744565b604051908082528060200260200182016040528015620005f3578160200160208202803683370190505b5080516200060a9160039160209091019062000643565b50565b60006200061d82600160801b1190565b92915050565b50805460008255906000526020600020908101906200060a919062000693565b82805482825590600052602060002090810192821562000681579160200282015b828111156200068157825182559160200191906001019062000664565b506200068f92915062000693565b5090565b5b808211156200068f576000815560010162000694565b6001600160a01b03811681146200060a57600080fd5b600080600080600080600080610100898b031215620006de57600080fd5b8851620006eb81620006aa565b60208a0151909850620006fe81620006aa565b60408a01519097506200071181620006aa565b60608a015160808b015160a08c015160c08d015160e0909d01519b9e9a9d50929b919a9099929850909650945092505050565b634e487b7160e01b600052604160045260246000fd5b612ce5806200076a6000396000f3fe6080604052600436106102465760003560e01c8063a5555aea11610139578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f81461064a578063ef88bf1314610668578063f5a9838314610688578063f5f5ba721461069d578063f7690bfe146106e9578063faae7fc91461070957600080fd5b8063dd8dca9f146105af578063debfda30146105c4578063e17f212e146105f4578063e273956314610615578063ea105ac71461063557600080fd5b8063bd76b69c116100fd578063bd76b69c1461052d578063c10f489a14610543578063d0c1c39314610563578063d29a4fa914610579578063d4ab8f941461059957600080fd5b8063a5555aea146104ad578063af04cd3b146104c3578063b00c0b76146104d8578063b5cddab8146104f8578063b97e1f5d1461050d57600080fd5b80635aa6e675116101c7578063708e34ce1161018b578063708e34ce1461041f57806374e6310e1461043557806391f25679146104635780639670c0bc146104835780639b85961f1461049857600080fd5b80635aa6e675146103955780635ff27079146103aa57806362354e03146103ca57806367fc4029146103ea5780636d62b4131461040a57600080fd5b8063362471801161020e578063362471801461030c578063473252c41461031f578063488f98061461033557806352545a7c1461034b5780635267a15d1461036157600080fd5b806306201f1d1461024b5780630d6e9537146102555780630f4ef8a61461027557806312afcf0b146102b25780632dafdbbf146102d6575b600080fd5b610253610729565b005b34801561026157600080fd5b506102536102703660046124a9565b61078b565b34801561028157600080fd5b50601254610295906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102be57600080fd5b506102c8600d5481565b6040519081526020016102a9565b3480156102e257600080fd5b506102f1600a54601454600092565b604080519384526020840192909252908201526060016102a9565b61025361031a3660046124c2565b6107d1565b34801561032b57600080fd5b506102c8600c5481565b34801561034157600080fd5b506102c860005481565b34801561035757600080fd5b506102c860165481565b34801561036d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771954610295565b3480156103a157600080fd5b50610295610955565b3480156103b657600080fd5b506102536103c53660046124da565b6109f5565b3480156103d657600080fd5b50600754610295906001600160a01b031681565b3480156103f657600080fd5b506102536104053660046124da565b610c83565b34801561041657600080fd5b506004546102c8565b34801561042b57600080fd5b506102c8600e5481565b34801561044157600080fd5b506104556104503660046124da565b610d64565b6040516102a9929190612554565b34801561046f57600080fd5b5061025361047e3660046125a2565b610e09565b34801561048f57600080fd5b506102c8610e6e565b3480156104a457600080fd5b506005546102c8565b3480156104b957600080fd5b506102c8600b5481565b3480156104cf57600080fd5b506102c8610e78565b3480156104e457600080fd5b506102536104f33660046126d9565b610e82565b34801561050457600080fd5b506102c8610f61565b34801561051957600080fd5b50610253610528366004612791565b610f77565b34801561053957600080fd5b506102c860145481565b34801561054f57600080fd5b50601354610295906001600160a01b031681565b34801561056f57600080fd5b506102c8600a5481565b34801561058557600080fd5b50601154610295906001600160a01b031681565b3480156105a557600080fd5b506102c860155481565b3480156105bb57600080fd5b506000546102c8565b3480156105d057600080fd5b506105e46105df3660046127bd565b610fbe565b60405190151581526020016102a9565b34801561060057600080fd5b506007546105e490600160a81b900460ff1681565b34801561062157600080fd5b506102536106303660046124a9565b611049565b34801561064157600080fd5b506102536110a1565b34801561065657600080fd5b50600f546001600160a01b0316610295565b34801561067457600080fd5b506102536106833660046127da565b6110f7565b34801561069457600080fd5b5061025361125d565b3480156106a957600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102a99190612813565b3480156106f557600080fd5b506102536107043660046124a9565b611323565b34801561071557600080fd5b50601054610295906001600160a01b031681565b61073161135b565b6107396113c3565b34600b54610747919061283c565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a161078961140e565b565b600754600160b01b900460ff16806107ad5750600754600160a81b900460ff16155b156107c6576107ba611455565b6107c38161148d565b50565b6107c36000366114e7565b6107d961135b565b6000806107e583611637565b9150915060006107f58383611774565b60125460408051637056269760e01b815290519293506001600160a01b039091169163a02e86e5918691849163705626979160048083019260209291908290030181865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f919061284f565b6040516001600160e01b031960e085901b16815262ffffff9091166004820152600060248201526044016000604051808303818588803b1580156108b257600080fd5b505af11580156108c6573d6000803e3d6000fd5b505060408051868152602081018690529081018790527fe2bf2dae8fb2fd1f86fd6d50871b97c48b27cd148bb07311c99b4b7b24453f5b9350606001915061090b9050565b60405180910390a1336108fc610921853461286c565b6040518115909202916000818181858888f19350505050158015610949573d6000803e3d6000fd5b505050506107c361140e565b600754600090600160a81b900460ff1661097957506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f0919061287f565b905090565b6109fe33610fbe565b610a3f5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064015b60405180910390fd5b6001600160e01b0319811660009081526009602052604081208054909103610aa95760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a36565b8054421015610afa5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610a36565b6000816001018054610b0b9061289c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b379061289c565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610bb660018301826123f1565b50506007805460ff60b01b1916600160b01b1790556040516000903090610bde9084906128d0565b6000604051808303816000865af19150503d8060008114610c1b576040519150601f19603f3d011682016040523d82523d6000602084013e610c20565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610c7d81611834565b50505050565b610c8b611851565b6001600160e01b031981166000908152600960205260408120549003610cf35760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a36565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610d5f60018301826123f1565b505050565b60096020526000908152604090208054600182018054919291610d869061289c565b80601f0160208091040260200160405190810160405280929190818152602001828054610db29061289c565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905082565b6010546001600160a01b03163314610e635760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610a36565b610d5f8383836118ab565b60006109f0611a95565b60006109f0611aa5565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b031614610efb5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610a36565b610f53610f2f83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611ab7565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610f5d8282611b94565b5050565b60006109f0610f6e611a95565b6001607f1b0190565b600754600160b01b900460ff1680610f995750600754600160a81b900460ff16155b15610fb357610fa6611455565b610d5f8383600184611cac565b610d5f6000366114e7565b600754600090600160a01b900460ff1680156110435750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104391906128ec565b92915050565b6110516113c3565b600e819055600a5461106490829061283c565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146110ef5760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610a36565b610789611d33565b600754600160a01b900460ff16156111485760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610a36565b6001600160a01b03821661119e5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610a36565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610a36565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b611265611851565b600754600160a81b900460ff16156112bf5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610a36565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff16806113455750600754600160a81b900460ff16155b156107c657611352611455565b6107c381611e0c565b600034611366611aa5565b611370919061283c565b905047818111156113b35761dead6108fc61138b848461286c565b6040518115909202916000818181858888f19350505050158015610d5f573d6000803e3d6000fd5b81811015610f5d57610f5d61290e565b600f546001600160a01b031633146107895760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610a36565b611416611aa5565b47146107895760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610a36565b600754600160b01b900460ff1615611485573330146114765761147661290e565b6007805460ff60b01b19169055565b610789611851565b61149681611e66565b6114e25760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610a36565b601655565b6114ef611851565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190612924565b90506000611571824261283c565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906115ef908261298b565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516116289493929190612a4a565b60405180910390a15050505050565b6000803460781c1561169c5760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610a36565b5050600554346001600160f01b031690823590810160208401358111156116fe578360200135905060006116d1826005541190565b6116df5760055482036116e2565b60005b90506116f96116f18285611e75565b850260801c90565b935091505b611709816004541190565b61176e5760405162461bcd60e51b815260206004820152603060248201527f4f6666657220776f756c64206d616b652074686520707265636973696f6e206760448201526f726561746572207468616e203130302560801b6064820152608401610a36565b50915091565b600080611785601654840260781c90565b9050838111156117f35760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610a36565b8084036117ff81611e98565b61181861180e82600654611e75565b6015540260801c90565b925061182383611ef6565b61182c84611f34565b505092915050565b3d604051818101604052816000823e821561184d578181f35b8181fd5b611859610955565b6001600160a01b0316336001600160a01b0316146107895760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610a36565b60006118b8826002612a90565b6118c29084612ab3565b6001600160401b0316905060006118fb62015180600d546118e3919061283c565b6118ed8587612ab3565b6001600160401b0316611f72565b9050600061192d6001600160401b038516611916858561286c565b601454600b54611926919061286c565b9190611f88565b9050600061193c876001612ada565b90506000806000601360009054906101000a90046001600160a01b03166001600160a01b03166348a924826040518163ffffffff1660e01b8152600401600060405180830381865afa158015611996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119be9190810190612b59565b9250925092508362ffffff167ffdd0b465b401aa1b01bf9945ca3b5ad04d97007d090db1f5b126a502e890d610848484896040516119ff9493929190612be0565b60405180910390a28460146000828254611a19919061283c565b909155505060125460405163a02e86e560e01b815262ffffff86166004820152600160248201526001600160a01b039091169063a02e86e59087906044016000604051808303818588803b158015611a7057600080fd5b505af1158015611a84573d6000803e3d6000fd5b505050505050505050505050505050565b60006109f06005546004546120ae565b6000601454600b546109f0919061286c565b60008082604051602001611acb9190612813565b6040516020818303038152906040528051906020012090506000805b8651811015611b4357868181518110611b0257611b02612c2b565b60200260200101518303611b3157858181518110611b2257611b22612c2b565b60200260200101519150611b43565b80611b3b81612c41565b915050611ae7565b506001600160a01b038116611b895760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610a36565b9150505b9392505050565b611b9e82826120c6565b611bcc82826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611ab7565b601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611c2282826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611ab7565b601260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611c8882826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611ab7565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b611cb58461212a565b611cbe8361217c565b828411611d195760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610a36565b611d2282600655565b611d2b816121c8565b610c7d612243565b611d636006546003611d43612371565b81548110611d5357611d53612c2b565b9060005260206000200154900390565b600655600554611d77906002611d43612371565b600555600454611d8b906001611d43612371565b60045560006001611d9a612371565b81548110611daa57611daa612c2b565b906000526020600020018190555060006002611dc4612371565b81548110611dd457611dd4612c2b565b906000526020600020018190555060006003611dee612371565b81548110611dfe57611dfe612c2b565b600091825260209091200155565b611e1581611e66565b611e615760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610a36565b601555565b600061104382600160801b1190565b6000608083901b8282818381611e8d57611e8d612c5a565b049695505050505050565b611ec56003611ea561237d565b81548110611eb557611eb5612c2b565b9060005260206000200154820190565b6003611ecf61237d565b81548110611edf57611edf612c2b565b600091825260209091200155600654810160065550565b611f036001611ea561237d565b6001611f0d61237d565b81548110611f1d57611f1d612c2b565b600091825260209091200155600454810160045550565b611f416002611ea561237d565b6002611f4b61237d565b81548110611f5b57611f5b612c2b565b600091825260209091200155600554810160055550565b6000818311611f815781611b8d565b5090919050565b6000808211611fcc5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610a36565b83600003611fdc57506000611b8d565b83830283858281611fef57611fef612c5a565b040361200d5782818161200457612004612c5a565b04915050611b8d565b50600061201a8386612c70565b905060006120288487612c84565b905060006120368587612c70565b905060006120448688612c84565b9050856120518285612c98565b61205b9190612c70565b6120658385612c98565b61206f8387612c98565b8861207a8689612c98565b6120849190612c98565b61208e919061283c565b612098919061283c565b6120a2919061283c565b98975050505050505050565b6000607f83901b8282818381611e8d57611e8d612c5a565b6120d08282612389565b612106828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611ab7565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b61213381611e66565b6121775760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610a36565b600455565b61218581611e66565b6121c35760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610a36565b600555565b6000811161223e5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610a36565b600055565b61224f6001600061242b565b61225b6002600061242b565b6122676003600061242b565b6000546001600160401b03811115612281576122816125e7565b6040519080825280602002602001820160405280156122aa578160200160208202803683370190505b5080516122bf91600191602090910190612449565b506000546001600160401b038111156122da576122da6125e7565b604051908082528060200260200182016040528015612303578160200160208202803683370190505b50805161231891600291602090910190612449565b506000546001600160401b03811115612333576123336125e7565b60405190808252806020026020018201604052801561235c578160200160208202803683370190505b5080516107c391600391602090910190612449565b60006109f060016123d9565b60006109f060006123d9565b6123b582826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611ab7565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546123e7438461283c565b6110439190612c84565b5080546123fd9061289c565b6000825580601f1061240d575050565b601f0160209004906000526020600020908101906107c39190612494565b50805460008255906000526020600020908101906107c39190612494565b828054828255906000526020600020908101928215612484579160200282015b82811115612484578251825591602001919060010190612469565b50612490929150612494565b5090565b5b808211156124905760008155600101612495565b6000602082840312156124bb57600080fd5b5035919050565b6000604082840312156124d457600080fd5b50919050565b6000602082840312156124ec57600080fd5b81356001600160e01b031981168114611b8d57600080fd5b60005b8381101561251f578181015183820152602001612507565b50506000910152565b60008151808452612540816020860160208601612504565b601f01601f19169290920160200192915050565b82815260406020820152600061256d6040830184612528565b949350505050565b62ffffff811681146107c357600080fd5b80356001600160401b038116811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83356125c281612575565b92506125d060208501612586565b91506125de60408501612586565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612625576126256125e7565b604052919050565b60006001600160401b03821115612646576126466125e7565b5060051b60200190565b6001600160a01b03811681146107c357600080fd5b600082601f83011261267657600080fd5b8135602061268b6126868361262d565b6125fd565b82815260059290921b840181019181810190868411156126aa57600080fd5b8286015b848110156126ce5780356126c181612650565b83529183019183016126ae565b509695505050505050565b600080604083850312156126ec57600080fd5b82356001600160401b038082111561270357600080fd5b818501915085601f83011261271757600080fd5b813560206127276126868361262d565b82815260059290921b8401810191818101908984111561274657600080fd5b948201945b838610156127645785358252948201949082019061274b565b9650508601359250508082111561277a57600080fd5b5061278785828601612665565b9150509250929050565b6000806000606084860312156127a657600080fd5b505081359360208301359350604090920135919050565b6000602082840312156127cf57600080fd5b8135611b8d81612650565b600080604083850312156127ed57600080fd5b82356127f881612650565b9150602083013561280881612650565b809150509250929050565b602081526000611b8d6020830184612528565b634e487b7160e01b600052601160045260246000fd5b8082018082111561104357611043612826565b60006020828403121561286157600080fd5b8151611b8d81612575565b8181038181111561104357611043612826565b60006020828403121561289157600080fd5b8151611b8d81612650565b600181811c908216806128b057607f821691505b6020821081036124d457634e487b7160e01b600052602260045260246000fd5b600082516128e2818460208701612504565b9190910192915050565b6000602082840312156128fe57600080fd5b81518015158114611b8d57600080fd5b634e487b7160e01b600052600160045260246000fd5b60006020828403121561293657600080fd5b5051919050565b601f821115610d5f57600081815260208120601f850160051c810160208610156129645750805b601f850160051c820191505b8181101561298357828155600101612970565b505050505050565b81516001600160401b038111156129a4576129a46125e7565b6129b8816129b2845461289c565b8461293d565b602080601f8311600181146129ed57600084156129d55750858301515b600019600386901b1c1916600185901b178555612983565b600085815260208120601f198616915b82811015612a1c578886015182559484019460019091019084016129fd565b5085821015612a3a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b0381811683821602808216919082811461182c5761182c612826565b6001600160401b03828116828216039080821115612ad357612ad3612826565b5092915050565b62ffffff818116838216019080821115612ad357612ad3612826565b600082601f830112612b0757600080fd5b81516001600160401b03811115612b2057612b206125e7565b612b33601f8201601f19166020016125fd565b818152846020838601011115612b4857600080fd5b61256d826020830160208701612504565b600080600060608486031215612b6e57600080fd5b83516001600160401b0380821115612b8557600080fd5b612b9187838801612af6565b94506020860151915080821115612ba757600080fd5b612bb387838801612af6565b93506040860151915080821115612bc957600080fd5b50612bd686828701612af6565b9150509250925092565b608081526000612bf36080830187612528565b8281036020840152612c058187612528565b90508281036040840152612c198186612528565b91505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c5357612c53612826565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612c7f57612c7f612c5a565b500490565b600082612c9357612c93612c5a565b500690565b80820281158282048414176110435761104361282656fea2646970667358221220eeeb751c26a44ed2689e0131369651666e567d74523f9596a27193311cd2057c64736f6c63430008140033 \ No newline at end of file +60806040523480156200001157600080fd5b5060405162003e2938038062003e29833981016040819052620000349162000a54565b898989808084848d8d8b8a806200004b81620000fb565b506200005a848484846200017c565b505050506200007082826200029c60201b60201c565b506200009c9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5050505050620000b48685846200041160201b60201c565b620000c084886200054d565b620000cb85620005d3565b620000d68462000631565b620000e1826200068f565b620000eb620006ed565b5050505050505050505062000b3d565b60008111620001775760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e2030000000000060648201526084015b60405180910390fd5b600055565b620001878462000709565b620001928362000767565b828411620001ef5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b60648201526084016200016e565b60006066620001ff8587620007b7565b901c11620002765760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d32352900000000000000000060648201526084016200016e565b6200028182620007dd565b6200028c81620000fb565b620002966200083b565b50505050565b600754600160a01b900460ff1615620002f85760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064016200016e565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016200016e565b6001600160a01b0381166200039b5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016200016e565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b81831115620004895760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e2074686560448201527f2072616e676520696e637265617365206c696d6974000000000000000000000060648201526084016200016e565b620004ae6000620004aa83620004a3620f42408862000b04565b0260781c90565b1190565b620005485760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a4016200016e565b505050565b818111620005cf5760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a4016200016e565b5050565b620005de8162000984565b6200062c5760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c617267650060448201526064016200016e565b601555565b6200063c8162000984565b6200068a5760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c61726765000060448201526064016200016e565b601655565b6200069a8162000984565b620006e85760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c61726765000060448201526064016200016e565b601755565b62000704620006fb6200099a565b6001607f1b0190565b601855565b620007148162000984565b620007625760405162461bcd60e51b815260206004820152601560248201527f53616d706c652073697a6520746f6f206c61726765000000000000000000000060448201526064016200016e565b600455565b620007728162000984565b620007b25760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b60448201526064016200016e565b600555565b6000607f83901b8282818381620007d257620007d262000aee565b049695505050505050565b620007e88162000984565b620008365760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c617267650000000060448201526064016200016e565b600655565b6200084960016000620009b7565b6200085760026000620009b7565b6200086560036000620009b7565b6000546001600160401b0381111562000882576200088262000b27565b604051908082528060200260200182016040528015620008ac578160200160208202803683370190505b508051620008c391600191602090910190620009d7565b506000546001600160401b03811115620008e157620008e162000b27565b6040519080825280602002602001820160405280156200090b578160200160208202803683370190505b5080516200092291600291602090910190620009d7565b506000546001600160401b0381111562000940576200094062000b27565b6040519080825280602002602001820160405280156200096a578160200160208202803683370190505b5080516200098191600391602090910190620009d7565b50565b60006200099482600160801b1190565b92915050565b6000620009b2600554600454620007b760201b60201c565b905090565b508054600082559060005260206000209081019062000981919062000a27565b82805482825590600052602060002090810192821562000a15579160200282015b8281111562000a15578251825591602001919060010190620009f8565b5062000a2392915062000a27565b5090565b5b8082111562000a23576000815560010162000a28565b6001600160a01b03811681146200098157600080fd5b6000806000806000806000806000806101408b8d03121562000a7557600080fd5b8a5162000a828162000a3e565b60208c0151909a5062000a958162000a3e565b60408c015190995062000aa88162000a3e565b8098505060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b634e487b7160e01b600052601260045260246000fd5b60008262000b2257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6132dc8062000b4d6000396000f3fe6080604052600436106102675760003560e01c80639670c0bc11610144578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f8146106b5578063ef88bf13146106d3578063f5a98383146106f3578063f5f5ba7214610708578063f7690bfe14610754578063faae7fc91461077457600080fd5b8063dd8dca9f1461061a578063debfda301461062f578063e17f212e1461065f578063e273956314610680578063ea105ac7146106a057600080fd5b8063b5cddab811610108578063b5cddab814610583578063bd76b69c14610598578063c10f489a146105ae578063d0c1c393146105ce578063d29a4fa9146105e4578063d4ab8f941461060457600080fd5b80639670c0bc1461050e5780639b85961f14610523578063a5555aea14610538578063af04cd3b1461054e578063b00c0b761461056357600080fd5b80635ff27079116101dd57806374e6310e116101a157806374e6310e1461045557806374f3eff91461048357806375d71307146104995780637a68533f146104b9578063864578e8146104ce57806391f25679146104ee57600080fd5b80635ff27079146103ca57806362354e03146103ea57806367fc40291461040a5780636d62b4131461042a578063708e34ce1461043f57600080fd5b80632de490c31161022f5780632de490c31461032d5780633624718014610342578063473252c41461035557806352545a7c1461036b5780635267a15d146103815780635aa6e675146103b557600080fd5b806306201f1d1461026c5780630d6e9537146102765780630f4ef8a61461029657806312afcf0b146102d35780632dafdbbf146102f7575b600080fd5b610274610794565b005b34801561028257600080fd5b50610274610291366004612a38565b6107f6565b3480156102a257600080fd5b506012546102b6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102df57600080fd5b506102e9600d5481565b6040519081526020016102ca565b34801561030357600080fd5b50610312600a54601454600092565b604080519384526020840192909252908201526060016102ca565b34801561033957600080fd5b506006546102e9565b610274610350366004612a51565b610866565b34801561036157600080fd5b506102e9600c5481565b34801561037757600080fd5b506102e960175481565b34801561038d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102b6565b3480156103c157600080fd5b506102b66109f3565b3480156103d657600080fd5b506102746103e5366004612a63565b610a93565b3480156103f657600080fd5b506007546102b6906001600160a01b031681565b34801561041657600080fd5b50610274610425366004612a63565b610d21565b34801561043657600080fd5b506004546102e9565b34801561044b57600080fd5b506102e9600e5481565b34801561046157600080fd5b50610475610470366004612a63565b610e02565b6040516102ca929190612add565b34801561048f57600080fd5b506102e960165481565b3480156104a557600080fd5b506102746104b4366004612afe565b610ea7565b3480156104c557600080fd5b506018546102e9565b3480156104da57600080fd5b506102746104e9366004612a38565b610f15565b3480156104fa57600080fd5b50610274610509366004612b5d565b610f8c565b34801561051a57600080fd5b506102e9610ff1565b34801561052f57600080fd5b506005546102e9565b34801561054457600080fd5b506102e9600b5481565b34801561055a57600080fd5b506102e9610ffb565b34801561056f57600080fd5b5061027461057e366004612cbc565b611005565b34801561058f57600080fd5b506102e96110e0565b3480156105a457600080fd5b506102e960145481565b3480156105ba57600080fd5b506013546102b6906001600160a01b031681565b3480156105da57600080fd5b506102e9600a5481565b3480156105f057600080fd5b506011546102b6906001600160a01b031681565b34801561061057600080fd5b506102e960155481565b34801561062657600080fd5b506000546102e9565b34801561063b57600080fd5b5061064f61064a366004612d74565b6110f6565b60405190151581526020016102ca565b34801561066b57600080fd5b5060075461064f90600160a81b900460ff1681565b34801561068c57600080fd5b5061027461069b366004612a38565b611181565b3480156106ac57600080fd5b506102746111d9565b3480156106c157600080fd5b50600f546001600160a01b03166102b6565b3480156106df57600080fd5b506102746106ee366004612d91565b61122f565b3480156106ff57600080fd5b50610274611395565b34801561071457600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102ca9190612dca565b34801561076057600080fd5b5061027461076f366004612a38565b61145b565b34801561078057600080fd5b506010546102b6906001600160a01b031681565b61079c611493565b6107a46114fb565b34600b546107b29190612df3565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a16107f4611546565b565b600754600160b01b900460ff16806108185750600754600160a81b900460ff16155b156108585761082561158d565b600061083c60055461083760026115c5565b900390565b905061084b8160165484611607565b6108548261172e565b5050565b610863600036611788565b50565b61086e611493565b600080600061087c846118d8565b9250925092506000601260009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190612e06565b60125460405163a02e86e560e01b815262ffffff83166004820152600060248201529192506001600160a01b03169063a02e86e59086906044016000604051808303818588803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050604080518781526020810187905290810188905262ffffff851693507f1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf826039250606001905060405180910390a2336108fc6109be8634612e23565b6040518115909202916000818181858888f193505050501580156109e6573d6000803e3d6000fd5b5050505050610863611546565b600754600090600160a81b900460ff16610a1757506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612e36565b905090565b610a9c336110f6565b610add5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064015b60405180910390fd5b6001600160e01b0319811660009081526009602052604081208054909103610b475760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b8054421015610b985760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ad4565b6000816001018054610ba990612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590612e53565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610c546001830182612980565b50506007805460ff60b01b1916600160b01b1790556040516000903090610c7c908490612e87565b6000604051808303816000865af19150503d8060008114610cb9576040519150601f19603f3d011682016040523d82523d6000602084013e610cbe565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610d1b81611af6565b50505050565b610d29611b13565b6001600160e01b031981166000908152600960205260408120549003610d915760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610dfd6001830182612980565b505050565b60096020526000908152604090208054600182018054919291610e2490612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5090612e53565b8015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b5050505050905082565b600754600160b01b900460ff1680610ec95750600754600160a81b900460ff16155b15610f0a57610ed661158d565b610ee583601654601754611607565b610ef160165485611b6d565b610efd84848484611bed565b610f05611cf7565b610d1b565b610d1b600036611788565b600754600160b01b900460ff1680610f375750600754600160a81b900460ff16155b1561085857610f4461158d565b6000610f5660055461083760026115c5565b9050610f658183601754611607565b6000610f776004546108376001611d07565b9050610f838382611b6d565b610dfd83611d34565b6010546001600160a01b03163314610fe65760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610ad4565b610dfd838383611d8e565b6000610a8e611f6b565b6000610a8e611f7b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b03161461107e5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ad4565b6110d66110b283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611f8d565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610854828261206a565b6000610a8e6110ed611f6b565b6001607f1b0190565b600754600090600160a01b900460ff16801561117b5750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b9190612ea3565b92915050565b6111896114fb565b600e819055600a5461119c908290612df3565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146112275760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610ad4565b6107f4612182565b600754600160a01b900460ff16156112805760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ad4565b6001600160a01b0382166112d65760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ad4565b6001600160a01b03811661131f5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ad4565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61139d611b13565b600754600160a81b900460ff16156113f75760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ad4565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff168061147d5750600754600160a81b900460ff16155b156108585761148a61158d565b6108638161225b565b60003461149e611f7b565b6114a89190612df3565b905047818111156114eb5761dead6108fc6114c38484612e23565b6040518115909202916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b8181101561085457610854612ec5565b600f546001600160a01b031633146107f45760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610ad4565b61154e611f7b565b47146107f45760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610ad4565b600754600160b01b900460ff16156115bd573330146115ae576115ae612ec5565b6007805460ff60b01b19169055565b6107f4611b13565b6000805b8254811015611601576115f7828483815481106115e8576115e8612edb565b90600052602060002001540190565b91506001016115c9565b50919050565b818311156116755760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e20746865604482015274081c985b99d9481a5b98dc99585cd9481b1a5b5a5d605a1b6064820152608401610ad4565b61169660006116928361168b620f424088612f07565b0260781c90565b1190565b610dfd5760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a401610ad4565b611737816122b5565b6117835760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610ad4565b601755565b611790611b13565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190612f1b565b905060006118128242612df3565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906118909082612f82565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516118c99493929190613041565b60405180910390a15050505050565b600080803460781c1561193e5760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610ad4565b61194884356122b5565b6119945760405162461bcd60e51b815260206004820152601860248201527f52616e676520696e63726561736520746f6f206c6172676500000000000000006044820152606401610ad4565b60055434935084359250820160208501358111156119ed578460200135905060006119c0826005541190565b6119ce5760055482036119d1565b60005b90506119e86119e082866122c4565b860260801c90565b945092505b601654811115611a2e5760165490506000611a09826005541190565b611a17576005548203611a1a565b60005b9050611a296119e082866122c4565b945092505b6000611a3e601754850260781c90565b905084811115611aac5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610ad4565b611ab5846122e7565b808503858214611aec57611ac88161238b565b611ae1611ad7826006546122c4565b6015540260801c90565b9350611aec8461241d565b5050509193909250565b3d604051818101604052816000823e8215611b0f578181f35b8181fd5b611b1b6109f3565b6001600160a01b0316336001600160a01b0316146107f45760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ad4565b8181116108545760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a401610ad4565b611bf6846124a7565b611bff836124f9565b828411611c5a5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610ad4565b60006066611c688587612545565b901c11611cdd5760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d3235290000000000000000006064820152608401610ad4565b611ce68261255d565b611cef816125b7565b610d1b612632565b611d026110ed611f6b565b601855565b6000805b825481101561160157611d2a828483815481106115e8576115e8612edb565b9150600101611d0b565b611d3d816122b5565b611d895760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c6172676500006044820152606401610ad4565b601655565b6000611d9b826002613087565b611da590846130b2565b6001600160401b031690506000611dde62015180600d54611dc69190612df3565b611dd085876130b2565b6001600160401b0316612760565b90506000611e106001600160401b038516611df98585612e23565b601454600b54611e099190612e23565b9190612776565b90506000611e1f8760016130d9565b90506000601360009054906101000a90046001600160a01b03166001600160a01b03166331038aad6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e9e91908101906130f5565b90508162ffffff167f58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da8285604051611ed79291906131e9565b60405180910390a28260146000828254611ef19190612df3565b909155505060125460405163a02e86e560e01b815262ffffff84166004820152600160248201526001600160a01b039091169063a02e86e59085906044016000604051808303818588803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b50505050505050505050505050565b6000610a8e600554600454612545565b6000601454600b54610a8e9190612e23565b60008082604051602001611fa19190612dca565b6040516020818303038152906040528051906020012090506000805b865181101561201957868181518110611fd857611fd8612edb565b6020026020010151830361200757858181518110611ff857611ff8612edb565b60200260200101519150612019565b8061201181613262565b915050611fbd565b506001600160a01b03811661205f5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ad4565b9150505b9392505050565b612074828261289c565b6120a282826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611f8d565b601160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506120f882826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611f8d565b601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061215e82826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611f8d565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b6121b26006546003612192612900565b815481106121a2576121a2612edb565b9060005260206000200154900390565b6006556005546121c6906002612192612900565b6005556004546121da906001612192612900565b600455600060016121e9612900565b815481106121f9576121f9612edb565b906000526020600020018190555060006002612213612900565b8154811061222357612223612edb565b90600052602060002001819055506000600361223d612900565b8154811061224d5761224d612edb565b600091825260209091200155565b612264816122b5565b6122b05760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610ad4565b601555565b600061117b82600160801b1190565b6000608083901b82828183816122dc576122dc612ef1565b049695505050505050565b61231460026122f461290c565b8154811061230457612304612edb565b9060005260206000200154820190565b600261231e61290c565b8154811061232e5761232e612edb565b6000918252602090912001556005548101600581905561234d906122b5565b6108635760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b61239860036122f461290c565b60036123a261290c565b815481106123b2576123b2612edb565b600091825260209091200155600654810160068190556123d1906122b5565b6108635760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b61242a60016122f461290c565b600161243461290c565b8154811061244457612444612edb565b60009182526020909120015560045481016004819055612463906122b5565b6108635760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b6124b0816122b5565b6124f45760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b600455565b612502816122b5565b6125405760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b600555565b6000607f83901b82828183816122dc576122dc612ef1565b612566816122b5565b6125b25760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b600655565b6000811161262d5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610ad4565b600055565b61263e600160006129ba565b61264a600260006129ba565b612656600360006129ba565b6000546001600160401b0381111561267057612670612ba2565b604051908082528060200260200182016040528015612699578160200160208202803683370190505b5080516126ae916001916020909101906129d8565b506000546001600160401b038111156126c9576126c9612ba2565b6040519080825280602002602001820160405280156126f2578160200160208202803683370190505b508051612707916002916020909101906129d8565b506000546001600160401b0381111561272257612722612ba2565b60405190808252806020026020018201604052801561274b578160200160208202803683370190505b508051610863916003916020909101906129d8565b600081831161276f5781612063565b5090919050565b60008082116127ba5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ad4565b836000036127ca57506000612063565b838302838582816127dd576127dd612ef1565b04036127fb578281816127f2576127f2612ef1565b04915050612063565b5060006128088386612f07565b90506000612816848761327b565b905060006128248587612f07565b90506000612832868861327b565b90508561283f828561328f565b6128499190612f07565b612853838561328f565b61285d838761328f565b88612868868961328f565b612872919061328f565b61287c9190612df3565b6128869190612df3565b6128909190612df3565b98975050505050505050565b6128a68282612918565b6128dc828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611f8d565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b6000610a8e6001612968565b6000610a8e6000612968565b61294482826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611f8d565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546129764384612df3565b61117b919061327b565b50805461298c90612e53565b6000825580601f1061299c575050565b601f0160209004906000526020600020908101906108639190612a23565b50805460008255906000526020600020908101906108639190612a23565b828054828255906000526020600020908101928215612a13579160200282015b82811115612a135782518255916020019190600101906129f8565b50612a1f929150612a23565b5090565b5b80821115612a1f5760008155600101612a24565b600060208284031215612a4a57600080fd5b5035919050565b60006040828403121561160157600080fd5b600060208284031215612a7557600080fd5b81356001600160e01b03198116811461206357600080fd5b60005b83811015612aa8578181015183820152602001612a90565b50506000910152565b60008151808452612ac9816020860160208601612a8d565b601f01601f19169290920160200192915050565b828152604060208201526000612af66040830184612ab1565b949350505050565b60008060008060808587031215612b1457600080fd5b5050823594602084013594506040840135936060013592509050565b62ffffff8116811461086357600080fd5b80356001600160401b0381168114612b5857600080fd5b919050565b600080600060608486031215612b7257600080fd5b8335612b7d81612b30565b9250612b8b60208501612b41565b9150612b9960408501612b41565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612bda57612bda612ba2565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c0857612c08612ba2565b604052919050565b60006001600160401b03821115612c2957612c29612ba2565b5060051b60200190565b6001600160a01b038116811461086357600080fd5b600082601f830112612c5957600080fd5b81356020612c6e612c6983612c10565b612be0565b82815260059290921b84018101918181019086841115612c8d57600080fd5b8286015b84811015612cb1578035612ca481612c33565b8352918301918301612c91565b509695505050505050565b60008060408385031215612ccf57600080fd5b82356001600160401b0380821115612ce657600080fd5b818501915085601f830112612cfa57600080fd5b81356020612d0a612c6983612c10565b82815260059290921b84018101918181019089841115612d2957600080fd5b948201945b83861015612d4757853582529482019490820190612d2e565b96505086013592505080821115612d5d57600080fd5b50612d6a85828601612c48565b9150509250929050565b600060208284031215612d8657600080fd5b813561206381612c33565b60008060408385031215612da457600080fd5b8235612daf81612c33565b91506020830135612dbf81612c33565b809150509250929050565b6020815260006120636020830184612ab1565b634e487b7160e01b600052601160045260246000fd5b8082018082111561117b5761117b612ddd565b600060208284031215612e1857600080fd5b815161206381612b30565b8181038181111561117b5761117b612ddd565b600060208284031215612e4857600080fd5b815161206381612c33565b600181811c90821680612e6757607f821691505b60208210810361160157634e487b7160e01b600052602260045260246000fd5b60008251612e99818460208701612a8d565b9190910192915050565b600060208284031215612eb557600080fd5b8151801515811461206357600080fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612f1657612f16612ef1565b500490565b600060208284031215612f2d57600080fd5b5051919050565b601f821115610dfd57600081815260208120601f850160051c81016020861015612f5b5750805b601f850160051c820191505b81811015612f7a57828155600101612f67565b505050505050565b81516001600160401b03811115612f9b57612f9b612ba2565b612faf81612fa98454612e53565b84612f34565b602080601f831160018114612fe45760008415612fcc5750858301515b600019600386901b1c1916600185901b178555612f7a565b600085815260208120601f198616915b8281101561301357888601518255948401946001909101908401612ff4565b50858210156130315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b038181168382160280821691908281146130aa576130aa612ddd565b505092915050565b6001600160401b038281168282160390808211156130d2576130d2612ddd565b5092915050565b62ffffff8181168382160190808211156130d2576130d2612ddd565b6000602080838503121561310857600080fd5b82516001600160401b0381111561311e57600080fd5b8301601f8101851361312f57600080fd5b805161313d612c6982612c10565b8181526060918202830184019184820191908884111561315c57600080fd5b938501935b838510156131dd5780858a0312156131795760008081fd5b613181612bb8565b85516affffffffffffffffffffff198116811461319e5760008081fd5b81528587015163ffffffff811681146131b75760008081fd5b818801526040868101516131ca81612b30565b9082015283529384019391850191613161565b50979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b8381101561324e57815180516affffffffffffffffffffff191686528381015163ffffffff168487015287015162ffffff16878601529385019390820190600101613208565b505095909501959095525092949350505050565b60006001820161327457613274612ddd565b5060010190565b60008261328a5761328a612ef1565b500690565b808202811582820484141761117b5761117b612ddd56fea26469706673582212205edfb76a35f36c646f4b3bb88dd1d73f109dcb953ca71c7ef6cef90bfb8f686064736f6c63430008140033 \ No newline at end of file diff --git a/go-client/contracts-interface/FastUpdater.abi b/go-client/contracts-interface/FastUpdater.abi index f59625c..79705eb 100644 --- a/go-client/contracts-interface/FastUpdater.abi +++ b/go-client/contracts-interface/FastUpdater.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"},{"internalType":"address","name":"_addressUpdater","type":"address"},{"internalType":"address","name":"_flareDaemon","type":"address"},{"internalType":"uint32","name":"_firstVotingRoundStartTs","type":"uint32"},{"internalType":"uint8","name":"_votingEpochDurationSeconds","type":"uint8"},{"internalType":"uint256","name":"_submissionWindow","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FastUpdateFeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingRoundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"bytes21","name":"id","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"int8","name":"decimals","type":"int8"}],"name":"FastUpdateFeedReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingEpochId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"feeds","type":"uint256[]"},{"indexed":false,"internalType":"int8[]","name":"decimals","type":"int8[]"}],"name":"FastUpdateFeeds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signingPolicyAddress","type":"address"}],"name":"FastUpdateFeedsSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"encodedCall","type":"bytes"}],"name":"GovernanceCallTimelocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"initialGovernance","type":"address"}],"name":"GovernanceInitialised","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governanceSettings","type":"address"}],"name":"GovernedProductionModeEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallExecuted","type":"event"},{"inputs":[],"name":"MAX_FEED_AGE_IN_VOTING_EPOCHS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"cancelGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"circularLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signingPolicyAddress","type":"address"}],"name":"currentSortitionWeight","outputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daemonize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"executeGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastUpdateIncentiveManager","outputs":[{"internalType":"contract IIFastUpdateIncentiveManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastUpdatesConfiguration","outputs":[{"internalType":"contract IFastUpdatesConfiguration","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchAllCurrentFeeds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"},{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"fetchCurrentFeeds","outputs":[{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstVotingRoundStartTs","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flareDaemon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flareSystemsManager","outputs":[{"internalType":"contract IFlareSystemsManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ftsoFeedPublisher","outputs":[{"internalType":"contract IFtsoFeedPublisher","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressUpdater","outputs":[{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceSettings","outputs":[{"internalType":"contract IGovernanceSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExecutor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"productionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"removeFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"resetFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_submissionWindow","type":"uint256"}],"name":"setSubmissionWindow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"submissionWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"sortitionBlock","type":"uint256"},{"components":[{"internalType":"uint256","name":"replicate","type":"uint256"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Bn256.G1Point","name":"gamma","type":"tuple"},{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"internalType":"struct SortitionCredential","name":"sortitionCredential","type":"tuple"},{"internalType":"bytes","name":"deltas","type":"bytes"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IFastUpdater.Signature","name":"signature","type":"tuple"}],"internalType":"struct IFastUpdater.FastUpdates","name":"_updates","type":"tuple"}],"name":"submitUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToFallbackMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchToProductionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"timelockedCalls","outputs":[{"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"internalType":"bytes","name":"encodedCall","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_contractNameHashes","type":"bytes32[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bytes32","name":"_part1","type":"bytes32"},{"internalType":"bytes32","name":"_part2","type":"bytes32"},{"internalType":"bytes","name":"_verificationData","type":"bytes"}],"name":"verifyPublicKey","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voterRegistry","outputs":[{"internalType":"contract IIVoterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingEpochDurationSeconds","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"},{"internalType":"address","name":"_addressUpdater","type":"address"},{"internalType":"address","name":"_flareDaemon","type":"address"},{"internalType":"uint32","name":"_firstVotingRoundStartTs","type":"uint32"},{"internalType":"uint8","name":"_votingEpochDurationSeconds","type":"uint8"},{"internalType":"uint8","name":"_submissionWindow","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FastUpdateFeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingRoundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"bytes21","name":"id","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"int8","name":"decimals","type":"int8"}],"name":"FastUpdateFeedReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingEpochId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"feeds","type":"uint256[]"},{"indexed":false,"internalType":"int8[]","name":"decimals","type":"int8[]"}],"name":"FastUpdateFeeds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"votingRoundId","type":"uint32"},{"indexed":true,"internalType":"address","name":"signingPolicyAddress","type":"address"}],"name":"FastUpdateFeedsSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"encodedCall","type":"bytes"}],"name":"GovernanceCallTimelocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"initialGovernance","type":"address"}],"name":"GovernanceInitialised","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governanceSettings","type":"address"}],"name":"GovernedProductionModeEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallExecuted","type":"event"},{"inputs":[],"name":"MAX_BLOCKS_HISTORY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEED_AGE_IN_VOTING_EPOCHS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNum","type":"uint256"}],"name":"blockScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"cancelGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRewardEpochId","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signingPolicyAddress","type":"address"}],"name":"currentSortitionWeight","outputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daemonize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"executeGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastUpdateIncentiveManager","outputs":[{"internalType":"contract IIFastUpdateIncentiveManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastUpdatesConfiguration","outputs":[{"internalType":"contract IFastUpdatesConfiguration","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchAllCurrentFeeds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"},{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"fetchCurrentFeeds","outputs":[{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstVotingRoundStartTs","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flareDaemon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flareSystemsManager","outputs":[{"internalType":"contract IFlareSystemsManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ftsoFeedPublisher","outputs":[{"internalType":"contract IFtsoFeedPublisher","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressUpdater","outputs":[{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceSettings","outputs":[{"internalType":"contract IGovernanceSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExecutor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_historySize","type":"uint256"}],"name":"numberOfUpdates","outputs":[{"internalType":"uint256[]","name":"_noOfUpdates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"numberOfUpdatesInBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"productionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"removeFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"resetFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_submissionWindow","type":"uint8"}],"name":"setSubmissionWindow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"submissionWindow","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"sortitionBlock","type":"uint256"},{"components":[{"internalType":"uint256","name":"replicate","type":"uint256"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Bn256.G1Point","name":"gamma","type":"tuple"},{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"internalType":"struct SortitionCredential","name":"sortitionCredential","type":"tuple"},{"internalType":"bytes","name":"deltas","type":"bytes"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IFastUpdater.Signature","name":"signature","type":"tuple"}],"internalType":"struct IFastUpdater.FastUpdates","name":"_updates","type":"tuple"}],"name":"submitUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToFallbackMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchToProductionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"timelockedCalls","outputs":[{"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"internalType":"bytes","name":"encodedCall","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_contractNameHashes","type":"bytes32[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bytes32","name":"_part1","type":"bytes32"},{"internalType":"bytes32","name":"_part2","type":"bytes32"},{"internalType":"bytes","name":"_verificationData","type":"bytes"}],"name":"verifyPublicKey","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voterRegistry","outputs":[{"internalType":"contract IIVoterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingEpochDurationSeconds","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/FastUpdater.bin b/go-client/contracts-interface/FastUpdater.bin index 3f77169..fc03bfc 100644 --- a/go-client/contracts-interface/FastUpdater.bin +++ b/go-client/contracts-interface/FastUpdater.bin @@ -1 +1 @@ -60e06040523480156200001157600080fd5b50604051620056ea380380620056ea833981016040819052620000349162000519565b8462000042826001620005db565b8888620000508282620001db565b506200005e90508162000350565b5062000088817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038416620000d95760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008260ff16116200012e5760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000d0565b6001600160a01b03841660c05263ffffffff831660805260ff821660a05262000156620003cd565b600780546001600160401b0319166001600160401b03929092169190911790556200018081600655565b6200018a62000405565b604080516103e8808252617d20820190925290816020015b6060815260200190600190039081620001a25750508051620001cd91600d9160209091019062000435565b5050505050505050620007bd565b600054600160a01b900460ff1615620002375760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000d0565b6001600160a01b0382166200028f5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000d0565b6001600160a01b038116620002da5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000d0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b60008111620003c85760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401620000d0565b600355565b600060a0516001600160401b03166080516001600160401b031642620003f491906200060d565b62000400919062000623565b905090565b60005b6003548110156200043257600c805460010181556000526200042a8162000646565b905062000408565b50565b82805482825590600052602060002090810192821562000480579160200282015b828111156200048057825182906200046f9082620006f1565b509160200191906001019062000456565b506200048e92915062000492565b5090565b808211156200048e576000620004a98282620004b3565b5060010162000492565b508054620004c19062000662565b6000825580601f10620004d2575050565b601f0160209004906000526020600020908101906200043291905b808211156200048e5760008155600101620004ed565b6001600160a01b03811681146200043257600080fd5b600080600080600080600060e0888a0312156200053557600080fd5b8751620005428162000503565b6020890151909750620005558162000503565b6040890151909650620005688162000503565b60608901519095506200057b8162000503565b608089015190945063ffffffff811681146200059657600080fd5b60a089015190935060ff81168114620005ae57600080fd5b8092505060c0880151905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620005f157620005f1620005c5565b92915050565b634e487b7160e01b600052604160045260246000fd5b81810381811115620005f157620005f1620005c5565b6000826200064157634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016200065b576200065b620005c5565b5060010190565b600181811c908216806200067757607f821691505b6020821081036200069857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006ec57600081815260208120601f850160051c81016020861015620006c75750805b601f850160051c820191505b81811015620006e857828155600101620006d3565b5050505b505050565b81516001600160401b038111156200070d576200070d620005f7565b62000725816200071e845462000662565b846200069e565b602080601f8311600181146200075d5760008415620007445750858301515b600019600386901b1c1916600185901b178555620006e8565b600085815260208120601f198616915b828110156200078e578886015182559484019460019091019084016200076d565b5085821015620007ad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c051614ee162000809600039600081816103e001528181611b3901526121f90152600081816102e60152612e4301526000818161049e0152612e6d0152614ee16000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637925eaca1161011a578063debfda30116100ad578063e8d0e70a1161007c578063e8d0e70a14610499578063ef88bf13146104c0578063f5a98383146104d3578063f5f5ba72146104db578063faae7fc91461050857600080fd5b8063debfda3014610461578063e17f212e14610474578063e22fdece14610488578063e621dbc71461049057600080fd5b8063abfaf170116100e9578063abfaf17014610415578063b00c0b7614610428578063be60040e1461043b578063c10f489a1461044e57600080fd5b80637925eaca146103c05780637fe3341a146103d3578063a1077532146103db578063a14634a71461040257600080fd5b80635a8320881161019d57806363f921db1161016c57806363f921db1461034e57806367fc4029146103615780636d0e8c341461037457806370473f2f1461038c57806374e6310e1461039f57600080fd5b80635a832088146102e15780635aa6e675146103205780635ff270791461032857806362354e031461033b57600080fd5b80634691377f116101d95780634691377f14610287578063470e91df1461029e578063488f9806146102b15780635267a15d146102ba57600080fd5b80630799fe751461020b578063274965db1461022657806329bfe39d1461023b57806345a15d3c14610266575b600080fd5b610213610522565b6040519081526020015b60405180910390f35b610239610234366004613ec1565b610531565b005b600a5461024e906001600160a01b031681565b6040516001600160a01b03909116815260200161021d565b610279610274366004613eda565b61059e565b60405161021d929190613fc8565b61028f610a06565b60405161021d93929190613fed565b6102396102ac366004614059565b610b9d565b61021360035481565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461024e565b6103087f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161021d565b61024e611156565b610239610336366004614094565b6111ed565b60005461024e906001600160a01b031681565b61023961035c366004613eda565b611473565b61023961036f366004614094565b611a4b565b61037c611b2c565b604051901515815260200161021d565b61023961039a366004614141565b611cd5565b6103b26103ad366004614094565b611dd6565b60405161021d92919061424b565b60085461024e906001600160a01b031681565b610213601481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b610213610410366004614264565b611e7b565b6102396104233660046142a4565b611e8d565b6102396104363660046143a8565b612088565b60095461024e906001600160a01b031681565b600b5461024e906001600160a01b031681565b61037c61046f366004614264565b612163565b60005461037c90600160a81b900460ff1681565b61037c6121ec565b61021360065481565b6103087f000000000000000000000000000000000000000000000000000000000000000081565b6102396104ce366004614460565b612260565b6102396123c6565b604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b6020820152905161021d9190614499565b60075461024e90600160401b90046001600160a01b031681565b600061052c61248c565b905090565b600054600160b01b900460ff16806105535750600054600160a81b900460ff16155b156105935761056061268a565b61056981600655565b61057c6105778260016144c2565b6126c4565b610588600c6000613e15565b61059061273f565b50565b610590600036612768565b606080826001600160401b038111156105b9576105b96140d3565b6040519080825280602002602001820160405280156105e2578160200160208202803683370190505b50905060005b83811015610687576004858583818110610604576106046144d5565b905060200201358154610616906144eb565b8110610624576106246144d5565b8154600116156106435790600052602060002090602091828204019190065b9054901a600160f81b0260f81c828281518110610662576106626144d5565b602002602001019060000b908160000b815250508061068090614525565b90506105e8565b50826001600160401b038111156106a0576106a06140d3565b6040519080825280602002602001820160405280156106c9578160200160208202803683370190505b5091506000600860009054906101000a90046001600160a01b03166001600160a01b031663b5cddab86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610721573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610745919061453e565b6040516005547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060a083019081527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb56060840152600e5460c0840152929350909160808301916008026000808060208c8837865160088104602089018190526007909116604089015285510154915060005b8b8110156108445760208082028e018937848851106107f557600080fd5b60088851049150600888510660408901526020880151821461081f57816020890152818651015492505b82602060408a0151021b91508160e01c6020820260208d0101526001810190506107d7565b50600f5494505b60c087015185146109f7576060870151850180875254935060001960018516016109485760208620865260028404935060208c88376080875104602088015260048402875110156108a25760208701518651015492505b60005b8b8110156109425760208082028e01893760808851049150600485028851101561093a5760808851066040890152602088015182146108ec57816020890152818751015493505b604088015160020284901b60fe1c9150600019820161091c5760208181028c010180518a02607f81901c90915292505b6003820361093a5760208181028c01018051607f1b8a810490915292505b6001016108a5565b50600193505b600184166109e8576002603f85160493925060208c88376080875104602088015260005b8b8110156109e65760208082028e01893760048502885110156109de578751607f166040890181905260020284901b60fe1c915060001982016109c05760208181028c010180518a02607f81901c90915292505b600382036109de5760208181028c01018051607f1b8a810490915292505b60010161096c565b505b6103e86001860106945061084b565b50505050505050509250929050565b6060806060600b60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a869190810190614574565b925060048054610a95906144eb565b9050835114610aa657610aa6614600565b600083516001600160401b03811115610ac157610ac16140d3565b604051908082528060200260200182016040528015610aea578160200160208202803683370190505b50905060005b8151811015610b295780828281518110610b0c57610b0c6144d5565b602090810291909101015280610b2181614525565b915050610af0565b50604051631168574f60e21b815230906345a15d3c90610b4d908490600401614616565b600060405180830381865afa158015610b6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b92919081019061469d565b949590949350915050565b600654610bab9082356144c2565b4310610c155760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084015b60405180910390fd5b8035431015610c7c5760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b6064820152608401610c0c565b600554610c8a90600861474e565b610c9760c0830183614765565b610ca39150600461474e565b1115610cfb5760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b6064820152608401610c0c565b60006002823560208401610d1260c0860186614765565b604051602001610d2594939291906147d4565b60408051601f1981840301815290829052610d3f9161481d565b602060405180830381855afa158015610d5c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d7f919061453e565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0840190610dd783610dc8610100880185614839565b846020013585604001356128b4565b90506001600160a01b038116610e2f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c0c565b600080610e3b836128e2565b6040805160a08101808352600754637056269760e01b90915291519395509193506000928291600160401b90046001600160a01b03169063e0d4ea3790829063705626979060a4808701916020918189030181865afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec6919061485c565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa158015610f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2a919061453e565b815289356020820152604001610f3e61248c565b81526020810184905260400184905290506000610f5b8935612a39565b60408051865160208281019190915280880151928201929092528b356060820152908b0135608082015290915060009060029060a00160408051601f1981840301815290829052610fab9161481d565b602060405180830381855afa158015610fc8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610feb919061453e565b905060005b8254811015611079578183600001828154811061100f5761100f6144d5565b9060005260206000200154036110675760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f766964656400000000006044820152606401610c0c565b8061107181614525565b915050610ff0565b50815460018101835560008381526020808220909201839055906110b09085906110ab90368f90038f01908f01614881565b612a8b565b509050806111005760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c69640000000000000000006044820152606401610c0c565b61111561111060c08d018d614765565b612b3e565b6040516001600160a01b038816907f46726b7af6062bbfbcc71cdfd206e449f91eb91d8a78d596181219c8251d83ee90600090a25050505050505050505050565b60008054600160a81b900460ff1661117857506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052c919061490f565b6111f633612163565b6112325760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610c0c565b6001600160e01b031981166000908152600260205260408120805490910361129c5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610c0c565b80544210156112ed5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610c0c565b60008160010180546112fe906144eb565b80601f016020809104026020016040519081016040528092919081815260200182805461132a906144eb565b80156113775780601f1061134c57610100808354040283529160200191611377565b820191906000526020600020905b81548152906001019060200180831161135a57829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506113a96001830182613e33565b50506000805460ff60b01b1916600160b01b17815560405130906113ce90849061481d565b6000604051808303816000865af19150503d806000811461140b576040519150601f19603f3d011682016040523d82523d6000602084013e611410565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161146d81612b90565b50505050565b600b546001600160a01b03163314806114a4575061148f611156565b6001600160a01b0316336001600160a01b0316145b6115065760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b6064820152608401610c0c565b61150e612bad565b6000805b82811015611568578184848381811061152d5761152d6144d5565b9050602002013511156115565783838281811061154c5761154c6144d5565b9050602002013591505b8061156081614525565b915050611512565b50600060048054611578906144eb565b9150505b8181116115f7576004600181805480611594906144eb565b80601f81036115b35783600052602060002060ff1984168155603f9350505b506002820183556001810192505050038154600116156115e25790600052602060002090602091828204019190065b508190506115ef81614525565b91505061157c565b506005545b611607600883614942565b811161162b576005805460010181556000528061162381614525565b9150506115fc565b5060048054611639906144eb565b60055490915061164a90600861474e565b101561165857611658614600565b6000611662612e3f565b6001600160401b0316905060005b83811015611a4457600b546000906001600160a01b0316639310283687878581811061169e5761169e6144d5565b905060200201356040518263ffffffff1660e01b81526004016116c391815260200190565b602060405180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117049190614956565b90506001600160581b031981166117535760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610c0c565b600a546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca9190614983565b9050836014826000015163ffffffff166117e491906144c2565b116118205760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b6044820152606401610c0c565b6000816040015160030b136118775760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e6567617469766500000000006044820152606401610c0c565b6000600888888681811061188d5761188d6144d5565b9050602002013561189e9190614942565b9050600060088989878181106118b6576118b66144d5565b905060200201356118c79190614a23565b6118d2906007614a37565b6118dd90602061474e565b60408401516005805492935063ffffffff80851b19939216841b918391908690811061190b5761190b6144d5565b906000526020600020015416176005848154811061192b5761192b6144d5565b600091825260209091200155608084015160f81b60048b8b89818110611953576119536144d5565b905060200201358154611965906144eb565b8110611973576119736144d5565b8154600116156119925790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168a8a888181106119cf576119cf6144d5565b90506020020135887ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf587604001518860800151604051611a2492919063ffffffff92909216825260000b602082015260400190565b60405180910390a450505050508080611a3c90614525565b915050611670565b5050505050565b611a53612eaa565b6001600160e01b031981166000908152600260205260408120549003611abb5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610c0c565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590611b276001830182613e33565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b9a5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610c0c565b611ba2612bad565b6000611bac612e3f565b6007549091506001600160401b039081169082161115611c3457600080611bd1612f04565b6007805467ffffffffffffffff19166001600160401b038716908117909155604051929450909250907f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe90611c299085908590613fc8565b60405180910390a250505b600c611c3e61320c565b81548110611c4e57611c4e6144d5565b6000918252602082200190611c638282613e6d565b5050600860009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cb557600080fd5b505af1158015611cc9573d6000803e3d6000fd5b50505050600191505090565b600080600083806020019051810190611cee9190614a4a565b60408051808201909152898152602081018990529295509093509150611d1381613218565b611d1c57600080fd5b6040805180820190915283815260208101839052611d3981613218565b611d4257600080fd5b6040516bffffffffffffffffffffffff1960608b901b166020820152611dcb90839060029060340160408051601f1981840301815290829052611d849161481d565b602060405180830381855afa158015611da1573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc4919061453e565b8784613263565b505050505050505050565b60026020526000908152604090208054600182018054919291611df8906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e24906144eb565b8015611e715780601f10611e4657610100808354040283529160200191611e71565b820191906000526020600020905b815481529060010190602001808311611e5457829003601f168201915b5050505050905082565b6000611e86826128e2565b9392505050565b600b546001600160a01b03163314611ee75760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e006044820152606401610c0c565b611eef612bad565b60005b81518110156120845760006008838381518110611f1157611f116144d5565b6020026020010151611f239190614942565b905060006008848481518110611f3b57611f3b6144d5565b6020026020010151611f4d9190614a23565b611f58906007614a37565b611f6390602061474e565b6005805491925063ffffffff831b199182919085908110611f8657611f866144d5565b90600052602060002001541660058481548110611fa557611fa56144d5565b9060005260206000200181905550600060f81b6004868681518110611fcc57611fcc6144d5565b60200260200101518154611fdf906144eb565b8110611fed57611fed6144d5565b81546001161561200c5790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555084848151811061203a5761203a6144d5565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061207c90614525565b915050611ef2565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146121015760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610c0c565b61215961213583836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506133a6565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6120848282613481565b60008054600160a01b900460ff1680156121e65750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190614a78565b92915050565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461225a5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610c0c565b50600090565b600054600160a01b900460ff16156122b15760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610c0c565b6001600160a01b0382166123075760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610c0c565b6001600160a01b0381166123505760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610c0c565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6123ce612eaa565b600054600160a81b900460ff16156124285760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610c0c565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612506919061453e565b90506078600c61251681836144c2565b61252290610100614a37565b61252d90600261474e565b6125379190614a37565b6125419190614a37565b8161254e600c60786144c2565b61255a90610100614a37565b61256590600261474e565b600080516020614e47833981519152901c612580919061474e565b901b9150612590600c60786144c2565b61259c90610100614a37565b6125a8600c60786144c2565b6125b29190614a37565b8160016125c1600c60786144c2565b6125cd90610100614a37565b6125d8906002614b7e565b6125e29190614a37565b6125ee600c60786144c2565b6125fa90610100614a37565b600080516020614e47833981519152901c16612616919061474e565b612621911c836144c2565b915061262f600c60786144c2565b81600161263e600c60786144c2565b61264a90610100614a37565b612655906002614b7e565b61265f9190614a37565b600080516020614e4783398151915216612679919061474e565b612684911c836144c2565b91505090565b600054600160b01b900460ff16156126ba573330146126ab576126ab614600565b6000805460ff60b01b19169055565b6126c2612eaa565b565b6000811161273a5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610c0c565b600355565b60005b60035481101561059057600c8054600101815560005261276181614525565b9050612742565b612770612eaa565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e0919061453e565b905060006127ee82426144c2565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b0319861681526002602090815260409091208351815590830151909150600182019061286c9082614bd8565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516128a59493929190614c97565b60405180910390a15050505050565b6000806000806128c688888888613657565b9250925092506128d68282613726565b50909695505050505050565b6040805180820190915260008082526020820152600080600760089054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612970919061485c565b6009546040516344b571d960e01b815262ffffff92909216600483018190526001600160a01b0387811660248501529093506000928392839283929116906344b571d990604401608060405180830381865afa1580156129d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f89190614cc0565b60408051808201909152848152602081018490529a5092965090945092509050612a2d61ffff808416906110009084166137df565b95505050505050915091565b600080604051806080016040528060458152602001614e676045913990506000612a63848361381f565b9050600c8181548110612a7857612a786144d5565b9060005260206000200192505050919050565b6000808360600151836000015110612b0b5760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f7669646572277320776569676874006064820152608401610c0c565b6000612b17858561387b565b602085015151909150818015612b31575085604001518111155b93509150505b9250929050565b8181600d600e5481548110612b5557612b556144d5565b906000526020600020019182612b6c929190614d06565b506103e8600e546001612b7f91906144c2565b612b899190614a23565b600e555050565b3d604051818101604052816000823e8215612ba9578181f35b8181fd5b600854604080516316b9bb5760e31b815290516000926001600160a01b03169163b5cddab89160048083019260209291908290030181865afa158015612bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1b919061453e565b9050604051602081016040820160608301600e54608085015260008060008060008060058752602087208752600d8952600f545b60808b01518114612e295760208a208101808a525491506000196001831601612d605760208920895260028204915060005b60016020600185030401811015612d5a57808a510154935060005b610100811015612d5157836008820460208402011015612d51576010810460108302018a51015497506000955060005b6008811015612d3b5760208181028a901b60e01c985083026008830401851115612d1c5785821b60fe1c99506000198a01612d0957968e02607f1c965b60038a03612d1c57607f9790971b8e9004965b6020810260e0039790971b969587179560029190910190600101612ccc565b508560108083030460108402018b510155612c9c565b50600101612c81565b50600191505b60018216612e1a579091506002603f8316049060005b610100811015612e185782600882041015612e1857601081048951015496506000945060005b6008811015612e07576020810288901b60e01c965060088204841115612de85784821b60fe1c98506000198901612dd557958d02607f1c955b60038903612de857607f9690961b8d9004955b6020810260e0039690961b959486179460029190910190600101612d9c565b50846010808303048a510155612d76565b505b6103e860018201069050612c4f565b505050505050505050506080810151600f555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b031642612ea09190614a37565b61052c9190614942565b612eb2611156565b6001600160a01b0316336001600160a01b0316146126c25760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610c0c565b60608060048054612f14906144eb565b90506001600160401b03811115612f2d57612f2d6140d3565b604051908082528060200260200182016040528015612f56578160200160208202803683370190505b50915060048054612f66906144eb565b90506001600160401b03811115612f7f57612f7f6140d3565b604051908082528060200260200182016040528015612fa8578160200160208202803683370190505b509050600080600860048054612fbd906144eb565b612fc8929150614942565b905060005b818110156130e157600060058281548110612fea57612fea6144d5565b600091825260208220015491505b60088110156130cc5760008161300f85600861474e565b61301991906144c2565b90506004818154613029906144eb565b8110613037576130376144d5565b8154600116156130565790600052602060002090602091828204019190065b9054901a600160f81b0260f81c878281518110613075576130756144d5565b60009290920b60209283029190910182015261309290839061474e565b955060e08684901b901c8882815181106130ae576130ae6144d5565b602090810291909101015250806130c481614525565b915050612ff8565b505080806130d990614525565b915050612fcd565b506008600480546130f1906144eb565b6130fc929150614a23565b1561320657600060058281548110613116576131166144d5565b6000918252602082200154915061312e83600861474e565b90505b6004805461313e906144eb565b9050811015613203576004818154613155906144eb565b8110613163576131636144d5565b8154600116156131825790600052602060002090602091828204019190065b9054901a600160f81b0260f81c8582815181106131a1576131a16144d5565b60009290920b602092830291909101909101526131bf600882614a23565b6131ca90602061474e565b935060e08483901b901c8682815181106131e6576131e66144d5565b6020908102919091010152806131fb81614525565b915050613131565b50505b50509091565b600061052c6001613a5d565b6000600080516020614e4783398151915261323883600001516003613a77565b6132439060036144c2565b61324d9190614a23565b61325c83602001516002613a77565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c6132e09190614a23565b90506000613319613313604080518082018252600080825260209182015281518083019092526001825260029082015290565b85613acf565b905060006133278784613acf565b905060006133358383613b16565b80518651919250148015613350575080602001518560200151145b61339c5760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f720000006044820152606401610c0c565b5050505050505050565b600080826040516020016133ba9190614499565b6040516020818303038152906040528051906020012090506000805b8651811015613432578681815181106133f1576133f16144d5565b6020026020010151830361342057858181518110613411576134116144d5565b60200260200101519150613432565b8061342a81614525565b9150506133d6565b506001600160a01b0381166134785760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610c0c565b95945050505050565b6134b7828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b8152506133a6565b600760086101000a8154816001600160a01b0302191690836001600160a01b0316021790555061351d82826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e616765720000000000008152506133a6565b600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061357382826040518060400160405280600d81526020016c566f746572526567697374727960981b8152506133a6565b600960006101000a8154816001600160a01b0302191690836001600160a01b031602179055506135cd828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b8152506133a6565b600a60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061363382826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e00000000000000008152506133a6565b600b80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613692575060009150600390508261371c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156136e6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137125750600092506001915082905061371c565b9250600091508190505b9450945094915050565b600082600381111561373a5761373a614dc5565b03613743575050565b600182600381111561375757613757614dc5565b036137755760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561378957613789614dc5565b036137aa5760405163fce698f760e01b815260048101829052602401610c0c565b60038260038111156137be576137be614dc5565b03612084576040516335e2f38360e21b815260048101829052602401610c0c565b6000806137ed858585613b61565b9050600083806137ff576137ff61492c565b858709905080156138135781600101613815565b815b9695505050505050565b600043831115801561383c575060035461383990846144c2565b43105b829061385b5760405162461bcd60e51b8152600401610c0c9190614499565b5060006138688443614a37565b905061387381613c87565b949350505050565b600061388a8360800151613218565b61389357600080fd5b6138a08260200151613218565b6138a957600080fd5b60006138fe6138c085608001518560400151613acf565b6138f96138ef604080518082018252600080825260209182015281518083019092526001825260029082015290565b8660600151613acf565b613b16565b8451602080870151865160405194955060009461392d9493019283526020830191909152604082015260600190565b6040516020818303038152906040529050600061394982613cb0565b9050600061397061396287602001518860400151613acf565b6138f9848960600151613acf565b9050600060026139a2604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a6020015189876040516020016139c496959493929190614ddb565b60408051601f19818403018152908290526139de9161481d565b602060405180830381855afa1580156139fb573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613a1e919061453e565b9050613a4a7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182614a23565b6040880151149550505050505092915050565b600354600090613a6d43846144c2565b6121e69190614a23565b6000604051602081016020815260208082015260206040820152846060820152836080820152600080516020614e4783398151915260a082015260208260c0836005600019fa613ac657600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa613b0f57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa613b0f57600080fd5b6000808211613ba55760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610c0c565b83600003613bb557506000611e86565b83830283858281613bc857613bc861492c565b0403613be657828181613bdd57613bdd61492c565b04915050611e86565b506000613bf38386614942565b90506000613c018487614a23565b90506000613c0f8587614942565b90506000613c1d8688614a23565b905085613c2a828561474e565b613c349190614942565b613c3e838561474e565b613c48838761474e565b88613c53868961474e565b613c5d919061474e565b613c6791906144c2565b613c7191906144c2565b613c7b91906144c2565b98975050505050505050565b60006003548210613c9a57613c9a614600565b6121e682600354613cab9190614a37565b613a5d565b60408051808201909152600080825260208201526000600283604051613cd6919061481d565b602060405180830381855afa158015613cf3573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d16919061453e565b90506000613d32600080516020614e4783398151915283614a23565b905060005b613d4082613d73565b90508015613d61576040805180820190915291825260208201529392505050565b613d6c6001836144c2565b9150613d37565b600080600080516020614e47833981519152613d90846003613a77565b613d9b9060036144c2565b613da59190614a23565b90506000613dd7826002613dc86001600080516020614e47833981519152614a37565b613dd29190614942565b613a77565b9050806001141580613de7575081155b15613df6575060009392505050565b613873826004613dc8600080516020614e4783398151915260016144c2565b50805460008255906000526020600020908101906105909190613e8b565b508054613e3f906144eb565b6000825580601f10613e4f575050565b601f0160209004906000526020600020908101906105909190613eac565b50805460008255906000526020600020908101906105909190613eac565b80821115613ea8576000613e9f8282613e6d565b50600101613e8b565b5090565b5b80821115613ea85760008155600101613ead565b600060208284031215613ed357600080fd5b5035919050565b60008060208385031215613eed57600080fd5b82356001600160401b0380821115613f0457600080fd5b818501915085601f830112613f1857600080fd5b813581811115613f2757600080fd5b8660208260051b8501011115613f3c57600080fd5b60209290920196919550909350505050565b600081518084526020808501945080840160005b83811015613f7e57815187529582019590820190600101613f62565b509495945050505050565b60008151808452602080850194508084016000805b84811015613fbc578251820b88529683019691830191600101613f9e565b50959695505050505050565b604081526000613fdb6040830185613f4e565b82810360208401526134788185613f89565b606080825284519082018190526000906020906080840190828801845b828110156140305781516001600160581b0319168452928401929084019060010161400a565b505050838103828501526140448187613f4e565b91505082810360408401526138158185613f89565b60006020828403121561406b57600080fd5b81356001600160401b0381111561408157600080fd5b82016101408185031215611e8657600080fd5b6000602082840312156140a657600080fd5b81356001600160e01b031981168114611e8657600080fd5b6001600160a01b038116811461059057600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561410b5761410b6140d3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614139576141396140d3565b604052919050565b6000806000806080858703121561415757600080fd5b8435614162816140be565b935060208581013593506040860135925060608601356001600160401b038082111561418d57600080fd5b818801915088601f8301126141a157600080fd5b8135818111156141b3576141b36140d3565b6141c5601f8201601f19168501614111565b915080825289848285010111156141db57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b838110156142165781810151838201526020016141fe565b50506000910152565b600081518084526142378160208601602086016141fb565b601f01601f19169290920160200192915050565b828152604060208201526000613873604083018461421f565b60006020828403121561427657600080fd5b8135611e86816140be565b60006001600160401b0382111561429a5761429a6140d3565b5060051b60200190565b600060208083850312156142b757600080fd5b82356001600160401b038111156142cd57600080fd5b8301601f810185136142de57600080fd5b80356142f16142ec82614281565b614111565b81815260059190911b8201830190838101908783111561431057600080fd5b928401925b8284101561432e57833582529284019290840190614315565b979650505050505050565b600082601f83011261434a57600080fd5b8135602061435a6142ec83614281565b82815260059290921b8401810191818101908684111561437957600080fd5b8286015b8481101561439d578035614390816140be565b835291830191830161437d565b509695505050505050565b600080604083850312156143bb57600080fd5b82356001600160401b03808211156143d257600080fd5b818501915085601f8301126143e657600080fd5b813560206143f66142ec83614281565b82815260059290921b8401810191818101908984111561441557600080fd5b948201945b838610156144335785358252948201949082019061441a565b9650508601359250508082111561444957600080fd5b5061445685828601614339565b9150509250929050565b6000806040838503121561447357600080fd5b823561447e816140be565b9150602083013561448e816140be565b809150509250929050565b602081526000611e86602083018461421f565b634e487b7160e01b600052601160045260246000fd5b808201808211156121e6576121e66144ac565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806144ff57607f821691505b60208210810361451f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060018201614537576145376144ac565b5060010190565b60006020828403121561455057600080fd5b5051919050565b80516001600160581b03198116811461456f57600080fd5b919050565b6000602080838503121561458757600080fd5b82516001600160401b0381111561459d57600080fd5b8301601f810185136145ae57600080fd5b80516145bc6142ec82614281565b81815260059190911b820183019083810190878311156145db57600080fd5b928401925b8284101561432e576145f184614557565b825292840192908401906145e0565b634e487b7160e01b600052600160045260246000fd5b602081526000611e866020830184613f4e565b8051600081900b811461456f57600080fd5b600082601f83011261464c57600080fd5b8151602061465c6142ec83614281565b82815260059290921b8401810191818101908684111561467b57600080fd5b8286015b8481101561439d5761469081614629565b835291830191830161467f565b600080604083850312156146b057600080fd5b82516001600160401b03808211156146c757600080fd5b818501915085601f8301126146db57600080fd5b815160206146eb6142ec83614281565b82815260059290921b8401810191818101908984111561470a57600080fd5b948201945b838610156147285785518252948201949082019061470f565b9188015191965090935050508082111561474157600080fd5b506144568582860161463b565b80820281158282048414176121e6576121e66144ac565b6000808335601e1984360301811261477c57600080fd5b8301803591506001600160401b0382111561479657600080fd5b602001915036819003821315612b3757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c0820152600061381560e0830184866147ab565b6000825161482f8184602087016141fb565b9190910192915050565b60006020828403121561484b57600080fd5b813560ff81168114611e8657600080fd5b60006020828403121561486e57600080fd5b815162ffffff81168114611e8657600080fd5b600081830360a081121561489457600080fd5b604051608081018181106001600160401b03821117156148b6576148b66140d3565b604090815284358252601f19830112156148cf57600080fd5b6148d76140e9565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561492157600080fd5b8151611e86816140be565b634e487b7160e01b600052601260045260246000fd5b6000826149515761495161492c565b500490565b60006020828403121561496857600080fd5b611e8682614557565b805161ffff8116811461456f57600080fd5b600060a0828403121561499557600080fd5b60405160a081018181106001600160401b03821117156149b7576149b76140d3565b604052825163ffffffff811681146149ce57600080fd5b81526149dc60208401614557565b602082015260408301518060030b81146149f557600080fd5b6040820152614a0660608401614971565b6060820152614a1760808401614629565b60808201529392505050565b600082614a3257614a3261492c565b500690565b818103818111156121e6576121e66144ac565b600080600060608486031215614a5f57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614a8a57600080fd5b81518015158114611e8657600080fd5b600181815b80851115614ad5578160001904821115614abb57614abb6144ac565b80851615614ac857918102915b93841c9390800290614a9f565b509250929050565b600082614aec575060016121e6565b81614af9575060006121e6565b8160018114614b0f5760028114614b1957614b35565b60019150506121e6565b60ff841115614b2a57614b2a6144ac565b50506001821b6121e6565b5060208310610133831016604e8410600b8410161715614b58575081810a6121e6565b614b628383614a9a565b8060001904821115614b7657614b766144ac565b029392505050565b6000611e868383614add565b601f821115611b2757600081815260208120601f850160051c81016020861015614bb15750805b601f850160051c820191505b81811015614bd057828155600101614bbd565b505050505050565b81516001600160401b03811115614bf157614bf16140d3565b614c0581614bff84546144eb565b84614b8a565b602080601f831160018114614c3a5760008415614c225750858301515b600019600386901b1c1916600185901b178555614bd0565b600085815260208120601f198616915b82811015614c6957888601518255948401946001909101908401614c4a565b5085821015614c875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006138156060830184866147ab565b60008060008060808587031215614cd657600080fd5b8451935060208501519250614ced60408601614971565b9150614cfb60608601614971565b905092959194509250565b6001600160401b03831115614d1d57614d1d6140d3565b614d3183614d2b83546144eb565b83614b8a565b6000601f841160018114614d655760008515614d4d5750838201355b600019600387901b1c1916600186901b178355611a44565b600083815260209020601f19861690835b82811015614d965786850135825560209485019460019092019101614d76565b5086821015614db35760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e08301528351610100830152838101516101208301528251610140830152820151610160820152610180810161432e56fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47536f72746974696f6e20726f756e6420666f722074686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206e6f742079657420617661696c61626c65a26469706673582212208cd9ad6b50b56c48247cee258fc6bbf794d2e17cf633342501588d7e33f46ab764736f6c63430008140033 \ No newline at end of file +60e06040526001607f1b600e553480156200001957600080fd5b5060405162006026380380620060268339810160408190526200003c91620005aa565b8487876200004b8282620001d1565b50620000779050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038416620000c85760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008260ff16116200011d5760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000bf565b6001600160a01b03841660c05263ffffffff831660805260ff821660a0526200014562000346565b6005805463ffffffff929092166401000000000263ffffffff60201b1990921691909117905562000176816200037e565b62000180620003e9565b604080516103e8808252617d20820190925290816020015b6060815260200190600190039081620001985750508051620001c391600f916020909101906200045d565b505050505050505062000837565b600054600160a01b900460ff16156200022d5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000bf565b6001600160a01b038216620002855760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000bf565b6001600160a01b038116620002d05760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000bf565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b600060a0516001600160401b03166080516001600160401b0316426200036d919062000681565b6200037991906200069d565b905090565b60648160ff1610620003d35760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401620000bf565b6005805460ff191660ff92909216919091179055565b600554620003fc9060ff166001620006c0565b60ff166001600160401b0381111562000419576200041962000655565b60405190808252806020026020018201604052801562000443578160200160208202803683370190505b5080516200045a91600d91602090910190620004ba565b50565b828054828255906000526020600020908101928215620004a8579160200282015b82811115620004a857825182906200049790826200076b565b50916020019190600101906200047e565b50620004b692915062000506565b5090565b828054828255906000526020600020908101928215620004f8579160200282015b82811115620004f8578251825591602001919060010190620004db565b50620004b692915062000527565b80821115620004b65760006200051d82826200053e565b5060010162000506565b5b80821115620004b6576000815560010162000528565b5080546200054c90620006dc565b6000825580601f106200055d575050565b601f0160209004906000526020600020908101906200045a919062000527565b6001600160a01b03811681146200045a57600080fd5b805160ff81168114620005a557600080fd5b919050565b600080600080600080600060e0888a031215620005c657600080fd5b8751620005d3816200057d565b6020890151909750620005e6816200057d565b6040890151909650620005f9816200057d565b60608901519095506200060c816200057d565b608089015190945063ffffffff811681146200062757600080fd5b92506200063760a0890162000593565b91506200064760c0890162000593565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156200069757620006976200066b565b92915050565b600082620006bb57634e487b7160e01b600052601260045260246000fd5b500490565b60ff81811683821601908111156200069757620006976200066b565b600181811c90821680620006f157607f821691505b6020821081036200071257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076657600081815260208120601f850160051c81016020861015620007415750805b601f850160051c820191505b8181101562000762578281556001016200074d565b5050505b505050565b81516001600160401b0381111562000787576200078762000655565b6200079f81620007988454620006dc565b8462000718565b602080601f831160018114620007d75760008415620007be5750858301515b600019600386901b1c1916600185901b17855562000762565b600085815260208120601f198616915b828110156200080857888601518255948401946001909101908401620007e7565b5085821015620008275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516157a3620008836000396000818161042d01528181611c8a01526125c601526000818161030b015261336d01526000818161053c015261339701526157a36000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063a107753211610130578063e17f212e116100b8578063ef88bf131161007c578063ef88bf131461055e578063f5a9838314610571578063f5f5ba7214610579578063faae7fc9146105a6578063fc79c300146105b957600080fd5b8063e17f212e146104dc578063e22fdece146104f0578063e36da7b7146104f8578063e621dbc714610518578063e8d0e70a1461053757600080fd5b8063be60040e116100ff578063be60040e14610488578063c10f489a1461049b578063c1bff139146104ae578063dcb1476e146104b6578063debfda30146104c957600080fd5b8063a107753214610428578063a14634a71461044f578063abfaf17014610462578063b00c0b761461047557600080fd5b80635ff27079116101be57806370473f2f1161018257806370473f2f146103b157806374e6310e146103c45780637925eaca146103e55780637fe3341a146103f85780638e0e9f7c1461040057600080fd5b80635ff270791461034d57806362354e031461036057806363f921db1461037357806367fc4029146103865780636d0e8c341461039957600080fd5b80634691377f116102055780634691377f146102b4578063470e91df146102cc5780635267a15d146102df5780635a832088146103065780635aa6e6751461034557600080fd5b80630799fe75146102375780630a1660511461025257806329bfe39d1461026757806345a15d3c14610292575b600080fd5b61023f6105cc565b6040519081526020015b60405180910390f35b6102656102603660046146cb565b6105db565b005b60095461027a906001600160a01b031681565b6040516001600160a01b039091168152602001610249565b6102a56102a03660046146ee565b610635565b604051610249939291906147dc565b6102bc610aba565b604051610249949392919061481b565b6102656102da3660046148a2565b610c56565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461027a565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610249565b61027a611225565b61026561035b3660046148dd565b6112bc565b60005461027a906001600160a01b031681565b6102656103813660046146ee565b611542565b6102656103943660046148dd565b611b9c565b6103a1611c7d565b6040519015158152602001610249565b6102656103bf36600461498a565b611fc2565b6103d76103d23660046148dd565b6120c3565b604051610249929190614a94565b60075461027a906001600160a01b031681565b61023f601481565b60055461041490610100900462ffffff1681565b60405162ffffff9091168152602001610249565b61027a7f000000000000000000000000000000000000000000000000000000000000000081565b61023f61045d366004614aad565b612168565b610265610470366004614aed565b61218a565b610265610483366004614bf1565b612385565b60085461027a906001600160a01b031681565b600a5461027a906001600160a01b031681565b61023f606481565b61023f6104c4366004614ca9565b612460565b6103a16104d7366004614aad565b612530565b6000546103a190600160a81b900460ff1681565b6103a16125b9565b61050b610506366004614ca9565b61262d565b6040516102499190614cc2565b6005546105259060ff1681565b60405160ff9091168152602001610249565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b61026561056c366004614cd5565b612724565b61026561288a565b604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b602082015290516102499190614d0e565b60065461027a906001600160a01b031681565b61023f6105c7366004614ca9565b612950565b60006105d66129e4565b905090565b600054600160b01b900460ff16806105fd5750600054600160a81b900460ff16155b1561062a5761060a612be2565b61061381612c1c565b61061f600d6000614613565b610627612c85565b50565b610627600036612cee565b6060806000836001600160401b038111156106525761065261491c565b60405190808252806020026020018201604052801561067b578160200160208202803683370190505b5060405160048082525491935090600080600019600184160161074857602084206060850152600283049250602089853760208451046020850152828451106106c357600080fd5b602084015160608501510154915060005b888110156107425760208082028b01863760208551049150838551106106f957600080fd5b602085510660408601526020850151821461071f57816020860152816060860151015492505b604085015160080283901b60f81c602082810289010181905291506001016106d4565b50600192505b6001831661079d576002603f84160492915060005b8881101561079b5760208082028b0186378385511061077b57600080fd5b845160080283901b60f81c6020828102890101819052915060010161075d565b505b505050506107a9612e3a565b9050836001600160401b038111156107c3576107c361491c565b6040519080825280602002602001820160405280156107ec578160200160208202803683370190505b50600e546040516003547fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60a08301527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802606083015260105460c083015292955090916008026000808060208b8637845160088104602087018190526007909116604087015260a08601510154915060005b8a8110156108ee5760208082028d0187378486511061089c57600080fd5b6008865104915060088651066040870152602086015182146108c9578160208701528160a0870151015492505b8260206040880151021b91508160e01c6020820260208c01015260018101905061087e565b506011545b60c08601518114610aac57606086015181016080870181905254945060001960018616016109fd5760206080870181812090526002909504948c87376080865104602087015260048502865110156109545760208601516080870151015493505b60005b8b8110156109f75760208082028e0188376080875104925060048602875110156109ef5760808751066040880152602087015183146109a157826020880152826080880151015494505b604087015160020285901b60fe1c925060001983016109d15760208181028c010180518902607f81901c90915293505b600383036109ef5760208181028c01018051607f1b89810490915293505b600101610957565b50600194505b60018516610a9d576002603f86160494935060208c87376080865104602087015260005b8b811015610a9b5760208082028e0188376004860287511015610a93578651607f166040880181905260020285901b60fe1c92506000198301610a755760208181028c010180518902607f81901c90915293505b60038303610a935760208181028c01018051607f1b89810490915293505b600101610a21565b505b6103e8600182010690506108f3565b505050505050509250925092565b60608060606000600a60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3c9190810190614d3e565b935060048054610b4b90614dca565b9050845114610b5c57610b5c614dfe565b600084516001600160401b03811115610b7757610b7761491c565b604051908082528060200260200182016040528015610ba0578160200160208202803683370190505b50905060005b8151811015610bdf5780828281518110610bc257610bc2614e14565b602090810291909101015280610bd781614e40565b915050610ba6565b50604051631168574f60e21b815230906345a15d3c90610c03908490600401614cc2565b600060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c489190810190614ee4565b969791969095509350915050565b60055460ff811690610100810462ffffff1690640100000000900463ffffffff16610c82838535614faf565b4310610cec5760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084015b60405180910390fd5b8335431015610d535760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b6064820152608401610ce3565b600354610d61906008614fc2565b610d6e60c0860186614fd9565b610d7a91506004614fc2565b1115610dd25760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b6064820152608401610ce3565b60006002853560208701610de960c0890189614fd9565b604051602001610dfc9493929190615048565b60408051601f1981840301815290829052610e1691615091565b602060405180830381855afa158015610e33573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e5691906150ad565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0870190610eae83610e9f6101008b01856146cb565b84602001358560400135612e94565b90506001600160a01b038116610f065760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ce3565b600080610f138389612ec2565b6040805160a081019182905260065463e0d4ea3760e01b90925260a481018c90529294509092506000919081906001600160a01b031663e0d4ea3760c48301602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9391906150ad565b81528c356020820152604001600d610fac8d6001614faf565b610fb7908f356150dc565b81548110610fc757610fc7614e14565b6000918252602080832090910154835282810186905260409283018790528e35808352600b8252838320845189518185015289840151958101959095526060850191909152908f013560808401529293509060029060a00160408051601f198184030181529082905261103991615091565b602060405180830381855afa158015611056573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061107991906150ad565b905060005b8254811015611104578183828154811061109a5761109a614e14565b9060005260206000200154036110f25760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f766964656400000000006044820152606401610ce3565b806110fc81614e40565b91505061107e565b5081819080600181540180825580915050600190039060005260206000200160009091909190915055600061114c848f60200180360381019061114791906150f0565b612ff0565b5090508061119c5760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c69640000000000000000006044820152606401610ce3565b6111b48e8060c001906111af9190614fd9565b6130a3565b436000908152600c602052604081208054600192906111d4908490614faf565b90915550506040516001600160a01b0388169063ffffffff8d16907f63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d93690600090a35050505050505050505050505050565b60008054600160a81b900460ff1661124757506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d6919061517e565b6112c533612530565b6113015760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610ce3565b6001600160e01b031981166000908152600260205260408120805490910361136b5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b80544210156113bc5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ce3565b60008160010180546113cd90614dca565b80601f01602080910402602001604051908101604052809291908181526020018280546113f990614dca565b80156114465780601f1061141b57610100808354040283529160200191611446565b820191906000526020600020905b81548152906001019060200180831161142957829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506114786001830182614631565b50506000805460ff60b01b1916600160b01b178155604051309061149d908490615091565b6000604051808303816000865af19150503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161153c816130f5565b50505050565b600a546001600160a01b0316331480611573575061155e611225565b6001600160a01b0316336001600160a01b0316145b6115d55760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b6064820152608401610ce3565b6115dd613112565b6000805b8281101561163757818484838181106115fc576115fc614e14565b9050602002013511156116255783838281811061161b5761161b614e14565b9050602002013591505b8061162f81614e40565b9150506115e1565b5060006004805461164790614dca565b9150505b8181116116c657600460018180548061166390614dca565b80601f81036116825783600052602060002060ff1984168155603f9350505b506002820183556001810192505050038154600116156116b15790600052602060002090602091828204019190065b508190506116be81614e40565b91505061164b565b506003545b6116d660088361519b565b81116116fa57600380546001018155600052806116f281614e40565b9150506116cb565b506004805461170890614dca565b600354909150611719906008614fc2565b101561172757611727614dfe565b6000611731613369565b63ffffffff1690506000600760009054906101000a90046001600160a01b03166001600160a01b0316637a68533f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b291906150ad565b905060008060005b86811015611b9257600a546000906001600160a01b031663931028368a8a858181106117e8576117e8614e14565b905060200201356040518263ffffffff1660e01b815260040161180d91815260200190565b602060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e91906151af565b90506001600160581b0319811661189d5760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610ce3565b6009546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906151dc565b9050866014826000015163ffffffff1661192e9190614faf565b1161196a5760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b6044820152606401610ce3565b6000816040015160030b136119c15760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e6567617469766500000000006044820152606401610ce3565b6119da816040015163ffffffff168260800151886133d4565b9095509350600060088b8b868181106119f5576119f5614e14565b90506020020135611a06919061519b565b9050600060088c8c87818110611a1e57611a1e614e14565b90506020020135611a2f91906150dc565b611a3a90600761527c565b611a45906020614fc2565b6003805491925063ffffffff831b199189841b91839186908110611a6b57611a6b614e14565b9060005260206000200154161760038481548110611a8b57611a8b614e14565b90600052602060002001819055508660f81b60048e8e89818110611ab157611ab1614e14565b905060200201358154611ac390614dca565b8110611ad157611ad1614e14565b815460011615611af05790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168d8d88818110611b2d57611b2d614e14565b905060200201358b7ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf58b8b604051611b7292919091825260000b602082015260400190565b60405180910390a450505050508080611b8a90614e40565b9150506117ba565b5050505050505050565b611ba46134b6565b6001600160e01b031981166000908152600260205260408120549003611c0c5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590611c786001830182614631565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ceb5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b611cf3613112565b6000611cfd613369565b60055490915063ffffffff64010000000090910481169082161115611d9957600080611d27613510565b6005805467ffffffff00000000191664010000000063ffffffff8816021790559092509050611d5760018461528f565b63ffffffff167f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe8383604051611d8e9291906152ac565b60405180910390a250505b60065460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0791906152d1565b60055490915062ffffff8083166101009092041614611e4157611e28613818565b6005805463ffffff00191661010062ffffff8416021790555b611e49613a31565b600760009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b505060058054436001600160401b03908116600160c01b026001600160c01b034292909216600160801b02919091166fffffffffffffffffffffffffffffffff9092169190911717905550611f0290506129e4565b600554600d90611f169060ff1660016152f6565b60ff16611f24436001614faf565b611f2e91906150dc565b81548110611f3e57611f3e614e14565b60009182526020918290200191909155600754604080516316b9bb5760e31b815290516001600160a01b039092169263b5cddab8926004808401938290030181865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb691906150ad565b600e5550600191505090565b600080600083806020019051810190611fdb919061530f565b6040805180820190915289815260208101899052929550909350915061200081613ab7565b61200957600080fd5b604080518082019091528381526020810183905261202681613ab7565b61202f57600080fd5b6040516bffffffffffffffffffffffff1960608b901b1660208201526120b890839060029060340160408051601f198184030181529082905261207191615091565b602060405180830381855afa15801561208e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906120b191906150ad565b8784613b02565b505050505050505050565b600260205260009081526040902080546001820180549192916120e590614dca565b80601f016020809104026020016040519081016040528092919081815260200182805461211190614dca565b801561215e5780601f106121335761010080835404028352916020019161215e565b820191906000526020600020905b81548152906001019060200180831161214157829003601f168201915b5050505050905082565b600554600090612183908390610100900462ffffff16612ec2565b9392505050565b600a546001600160a01b031633146121e45760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e006044820152606401610ce3565b6121ec613112565b60005b8151811015612381576000600883838151811061220e5761220e614e14565b6020026020010151612220919061519b565b90506000600884848151811061223857612238614e14565b602002602001015161224a91906150dc565b61225590600761527c565b612260906020614fc2565b6003805491925063ffffffff831b19918291908590811061228357612283614e14565b906000526020600020015416600384815481106122a2576122a2614e14565b9060005260206000200181905550600060f81b60048686815181106122c9576122c9614e14565b602002602001015181546122dc90614dca565b81106122ea576122ea614e14565b8154600116156123095790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555084848151811061233757612337614e14565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061237990614e40565b9150506121ef565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146123fe5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ce3565b61245661243283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250613c3b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6123818282613d16565b600061246d436001614faf565b821115801561248a57506005546124879060ff1683614faf565b43105b6124ed5760405162461bcd60e51b815260206004820152602e60248201527f73636f7265206375746f6666206e6f7420617661696c61626c6520666f72207460448201526d686520676976656e20626c6f636b60901b6064820152608401610ce3565b600554600d906125019060ff1660016152f6565b61250e9060ff16846150dc565b8154811061251e5761251e614e14565b90600052602060002001549050919050565b60008054600160a01b900460ff1680156125b35750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b3919061533d565b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146126275760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b50600090565b6060606482111580156126405750438211155b6126835760405162461bcd60e51b8152602060048201526014602482015273486973746f72792073697a6520746f6f2062696760601b6044820152606401610ce3565b816001600160401b0381111561269b5761269b61491c565b6040519080825280602002602001820160405280156126c4578160200160208202803683370190505b50905060005b8281101561271e57600c60006126e0834361527c565b81526020019081526020016000205482828151811061270157612701614e14565b60209081029190910101528061271681614e40565b9150506126ca565b50919050565b600054600160a01b900460ff16156127755760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ce3565b6001600160a01b0382166127cb5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ce3565b6001600160a01b0381166128145760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ce3565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6128926134b6565b600054600160a81b900460ff16156128ec5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ce3565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b60004361295e606484614faf565b11801561296b5750438211155b6129d15760405162461bcd60e51b815260206004820152603160248201527f54686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206044820152706e6f742079657420617661696c61626c6560781b6064820152608401610ce3565b506000908152600c602052604090205490565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e91906150ad565b90506078600c612a6e8183614faf565b612a7a9061010061527c565b612a85906002614fc2565b612a8f919061527c565b612a99919061527c565b81612aa6600c6078614faf565b612ab29061010061527c565b612abd906002614fc2565b60008051602061574e833981519152901c612ad89190614fc2565b901b9150612ae8600c6078614faf565b612af49061010061527c565b612b00600c6078614faf565b612b0a919061527c565b816001612b19600c6078614faf565b612b259061010061527c565b612b30906002615443565b612b3a919061527c565b612b46600c6078614faf565b612b529061010061527c565b60008051602061574e833981519152901c16612b6e9190614fc2565b612b79911c83614faf565b9150612b87600c6078614faf565b816001612b96600c6078614faf565b612ba29061010061527c565b612bad906002615443565b612bb7919061527c565b60008051602061574e83398151915216612bd19190614fc2565b612bdc911c83614faf565b91505090565b600054600160b01b900460ff1615612c1257333014612c0357612c03614dfe565b6000805460ff60b01b19169055565b612c1a6134b6565b565b60648160ff1610612c6f5760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401610ce3565b6005805460ff191660ff92909216919091179055565b600554612c969060ff1660016152f6565b60ff166001600160401b03811115612cb057612cb061491c565b604051908082528060200260200182016040528015612cd9578160200160208202803683370190505b50805161062791600d9160209091019061466b565b612cf66134b6565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015612d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6691906150ad565b90506000612d748242614faf565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190612df2908261549d565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051612e2b949392919061555c565b60405180910390a15050505050565b600060105460115403612e6357506005546801000000000000000090046001600160401b031690565b436000908152600c602052604090205415612e7d57504290565b50600554600160801b90046001600160401b031690565b600080600080612ea688888888613eec565b925092509250612eb68282613fbb565b50909695505050505050565b60408051808201909152600080825260208201526008546040516344b571d960e01b8152600481018490526001600160a01b03858116602483015260009283928392839283929116906344b571d990604401608060405180830381865afa158015612f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f559190615585565b9296509094509250905083151580612f6c57508215155b612fb85760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206b6579206e6f742072656769737465726564000000000000006044820152606401610ce3565b60408051808201909152848152602081018490529550612fe361ffff80841690611000908416614074565b9450505050509250929050565b60008083606001518360000151106130705760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f7669646572277320776569676874006064820152608401610ce3565b600061307c85856140b4565b602085015151909150818015613096575085604001518111155b93509150505b9250929050565b8181600f601054815481106130ba576130ba614e14565b9060005260206000200191826130d19291906155cb565b506103e860105460016130e49190614faf565b6130ee91906150dc565b6010555050565b3d604051818101604052816000823e821561310e578181f35b8181fd5b61311a612e3a565b600560086101000a8154816001600160401b0302191690836001600160401b031602179055506000600e549050604051602081016040820160608301601054608085015260008060008060008060038752602087208752600f89526011545b60808b015181146133535760208a208101808a52549150600019600183160161328a5760208920895260028204915060005b6001602060018503040181101561328457808a510154935060005b61010081101561327b5783600882046020840201101561327b576010810460108302018a51015497506000955060005b60088110156132655760208181028a901b60e01c9850830260088304018511156132465785821b60fe1c99506000198a0161323357968e02607f1c965b60038a0361324657607f9790971b8e9004965b6020810260e0039790971b9695871795600291909101906001016131f6565b508560108083030460108402018b5101556131c6565b506001016131ab565b50600191505b60018216613344579091506002603f8316049060005b610100811015613342578260088204101561334257601081048951015496506000945060005b6008811015613331576020810288901b60e01c9650600882048411156133125784821b60fe1c985060001989016132ff57958d02607f1c955b6003890361331257607f9690961b8d9004955b6020810260e0039690961b9594861794600291909101906001016132c6565b50846010808303048a5101556132a0565b505b6103e860018201069050613179565b5050505050505050505060808101516011555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426133ca919061527c565b6105d6919061519b565b600080846000036133e95750839050826134ae565b8484601d82901c158015906134025750607f198160000b135b1561342257613412600a8361519b565b915061341f60018261568a565b90505b6000607f6134308785614fc2565b901c90506000613440848361527c565b90505b600381901c1580156134585750607f8360000b125b80156134665750601c84901c155b156134a65761347684600a614fc2565b93506134838360016156ab565b9250607f6134918886614fc2565b901c915061349f848361527c565b9050613443565b509193509150505b935093915050565b6134be611225565b6001600160a01b0316336001600160a01b031614612c1a5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ce3565b6060806004805461352090614dca565b90506001600160401b038111156135395761353961491c565b604051908082528060200260200182016040528015613562578160200160208202803683370190505b5091506004805461357290614dca565b90506001600160401b0381111561358b5761358b61491c565b6040519080825280602002602001820160405280156135b4578160200160208202803683370190505b5090506000806008600480546135c990614dca565b6135d492915061519b565b905060005b818110156136ed576000600382815481106135f6576135f6614e14565b600091825260208220015491505b60088110156136d85760008161361b856008614fc2565b6136259190614faf565b9050600481815461363590614dca565b811061364357613643614e14565b8154600116156136625790600052602060002090602091828204019190065b9054901a600160f81b0260f81c87828151811061368157613681614e14565b60009290920b60209283029190910182015261369e908390614fc2565b955060e08684901b901c8882815181106136ba576136ba614e14565b602090810291909101015250806136d081614e40565b915050613604565b505080806136e590614e40565b9150506135d9565b506008600480546136fd90614dca565b6137089291506150dc565b156138125760006003828154811061372257613722614e14565b6000918252602082200154915061373a836008614fc2565b90505b6004805461374a90614dca565b905081101561380f57600481815461376190614dca565b811061376f5761376f614e14565b81546001161561378e5790600052602060002090602091828204019190065b9054901a600160f81b0260f81c8582815181106137ad576137ad614e14565b60009290920b602092830291909101909101526137cb6008826150dc565b6137d6906020614fc2565b935060e08483901b901c8682815181106137f2576137f2614e14565b60209081029190910101528061380781614e40565b91505061373d565b50505b50509091565b60075460408051637a68533f60e01b815290516000926001600160a01b031691637a68533f9160048083019260209291908290030181865afa158015613862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388691906150ad565b905060008080805b600354811015613a2a57600381815481106138ab576138ab614e14565b9060005260206000200154925060005b60088110156139f757806138d0836008614fc2565b6138da9190614faf565b9450600480546138e990614dca565b90508510156139f7576000600486815461390290614dca565b811061391057613910614e14565b81546001161561392f5790600052602060002090602091828204019190065b9054600160f81b911a0260f81c9050600061394b83600761527c565b613956906020614fc2565b63ffffffff811b878116821c965090915061397286848b6133d4565b6004805484199a909a1683861b179992985090945060f885901b918a9061399890614dca565b81106139a6576139a6614e14565b8154600116156139c55790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555050505080806139ef90614e40565b9150506138bb565b508260038281548110613a0c57613a0c614e14565b60009182526020909120015580613a2281614e40565b91505061388e565b5050505050565b600554600160c01b90046001600160401b03166064811015613a505750565b805b4381101561238157600b6000613a6960648461527c565b81526020019081526020016000206000613a839190614613565b600c6000613a9260648461527c565b8152602001908152602001600020600090558080613aaf90614e40565b915050613a52565b600060008051602061574e833981519152613ad783600001516003614296565b613ae2906003614faf565b613aec91906150dc565b613afb83602001516002614296565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c613b7f91906150dc565b90506000613bb8613bb2604080518082018252600080825260209182015281518083019092526001825260029082015290565b856142ee565b90506000613bc687846142ee565b90506000613bd48383614335565b80518651919250148015613bef575080602001518560200151145b611b925760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f720000006044820152606401610ce3565b60008082604051602001613c4f9190614d0e565b6040516020818303038152906040528051906020012090506000805b8651811015613cc757868181518110613c8657613c86614e14565b60200260200101518303613cb557858181518110613ca657613ca6614e14565b60200260200101519150613cc7565b80613cbf81614e40565b915050613c6b565b506001600160a01b038116613d0d5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ce3565b95945050505050565b613d4c828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250613c3b565b600660006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613db282826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e61676572000000000000815250613c3b565b600760006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e0882826040518060400160405280600d81526020016c566f746572526567697374727960981b815250613c3b565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e62828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b815250613c3b565b600960006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613ec882826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250613c3b565b600a80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613f275750600091506003905082613fb1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613f7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fa757506000925060019150829050613fb1565b9250600091508190505b9450945094915050565b6000826003811115613fcf57613fcf6156cc565b03613fd8575050565b6001826003811115613fec57613fec6156cc565b0361400a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561401e5761401e6156cc565b0361403f5760405163fce698f760e01b815260048101829052602401610ce3565b6003826003811115614053576140536156cc565b03612381576040516335e2f38360e21b815260048101829052602401610ce3565b600080614082858585614380565b905060008380614094576140946150c6565b858709905080156140a857816001016140aa565b815b9695505050505050565b60006140c38360800151613ab7565b6140cc57600080fd5b6140d98260200151613ab7565b6140e257600080fd5b60006141376140f9856080015185604001516142ee565b614132614128604080518082018252600080825260209182015281518083019092526001825260029082015290565b86606001516142ee565b614335565b845160208087015186516040519495506000946141669493019283526020830191909152604082015260600190565b60405160208183030381529060405290506000614182826144a6565b905060006141a961419b876020015188604001516142ee565b6141328489606001516142ee565b9050600060026141db604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a6020015189876040516020016141fd969594939291906156e2565b60408051601f198184030181529082905261421791615091565b602060405180830381855afa158015614234573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061425791906150ad565b90506142837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826150dc565b6040880151149550505050505092915050565b600060405160208101602081526020808201526020604082015284606082015283608082015260008051602061574e83398151915260a082015260208260c0836005600019fa6142e557600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa61432e57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa61432e57600080fd5b60008082116143c45760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ce3565b836000036143d457506000612183565b838302838582816143e7576143e76150c6565b0403614405578281816143fc576143fc6150c6565b04915050612183565b506000614412838661519b565b9050600061442084876150dc565b9050600061442e858761519b565b9050600061443c86886150dc565b9050856144498285614fc2565b614453919061519b565b61445d8385614fc2565b6144678387614fc2565b886144728689614fc2565b61447c9190614fc2565b6144869190614faf565b6144909190614faf565b61449a9190614faf565b98975050505050505050565b604080518082019091526000808252602082015260006002836040516144cc9190615091565b602060405180830381855afa1580156144e9573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061450c91906150ad565b9050600061452860008051602061574e833981519152836150dc565b905060005b61453682614569565b90508015614557576040805180820190915291825260208201529392505050565b614562600183614faf565b915061452d565b60008060008051602061574e833981519152614586846003614296565b614591906003614faf565b61459b91906150dc565b905060006145cd8260026145be600160008051602061574e83398151915261527c565b6145c8919061519b565b614296565b90508060011415806145dd575081155b156145ec575060009392505050565b61460b8260046145be60008051602061574e8339815191526001614faf565b949350505050565b508054600082559060005260206000209081019061062791906146b6565b50805461463d90614dca565b6000825580601f1061464d575050565b601f01602090049060005260206000209081019061062791906146b6565b8280548282559060005260206000209081019282156146a6579160200282015b828111156146a657825182559160200191906001019061468b565b506146b29291506146b6565b5090565b5b808211156146b257600081556001016146b7565b6000602082840312156146dd57600080fd5b813560ff8116811461218357600080fd5b6000806020838503121561470157600080fd5b82356001600160401b038082111561471857600080fd5b818501915085601f83011261472c57600080fd5b81358181111561473b57600080fd5b8660208260051b850101111561475057600080fd5b60209290920196919550909350505050565b600081518084526020808501945080840160005b8381101561479257815187529582019590820190600101614776565b509495945050505050565b60008151808452602080850194508084016000805b848110156147d0578251820b885296830196918301916001016147b2565b50959695505050505050565b6060815260006147ef6060830186614762565b8281036020840152614801818661479d565b9150506001600160401b0383166040830152949350505050565b6080808252855190820181905260009060209060a0840190828901845b8281101561485e5781516001600160581b03191684529284019290840190600101614838565b505050838103828501526148728188614762565b9150508281036040840152614887818661479d565b9150506001600160401b038316606083015295945050505050565b6000602082840312156148b457600080fd5b81356001600160401b038111156148ca57600080fd5b8201610140818503121561218357600080fd5b6000602082840312156148ef57600080fd5b81356001600160e01b03198116811461218357600080fd5b6001600160a01b038116811461062757600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156149545761495461491c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156149825761498261491c565b604052919050565b600080600080608085870312156149a057600080fd5b84356149ab81614907565b935060208581013593506040860135925060608601356001600160401b03808211156149d657600080fd5b818801915088601f8301126149ea57600080fd5b8135818111156149fc576149fc61491c565b614a0e601f8201601f1916850161495a565b91508082528984828501011115614a2457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b83811015614a5f578181015183820152602001614a47565b50506000910152565b60008151808452614a80816020860160208601614a44565b601f01601f19169290920160200192915050565b82815260406020820152600061460b6040830184614a68565b600060208284031215614abf57600080fd5b813561218381614907565b60006001600160401b03821115614ae357614ae361491c565b5060051b60200190565b60006020808385031215614b0057600080fd5b82356001600160401b03811115614b1657600080fd5b8301601f81018513614b2757600080fd5b8035614b3a614b3582614aca565b61495a565b81815260059190911b82018301908381019087831115614b5957600080fd5b928401925b82841015614b7757833582529284019290840190614b5e565b979650505050505050565b600082601f830112614b9357600080fd5b81356020614ba3614b3583614aca565b82815260059290921b84018101918181019086841115614bc257600080fd5b8286015b84811015614be6578035614bd981614907565b8352918301918301614bc6565b509695505050505050565b60008060408385031215614c0457600080fd5b82356001600160401b0380821115614c1b57600080fd5b818501915085601f830112614c2f57600080fd5b81356020614c3f614b3583614aca565b82815260059290921b84018101918181019089841115614c5e57600080fd5b948201945b83861015614c7c57853582529482019490820190614c63565b96505086013592505080821115614c9257600080fd5b50614c9f85828601614b82565b9150509250929050565b600060208284031215614cbb57600080fd5b5035919050565b6020815260006121836020830184614762565b60008060408385031215614ce857600080fd5b8235614cf381614907565b91506020830135614d0381614907565b809150509250929050565b6020815260006121836020830184614a68565b80516001600160581b031981168114614d3957600080fd5b919050565b60006020808385031215614d5157600080fd5b82516001600160401b03811115614d6757600080fd5b8301601f81018513614d7857600080fd5b8051614d86614b3582614aca565b81815260059190911b82018301908381019087831115614da557600080fd5b928401925b82841015614b7757614dbb84614d21565b82529284019290840190614daa565b600181811c90821680614dde57607f821691505b60208210810361271e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e5257614e52614e2a565b5060010190565b8051600081900b8114614d3957600080fd5b600082601f830112614e7c57600080fd5b81516020614e8c614b3583614aca565b82815260059290921b84018101918181019086841115614eab57600080fd5b8286015b84811015614be657614ec081614e59565b8352918301918301614eaf565b80516001600160401b0381168114614d3957600080fd5b600080600060608486031215614ef957600080fd5b83516001600160401b0380821115614f1057600080fd5b818601915086601f830112614f2457600080fd5b81516020614f34614b3583614aca565b82815260059290921b8401810191818101908a841115614f5357600080fd5b948201945b83861015614f7157855182529482019490820190614f58565b91890151919750909350505080821115614f8a57600080fd5b50614f9786828701614e6b565b925050614fa660408501614ecd565b90509250925092565b808201808211156125b3576125b3614e2a565b80820281158282048414176125b3576125b3614e2a565b6000808335601e19843603018112614ff057600080fd5b8301803591506001600160401b0382111561500a57600080fd5b60200191503681900382131561309c57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c082015260006140aa60e08301848661501f565b600082516150a3818460208701614a44565b9190910192915050565b6000602082840312156150bf57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826150eb576150eb6150c6565b500690565b600081830360a081121561510357600080fd5b604051608081018181106001600160401b03821117156151255761512561491c565b604090815284358252601f198301121561513e57600080fd5b615146614932565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561519057600080fd5b815161218381614907565b6000826151aa576151aa6150c6565b500490565b6000602082840312156151c157600080fd5b61218382614d21565b805161ffff81168114614d3957600080fd5b600060a082840312156151ee57600080fd5b60405160a081018181106001600160401b03821117156152105761521061491c565b604052825163ffffffff8116811461522757600080fd5b815261523560208401614d21565b602082015260408301518060030b811461524e57600080fd5b604082015261525f606084016151ca565b606082015261527060808401614e59565b60808201529392505050565b818103818111156125b3576125b3614e2a565b63ffffffff82811682821603908082111561432e5761432e614e2a565b6040815260006152bf6040830185614762565b8281036020840152613d0d818561479d565b6000602082840312156152e357600080fd5b815162ffffff8116811461218357600080fd5b60ff81811683821601908111156125b3576125b3614e2a565b60008060006060848603121561532457600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561534f57600080fd5b8151801515811461218357600080fd5b600181815b8085111561539a57816000190482111561538057615380614e2a565b8085161561538d57918102915b93841c9390800290615364565b509250929050565b6000826153b1575060016125b3565b816153be575060006125b3565b81600181146153d457600281146153de576153fa565b60019150506125b3565b60ff8411156153ef576153ef614e2a565b50506001821b6125b3565b5060208310610133831016604e8410600b841016171561541d575081810a6125b3565b615427838361535f565b806000190482111561543b5761543b614e2a565b029392505050565b600061218383836153a2565b601f821115611c7857600081815260208120601f850160051c810160208610156154765750805b601f850160051c820191505b8181101561549557828155600101615482565b505050505050565b81516001600160401b038111156154b6576154b661491c565b6154ca816154c48454614dca565b8461544f565b602080601f8311600181146154ff57600084156154e75750858301515b600019600386901b1c1916600185901b178555615495565b600085815260208120601f198616915b8281101561552e5788860151825594840194600190910190840161550f565b508582101561554c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006140aa60608301848661501f565b6000806000806080858703121561559b57600080fd5b84519350602085015192506155b2604086016151ca565b91506155c0606086016151ca565b905092959194509250565b6001600160401b038311156155e2576155e261491c565b6155f6836155f08354614dca565b8361544f565b6000601f84116001811461562a57600085156156125750838201355b600019600387901b1c1916600186901b178355613a2a565b600083815260209020601f19861690835b8281101561565b578685013582556020948501946001909201910161563b565b50868210156156785760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082810b9082900b03607f198112607f821317156125b3576125b3614e2a565b600081810b9083900b01607f8113607f19821217156125b3576125b3614e2a565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e083015283516101008301528381015161012083015282516101408301528201516101608201526101808101614b7756fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122085593ec3b965bb2a49d1c787856a93122b44643749afcf8141e8e48d6c71e75564736f6c63430008140033 \ No newline at end of file diff --git a/go-client/contracts-interface/FastUpdatesConfiguration.abi b/go-client/contracts-interface/FastUpdatesConfiguration.abi index 3a05dd6..0ae7402 100644 --- a/go-client/contracts-interface/FastUpdatesConfiguration.abi +++ b/go-client/contracts-interface/FastUpdatesConfiguration.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"},{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"encodedCall","type":"bytes"}],"name":"GovernanceCallTimelocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"initialGovernance","type":"address"}],"name":"GovernanceInitialised","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governanceSettings","type":"address"}],"name":"GovernedProductionModeEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallExecuted","type":"event"},{"inputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"_feedConfigs","type":"tuple[]"}],"name":"addFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"cancelGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"executeGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastUpdater","outputs":[{"internalType":"contract IIFastUpdater","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressUpdater","outputs":[{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedConfigurations","outputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedConfigurationsBytes","outputs":[{"internalType":"bytes","name":"_feedIds","type":"bytes"},{"internalType":"bytes","name":"_rewardBandValues","type":"bytes"},{"internalType":"bytes","name":"_inflationShares","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getFeedId","outputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedIds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"name":"getFeedIndex","outputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfFeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnusedIndices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceSettings","outputs":[{"internalType":"contract IGovernanceSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExecutor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"productionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"}],"name":"removeFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToProductionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"timelockedCalls","outputs":[{"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"internalType":"bytes","name":"encodedCall","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_contractNameHashes","type":"bytes32[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"_feedConfigs","type":"tuple[]"}],"name":"updateFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"},{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"encodedCall","type":"bytes"}],"name":"GovernanceCallTimelocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"initialGovernance","type":"address"}],"name":"GovernanceInitialised","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governanceSettings","type":"address"}],"name":"GovernedProductionModeEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TimelockedGovernanceCallExecuted","type":"event"},{"inputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"_feedConfigs","type":"tuple[]"}],"name":"addFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"cancelGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"executeGovernanceCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastUpdater","outputs":[{"internalType":"contract IIFastUpdater","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressUpdater","outputs":[{"internalType":"address","name":"_addressUpdater","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedConfigurations","outputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getFeedId","outputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedIds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"name":"getFeedIndex","outputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfFeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnusedIndices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceSettings","outputs":[{"internalType":"contract IGovernanceSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IGovernanceSettings","name":"_governanceSettings","type":"address"},{"internalType":"address","name":"_initialGovernance","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExecutor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"productionMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"}],"name":"removeFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToProductionMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"timelockedCalls","outputs":[{"internalType":"uint256","name":"allowedAfterTimestamp","type":"uint256"},{"internalType":"bytes","name":"encodedCall","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_contractNameHashes","type":"bytes32[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"_feedConfigs","type":"tuple[]"}],"name":"updateFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/FastUpdatesConfiguration.bin b/go-client/contracts-interface/FastUpdatesConfiguration.bin index d5bced4..eb30d48 100644 --- a/go-client/contracts-interface/FastUpdatesConfiguration.bin +++ b/go-client/contracts-interface/FastUpdatesConfiguration.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b50604051620027f4380380620027f483398101604081905262000034916200020b565b80838362000043828262000079565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b505050506200025f565b600054600160a01b900460ff1615620000d95760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620001315760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000d0565b6001600160a01b0381166200017c5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000d0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200020857600080fd5b50565b6000806000606084860312156200022157600080fd5b83516200022e81620001f2565b60208501519093506200024181620001f2565b60408501519092506200025481620001f2565b809150509250925092565b612585806200026f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806374e6310e116100b8578063c906b1b41161007c578063c906b1b4146102da578063d29a4fa9146102e2578063debfda30146102f5578063e17f212e14610318578063ef88bf131461032c578063f5a983831461033f57600080fd5b806374e6310e146102545780639310283614610275578063a087d184146102a1578063a59b2c46146102b4578063b00c0b76146102c757600080fd5b806348a924821161010a57806348a92482146101c15780635267a15d146101d85780635aa6e675146102135780635ff270791461021b57806362354e031461022e57806367fc40291461024157600080fd5b80630a9cabe7146101475780630c518dce1461016d578063247c9cf71461018257806331038aad1461019757806331864f1f146101ac575b600080fd5b61015a610155366004611c81565b610347565b6040519081526020015b60405180910390f35b61017561039b565b6040516101649190611c9e565b610195610190366004611cec565b61045b565b005b61019f6107da565b6040516101649190611d61565b6101b4610868565b6040516101649190611dcf565b6101c96108c0565b60405161016493929190611e57565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719545b6040516001600160a01b039091168152602001610164565b6101fb610bcf565b610195610229366004611e9a565b610c6b565b6000546101fb906001600160a01b031681565b61019561024f366004611e9a565b610ef1565b610267610262366004611e9a565b610fd2565b604051610164929190611ec4565b610288610283366004611ee5565b611077565b6040516001600160581b03199091168152602001610164565b6101956102af366004611cec565b6110e3565b6101956102c2366004611efe565b6112db565b6101956102d5366004612055565b61155b565b60045461015a565b6003546101fb906001600160a01b031681565b61030861030336600461210e565b611636565b6040519015158152602001610164565b60005461030890600160a81b900460ff1681565b61019561033a36600461212b565b6116bf565b610195611825565b6001600160581b031981166000908152600560205260408120549081900361038a5760405162461bcd60e51b815260040161038190612164565b60405180910390fd5b80610394816121a7565b9392505050565b6004546060908067ffffffffffffffff8111156103ba576103ba611f61565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b50915060005b818110156104565760048181548110610404576104046121be565b600091825260209091200154835160589190911b9084908390811061042b5761042b6121be565b6001600160581b0319909216602092830291909101909101528061044e816121d4565b9150506103e9565b505090565b600054600160b01b900460ff168061047d5750600054600160a81b900460ff16155b156107cb5761048a6118eb565b60008167ffffffffffffffff8111156104a5576104a5611f61565b6040519080825280602002602001820160405280156104ce578160200160208202803683370190505b50905060005b828110156107635760008484838181106104f0576104f06121be565b6105069260206060909202019081019150611c81565b90506001600160581b031981166105515760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b6044820152606401610381565b6001600160581b03198116600090815260056020526040902054156105ae5760405162461bcd60e51b81526020600482015260136024820152726665656420616c72656164792065786973747360681b6044820152606401610381565b6006546000901561061257600680546105c9906001906121ed565b815481106105d9576105d96121be565b9060005260206000200154905060068054806105f7576105f7612200565b60019003818190600052602060002001600090559055610624565b50600480546001810182556000919091525b80848481518110610637576106376121be565b602002602001018181525050858584818110610655576106556121be565b9050606002016004828154811061066e5761066e6121be565b9060005260206000200181816106849190612239565b5061069290508160016122c0565b6001600160581b031983166000818152600560205260409020919091557f3ca318c85958cdc1745f9edcd68164b4579efa8050b27b9d634f5e0427e7e33a8787868181106106e2576106e26121be565b90506060020160200160208101906106fa91906122d3565b88888781811061070c5761070c6121be565b905060600201604001602081019061072491906122f0565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a25050808061075b906121d4565b9150506104d4565b506003546040516363f921db60e01b81526001600160a01b03909116906363f921db90610794908490600401611dcf565b600060405180830381600087803b1580156107ae57600080fd5b505af11580156107c2573d6000803e3d6000fd5b50505050505050565b6107d6600036611925565b5050565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561085f5760008481526020908190206040805160608101825291850154605881901b6001600160581b0319168352600160a81b810463ffffffff1683850152600160c81b900462ffffff16908201528252600190920191016107fe565b50505050905090565b606060068054806020026020016040519081016040528092919081815260200182805480156108b657602002820191906000526020600020905b8154815260200190600101908083116108a2575b5050505050905090565b600454606090819081906108d581601561230d565b67ffffffffffffffff8111156108ed576108ed611f61565b6040519080825280601f01601f191660200182016040528015610917576020820181803683370190505b50935061092581600461230d565b67ffffffffffffffff81111561093d5761093d611f61565b6040519080825280601f01601f191660200182016040528015610967576020820181803683370190505b50925061097581600361230d565b67ffffffffffffffff81111561098d5761098d611f61565b6040519080825280601f01601f1916602001820160405280156109b7576020820181803683370190505b50915060005b81811015610bc8576000600482815481106109da576109da6121be565b60009182526020822001546004805460589290921b93509084908110610a0257610a026121be565b9060005260206000200160000160159054906101000a900463ffffffff1660e01b9050600060048481548110610a3a57610a3a6121be565b6000918252602082200154600160c81b900460e81b6001600160e81b03191691505b6015811015610acb57838160158110610a7757610a776121be565b1a60f81b8982610a8888601561230d565b610a9291906122c0565b81518110610aa257610aa26121be565b60200101906001600160f81b031916908160001a90535080610ac3816121d4565b915050610a5c565b5060005b6004811015610b3e57828160048110610aea57610aea6121be565b1a60f81b8882610afb88600461230d565b610b0591906122c0565b81518110610b1557610b156121be565b60200101906001600160f81b031916908160001a90535080610b36816121d4565b915050610acf565b5060005b6003811015610bb157818160038110610b5d57610b5d6121be565b1a60f81b8782610b6e88600361230d565b610b7891906122c0565b81518110610b8857610b886121be565b60200101906001600160f81b031916908160001a90535080610ba9816121d4565b915050610b42565b505050508080610bc0906121d4565b9150506109bd565b5050909192565b60008054600160a81b900460ff16610bf157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c669190612324565b905090565b610c7433611636565b610cb05760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610381565b6001600160e01b0319811660009081526002602052604081208054909103610d1a5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610381565b8054421015610d6b5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610381565b6000816001018054610d7c90612341565b80601f0160208091040260200160405190810160405280929190818152602001828054610da890612341565b8015610df55780601f10610dca57610100808354040283529160200191610df5565b820191906000526020600020905b815481529060010190602001808311610dd857829003601f168201915b505050506001600160e01b0319851660009081526002602052604081208181559293509050610e276001830182611c15565b50506000805460ff60b01b1916600160b01b1781556040513090610e4c90849061237b565b6000604051808303816000865af19150503d8060008114610e89576040519150601f19603f3d011682016040523d82523d6000602084013e610e8e565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610eeb81611a71565b50505050565b610ef9611a8e565b6001600160e01b031981166000908152600260205260408120549003610f615760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610381565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590610fcd6001830182611c15565b505050565b60026020526000908152604090208054600182018054919291610ff490612341565b80601f016020809104026020016040519081016040528092919081815260200182805461102090612341565b801561106d5780601f106110425761010080835404028352916020019161106d565b820191906000526020600020905b81548152906001019060200180831161105057829003601f168201915b5050505050905082565b60045460009082106110bb5760405162461bcd60e51b815260206004820152600d60248201526c0d2dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610381565b600482815481106110ce576110ce6121be565b60009182526020909120015460581b92915050565b600054600160b01b900460ff16806111055750600054600160a81b900460ff16155b156107cb576111126118eb565b60005b81811015610fcd576000838383818110611131576111316121be565b6111479260206060909202019081019150611c81565b90506001600160581b031981166111925760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b6044820152606401610381565b6001600160581b03198116600090815260056020526040812054908190036111cc5760405162461bcd60e51b815260040161038190612164565b806111d6816121a7565b9150508484848181106111eb576111eb6121be565b90506060020160048281548110611204576112046121be565b90600052602060002001818161121a9190612239565b50506001600160581b031982167f317c7e03c79b6fcd22d6f17813b4e8e8a4a14104fdfb79431c6c73b550c7ca9d86868681811061125a5761125a6121be565b905060600201602001602081019061127291906122d3565b878787818110611284576112846121be565b905060600201604001602081019061129c91906122f0565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a2505080806112d3906121d4565b915050611115565b600054600160b01b900460ff16806112fd5750600054600160a81b900460ff16155b156107cb5761130a6118eb565b60008167ffffffffffffffff81111561132557611325611f61565b60405190808252806020026020018201604052801561134e578160200160208202803683370190505b50905060005b8281101561152a57600060056000868685818110611374576113746121be565b90506020020160208101906113899190611c81565b6affffffffffffffffffffff19166affffffffffffffffffffff19168152602001908152602001600020549050806000036113d65760405162461bcd60e51b815260040161038190612164565b806113e0816121a7565b915050808383815181106113f6576113f66121be565b6020908102919091010152600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600480548290811061144a5761144a6121be565b6000918252602082200180546001600160e01b0319169055600590868685818110611477576114776121be565b905060200201602081019061148c9190611c81565b6001600160581b031916815260208101919091526040016000908120558484838181106114bb576114bb6121be565b90506020020160208101906114d09190611c81565b6affffffffffffffffffffff19167fbb4bc8e9bdadd13a82544df890de25d2c6403cd23a7655410eb2ad4f542425ab8260405161150f91815260200190565b60405180910390a25080611522816121d4565b915050611354565b50600354604051630abfaf1760e41b81526001600160a01b039091169063abfaf17090610794908490600401611dcf565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146115d45760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610381565b61162c61160883836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611ae8565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6107d68282611bc3565b60008054600160a01b900460ff1680156116b95750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b99190612397565b92915050565b600054600160a01b900460ff16156117105760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610381565b6001600160a01b0382166117665760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610381565b6001600160a01b0381166117af5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610381565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61182d611a8e565b600054600160a81b900460ff16156118875760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610381565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff161561191b5733301461190c5761190c6123b9565b6000805460ff60b01b19169055565b611923611a8e565b565b61192d611a8e565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d91906123cf565b905060006119ab82426122c0565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190611a299082612436565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051611a6294939291906124f6565b60405180910390a15050505050565b3d604051818101604052816000823e8215611a8a578181f35b8181fd5b611a96610bcf565b6001600160a01b0316336001600160a01b0316146119235760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610381565b60008082604051602001611afc919061253c565b6040516020818303038152906040528051906020012090506000805b8651811015611b7457868181518110611b3357611b336121be565b60200260200101518303611b6257858181518110611b5357611b536121be565b60200260200101519150611b74565b80611b6c816121d4565b915050611b18565b506001600160a01b038116611bba5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610381565b95945050505050565b611bf182826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611ae8565b600380546001600160a01b0319166001600160a01b03929092169190911790555050565b508054611c2190612341565b6000825580601f10611c31575050565b601f016020900490600052602060002090810190611c4f9190611c52565b50565b5b80821115611c675760008155600101611c53565b5090565b6001600160581b031981168114611c4f57600080fd5b600060208284031215611c9357600080fd5b813561039481611c6b565b6020808252825182820181905260009190848201906040850190845b81811015611ce05783516001600160581b03191683529284019291840191600101611cba565b50909695505050505050565b60008060208385031215611cff57600080fd5b823567ffffffffffffffff80821115611d1757600080fd5b818501915085601f830112611d2b57600080fd5b813581811115611d3a57600080fd5b866020606083028501011115611d4f57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015611dc257815180516001600160581b03191685528681015163ffffffff168786015285015162ffffff168585015260609093019290850190600101611d7e565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ce057835183529284019291840191600101611deb565b60005b83811015611e22578181015183820152602001611e0a565b50506000910152565b60008151808452611e43816020860160208601611e07565b601f01601f19169290920160200192915050565b606081526000611e6a6060830186611e2b565b8281036020840152611e7c8186611e2b565b90508281036040840152611e908185611e2b565b9695505050505050565b600060208284031215611eac57600080fd5b81356001600160e01b03198116811461039457600080fd5b828152604060208201526000611edd6040830184611e2b565b949350505050565b600060208284031215611ef757600080fd5b5035919050565b60008060208385031215611f1157600080fd5b823567ffffffffffffffff80821115611f2957600080fd5b818501915085601f830112611f3d57600080fd5b813581811115611f4c57600080fd5b8660208260051b8501011115611d4f57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fa057611fa0611f61565b604052919050565b600067ffffffffffffffff821115611fc257611fc2611f61565b5060051b60200190565b6001600160a01b0381168114611c4f57600080fd5b600082601f830112611ff257600080fd5b8135602061200761200283611fa8565b611f77565b82815260059290921b8401810191818101908684111561202657600080fd5b8286015b8481101561204a57803561203d81611fcc565b835291830191830161202a565b509695505050505050565b6000806040838503121561206857600080fd5b823567ffffffffffffffff8082111561208057600080fd5b818501915085601f83011261209457600080fd5b813560206120a461200283611fa8565b82815260059290921b840181019181810190898411156120c357600080fd5b948201945b838610156120e1578535825294820194908201906120c8565b965050860135925050808211156120f757600080fd5b5061210485828601611fe1565b9150509250929050565b60006020828403121561212057600080fd5b813561039481611fcc565b6000806040838503121561213e57600080fd5b823561214981611fcc565b9150602083013561215981611fcc565b809150509250929050565b6020808252601390820152721999595908191bd95cc81b9bdd08195e1a5cdd606a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816121b6576121b6612191565b506000190190565b634e487b7160e01b600052603260045260246000fd5b6000600182016121e6576121e6612191565b5060010190565b818103818111156116b9576116b9612191565b634e487b7160e01b600052603160045260246000fd5b63ffffffff81168114611c4f57600080fd5b62ffffff81168114611c4f57600080fd5b813561224481611c6b565b81546001600160a81b0319811660589290921c9182178355602084013561226a81612216565b63ffffffff60a81b60a89190911b166001600160c81b03198216831781178455604085013561229881612228565b6001600160e01b0319929092169092179190911760c89190911b62ffffff60c81b1617905550565b808201808211156116b9576116b9612191565b6000602082840312156122e557600080fd5b813561039481612216565b60006020828403121561230257600080fd5b813561039481612228565b80820281158282048414176116b9576116b9612191565b60006020828403121561233657600080fd5b815161039481611fcc565b600181811c9082168061235557607f821691505b60208210810361237557634e487b7160e01b600052602260045260246000fd5b50919050565b6000825161238d818460208701611e07565b9190910192915050565b6000602082840312156123a957600080fd5b8151801515811461039457600080fd5b634e487b7160e01b600052600160045260246000fd5b6000602082840312156123e157600080fd5b5051919050565b601f821115610fcd57600081815260208120601f850160051c8101602086101561240f5750805b601f850160051c820191505b8181101561242e5782815560010161241b565b505050505050565b815167ffffffffffffffff81111561245057612450611f61565b6124648161245e8454612341565b846123e8565b602080601f83116001811461249957600084156124815750858301515b600019600386901b1c1916600185901b17855561242e565b600085815260208120601f198616915b828110156124c8578886015182559484019460019091019084016124a9565b50858210156124e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020815260006103946020830184611e2b56fea2646970667358221220b08b7ff7fb5a3d9e52089197b82b82f21e80c777cd96ba19a88731aecbdbe75f64736f6c63430008140033 \ No newline at end of file +60806040523480156200001157600080fd5b50604051620024693803806200246983398101604081905262000034916200020b565b80838362000043828262000079565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b505050506200025f565b600054600160a01b900460ff1615620000d95760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620001315760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000d0565b6001600160a01b0381166200017c5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000d0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200020857600080fd5b50565b6000806000606084860312156200022157600080fd5b83516200022e81620001f2565b60208501519093506200024181620001f2565b60408501519092506200025481620001f2565b809150509250925092565b6121fa806200026f6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806374e6310e116100b8578063c906b1b41161007c578063c906b1b4146102b8578063d29a4fa9146102c0578063debfda30146102d3578063e17f212e146102f6578063ef88bf131461030a578063f5a983831461031d57600080fd5b806374e6310e146102325780639310283614610253578063a087d1841461027f578063a59b2c4614610292578063b00c0b76146102a557600080fd5b80635267a15d116100ff5780635267a15d146101b65780635aa6e675146101f15780635ff27079146101f957806362354e031461020c57806367fc40291461021f57600080fd5b80630a9cabe71461013c5780630c518dce14610162578063247c9cf71461017757806331038aad1461018c57806331864f1f146101a1575b600080fd5b61014f61014a366004611950565b610325565b6040519081526020015b60405180910390f35b61016a610379565b604051610159919061196d565b61018a6101853660046119bb565b610439565b005b6101946107b8565b6040516101599190611a30565b6101a9610846565b6040516101599190611a9e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719545b6040516001600160a01b039091168152602001610159565b6101d961089e565b61018a610207366004611ad6565b61093a565b6000546101d9906001600160a01b031681565b61018a61022d366004611ad6565b610bc0565b610245610240366004611ad6565b610ca1565b604051610159929190611b50565b610266610261366004611b71565b610d46565b6040516001600160581b03199091168152602001610159565b61018a61028d3660046119bb565b610db2565b61018a6102a0366004611b8a565b610faa565b61018a6102b3366004611ce1565b61122a565b60045461014f565b6003546101d9906001600160a01b031681565b6102e66102e1366004611d9a565b611305565b6040519015158152602001610159565b6000546102e690600160a81b900460ff1681565b61018a610318366004611db7565b61138e565b61018a6114f4565b6001600160581b03198116600090815260056020526040812054908190036103685760405162461bcd60e51b815260040161035f90611df0565b60405180910390fd5b8061037281611e33565b9392505050565b6004546060908067ffffffffffffffff81111561039857610398611bed565b6040519080825280602002602001820160405280156103c1578160200160208202803683370190505b50915060005b8181101561043457600481815481106103e2576103e2611e4a565b600091825260209091200154835160589190911b9084908390811061040957610409611e4a565b6001600160581b0319909216602092830291909101909101528061042c81611e60565b9150506103c7565b505090565b600054600160b01b900460ff168061045b5750600054600160a81b900460ff16155b156107a9576104686115ba565b60008167ffffffffffffffff81111561048357610483611bed565b6040519080825280602002602001820160405280156104ac578160200160208202803683370190505b50905060005b828110156107415760008484838181106104ce576104ce611e4a565b6104e49260206060909202019081019150611950565b90506001600160581b0319811661052f5760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b604482015260640161035f565b6001600160581b031981166000908152600560205260409020541561058c5760405162461bcd60e51b81526020600482015260136024820152726665656420616c72656164792065786973747360681b604482015260640161035f565b600654600090156105f057600680546105a790600190611e79565b815481106105b7576105b7611e4a565b9060005260206000200154905060068054806105d5576105d5611e8c565b60019003818190600052602060002001600090559055610602565b50600480546001810182556000919091525b8084848151811061061557610615611e4a565b60200260200101818152505085858481811061063357610633611e4a565b9050606002016004828154811061064c5761064c611e4a565b9060005260206000200181816106629190611ec5565b506106709050816001611f4c565b6001600160581b031983166000818152600560205260409020919091557f3ca318c85958cdc1745f9edcd68164b4579efa8050b27b9d634f5e0427e7e33a8787868181106106c0576106c0611e4a565b90506060020160200160208101906106d89190611f5f565b8888878181106106ea576106ea611e4a565b90506060020160400160208101906107029190611f7c565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a25050808061073990611e60565b9150506104b2565b506003546040516363f921db60e01b81526001600160a01b03909116906363f921db90610772908490600401611a9e565b600060405180830381600087803b15801561078c57600080fd5b505af11580156107a0573d6000803e3d6000fd5b50505050505050565b6107b46000366115f4565b5050565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561083d5760008481526020908190206040805160608101825291850154605881901b6001600160581b0319168352600160a81b810463ffffffff1683850152600160c81b900462ffffff16908201528252600190920191016107dc565b50505050905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561089457602002820191906000526020600020905b815481526020019060010190808311610880575b5050505050905090565b60008054600160a81b900460ff166108c057506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109359190611f99565b905090565b61094333611305565b61097f5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015260640161035f565b6001600160e01b03198116600090815260026020526040812080549091036109e95760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015260640161035f565b8054421015610a3a5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015260640161035f565b6000816001018054610a4b90611fb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7790611fb6565b8015610ac45780601f10610a9957610100808354040283529160200191610ac4565b820191906000526020600020905b815481529060010190602001808311610aa757829003601f168201915b505050506001600160e01b0319851660009081526002602052604081208181559293509050610af660018301826118e4565b50506000805460ff60b01b1916600160b01b1781556040513090610b1b908490611ff0565b6000604051808303816000865af19150503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610bba81611740565b50505050565b610bc861175d565b6001600160e01b031981166000908152600260205260408120549003610c305760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015260640161035f565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590610c9c60018301826118e4565b505050565b60026020526000908152604090208054600182018054919291610cc390611fb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cef90611fb6565b8015610d3c5780601f10610d1157610100808354040283529160200191610d3c565b820191906000526020600020905b815481529060010190602001808311610d1f57829003601f168201915b5050505050905082565b6004546000908210610d8a5760405162461bcd60e51b815260206004820152600d60248201526c0d2dcecc2d8d2c840d2dcc8caf609b1b604482015260640161035f565b60048281548110610d9d57610d9d611e4a565b60009182526020909120015460581b92915050565b600054600160b01b900460ff1680610dd45750600054600160a81b900460ff16155b156107a957610de16115ba565b60005b81811015610c9c576000838383818110610e0057610e00611e4a565b610e169260206060909202019081019150611950565b90506001600160581b03198116610e615760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b604482015260640161035f565b6001600160581b0319811660009081526005602052604081205490819003610e9b5760405162461bcd60e51b815260040161035f90611df0565b80610ea581611e33565b915050848484818110610eba57610eba611e4a565b90506060020160048281548110610ed357610ed3611e4a565b906000526020600020018181610ee99190611ec5565b50506001600160581b031982167f317c7e03c79b6fcd22d6f17813b4e8e8a4a14104fdfb79431c6c73b550c7ca9d868686818110610f2957610f29611e4a565b9050606002016020016020810190610f419190611f5f565b878787818110610f5357610f53611e4a565b9050606002016040016020810190610f6b9190611f7c565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a250508080610fa290611e60565b915050610de4565b600054600160b01b900460ff1680610fcc5750600054600160a81b900460ff16155b156107a957610fd96115ba565b60008167ffffffffffffffff811115610ff457610ff4611bed565b60405190808252806020026020018201604052801561101d578160200160208202803683370190505b50905060005b828110156111f95760006005600086868581811061104357611043611e4a565b90506020020160208101906110589190611950565b6affffffffffffffffffffff19166affffffffffffffffffffff19168152602001908152602001600020549050806000036110a55760405162461bcd60e51b815260040161035f90611df0565b806110af81611e33565b915050808383815181106110c5576110c5611e4a565b6020908102919091010152600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600480548290811061111957611119611e4a565b6000918252602082200180546001600160e01b031916905560059086868581811061114657611146611e4a565b905060200201602081019061115b9190611950565b6001600160581b0319168152602081019190915260400160009081205584848381811061118a5761118a611e4a565b905060200201602081019061119f9190611950565b6affffffffffffffffffffff19167fbb4bc8e9bdadd13a82544df890de25d2c6403cd23a7655410eb2ad4f542425ab826040516111de91815260200190565b60405180910390a250806111f181611e60565b915050611023565b50600354604051630abfaf1760e41b81526001600160a01b039091169063abfaf17090610772908490600401611a9e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146112a35760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015260640161035f565b6112fb6112d783836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506117b7565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6107b48282611892565b60008054600160a01b900460ff1680156113885750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611388919061200c565b92915050565b600054600160a01b900460ff16156113df5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015260640161035f565b6001600160a01b0382166114355760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f0000000000000000604482015260640161035f565b6001600160a01b03811661147e5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015260640161035f565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6114fc61175d565b600054600160a81b900460ff16156115565760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015260640161035f565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff16156115ea573330146115db576115db61202e565b6000805460ff60b01b19169055565b6115f261175d565b565b6115fc61175d565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190612044565b9050600061167a8242611f4c565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906116f890826120ab565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051611731949392919061216b565b60405180910390a15050505050565b3d604051818101604052816000823e8215611759578181f35b8181fd5b61176561089e565b6001600160a01b0316336001600160a01b0316146115f25760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015260640161035f565b600080826040516020016117cb91906121b1565b6040516020818303038152906040528051906020012090506000805b86518110156118435786818151811061180257611802611e4a565b602002602001015183036118315785818151811061182257611822611e4a565b60200260200101519150611843565b8061183b81611e60565b9150506117e7565b506001600160a01b0381166118895760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015260640161035f565b95945050505050565b6118c082826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b8152506117b7565b600380546001600160a01b0319166001600160a01b03929092169190911790555050565b5080546118f090611fb6565b6000825580601f10611900575050565b601f01602090049060005260206000209081019061191e9190611921565b50565b5b808211156119365760008155600101611922565b5090565b6001600160581b03198116811461191e57600080fd5b60006020828403121561196257600080fd5b81356103728161193a565b6020808252825182820181905260009190848201906040850190845b818110156119af5783516001600160581b03191683529284019291840191600101611989565b50909695505050505050565b600080602083850312156119ce57600080fd5b823567ffffffffffffffff808211156119e657600080fd5b818501915085601f8301126119fa57600080fd5b813581811115611a0957600080fd5b866020606083028501011115611a1e57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015611a9157815180516001600160581b03191685528681015163ffffffff168786015285015162ffffff168585015260609093019290850190600101611a4d565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156119af57835183529284019291840191600101611aba565b600060208284031215611ae857600080fd5b81356001600160e01b03198116811461037257600080fd5b60005b83811015611b1b578181015183820152602001611b03565b50506000910152565b60008151808452611b3c816020860160208601611b00565b601f01601f19169290920160200192915050565b828152604060208201526000611b696040830184611b24565b949350505050565b600060208284031215611b8357600080fd5b5035919050565b60008060208385031215611b9d57600080fd5b823567ffffffffffffffff80821115611bb557600080fd5b818501915085601f830112611bc957600080fd5b813581811115611bd857600080fd5b8660208260051b8501011115611a1e57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c2c57611c2c611bed565b604052919050565b600067ffffffffffffffff821115611c4e57611c4e611bed565b5060051b60200190565b6001600160a01b038116811461191e57600080fd5b600082601f830112611c7e57600080fd5b81356020611c93611c8e83611c34565b611c03565b82815260059290921b84018101918181019086841115611cb257600080fd5b8286015b84811015611cd6578035611cc981611c58565b8352918301918301611cb6565b509695505050505050565b60008060408385031215611cf457600080fd5b823567ffffffffffffffff80821115611d0c57600080fd5b818501915085601f830112611d2057600080fd5b81356020611d30611c8e83611c34565b82815260059290921b84018101918181019089841115611d4f57600080fd5b948201945b83861015611d6d57853582529482019490820190611d54565b96505086013592505080821115611d8357600080fd5b50611d9085828601611c6d565b9150509250929050565b600060208284031215611dac57600080fd5b813561037281611c58565b60008060408385031215611dca57600080fd5b8235611dd581611c58565b91506020830135611de581611c58565b809150509250929050565b6020808252601390820152721999595908191bd95cc81b9bdd08195e1a5cdd606a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081611e4257611e42611e1d565b506000190190565b634e487b7160e01b600052603260045260246000fd5b600060018201611e7257611e72611e1d565b5060010190565b8181038181111561138857611388611e1d565b634e487b7160e01b600052603160045260246000fd5b63ffffffff8116811461191e57600080fd5b62ffffff8116811461191e57600080fd5b8135611ed08161193a565b81546001600160a81b0319811660589290921c91821783556020840135611ef681611ea2565b63ffffffff60a81b60a89190911b166001600160c81b031982168317811784556040850135611f2481611eb4565b6001600160e01b0319929092169092179190911760c89190911b62ffffff60c81b1617905550565b8082018082111561138857611388611e1d565b600060208284031215611f7157600080fd5b813561037281611ea2565b600060208284031215611f8e57600080fd5b813561037281611eb4565b600060208284031215611fab57600080fd5b815161037281611c58565b600181811c90821680611fca57607f821691505b602082108103611fea57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251612002818460208701611b00565b9190910192915050565b60006020828403121561201e57600080fd5b8151801515811461037257600080fd5b634e487b7160e01b600052600160045260246000fd5b60006020828403121561205657600080fd5b5051919050565b601f821115610c9c57600081815260208120601f850160051c810160208610156120845750805b601f850160051c820191505b818110156120a357828155600101612090565b505050505050565b815167ffffffffffffffff8111156120c5576120c5611bed565b6120d9816120d38454611fb6565b8461205d565b602080601f83116001811461210e57600084156120f65750858301515b600019600386901b1c1916600185901b1785556120a3565b600085815260208120601f198616915b8281101561213d5788860151825594840194600190910190840161211e565b508582101561215b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020815260006103726020830184611b2456fea26469706673582212208468310239d6c546a062b47f99f13a3080ca01044492c03cf40d4e7c66fcb10364736f6c63430008140033 \ No newline at end of file diff --git a/go-client/contracts-interface/IFastUpdateIncentiveManager.abi b/go-client/contracts-interface/IFastUpdateIncentiveManager.abi index 302b085..24e1d0d 100644 --- a/go-client/contracts-interface/IFastUpdateIncentiveManager.abi +++ b/go-client/contracts-interface/IFastUpdateIncentiveManager.abi @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"indexed":false,"internalType":"SampleSize","name":"sampleSizeIncrease","type":"uint256"},{"indexed":false,"internalType":"Fee","name":"offerAmount","type":"uint256"}],"name":"IncentiveOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"indexed":false,"internalType":"bytes","name":"feedIds","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"rewardBandValues","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"inflationShares","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationRewardsOffered","type":"event"},{"inputs":[],"name":"getExpectedSampleSize","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrecision","outputs":[{"internalType":"Precision","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRange","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"internalType":"Range","name":"rangeLimit","type":"uint256"}],"internalType":"struct IFastUpdateIncentiveManager.IncentiveOffer","name":"_offer","type":"tuple"}],"name":"offerIncentive","outputs":[],"stateMutability":"payable","type":"function"}] \ No newline at end of file +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"indexed":false,"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"indexed":false,"internalType":"SampleSize","name":"sampleSizeIncrease","type":"uint256"},{"indexed":false,"internalType":"Fee","name":"offerAmount","type":"uint256"}],"name":"IncentiveOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"indexed":false,"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"feedConfigurations","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationRewardsOffered","type":"event"},{"inputs":[],"name":"getBaseScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSampleSizeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpectedSampleSize","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrecision","outputs":[{"internalType":"Precision","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRange","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"internalType":"Range","name":"rangeLimit","type":"uint256"}],"internalType":"struct IFastUpdateIncentiveManager.IncentiveOffer","name":"_offer","type":"tuple"}],"name":"offerIncentive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rangeIncreaseLimit","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rangeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sampleIncreaseLimit","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/IFastUpdater.abi b/go-client/contracts-interface/IFastUpdater.abi index 772abc6..d448df1 100644 --- a/go-client/contracts-interface/IFastUpdater.abi +++ b/go-client/contracts-interface/IFastUpdater.abi @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FastUpdateFeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingRoundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"bytes21","name":"id","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"int8","name":"decimals","type":"int8"}],"name":"FastUpdateFeedReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingEpochId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"feeds","type":"uint256[]"},{"indexed":false,"internalType":"int8[]","name":"decimals","type":"int8[]"}],"name":"FastUpdateFeeds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signingPolicyAddress","type":"address"}],"name":"FastUpdateFeedsSubmitted","type":"event"},{"inputs":[],"name":"currentScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signingPolicyAddress","type":"address"}],"name":"currentSortitionWeight","outputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchAllCurrentFeeds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"},{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"fetchCurrentFeeds","outputs":[{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"sortitionBlock","type":"uint256"},{"components":[{"internalType":"uint256","name":"replicate","type":"uint256"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Bn256.G1Point","name":"gamma","type":"tuple"},{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"internalType":"struct SortitionCredential","name":"sortitionCredential","type":"tuple"},{"internalType":"bytes","name":"deltas","type":"bytes"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IFastUpdater.Signature","name":"signature","type":"tuple"}],"internalType":"struct IFastUpdater.FastUpdates","name":"_updates","type":"tuple"}],"name":"submitUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FastUpdateFeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingRoundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"bytes21","name":"id","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"int8","name":"decimals","type":"int8"}],"name":"FastUpdateFeedReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingEpochId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"feeds","type":"uint256[]"},{"indexed":false,"internalType":"int8[]","name":"decimals","type":"int8[]"}],"name":"FastUpdateFeeds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"votingRoundId","type":"uint32"},{"indexed":true,"internalType":"address","name":"signingPolicyAddress","type":"address"}],"name":"FastUpdateFeedsSubmitted","type":"event"},{"inputs":[{"internalType":"uint256","name":"_blockNum","type":"uint256"}],"name":"blockScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRewardEpochId","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signingPolicyAddress","type":"address"}],"name":"currentSortitionWeight","outputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchAllCurrentFeeds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"},{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"fetchCurrentFeeds","outputs":[{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_historySize","type":"uint256"}],"name":"numberOfUpdates","outputs":[{"internalType":"uint256[]","name":"_noOfUpdates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"numberOfUpdatesInBlock","outputs":[{"internalType":"uint256","name":"_noOfUpdates","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"submissionWindow","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"sortitionBlock","type":"uint256"},{"components":[{"internalType":"uint256","name":"replicate","type":"uint256"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Bn256.G1Point","name":"gamma","type":"tuple"},{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"internalType":"struct SortitionCredential","name":"sortitionCredential","type":"tuple"},{"internalType":"bytes","name":"deltas","type":"bytes"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IFastUpdater.Signature","name":"signature","type":"tuple"}],"internalType":"struct IFastUpdater.FastUpdates","name":"_updates","type":"tuple"}],"name":"submitUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/IFastUpdatesConfiguration.abi b/go-client/contracts-interface/IFastUpdatesConfiguration.abi index aaa0948..4c6521a 100644 --- a/go-client/contracts-interface/IFastUpdatesConfiguration.abi +++ b/go-client/contracts-interface/IFastUpdatesConfiguration.abi @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedUpdated","type":"event"},{"inputs":[],"name":"getFeedConfigurations","outputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedConfigurationsBytes","outputs":[{"internalType":"bytes","name":"_feedIds","type":"bytes"},{"internalType":"bytes","name":"_rewardBandValues","type":"bytes"},{"internalType":"bytes","name":"_inflationShares","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getFeedId","outputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedIds","outputs":[{"internalType":"bytes21[]","name":"","type":"bytes21[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"name":"getFeedIndex","outputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfFeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnusedIndices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}] \ No newline at end of file +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes21","name":"feedId","type":"bytes21"},{"indexed":false,"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"indexed":false,"internalType":"uint24","name":"inflationShare","type":"uint24"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FeedUpdated","type":"event"},{"inputs":[],"name":"getFeedConfigurations","outputs":[{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getFeedId","outputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedIds","outputs":[{"internalType":"bytes21[]","name":"","type":"bytes21[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes21","name":"_feedId","type":"bytes21"}],"name":"getFeedIndex","outputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfFeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnusedIndices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/IIFastUpdateIncentiveManager.abi b/go-client/contracts-interface/IIFastUpdateIncentiveManager.abi index 2239804..3ecdd15 100644 --- a/go-client/contracts-interface/IIFastUpdateIncentiveManager.abi +++ b/go-client/contracts-interface/IIFastUpdateIncentiveManager.abi @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"indexed":false,"internalType":"SampleSize","name":"sampleSizeIncrease","type":"uint256"},{"indexed":false,"internalType":"Fee","name":"offerAmount","type":"uint256"}],"name":"IncentiveOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"indexed":false,"internalType":"bytes","name":"feedIds","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"rewardBandValues","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"inflationShares","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationRewardsOffered","type":"event"},{"inputs":[],"name":"advance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getExpectedSampleSize","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrecision","outputs":[{"internalType":"Precision","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRange","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"internalType":"Range","name":"rangeLimit","type":"uint256"}],"internalType":"struct IFastUpdateIncentiveManager.IncentiveOffer","name":"_offer","type":"tuple"}],"name":"offerIncentive","outputs":[],"stateMutability":"payable","type":"function"}] \ No newline at end of file +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"indexed":false,"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"indexed":false,"internalType":"SampleSize","name":"sampleSizeIncrease","type":"uint256"},{"indexed":false,"internalType":"Fee","name":"offerAmount","type":"uint256"}],"name":"IncentiveOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"rewardEpochId","type":"uint24"},{"components":[{"internalType":"bytes21","name":"feedId","type":"bytes21"},{"internalType":"uint32","name":"rewardBandValue","type":"uint32"},{"internalType":"uint24","name":"inflationShare","type":"uint24"}],"indexed":false,"internalType":"struct IFastUpdatesConfiguration.FeedConfiguration[]","name":"feedConfigurations","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationRewardsOffered","type":"event"},{"inputs":[],"name":"advance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSampleSizeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExpectedSampleSize","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrecision","outputs":[{"internalType":"Precision","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRange","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScale","outputs":[{"internalType":"Scale","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"Range","name":"rangeIncrease","type":"uint256"},{"internalType":"Range","name":"rangeLimit","type":"uint256"}],"internalType":"struct IFastUpdateIncentiveManager.IncentiveOffer","name":"_offer","type":"tuple"}],"name":"offerIncentive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rangeIncreaseLimit","outputs":[{"internalType":"Range","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rangeIncreasePrice","outputs":[{"internalType":"Fee","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sampleIncreaseLimit","outputs":[{"internalType":"SampleSize","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/IIFastUpdater.abi b/go-client/contracts-interface/IIFastUpdater.abi index a733c06..4021fdc 100644 --- a/go-client/contracts-interface/IIFastUpdater.abi +++ b/go-client/contracts-interface/IIFastUpdater.abi @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FastUpdateFeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingRoundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"bytes21","name":"id","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"int8","name":"decimals","type":"int8"}],"name":"FastUpdateFeedReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingEpochId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"feeds","type":"uint256[]"},{"indexed":false,"internalType":"int8[]","name":"decimals","type":"int8[]"}],"name":"FastUpdateFeeds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signingPolicyAddress","type":"address"}],"name":"FastUpdateFeedsSubmitted","type":"event"},{"inputs":[],"name":"currentScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signingPolicyAddress","type":"address"}],"name":"currentSortitionWeight","outputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daemonize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fetchAllCurrentFeeds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"},{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"fetchCurrentFeeds","outputs":[{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"removeFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"resetFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"sortitionBlock","type":"uint256"},{"components":[{"internalType":"uint256","name":"replicate","type":"uint256"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Bn256.G1Point","name":"gamma","type":"tuple"},{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"internalType":"struct SortitionCredential","name":"sortitionCredential","type":"tuple"},{"internalType":"bytes","name":"deltas","type":"bytes"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IFastUpdater.Signature","name":"signature","type":"tuple"}],"internalType":"struct IFastUpdater.FastUpdates","name":"_updates","type":"tuple"}],"name":"submitUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToFallbackMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bytes32","name":"_part1","type":"bytes32"},{"internalType":"bytes32","name":"_part2","type":"bytes32"},{"internalType":"bytes","name":"verificationData","type":"bytes"}],"name":"verifyPublicKey","outputs":[],"stateMutability":"view","type":"function"}] \ No newline at end of file +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"}],"name":"FastUpdateFeedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingRoundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"bytes21","name":"id","type":"bytes21"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"int8","name":"decimals","type":"int8"}],"name":"FastUpdateFeedReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"votingEpochId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"feeds","type":"uint256[]"},{"indexed":false,"internalType":"int8[]","name":"decimals","type":"int8[]"}],"name":"FastUpdateFeeds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"votingRoundId","type":"uint32"},{"indexed":true,"internalType":"address","name":"signingPolicyAddress","type":"address"}],"name":"FastUpdateFeedsSubmitted","type":"event"},{"inputs":[{"internalType":"uint256","name":"_blockNum","type":"uint256"}],"name":"blockScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRewardEpochId","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentScoreCutoff","outputs":[{"internalType":"uint256","name":"_cutoff","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signingPolicyAddress","type":"address"}],"name":"currentSortitionWeight","outputs":[{"internalType":"uint256","name":"_weight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daemonize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fetchAllCurrentFeeds","outputs":[{"internalType":"bytes21[]","name":"_feedIds","type":"bytes21[]"},{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"fetchCurrentFeeds","outputs":[{"internalType":"uint256[]","name":"_feeds","type":"uint256[]"},{"internalType":"int8[]","name":"_decimals","type":"int8[]"},{"internalType":"uint64","name":"_timestamp","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_historySize","type":"uint256"}],"name":"numberOfUpdates","outputs":[{"internalType":"uint256[]","name":"_noOfUpdates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"numberOfUpdatesInBlock","outputs":[{"internalType":"uint256","name":"_noOfUpdates","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"removeFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indices","type":"uint256[]"}],"name":"resetFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"submissionWindow","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"sortitionBlock","type":"uint256"},{"components":[{"internalType":"uint256","name":"replicate","type":"uint256"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Bn256.G1Point","name":"gamma","type":"tuple"},{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"internalType":"struct SortitionCredential","name":"sortitionCredential","type":"tuple"},{"internalType":"bytes","name":"deltas","type":"bytes"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct IFastUpdater.Signature","name":"signature","type":"tuple"}],"internalType":"struct IFastUpdater.FastUpdates","name":"_updates","type":"tuple"}],"name":"submitUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToFallbackMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bytes32","name":"_part1","type":"bytes32"},{"internalType":"bytes32","name":"_part2","type":"bytes32"},{"internalType":"bytes","name":"verificationData","type":"bytes"}],"name":"verifyPublicKey","outputs":[],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/IncreaseManager.abi b/go-client/contracts-interface/IncreaseManager.abi index d1cbb25..29b089a 100644 --- a/go-client/contracts-interface/IncreaseManager.abi +++ b/go-client/contracts-interface/IncreaseManager.abi @@ -1 +1 @@ -[{"inputs":[],"name":"circularLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] \ No newline at end of file +[{"inputs":[],"name":"getIncentiveDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/go-client/contracts-interface/fast_updater/FastUpdater.go b/go-client/contracts-interface/fast_updater/FastUpdater.go index 25afa10..44ac531 100644 --- a/go-client/contracts-interface/fast_updater/FastUpdater.go +++ b/go-client/contracts-interface/fast_updater/FastUpdater.go @@ -60,8 +60,8 @@ type SortitionCredential struct { // FastUpdaterMetaData contains all meta data concerning the FastUpdater contract. var FastUpdaterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_flareDaemon\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_firstVotingRoundStartTs\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"_votingEpochDurationSeconds\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_submissionWindow\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FastUpdateFeedRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"votingRoundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"id\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int8\",\"name\":\"decimals\",\"type\":\"int8\"}],\"name\":\"FastUpdateFeedReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"votingEpochId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"feeds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"int8[]\",\"name\":\"decimals\",\"type\":\"int8[]\"}],\"name\":\"FastUpdateFeeds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signingPolicyAddress\",\"type\":\"address\"}],\"name\":\"FastUpdateFeedsSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"name\":\"GovernanceCallTimelocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initialGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceInitialised\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"governanceSettings\",\"type\":\"address\"}],\"name\":\"GovernedProductionModeEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_FEED_AGE_IN_VOTING_EPOCHS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"cancelGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"circularLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentScoreCutoff\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_cutoff\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signingPolicyAddress\",\"type\":\"address\"}],\"name\":\"currentSortitionWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"daemonize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"executeGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdateIncentiveManager\",\"outputs\":[{\"internalType\":\"contractIIFastUpdateIncentiveManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdatesConfiguration\",\"outputs\":[{\"internalType\":\"contractIFastUpdatesConfiguration\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fetchAllCurrentFeeds\",\"outputs\":[{\"internalType\":\"bytes21[]\",\"name\":\"_feedIds\",\"type\":\"bytes21[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_feeds\",\"type\":\"uint256[]\"},{\"internalType\":\"int8[]\",\"name\":\"_decimals\",\"type\":\"int8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"name\":\"fetchCurrentFeeds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_feeds\",\"type\":\"uint256[]\"},{\"internalType\":\"int8[]\",\"name\":\"_decimals\",\"type\":\"int8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"firstVotingRoundStartTs\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flareDaemon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flareSystemsManager\",\"outputs\":[{\"internalType\":\"contractIFlareSystemsManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ftsoFeedPublisher\",\"outputs\":[{\"internalType\":\"contractIFtsoFeedPublisher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceSettings\",\"outputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isExecutor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"productionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"name\":\"removeFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"name\":\"resetFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionWindow\",\"type\":\"uint256\"}],\"name\":\"setSubmissionWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sortitionBlock\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"replicate\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"structBn256.G1Point\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"c\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"internalType\":\"structSortitionCredential\",\"name\":\"sortitionCredential\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"deltas\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIFastUpdater.Signature\",\"name\":\"signature\",\"type\":\"tuple\"}],\"internalType\":\"structIFastUpdater.FastUpdates\",\"name\":\"_updates\",\"type\":\"tuple\"}],\"name\":\"submitUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToFallbackMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToProductionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"timelockedCalls\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_contractNameHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_contractAddresses\",\"type\":\"address[]\"}],\"name\":\"updateContractAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_part1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_part2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_verificationData\",\"type\":\"bytes\"}],\"name\":\"verifyPublicKey\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voterRegistry\",\"outputs\":[{\"internalType\":\"contractIIVoterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingEpochDurationSeconds\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b50604051620056ea380380620056ea833981016040819052620000349162000519565b8462000042826001620005db565b8888620000508282620001db565b506200005e90508162000350565b5062000088817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038416620000d95760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008260ff16116200012e5760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000d0565b6001600160a01b03841660c05263ffffffff831660805260ff821660a05262000156620003cd565b600780546001600160401b0319166001600160401b03929092169190911790556200018081600655565b6200018a62000405565b604080516103e8808252617d20820190925290816020015b6060815260200190600190039081620001a25750508051620001cd91600d9160209091019062000435565b5050505050505050620007bd565b600054600160a01b900460ff1615620002375760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000d0565b6001600160a01b0382166200028f5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000d0565b6001600160a01b038116620002da5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000d0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b60008111620003c85760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401620000d0565b600355565b600060a0516001600160401b03166080516001600160401b031642620003f491906200060d565b62000400919062000623565b905090565b60005b6003548110156200043257600c805460010181556000526200042a8162000646565b905062000408565b50565b82805482825590600052602060002090810192821562000480579160200282015b828111156200048057825182906200046f9082620006f1565b509160200191906001019062000456565b506200048e92915062000492565b5090565b808211156200048e576000620004a98282620004b3565b5060010162000492565b508054620004c19062000662565b6000825580601f10620004d2575050565b601f0160209004906000526020600020908101906200043291905b808211156200048e5760008155600101620004ed565b6001600160a01b03811681146200043257600080fd5b600080600080600080600060e0888a0312156200053557600080fd5b8751620005428162000503565b6020890151909750620005558162000503565b6040890151909650620005688162000503565b60608901519095506200057b8162000503565b608089015190945063ffffffff811681146200059657600080fd5b60a089015190935060ff81168114620005ae57600080fd5b8092505060c0880151905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620005f157620005f1620005c5565b92915050565b634e487b7160e01b600052604160045260246000fd5b81810381811115620005f157620005f1620005c5565b6000826200064157634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016200065b576200065b620005c5565b5060010190565b600181811c908216806200067757607f821691505b6020821081036200069857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006ec57600081815260208120601f850160051c81016020861015620006c75750805b601f850160051c820191505b81811015620006e857828155600101620006d3565b5050505b505050565b81516001600160401b038111156200070d576200070d620005f7565b62000725816200071e845462000662565b846200069e565b602080601f8311600181146200075d5760008415620007445750858301515b600019600386901b1c1916600185901b178555620006e8565b600085815260208120601f198616915b828110156200078e578886015182559484019460019091019084016200076d565b5085821015620007ad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c051614ee162000809600039600081816103e001528181611b3901526121f90152600081816102e60152612e4301526000818161049e0152612e6d0152614ee16000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637925eaca1161011a578063debfda30116100ad578063e8d0e70a1161007c578063e8d0e70a14610499578063ef88bf13146104c0578063f5a98383146104d3578063f5f5ba72146104db578063faae7fc91461050857600080fd5b8063debfda3014610461578063e17f212e14610474578063e22fdece14610488578063e621dbc71461049057600080fd5b8063abfaf170116100e9578063abfaf17014610415578063b00c0b7614610428578063be60040e1461043b578063c10f489a1461044e57600080fd5b80637925eaca146103c05780637fe3341a146103d3578063a1077532146103db578063a14634a71461040257600080fd5b80635a8320881161019d57806363f921db1161016c57806363f921db1461034e57806367fc4029146103615780636d0e8c341461037457806370473f2f1461038c57806374e6310e1461039f57600080fd5b80635a832088146102e15780635aa6e675146103205780635ff270791461032857806362354e031461033b57600080fd5b80634691377f116101d95780634691377f14610287578063470e91df1461029e578063488f9806146102b15780635267a15d146102ba57600080fd5b80630799fe751461020b578063274965db1461022657806329bfe39d1461023b57806345a15d3c14610266575b600080fd5b610213610522565b6040519081526020015b60405180910390f35b610239610234366004613ec1565b610531565b005b600a5461024e906001600160a01b031681565b6040516001600160a01b03909116815260200161021d565b610279610274366004613eda565b61059e565b60405161021d929190613fc8565b61028f610a06565b60405161021d93929190613fed565b6102396102ac366004614059565b610b9d565b61021360035481565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461024e565b6103087f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161021d565b61024e611156565b610239610336366004614094565b6111ed565b60005461024e906001600160a01b031681565b61023961035c366004613eda565b611473565b61023961036f366004614094565b611a4b565b61037c611b2c565b604051901515815260200161021d565b61023961039a366004614141565b611cd5565b6103b26103ad366004614094565b611dd6565b60405161021d92919061424b565b60085461024e906001600160a01b031681565b610213601481565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b610213610410366004614264565b611e7b565b6102396104233660046142a4565b611e8d565b6102396104363660046143a8565b612088565b60095461024e906001600160a01b031681565b600b5461024e906001600160a01b031681565b61037c61046f366004614264565b612163565b60005461037c90600160a81b900460ff1681565b61037c6121ec565b61021360065481565b6103087f000000000000000000000000000000000000000000000000000000000000000081565b6102396104ce366004614460565b612260565b6102396123c6565b604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b6020820152905161021d9190614499565b60075461024e90600160401b90046001600160a01b031681565b600061052c61248c565b905090565b600054600160b01b900460ff16806105535750600054600160a81b900460ff16155b156105935761056061268a565b61056981600655565b61057c6105778260016144c2565b6126c4565b610588600c6000613e15565b61059061273f565b50565b610590600036612768565b606080826001600160401b038111156105b9576105b96140d3565b6040519080825280602002602001820160405280156105e2578160200160208202803683370190505b50905060005b83811015610687576004858583818110610604576106046144d5565b905060200201358154610616906144eb565b8110610624576106246144d5565b8154600116156106435790600052602060002090602091828204019190065b9054901a600160f81b0260f81c828281518110610662576106626144d5565b602002602001019060000b908160000b815250508061068090614525565b90506105e8565b50826001600160401b038111156106a0576106a06140d3565b6040519080825280602002602001820160405280156106c9578160200160208202803683370190505b5091506000600860009054906101000a90046001600160a01b03166001600160a01b031663b5cddab86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610721573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610745919061453e565b6040516005547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060a083019081527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb56060840152600e5460c0840152929350909160808301916008026000808060208c8837865160088104602089018190526007909116604089015285510154915060005b8b8110156108445760208082028e018937848851106107f557600080fd5b60088851049150600888510660408901526020880151821461081f57816020890152818651015492505b82602060408a0151021b91508160e01c6020820260208d0101526001810190506107d7565b50600f5494505b60c087015185146109f7576060870151850180875254935060001960018516016109485760208620865260028404935060208c88376080875104602088015260048402875110156108a25760208701518651015492505b60005b8b8110156109425760208082028e01893760808851049150600485028851101561093a5760808851066040890152602088015182146108ec57816020890152818751015493505b604088015160020284901b60fe1c9150600019820161091c5760208181028c010180518a02607f81901c90915292505b6003820361093a5760208181028c01018051607f1b8a810490915292505b6001016108a5565b50600193505b600184166109e8576002603f85160493925060208c88376080875104602088015260005b8b8110156109e65760208082028e01893760048502885110156109de578751607f166040890181905260020284901b60fe1c915060001982016109c05760208181028c010180518a02607f81901c90915292505b600382036109de5760208181028c01018051607f1b8a810490915292505b60010161096c565b505b6103e86001860106945061084b565b50505050505050509250929050565b6060806060600b60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a869190810190614574565b925060048054610a95906144eb565b9050835114610aa657610aa6614600565b600083516001600160401b03811115610ac157610ac16140d3565b604051908082528060200260200182016040528015610aea578160200160208202803683370190505b50905060005b8151811015610b295780828281518110610b0c57610b0c6144d5565b602090810291909101015280610b2181614525565b915050610af0565b50604051631168574f60e21b815230906345a15d3c90610b4d908490600401614616565b600060405180830381865afa158015610b6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b92919081019061469d565b949590949350915050565b600654610bab9082356144c2565b4310610c155760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084015b60405180910390fd5b8035431015610c7c5760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b6064820152608401610c0c565b600554610c8a90600861474e565b610c9760c0830183614765565b610ca39150600461474e565b1115610cfb5760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b6064820152608401610c0c565b60006002823560208401610d1260c0860186614765565b604051602001610d2594939291906147d4565b60408051601f1981840301815290829052610d3f9161481d565b602060405180830381855afa158015610d5c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610d7f919061453e565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0840190610dd783610dc8610100880185614839565b846020013585604001356128b4565b90506001600160a01b038116610e2f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c0c565b600080610e3b836128e2565b6040805160a08101808352600754637056269760e01b90915291519395509193506000928291600160401b90046001600160a01b03169063e0d4ea3790829063705626979060a4808701916020918189030181865afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec6919061485c565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865afa158015610f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2a919061453e565b815289356020820152604001610f3e61248c565b81526020810184905260400184905290506000610f5b8935612a39565b60408051865160208281019190915280880151928201929092528b356060820152908b0135608082015290915060009060029060a00160408051601f1981840301815290829052610fab9161481d565b602060405180830381855afa158015610fc8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610feb919061453e565b905060005b8254811015611079578183600001828154811061100f5761100f6144d5565b9060005260206000200154036110675760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f766964656400000000006044820152606401610c0c565b8061107181614525565b915050610ff0565b50815460018101835560008381526020808220909201839055906110b09085906110ab90368f90038f01908f01614881565b612a8b565b509050806111005760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c69640000000000000000006044820152606401610c0c565b61111561111060c08d018d614765565b612b3e565b6040516001600160a01b038816907f46726b7af6062bbfbcc71cdfd206e449f91eb91d8a78d596181219c8251d83ee90600090a25050505050505050505050565b60008054600160a81b900460ff1661117857506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052c919061490f565b6111f633612163565b6112325760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610c0c565b6001600160e01b031981166000908152600260205260408120805490910361129c5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610c0c565b80544210156112ed5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610c0c565b60008160010180546112fe906144eb565b80601f016020809104026020016040519081016040528092919081815260200182805461132a906144eb565b80156113775780601f1061134c57610100808354040283529160200191611377565b820191906000526020600020905b81548152906001019060200180831161135a57829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506113a96001830182613e33565b50506000805460ff60b01b1916600160b01b17815560405130906113ce90849061481d565b6000604051808303816000865af19150503d806000811461140b576040519150601f19603f3d011682016040523d82523d6000602084013e611410565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161146d81612b90565b50505050565b600b546001600160a01b03163314806114a4575061148f611156565b6001600160a01b0316336001600160a01b0316145b6115065760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b6064820152608401610c0c565b61150e612bad565b6000805b82811015611568578184848381811061152d5761152d6144d5565b9050602002013511156115565783838281811061154c5761154c6144d5565b9050602002013591505b8061156081614525565b915050611512565b50600060048054611578906144eb565b9150505b8181116115f7576004600181805480611594906144eb565b80601f81036115b35783600052602060002060ff1984168155603f9350505b506002820183556001810192505050038154600116156115e25790600052602060002090602091828204019190065b508190506115ef81614525565b91505061157c565b506005545b611607600883614942565b811161162b576005805460010181556000528061162381614525565b9150506115fc565b5060048054611639906144eb565b60055490915061164a90600861474e565b101561165857611658614600565b6000611662612e3f565b6001600160401b0316905060005b83811015611a4457600b546000906001600160a01b0316639310283687878581811061169e5761169e6144d5565b905060200201356040518263ffffffff1660e01b81526004016116c391815260200190565b602060405180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117049190614956565b90506001600160581b031981166117535760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610c0c565b600a546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca9190614983565b9050836014826000015163ffffffff166117e491906144c2565b116118205760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b6044820152606401610c0c565b6000816040015160030b136118775760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e6567617469766500000000006044820152606401610c0c565b6000600888888681811061188d5761188d6144d5565b9050602002013561189e9190614942565b9050600060088989878181106118b6576118b66144d5565b905060200201356118c79190614a23565b6118d2906007614a37565b6118dd90602061474e565b60408401516005805492935063ffffffff80851b19939216841b918391908690811061190b5761190b6144d5565b906000526020600020015416176005848154811061192b5761192b6144d5565b600091825260209091200155608084015160f81b60048b8b89818110611953576119536144d5565b905060200201358154611965906144eb565b8110611973576119736144d5565b8154600116156119925790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168a8a888181106119cf576119cf6144d5565b90506020020135887ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf587604001518860800151604051611a2492919063ffffffff92909216825260000b602082015260400190565b60405180910390a450505050508080611a3c90614525565b915050611670565b5050505050565b611a53612eaa565b6001600160e01b031981166000908152600260205260408120549003611abb5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610c0c565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590611b276001830182613e33565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b9a5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610c0c565b611ba2612bad565b6000611bac612e3f565b6007549091506001600160401b039081169082161115611c3457600080611bd1612f04565b6007805467ffffffffffffffff19166001600160401b038716908117909155604051929450909250907f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe90611c299085908590613fc8565b60405180910390a250505b600c611c3e61320c565b81548110611c4e57611c4e6144d5565b6000918252602082200190611c638282613e6d565b5050600860009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cb557600080fd5b505af1158015611cc9573d6000803e3d6000fd5b50505050600191505090565b600080600083806020019051810190611cee9190614a4a565b60408051808201909152898152602081018990529295509093509150611d1381613218565b611d1c57600080fd5b6040805180820190915283815260208101839052611d3981613218565b611d4257600080fd5b6040516bffffffffffffffffffffffff1960608b901b166020820152611dcb90839060029060340160408051601f1981840301815290829052611d849161481d565b602060405180830381855afa158015611da1573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc4919061453e565b8784613263565b505050505050505050565b60026020526000908152604090208054600182018054919291611df8906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e24906144eb565b8015611e715780601f10611e4657610100808354040283529160200191611e71565b820191906000526020600020905b815481529060010190602001808311611e5457829003601f168201915b5050505050905082565b6000611e86826128e2565b9392505050565b600b546001600160a01b03163314611ee75760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e006044820152606401610c0c565b611eef612bad565b60005b81518110156120845760006008838381518110611f1157611f116144d5565b6020026020010151611f239190614942565b905060006008848481518110611f3b57611f3b6144d5565b6020026020010151611f4d9190614a23565b611f58906007614a37565b611f6390602061474e565b6005805491925063ffffffff831b199182919085908110611f8657611f866144d5565b90600052602060002001541660058481548110611fa557611fa56144d5565b9060005260206000200181905550600060f81b6004868681518110611fcc57611fcc6144d5565b60200260200101518154611fdf906144eb565b8110611fed57611fed6144d5565b81546001161561200c5790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555084848151811061203a5761203a6144d5565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061207c90614525565b915050611ef2565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146121015760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610c0c565b61215961213583836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506133a6565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6120848282613481565b60008054600160a01b900460ff1680156121e65750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190614a78565b92915050565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461225a5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610c0c565b50600090565b600054600160a01b900460ff16156122b15760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610c0c565b6001600160a01b0382166123075760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610c0c565b6001600160a01b0381166123505760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610c0c565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6123ce612eaa565b600054600160a81b900460ff16156124285760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610c0c565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612506919061453e565b90506078600c61251681836144c2565b61252290610100614a37565b61252d90600261474e565b6125379190614a37565b6125419190614a37565b8161254e600c60786144c2565b61255a90610100614a37565b61256590600261474e565b600080516020614e47833981519152901c612580919061474e565b901b9150612590600c60786144c2565b61259c90610100614a37565b6125a8600c60786144c2565b6125b29190614a37565b8160016125c1600c60786144c2565b6125cd90610100614a37565b6125d8906002614b7e565b6125e29190614a37565b6125ee600c60786144c2565b6125fa90610100614a37565b600080516020614e47833981519152901c16612616919061474e565b612621911c836144c2565b915061262f600c60786144c2565b81600161263e600c60786144c2565b61264a90610100614a37565b612655906002614b7e565b61265f9190614a37565b600080516020614e4783398151915216612679919061474e565b612684911c836144c2565b91505090565b600054600160b01b900460ff16156126ba573330146126ab576126ab614600565b6000805460ff60b01b19169055565b6126c2612eaa565b565b6000811161273a5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610c0c565b600355565b60005b60035481101561059057600c8054600101815560005261276181614525565b9050612742565b612770612eaa565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e0919061453e565b905060006127ee82426144c2565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b0319861681526002602090815260409091208351815590830151909150600182019061286c9082614bd8565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516128a59493929190614c97565b60405180910390a15050505050565b6000806000806128c688888888613657565b9250925092506128d68282613726565b50909695505050505050565b6040805180820190915260008082526020820152600080600760089054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612970919061485c565b6009546040516344b571d960e01b815262ffffff92909216600483018190526001600160a01b0387811660248501529093506000928392839283929116906344b571d990604401608060405180830381865afa1580156129d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f89190614cc0565b60408051808201909152848152602081018490529a5092965090945092509050612a2d61ffff808416906110009084166137df565b95505050505050915091565b600080604051806080016040528060458152602001614e676045913990506000612a63848361381f565b9050600c8181548110612a7857612a786144d5565b9060005260206000200192505050919050565b6000808360600151836000015110612b0b5760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f7669646572277320776569676874006064820152608401610c0c565b6000612b17858561387b565b602085015151909150818015612b31575085604001518111155b93509150505b9250929050565b8181600d600e5481548110612b5557612b556144d5565b906000526020600020019182612b6c929190614d06565b506103e8600e546001612b7f91906144c2565b612b899190614a23565b600e555050565b3d604051818101604052816000823e8215612ba9578181f35b8181fd5b600854604080516316b9bb5760e31b815290516000926001600160a01b03169163b5cddab89160048083019260209291908290030181865afa158015612bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1b919061453e565b9050604051602081016040820160608301600e54608085015260008060008060008060058752602087208752600d8952600f545b60808b01518114612e295760208a208101808a525491506000196001831601612d605760208920895260028204915060005b60016020600185030401811015612d5a57808a510154935060005b610100811015612d5157836008820460208402011015612d51576010810460108302018a51015497506000955060005b6008811015612d3b5760208181028a901b60e01c985083026008830401851115612d1c5785821b60fe1c99506000198a01612d0957968e02607f1c965b60038a03612d1c57607f9790971b8e9004965b6020810260e0039790971b969587179560029190910190600101612ccc565b508560108083030460108402018b510155612c9c565b50600101612c81565b50600191505b60018216612e1a579091506002603f8316049060005b610100811015612e185782600882041015612e1857601081048951015496506000945060005b6008811015612e07576020810288901b60e01c965060088204841115612de85784821b60fe1c98506000198901612dd557958d02607f1c955b60038903612de857607f9690961b8d9004955b6020810260e0039690961b959486179460029190910190600101612d9c565b50846010808303048a510155612d76565b505b6103e860018201069050612c4f565b505050505050505050506080810151600f555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b031642612ea09190614a37565b61052c9190614942565b612eb2611156565b6001600160a01b0316336001600160a01b0316146126c25760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610c0c565b60608060048054612f14906144eb565b90506001600160401b03811115612f2d57612f2d6140d3565b604051908082528060200260200182016040528015612f56578160200160208202803683370190505b50915060048054612f66906144eb565b90506001600160401b03811115612f7f57612f7f6140d3565b604051908082528060200260200182016040528015612fa8578160200160208202803683370190505b509050600080600860048054612fbd906144eb565b612fc8929150614942565b905060005b818110156130e157600060058281548110612fea57612fea6144d5565b600091825260208220015491505b60088110156130cc5760008161300f85600861474e565b61301991906144c2565b90506004818154613029906144eb565b8110613037576130376144d5565b8154600116156130565790600052602060002090602091828204019190065b9054901a600160f81b0260f81c878281518110613075576130756144d5565b60009290920b60209283029190910182015261309290839061474e565b955060e08684901b901c8882815181106130ae576130ae6144d5565b602090810291909101015250806130c481614525565b915050612ff8565b505080806130d990614525565b915050612fcd565b506008600480546130f1906144eb565b6130fc929150614a23565b1561320657600060058281548110613116576131166144d5565b6000918252602082200154915061312e83600861474e565b90505b6004805461313e906144eb565b9050811015613203576004818154613155906144eb565b8110613163576131636144d5565b8154600116156131825790600052602060002090602091828204019190065b9054901a600160f81b0260f81c8582815181106131a1576131a16144d5565b60009290920b602092830291909101909101526131bf600882614a23565b6131ca90602061474e565b935060e08483901b901c8682815181106131e6576131e66144d5565b6020908102919091010152806131fb81614525565b915050613131565b50505b50509091565b600061052c6001613a5d565b6000600080516020614e4783398151915261323883600001516003613a77565b6132439060036144c2565b61324d9190614a23565b61325c83602001516002613a77565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c6132e09190614a23565b90506000613319613313604080518082018252600080825260209182015281518083019092526001825260029082015290565b85613acf565b905060006133278784613acf565b905060006133358383613b16565b80518651919250148015613350575080602001518560200151145b61339c5760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f720000006044820152606401610c0c565b5050505050505050565b600080826040516020016133ba9190614499565b6040516020818303038152906040528051906020012090506000805b8651811015613432578681815181106133f1576133f16144d5565b6020026020010151830361342057858181518110613411576134116144d5565b60200260200101519150613432565b8061342a81614525565b9150506133d6565b506001600160a01b0381166134785760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610c0c565b95945050505050565b6134b7828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b8152506133a6565b600760086101000a8154816001600160a01b0302191690836001600160a01b0316021790555061351d82826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e616765720000000000008152506133a6565b600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061357382826040518060400160405280600d81526020016c566f746572526567697374727960981b8152506133a6565b600960006101000a8154816001600160a01b0302191690836001600160a01b031602179055506135cd828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b8152506133a6565b600a60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061363382826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e00000000000000008152506133a6565b600b80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613692575060009150600390508261371c565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156136e6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137125750600092506001915082905061371c565b9250600091508190505b9450945094915050565b600082600381111561373a5761373a614dc5565b03613743575050565b600182600381111561375757613757614dc5565b036137755760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561378957613789614dc5565b036137aa5760405163fce698f760e01b815260048101829052602401610c0c565b60038260038111156137be576137be614dc5565b03612084576040516335e2f38360e21b815260048101829052602401610c0c565b6000806137ed858585613b61565b9050600083806137ff576137ff61492c565b858709905080156138135781600101613815565b815b9695505050505050565b600043831115801561383c575060035461383990846144c2565b43105b829061385b5760405162461bcd60e51b8152600401610c0c9190614499565b5060006138688443614a37565b905061387381613c87565b949350505050565b600061388a8360800151613218565b61389357600080fd5b6138a08260200151613218565b6138a957600080fd5b60006138fe6138c085608001518560400151613acf565b6138f96138ef604080518082018252600080825260209182015281518083019092526001825260029082015290565b8660600151613acf565b613b16565b8451602080870151865160405194955060009461392d9493019283526020830191909152604082015260600190565b6040516020818303038152906040529050600061394982613cb0565b9050600061397061396287602001518860400151613acf565b6138f9848960600151613acf565b9050600060026139a2604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a6020015189876040516020016139c496959493929190614ddb565b60408051601f19818403018152908290526139de9161481d565b602060405180830381855afa1580156139fb573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613a1e919061453e565b9050613a4a7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182614a23565b6040880151149550505050505092915050565b600354600090613a6d43846144c2565b6121e69190614a23565b6000604051602081016020815260208082015260206040820152846060820152836080820152600080516020614e4783398151915260a082015260208260c0836005600019fa613ac657600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa613b0f57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa613b0f57600080fd5b6000808211613ba55760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610c0c565b83600003613bb557506000611e86565b83830283858281613bc857613bc861492c565b0403613be657828181613bdd57613bdd61492c565b04915050611e86565b506000613bf38386614942565b90506000613c018487614a23565b90506000613c0f8587614942565b90506000613c1d8688614a23565b905085613c2a828561474e565b613c349190614942565b613c3e838561474e565b613c48838761474e565b88613c53868961474e565b613c5d919061474e565b613c6791906144c2565b613c7191906144c2565b613c7b91906144c2565b98975050505050505050565b60006003548210613c9a57613c9a614600565b6121e682600354613cab9190614a37565b613a5d565b60408051808201909152600080825260208201526000600283604051613cd6919061481d565b602060405180830381855afa158015613cf3573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d16919061453e565b90506000613d32600080516020614e4783398151915283614a23565b905060005b613d4082613d73565b90508015613d61576040805180820190915291825260208201529392505050565b613d6c6001836144c2565b9150613d37565b600080600080516020614e47833981519152613d90846003613a77565b613d9b9060036144c2565b613da59190614a23565b90506000613dd7826002613dc86001600080516020614e47833981519152614a37565b613dd29190614942565b613a77565b9050806001141580613de7575081155b15613df6575060009392505050565b613873826004613dc8600080516020614e4783398151915260016144c2565b50805460008255906000526020600020908101906105909190613e8b565b508054613e3f906144eb565b6000825580601f10613e4f575050565b601f0160209004906000526020600020908101906105909190613eac565b50805460008255906000526020600020908101906105909190613eac565b80821115613ea8576000613e9f8282613e6d565b50600101613e8b565b5090565b5b80821115613ea85760008155600101613ead565b600060208284031215613ed357600080fd5b5035919050565b60008060208385031215613eed57600080fd5b82356001600160401b0380821115613f0457600080fd5b818501915085601f830112613f1857600080fd5b813581811115613f2757600080fd5b8660208260051b8501011115613f3c57600080fd5b60209290920196919550909350505050565b600081518084526020808501945080840160005b83811015613f7e57815187529582019590820190600101613f62565b509495945050505050565b60008151808452602080850194508084016000805b84811015613fbc578251820b88529683019691830191600101613f9e565b50959695505050505050565b604081526000613fdb6040830185613f4e565b82810360208401526134788185613f89565b606080825284519082018190526000906020906080840190828801845b828110156140305781516001600160581b0319168452928401929084019060010161400a565b505050838103828501526140448187613f4e565b91505082810360408401526138158185613f89565b60006020828403121561406b57600080fd5b81356001600160401b0381111561408157600080fd5b82016101408185031215611e8657600080fd5b6000602082840312156140a657600080fd5b81356001600160e01b031981168114611e8657600080fd5b6001600160a01b038116811461059057600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561410b5761410b6140d3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614139576141396140d3565b604052919050565b6000806000806080858703121561415757600080fd5b8435614162816140be565b935060208581013593506040860135925060608601356001600160401b038082111561418d57600080fd5b818801915088601f8301126141a157600080fd5b8135818111156141b3576141b36140d3565b6141c5601f8201601f19168501614111565b915080825289848285010111156141db57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b838110156142165781810151838201526020016141fe565b50506000910152565b600081518084526142378160208601602086016141fb565b601f01601f19169290920160200192915050565b828152604060208201526000613873604083018461421f565b60006020828403121561427657600080fd5b8135611e86816140be565b60006001600160401b0382111561429a5761429a6140d3565b5060051b60200190565b600060208083850312156142b757600080fd5b82356001600160401b038111156142cd57600080fd5b8301601f810185136142de57600080fd5b80356142f16142ec82614281565b614111565b81815260059190911b8201830190838101908783111561431057600080fd5b928401925b8284101561432e57833582529284019290840190614315565b979650505050505050565b600082601f83011261434a57600080fd5b8135602061435a6142ec83614281565b82815260059290921b8401810191818101908684111561437957600080fd5b8286015b8481101561439d578035614390816140be565b835291830191830161437d565b509695505050505050565b600080604083850312156143bb57600080fd5b82356001600160401b03808211156143d257600080fd5b818501915085601f8301126143e657600080fd5b813560206143f66142ec83614281565b82815260059290921b8401810191818101908984111561441557600080fd5b948201945b838610156144335785358252948201949082019061441a565b9650508601359250508082111561444957600080fd5b5061445685828601614339565b9150509250929050565b6000806040838503121561447357600080fd5b823561447e816140be565b9150602083013561448e816140be565b809150509250929050565b602081526000611e86602083018461421f565b634e487b7160e01b600052601160045260246000fd5b808201808211156121e6576121e66144ac565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806144ff57607f821691505b60208210810361451f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060018201614537576145376144ac565b5060010190565b60006020828403121561455057600080fd5b5051919050565b80516001600160581b03198116811461456f57600080fd5b919050565b6000602080838503121561458757600080fd5b82516001600160401b0381111561459d57600080fd5b8301601f810185136145ae57600080fd5b80516145bc6142ec82614281565b81815260059190911b820183019083810190878311156145db57600080fd5b928401925b8284101561432e576145f184614557565b825292840192908401906145e0565b634e487b7160e01b600052600160045260246000fd5b602081526000611e866020830184613f4e565b8051600081900b811461456f57600080fd5b600082601f83011261464c57600080fd5b8151602061465c6142ec83614281565b82815260059290921b8401810191818101908684111561467b57600080fd5b8286015b8481101561439d5761469081614629565b835291830191830161467f565b600080604083850312156146b057600080fd5b82516001600160401b03808211156146c757600080fd5b818501915085601f8301126146db57600080fd5b815160206146eb6142ec83614281565b82815260059290921b8401810191818101908984111561470a57600080fd5b948201945b838610156147285785518252948201949082019061470f565b9188015191965090935050508082111561474157600080fd5b506144568582860161463b565b80820281158282048414176121e6576121e66144ac565b6000808335601e1984360301811261477c57600080fd5b8301803591506001600160401b0382111561479657600080fd5b602001915036819003821315612b3757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c0820152600061381560e0830184866147ab565b6000825161482f8184602087016141fb565b9190910192915050565b60006020828403121561484b57600080fd5b813560ff81168114611e8657600080fd5b60006020828403121561486e57600080fd5b815162ffffff81168114611e8657600080fd5b600081830360a081121561489457600080fd5b604051608081018181106001600160401b03821117156148b6576148b66140d3565b604090815284358252601f19830112156148cf57600080fd5b6148d76140e9565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561492157600080fd5b8151611e86816140be565b634e487b7160e01b600052601260045260246000fd5b6000826149515761495161492c565b500490565b60006020828403121561496857600080fd5b611e8682614557565b805161ffff8116811461456f57600080fd5b600060a0828403121561499557600080fd5b60405160a081018181106001600160401b03821117156149b7576149b76140d3565b604052825163ffffffff811681146149ce57600080fd5b81526149dc60208401614557565b602082015260408301518060030b81146149f557600080fd5b6040820152614a0660608401614971565b6060820152614a1760808401614629565b60808201529392505050565b600082614a3257614a3261492c565b500690565b818103818111156121e6576121e66144ac565b600080600060608486031215614a5f57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614a8a57600080fd5b81518015158114611e8657600080fd5b600181815b80851115614ad5578160001904821115614abb57614abb6144ac565b80851615614ac857918102915b93841c9390800290614a9f565b509250929050565b600082614aec575060016121e6565b81614af9575060006121e6565b8160018114614b0f5760028114614b1957614b35565b60019150506121e6565b60ff841115614b2a57614b2a6144ac565b50506001821b6121e6565b5060208310610133831016604e8410600b8410161715614b58575081810a6121e6565b614b628383614a9a565b8060001904821115614b7657614b766144ac565b029392505050565b6000611e868383614add565b601f821115611b2757600081815260208120601f850160051c81016020861015614bb15750805b601f850160051c820191505b81811015614bd057828155600101614bbd565b505050505050565b81516001600160401b03811115614bf157614bf16140d3565b614c0581614bff84546144eb565b84614b8a565b602080601f831160018114614c3a5760008415614c225750858301515b600019600386901b1c1916600185901b178555614bd0565b600085815260208120601f198616915b82811015614c6957888601518255948401946001909101908401614c4a565b5085821015614c875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006138156060830184866147ab565b60008060008060808587031215614cd657600080fd5b8451935060208501519250614ced60408601614971565b9150614cfb60608601614971565b905092959194509250565b6001600160401b03831115614d1d57614d1d6140d3565b614d3183614d2b83546144eb565b83614b8a565b6000601f841160018114614d655760008515614d4d5750838201355b600019600387901b1c1916600186901b178355611a44565b600083815260209020601f19861690835b82811015614d965786850135825560209485019460019092019101614d76565b5086821015614db35760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e08301528351610100830152838101516101208301528251610140830152820151610160820152610180810161432e56fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47536f72746974696f6e20726f756e6420666f722074686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206e6f742079657420617661696c61626c65a26469706673582212208cd9ad6b50b56c48247cee258fc6bbf794d2e17cf633342501588d7e33f46ab764736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_flareDaemon\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_firstVotingRoundStartTs\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"_votingEpochDurationSeconds\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_submissionWindow\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FastUpdateFeedRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"votingRoundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"id\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int8\",\"name\":\"decimals\",\"type\":\"int8\"}],\"name\":\"FastUpdateFeedReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"votingEpochId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"feeds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"int8[]\",\"name\":\"decimals\",\"type\":\"int8[]\"}],\"name\":\"FastUpdateFeeds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"votingRoundId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"signingPolicyAddress\",\"type\":\"address\"}],\"name\":\"FastUpdateFeedsSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"name\":\"GovernanceCallTimelocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initialGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceInitialised\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"governanceSettings\",\"type\":\"address\"}],\"name\":\"GovernedProductionModeEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_BLOCKS_HISTORY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_FEED_AGE_IN_VOTING_EPOCHS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNum\",\"type\":\"uint256\"}],\"name\":\"blockScoreCutoff\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_cutoff\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"cancelGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRewardEpochId\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentScoreCutoff\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_cutoff\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signingPolicyAddress\",\"type\":\"address\"}],\"name\":\"currentSortitionWeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"daemonize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"executeGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdateIncentiveManager\",\"outputs\":[{\"internalType\":\"contractIIFastUpdateIncentiveManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdatesConfiguration\",\"outputs\":[{\"internalType\":\"contractIFastUpdatesConfiguration\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fetchAllCurrentFeeds\",\"outputs\":[{\"internalType\":\"bytes21[]\",\"name\":\"_feedIds\",\"type\":\"bytes21[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_feeds\",\"type\":\"uint256[]\"},{\"internalType\":\"int8[]\",\"name\":\"_decimals\",\"type\":\"int8[]\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"name\":\"fetchCurrentFeeds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_feeds\",\"type\":\"uint256[]\"},{\"internalType\":\"int8[]\",\"name\":\"_decimals\",\"type\":\"int8[]\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"firstVotingRoundStartTs\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flareDaemon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flareSystemsManager\",\"outputs\":[{\"internalType\":\"contractIFlareSystemsManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ftsoFeedPublisher\",\"outputs\":[{\"internalType\":\"contractIFtsoFeedPublisher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceSettings\",\"outputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isExecutor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_historySize\",\"type\":\"uint256\"}],\"name\":\"numberOfUpdates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_noOfUpdates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"numberOfUpdatesInBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"productionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"name\":\"removeFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_indices\",\"type\":\"uint256[]\"}],\"name\":\"resetFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_submissionWindow\",\"type\":\"uint8\"}],\"name\":\"setSubmissionWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionWindow\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sortitionBlock\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"replicate\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"structBn256.G1Point\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"c\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"}],\"internalType\":\"structSortitionCredential\",\"name\":\"sortitionCredential\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"deltas\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIFastUpdater.Signature\",\"name\":\"signature\",\"type\":\"tuple\"}],\"internalType\":\"structIFastUpdater.FastUpdates\",\"name\":\"_updates\",\"type\":\"tuple\"}],\"name\":\"submitUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToFallbackMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToProductionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"timelockedCalls\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_contractNameHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_contractAddresses\",\"type\":\"address[]\"}],\"name\":\"updateContractAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_part1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_part2\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_verificationData\",\"type\":\"bytes\"}],\"name\":\"verifyPublicKey\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voterRegistry\",\"outputs\":[{\"internalType\":\"contractIIVoterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingEpochDurationSeconds\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e06040526001607f1b600e553480156200001957600080fd5b5060405162006026380380620060268339810160408190526200003c91620005aa565b8487876200004b8282620001d1565b50620000779050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b506001600160a01b038416620000c85760405162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b60448201526064015b60405180910390fd5b60008260ff16116200011d5760405162461bcd60e51b815260206004820152601a60248201527f766f74696e672065706f6368206475726174696f6e207a65726f0000000000006044820152606401620000bf565b6001600160a01b03841660c05263ffffffff831660805260ff821660a0526200014562000346565b6005805463ffffffff929092166401000000000263ffffffff60201b1990921691909117905562000176816200037e565b62000180620003e9565b604080516103e8808252617d20820190925290816020015b6060815260200190600190039081620001985750508051620001c391600f916020909101906200045d565b505050505050505062000837565b600054600160a01b900460ff16156200022d5760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c73650000000000000000000000006044820152606401620000bf565b6001600160a01b038216620002855760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000bf565b6001600160a01b038116620002d05760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000bf565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b600060a0516001600160401b03166080516001600160401b0316426200036d919062000681565b6200037991906200069d565b905090565b60648160ff1610620003d35760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401620000bf565b6005805460ff191660ff92909216919091179055565b600554620003fc9060ff166001620006c0565b60ff166001600160401b0381111562000419576200041962000655565b60405190808252806020026020018201604052801562000443578160200160208202803683370190505b5080516200045a91600d91602090910190620004ba565b50565b828054828255906000526020600020908101928215620004a8579160200282015b82811115620004a857825182906200049790826200076b565b50916020019190600101906200047e565b50620004b692915062000506565b5090565b828054828255906000526020600020908101928215620004f8579160200282015b82811115620004f8578251825591602001919060010190620004db565b50620004b692915062000527565b80821115620004b65760006200051d82826200053e565b5060010162000506565b5b80821115620004b6576000815560010162000528565b5080546200054c90620006dc565b6000825580601f106200055d575050565b601f0160209004906000526020600020908101906200045a919062000527565b6001600160a01b03811681146200045a57600080fd5b805160ff81168114620005a557600080fd5b919050565b600080600080600080600060e0888a031215620005c657600080fd5b8751620005d3816200057d565b6020890151909750620005e6816200057d565b6040890151909650620005f9816200057d565b60608901519095506200060c816200057d565b608089015190945063ffffffff811681146200062757600080fd5b92506200063760a0890162000593565b91506200064760c0890162000593565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156200069757620006976200066b565b92915050565b600082620006bb57634e487b7160e01b600052601260045260246000fd5b500490565b60ff81811683821601908111156200069757620006976200066b565b600181811c90821680620006f157607f821691505b6020821081036200071257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076657600081815260208120601f850160051c81016020861015620007415750805b601f850160051c820191505b8181101562000762578281556001016200074d565b5050505b505050565b81516001600160401b0381111562000787576200078762000655565b6200079f81620007988454620006dc565b8462000718565b602080601f831160018114620007d75760008415620007be5750858301515b600019600386901b1c1916600185901b17855562000762565b600085815260208120601f198616915b828110156200080857888601518255948401946001909101908401620007e7565b5085821015620008275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c0516157a3620008836000396000818161042d01528181611c8a01526125c601526000818161030b015261336d01526000818161053c015261339701526157a36000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063a107753211610130578063e17f212e116100b8578063ef88bf131161007c578063ef88bf131461055e578063f5a9838314610571578063f5f5ba7214610579578063faae7fc9146105a6578063fc79c300146105b957600080fd5b8063e17f212e146104dc578063e22fdece146104f0578063e36da7b7146104f8578063e621dbc714610518578063e8d0e70a1461053757600080fd5b8063be60040e116100ff578063be60040e14610488578063c10f489a1461049b578063c1bff139146104ae578063dcb1476e146104b6578063debfda30146104c957600080fd5b8063a107753214610428578063a14634a71461044f578063abfaf17014610462578063b00c0b761461047557600080fd5b80635ff27079116101be57806370473f2f1161018257806370473f2f146103b157806374e6310e146103c45780637925eaca146103e55780637fe3341a146103f85780638e0e9f7c1461040057600080fd5b80635ff270791461034d57806362354e031461036057806363f921db1461037357806367fc4029146103865780636d0e8c341461039957600080fd5b80634691377f116102055780634691377f146102b4578063470e91df146102cc5780635267a15d146102df5780635a832088146103065780635aa6e6751461034557600080fd5b80630799fe75146102375780630a1660511461025257806329bfe39d1461026757806345a15d3c14610292575b600080fd5b61023f6105cc565b6040519081526020015b60405180910390f35b6102656102603660046146cb565b6105db565b005b60095461027a906001600160a01b031681565b6040516001600160a01b039091168152602001610249565b6102a56102a03660046146ee565b610635565b604051610249939291906147dc565b6102bc610aba565b604051610249949392919061481b565b6102656102da3660046148a2565b610c56565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195461027a565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610249565b61027a611225565b61026561035b3660046148dd565b6112bc565b60005461027a906001600160a01b031681565b6102656103813660046146ee565b611542565b6102656103943660046148dd565b611b9c565b6103a1611c7d565b6040519015158152602001610249565b6102656103bf36600461498a565b611fc2565b6103d76103d23660046148dd565b6120c3565b604051610249929190614a94565b60075461027a906001600160a01b031681565b61023f601481565b60055461041490610100900462ffffff1681565b60405162ffffff9091168152602001610249565b61027a7f000000000000000000000000000000000000000000000000000000000000000081565b61023f61045d366004614aad565b612168565b610265610470366004614aed565b61218a565b610265610483366004614bf1565b612385565b60085461027a906001600160a01b031681565b600a5461027a906001600160a01b031681565b61023f606481565b61023f6104c4366004614ca9565b612460565b6103a16104d7366004614aad565b612530565b6000546103a190600160a81b900460ff1681565b6103a16125b9565b61050b610506366004614ca9565b61262d565b6040516102499190614cc2565b6005546105259060ff1681565b60405160ff9091168152602001610249565b61032d7f000000000000000000000000000000000000000000000000000000000000000081565b61026561056c366004614cd5565b612724565b61026561288a565b604080518082018252600b81526a2330b9ba2ab83230ba32b960a91b602082015290516102499190614d0e565b60065461027a906001600160a01b031681565b61023f6105c7366004614ca9565b612950565b60006105d66129e4565b905090565b600054600160b01b900460ff16806105fd5750600054600160a81b900460ff16155b1561062a5761060a612be2565b61061381612c1c565b61061f600d6000614613565b610627612c85565b50565b610627600036612cee565b6060806000836001600160401b038111156106525761065261491c565b60405190808252806020026020018201604052801561067b578160200160208202803683370190505b5060405160048082525491935090600080600019600184160161074857602084206060850152600283049250602089853760208451046020850152828451106106c357600080fd5b602084015160608501510154915060005b888110156107425760208082028b01863760208551049150838551106106f957600080fd5b602085510660408601526020850151821461071f57816020860152816060860151015492505b604085015160080283901b60f81c602082810289010181905291506001016106d4565b50600192505b6001831661079d576002603f84160492915060005b8881101561079b5760208082028b0186378385511061077b57600080fd5b845160080283901b60f81c6020828102890101819052915060010161075d565b505b505050506107a9612e3a565b9050836001600160401b038111156107c3576107c361491c565b6040519080825280602002602001820160405280156107ec578160200160208202803683370190505b50600e546040516003547fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60a08301527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802606083015260105460c083015292955090916008026000808060208b8637845160088104602087018190526007909116604087015260a08601510154915060005b8a8110156108ee5760208082028d0187378486511061089c57600080fd5b6008865104915060088651066040870152602086015182146108c9578160208701528160a0870151015492505b8260206040880151021b91508160e01c6020820260208c01015260018101905061087e565b506011545b60c08601518114610aac57606086015181016080870181905254945060001960018616016109fd5760206080870181812090526002909504948c87376080865104602087015260048502865110156109545760208601516080870151015493505b60005b8b8110156109f75760208082028e0188376080875104925060048602875110156109ef5760808751066040880152602087015183146109a157826020880152826080880151015494505b604087015160020285901b60fe1c925060001983016109d15760208181028c010180518902607f81901c90915293505b600383036109ef5760208181028c01018051607f1b89810490915293505b600101610957565b50600194505b60018516610a9d576002603f86160494935060208c87376080865104602087015260005b8b811015610a9b5760208082028e0188376004860287511015610a93578651607f166040880181905260020285901b60fe1c92506000198301610a755760208181028c010180518902607f81901c90915293505b60038303610a935760208181028c01018051607f1b89810490915293505b600101610a21565b505b6103e8600182010690506108f3565b505050505050509250925092565b60608060606000600a60009054906101000a90046001600160a01b03166001600160a01b0316630c518dce6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3c9190810190614d3e565b935060048054610b4b90614dca565b9050845114610b5c57610b5c614dfe565b600084516001600160401b03811115610b7757610b7761491c565b604051908082528060200260200182016040528015610ba0578160200160208202803683370190505b50905060005b8151811015610bdf5780828281518110610bc257610bc2614e14565b602090810291909101015280610bd781614e40565b915050610ba6565b50604051631168574f60e21b815230906345a15d3c90610c03908490600401614cc2565b600060405180830381865afa158015610c20573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c489190810190614ee4565b969791969095509350915050565b60055460ff811690610100810462ffffff1690640100000000900463ffffffff16610c82838535614faf565b4310610cec5760405162461bcd60e51b815260206004820152602e60248201527f55706461746573206e6f206c6f6e67657220616363657074656420666f72207460448201526d686520676976656e20626c6f636b60901b60648201526084015b60405180910390fd5b8335431015610d535760405162461bcd60e51b815260206004820152602d60248201527f55706461746573206e6f742079657420617661696c61626c6520666f7220746860448201526c6520676976656e20626c6f636b60981b6064820152608401610ce3565b600354610d61906008614fc2565b610d6e60c0860186614fd9565b610d7a91506004614fc2565b1115610dd25760405162461bcd60e51b815260206004820152602160248201527f4d6f72652075706461746573207468616e20617661696c61626c6520666565646044820152607360f81b6064820152608401610ce3565b60006002853560208701610de960c0890189614fd9565b604051602001610dfc9493929190615048565b60408051601f1981840301815290829052610e1691615091565b602060405180830381855afa158015610e33573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e5691906150ad565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c812091925060e0870190610eae83610e9f6101008b01856146cb565b84602001358560400135612e94565b90506001600160a01b038116610f065760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ce3565b600080610f138389612ec2565b6040805160a081019182905260065463e0d4ea3760e01b90925260a481018c90529294509092506000919081906001600160a01b031663e0d4ea3760c48301602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9391906150ad565b81528c356020820152604001600d610fac8d6001614faf565b610fb7908f356150dc565b81548110610fc757610fc7614e14565b6000918252602080832090910154835282810186905260409283018790528e35808352600b8252838320845189518185015289840151958101959095526060850191909152908f013560808401529293509060029060a00160408051601f198184030181529082905261103991615091565b602060405180830381855afa158015611056573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061107991906150ad565b905060005b8254811015611104578183828154811061109a5761109a614e14565b9060005260206000200154036110f25760405162461bcd60e51b815260206004820152601b60248201527f7375626d697373696f6e20616c72656164792070726f766964656400000000006044820152606401610ce3565b806110fc81614e40565b91505061107e565b5081819080600181540180825580915050600190039060005260206000200160009091909190915055600061114c848f60200180360381019061114791906150f0565b612ff0565b5090508061119c5760405162461bcd60e51b815260206004820152601760248201527f736f72746974696f6e2070726f6f6620696e76616c69640000000000000000006044820152606401610ce3565b6111b48e8060c001906111af9190614fd9565b6130a3565b436000908152600c602052604081208054600192906111d4908490614faf565b90915550506040516001600160a01b0388169063ffffffff8d16907f63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d93690600090a35050505050505050505050505050565b60008054600160a81b900460ff1661124757506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d6919061517e565b6112c533612530565b6113015760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610ce3565b6001600160e01b031981166000908152600260205260408120805490910361136b5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b80544210156113bc5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ce3565b60008160010180546113cd90614dca565b80601f01602080910402602001604051908101604052809291908181526020018280546113f990614dca565b80156114465780601f1061141b57610100808354040283529160200191611446565b820191906000526020600020905b81548152906001019060200180831161142957829003601f168201915b505050506001600160e01b03198516600090815260026020526040812081815592935090506114786001830182614631565b50506000805460ff60b01b1916600160b01b178155604051309061149d908490615091565b6000604051808303816000865af19150503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a161153c816130f5565b50505050565b600a546001600160a01b0316331480611573575061155e611225565b6001600160a01b0316336001600160a01b0316145b6115d55760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e2060448201526c6f7220676f7665726e616e636560981b6064820152608401610ce3565b6115dd613112565b6000805b8281101561163757818484838181106115fc576115fc614e14565b9050602002013511156116255783838281811061161b5761161b614e14565b9050602002013591505b8061162f81614e40565b9150506115e1565b5060006004805461164790614dca565b9150505b8181116116c657600460018180548061166390614dca565b80601f81036116825783600052602060002060ff1984168155603f9350505b506002820183556001810192505050038154600116156116b15790600052602060002090602091828204019190065b508190506116be81614e40565b91505061164b565b506003545b6116d660088361519b565b81116116fa57600380546001018155600052806116f281614e40565b9150506116cb565b506004805461170890614dca565b600354909150611719906008614fc2565b101561172757611727614dfe565b6000611731613369565b63ffffffff1690506000600760009054906101000a90046001600160a01b03166001600160a01b0316637a68533f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b291906150ad565b905060008060005b86811015611b9257600a546000906001600160a01b031663931028368a8a858181106117e8576117e8614e14565b905060200201356040518263ffffffff1660e01b815260040161180d91815260200190565b602060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e91906151af565b90506001600160581b0319811661189d5760405162461bcd60e51b81526020600482015260136024820152721a5b99195e081b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610ce3565b6009546040516326e5ec9360e21b81526001600160581b0319831660048201526000916001600160a01b031690639b97b24c9060240160a060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906151dc565b9050866014826000015163ffffffff1661192e9190614faf565b1161196a5760405162461bcd60e51b815260206004820152600c60248201526b19995959081d1bdbc81bdb1960a21b6044820152606401610ce3565b6000816040015160030b136119c15760405162461bcd60e51b815260206004820152601b60248201527f666565642076616c7565207a65726f206f72206e6567617469766500000000006044820152606401610ce3565b6119da816040015163ffffffff168260800151886133d4565b9095509350600060088b8b868181106119f5576119f5614e14565b90506020020135611a06919061519b565b9050600060088c8c87818110611a1e57611a1e614e14565b90506020020135611a2f91906150dc565b611a3a90600761527c565b611a45906020614fc2565b6003805491925063ffffffff831b199189841b91839186908110611a6b57611a6b614e14565b9060005260206000200154161760038481548110611a8b57611a8b614e14565b90600052602060002001819055508660f81b60048e8e89818110611ab157611ab1614e14565b905060200201358154611ac390614dca565b8110611ad157611ad1614e14565b815460011615611af05790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b84040217905550846affffffffffffffffffffff19168d8d88818110611b2d57611b2d614e14565b905060200201358b7ffa800fadb5e7b72652da40bcd7ca9a96cd4e53c9ea4c68b8afbba027e77a7cf58b8b604051611b7292919091825260000b602082015260400190565b60405180910390a450505050508080611b8a90614e40565b9150506117ba565b5050505050505050565b611ba46134b6565b6001600160e01b031981166000908152600260205260408120549003611c0c5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ce3565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590611c786001830182614631565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ceb5760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b611cf3613112565b6000611cfd613369565b60055490915063ffffffff64010000000090910481169082161115611d9957600080611d27613510565b6005805467ffffffff00000000191664010000000063ffffffff8816021790559092509050611d5760018461528f565b63ffffffff167f7195d3bbca575b55b0f4b62da395f7224b75225d9c08741d216e6cf10a83eabe8383604051611d8e9291906152ac565b60405180910390a250505b60065460408051637056269760e01b815290516000926001600160a01b03169163705626979160048083019260209291908290030181865afa158015611de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0791906152d1565b60055490915062ffffff8083166101009092041614611e4157611e28613818565b6005805463ffffff00191661010062ffffff8416021790555b611e49613a31565b600760009054906101000a90046001600160a01b03166001600160a01b031663ea105ac76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b505060058054436001600160401b03908116600160c01b026001600160c01b034292909216600160801b02919091166fffffffffffffffffffffffffffffffff9092169190911717905550611f0290506129e4565b600554600d90611f169060ff1660016152f6565b60ff16611f24436001614faf565b611f2e91906150dc565b81548110611f3e57611f3e614e14565b60009182526020918290200191909155600754604080516316b9bb5760e31b815290516001600160a01b039092169263b5cddab8926004808401938290030181865afa158015611f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb691906150ad565b600e5550600191505090565b600080600083806020019051810190611fdb919061530f565b6040805180820190915289815260208101899052929550909350915061200081613ab7565b61200957600080fd5b604080518082019091528381526020810183905261202681613ab7565b61202f57600080fd5b6040516bffffffffffffffffffffffff1960608b901b1660208201526120b890839060029060340160408051601f198184030181529082905261207191615091565b602060405180830381855afa15801561208e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906120b191906150ad565b8784613b02565b505050505050505050565b600260205260009081526040902080546001820180549192916120e590614dca565b80601f016020809104026020016040519081016040528092919081815260200182805461211190614dca565b801561215e5780601f106121335761010080835404028352916020019161215e565b820191906000526020600020905b81548152906001019060200180831161214157829003601f168201915b5050505050905082565b600554600090612183908390610100900462ffffff16612ec2565b9392505050565b600a546001600160a01b031633146121e45760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792066617374207570646174657320636f6e66696775726174696f6e006044820152606401610ce3565b6121ec613112565b60005b8151811015612381576000600883838151811061220e5761220e614e14565b6020026020010151612220919061519b565b90506000600884848151811061223857612238614e14565b602002602001015161224a91906150dc565b61225590600761527c565b612260906020614fc2565b6003805491925063ffffffff831b19918291908590811061228357612283614e14565b906000526020600020015416600384815481106122a2576122a2614e14565b9060005260206000200181905550600060f81b60048686815181106122c9576122c9614e14565b602002602001015181546122dc90614dca565b81106122ea576122ea614e14565b8154600116156123095790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555084848151811061233757612337614e14565b60200260200101517f5a17f564b9fd53c971695a2e033e0cd39ee8ad08d8117242cdecad8b017335c860405160405180910390a2505050808061237990614e40565b9150506121ef565b5050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146123fe5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ce3565b61245661243283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250613c3b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6123818282613d16565b600061246d436001614faf565b821115801561248a57506005546124879060ff1683614faf565b43105b6124ed5760405162461bcd60e51b815260206004820152602e60248201527f73636f7265206375746f6666206e6f7420617661696c61626c6520666f72207460448201526d686520676976656e20626c6f636b60901b6064820152608401610ce3565b600554600d906125019060ff1660016152f6565b61250e9060ff16846150dc565b8154811061251e5761251e614e14565b90600052602060002001549050919050565b60008054600160a01b900460ff1680156125b35750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b3919061533d565b92915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146126275760405162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b6044820152606401610ce3565b50600090565b6060606482111580156126405750438211155b6126835760405162461bcd60e51b8152602060048201526014602482015273486973746f72792073697a6520746f6f2062696760601b6044820152606401610ce3565b816001600160401b0381111561269b5761269b61491c565b6040519080825280602002602001820160405280156126c4578160200160208202803683370190505b50905060005b8281101561271e57600c60006126e0834361527c565b81526020019081526020016000205482828151811061270157612701614e14565b60209081029190910101528061271681614e40565b9150506126ca565b50919050565b600054600160a01b900460ff16156127755760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ce3565b6001600160a01b0382166127cb5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ce3565b6001600160a01b0381166128145760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ce3565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6128926134b6565b600054600160a81b900460ff16156128ec5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ce3565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b60004361295e606484614faf565b11801561296b5750438211155b6129d15760405162461bcd60e51b815260206004820152603160248201527f54686520676976656e20626c6f636b206973206e6f206c6f6e676572206f72206044820152706e6f742079657420617661696c61626c6560781b6064820152608401610ce3565b506000908152600c602052604090205490565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316636d62b4136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5e91906150ad565b90506078600c612a6e8183614faf565b612a7a9061010061527c565b612a85906002614fc2565b612a8f919061527c565b612a99919061527c565b81612aa6600c6078614faf565b612ab29061010061527c565b612abd906002614fc2565b60008051602061574e833981519152901c612ad89190614fc2565b901b9150612ae8600c6078614faf565b612af49061010061527c565b612b00600c6078614faf565b612b0a919061527c565b816001612b19600c6078614faf565b612b259061010061527c565b612b30906002615443565b612b3a919061527c565b612b46600c6078614faf565b612b529061010061527c565b60008051602061574e833981519152901c16612b6e9190614fc2565b612b79911c83614faf565b9150612b87600c6078614faf565b816001612b96600c6078614faf565b612ba29061010061527c565b612bad906002615443565b612bb7919061527c565b60008051602061574e83398151915216612bd19190614fc2565b612bdc911c83614faf565b91505090565b600054600160b01b900460ff1615612c1257333014612c0357612c03614dfe565b6000805460ff60b01b19169055565b612c1a6134b6565b565b60648160ff1610612c6f5760405162461bcd60e51b815260206004820152601960248201527f5375626d697373696f6e2077696e646f7720746f6f20626967000000000000006044820152606401610ce3565b6005805460ff191660ff92909216919091179055565b600554612c969060ff1660016152f6565b60ff166001600160401b03811115612cb057612cb061491c565b604051908082528060200260200182016040528015612cd9578160200160208202803683370190505b50805161062791600d9160209091019061466b565b612cf66134b6565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015612d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6691906150ad565b90506000612d748242614faf565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190612df2908261549d565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051612e2b949392919061555c565b60405180910390a15050505050565b600060105460115403612e6357506005546801000000000000000090046001600160401b031690565b436000908152600c602052604090205415612e7d57504290565b50600554600160801b90046001600160401b031690565b600080600080612ea688888888613eec565b925092509250612eb68282613fbb565b50909695505050505050565b60408051808201909152600080825260208201526008546040516344b571d960e01b8152600481018490526001600160a01b03858116602483015260009283928392839283929116906344b571d990604401608060405180830381865afa158015612f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f559190615585565b9296509094509250905083151580612f6c57508215155b612fb85760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206b6579206e6f742072656769737465726564000000000000006044820152606401610ce3565b60408051808201909152848152602081018490529550612fe361ffff80841690611000908416614074565b9450505050509250929050565b60008083606001518360000151106130705760405162461bcd60e51b815260206004820152603f60248201527f43726564656e7469616c2773207265706c69636174652076616c75652069732060448201527f6e6f74206c657373207468616e2070726f7669646572277320776569676874006064820152608401610ce3565b600061307c85856140b4565b602085015151909150818015613096575085604001518111155b93509150505b9250929050565b8181600f601054815481106130ba576130ba614e14565b9060005260206000200191826130d19291906155cb565b506103e860105460016130e49190614faf565b6130ee91906150dc565b6010555050565b3d604051818101604052816000823e821561310e578181f35b8181fd5b61311a612e3a565b600560086101000a8154816001600160401b0302191690836001600160401b031602179055506000600e549050604051602081016040820160608301601054608085015260008060008060008060038752602087208752600f89526011545b60808b015181146133535760208a208101808a52549150600019600183160161328a5760208920895260028204915060005b6001602060018503040181101561328457808a510154935060005b61010081101561327b5783600882046020840201101561327b576010810460108302018a51015497506000955060005b60088110156132655760208181028a901b60e01c9850830260088304018511156132465785821b60fe1c99506000198a0161323357968e02607f1c965b60038a0361324657607f9790971b8e9004965b6020810260e0039790971b9695871795600291909101906001016131f6565b508560108083030460108402018b5101556131c6565b506001016131ab565b50600191505b60018216613344579091506002603f8316049060005b610100811015613342578260088204101561334257601081048951015496506000945060005b6008811015613331576020810288901b60e01c9650600882048411156133125784821b60fe1c985060001989016132ff57958d02607f1c955b6003890361331257607f9690961b8d9004955b6020810260e0039690961b9594861794600291909101906001016132c6565b50846010808303048a5101556132a0565b505b6103e860018201069050613179565b5050505050505050505060808101516011555050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316426133ca919061527c565b6105d6919061519b565b600080846000036133e95750839050826134ae565b8484601d82901c158015906134025750607f198160000b135b1561342257613412600a8361519b565b915061341f60018261568a565b90505b6000607f6134308785614fc2565b901c90506000613440848361527c565b90505b600381901c1580156134585750607f8360000b125b80156134665750601c84901c155b156134a65761347684600a614fc2565b93506134838360016156ab565b9250607f6134918886614fc2565b901c915061349f848361527c565b9050613443565b509193509150505b935093915050565b6134be611225565b6001600160a01b0316336001600160a01b031614612c1a5760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ce3565b6060806004805461352090614dca565b90506001600160401b038111156135395761353961491c565b604051908082528060200260200182016040528015613562578160200160208202803683370190505b5091506004805461357290614dca565b90506001600160401b0381111561358b5761358b61491c565b6040519080825280602002602001820160405280156135b4578160200160208202803683370190505b5090506000806008600480546135c990614dca565b6135d492915061519b565b905060005b818110156136ed576000600382815481106135f6576135f6614e14565b600091825260208220015491505b60088110156136d85760008161361b856008614fc2565b6136259190614faf565b9050600481815461363590614dca565b811061364357613643614e14565b8154600116156136625790600052602060002090602091828204019190065b9054901a600160f81b0260f81c87828151811061368157613681614e14565b60009290920b60209283029190910182015261369e908390614fc2565b955060e08684901b901c8882815181106136ba576136ba614e14565b602090810291909101015250806136d081614e40565b915050613604565b505080806136e590614e40565b9150506135d9565b506008600480546136fd90614dca565b6137089291506150dc565b156138125760006003828154811061372257613722614e14565b6000918252602082200154915061373a836008614fc2565b90505b6004805461374a90614dca565b905081101561380f57600481815461376190614dca565b811061376f5761376f614e14565b81546001161561378e5790600052602060002090602091828204019190065b9054901a600160f81b0260f81c8582815181106137ad576137ad614e14565b60009290920b602092830291909101909101526137cb6008826150dc565b6137d6906020614fc2565b935060e08483901b901c8682815181106137f2576137f2614e14565b60209081029190910101528061380781614e40565b91505061373d565b50505b50509091565b60075460408051637a68533f60e01b815290516000926001600160a01b031691637a68533f9160048083019260209291908290030181865afa158015613862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388691906150ad565b905060008080805b600354811015613a2a57600381815481106138ab576138ab614e14565b9060005260206000200154925060005b60088110156139f757806138d0836008614fc2565b6138da9190614faf565b9450600480546138e990614dca565b90508510156139f7576000600486815461390290614dca565b811061391057613910614e14565b81546001161561392f5790600052602060002090602091828204019190065b9054600160f81b911a0260f81c9050600061394b83600761527c565b613956906020614fc2565b63ffffffff811b878116821c965090915061397286848b6133d4565b6004805484199a909a1683861b179992985090945060f885901b918a9061399890614dca565b81106139a6576139a6614e14565b8154600116156139c55790600052602060002090602091828204019190065b601f036101000a81548160ff02191690600160f81b8404021790555050505080806139ef90614e40565b9150506138bb565b508260038281548110613a0c57613a0c614e14565b60009182526020909120015580613a2281614e40565b91505061388e565b5050505050565b600554600160c01b90046001600160401b03166064811015613a505750565b805b4381101561238157600b6000613a6960648461527c565b81526020019081526020016000206000613a839190614613565b600c6000613a9260648461527c565b8152602001908152602001600020600090558080613aaf90614e40565b915050613a52565b600060008051602061574e833981519152613ad783600001516003614296565b613ae2906003614faf565b613aec91906150dc565b613afb83602001516002614296565b1492915050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001855160208088015185518683015160408051948501959095529383019190915260608201889052608082015260a081019190915260c0016040516020818303038152906040528051906020012060001c613b7f91906150dc565b90506000613bb8613bb2604080518082018252600080825260209182015281518083019092526001825260029082015290565b856142ee565b90506000613bc687846142ee565b90506000613bd48383614335565b80518651919250148015613bef575080602001518560200151145b611b925760405162461bcd60e51b815260206004820152601d60248201527f7075626c6963206b657920766572696669636174696f6e206572726f720000006044820152606401610ce3565b60008082604051602001613c4f9190614d0e565b6040516020818303038152906040528051906020012090506000805b8651811015613cc757868181518110613c8657613c86614e14565b60200260200101518303613cb557858181518110613ca657613ca6614e14565b60200260200101519150613cc7565b80613cbf81614e40565b915050613c6b565b506001600160a01b038116613d0d5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ce3565b95945050505050565b613d4c828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250613c3b565b600660006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613db282826040518060400160405280601a81526020017f46617374557064617465496e63656e746976654d616e61676572000000000000815250613c3b565b600760006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e0882826040518060400160405280600d81526020016c566f746572526567697374727960981b815250613c3b565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613e62828260405180604001604052806011815260200170233a39b7a332b2b2283ab13634b9b432b960791b815250613c3b565b600960006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613ec882826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250613c3b565b600a80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613f275750600091506003905082613fb1565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613f7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fa757506000925060019150829050613fb1565b9250600091508190505b9450945094915050565b6000826003811115613fcf57613fcf6156cc565b03613fd8575050565b6001826003811115613fec57613fec6156cc565b0361400a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561401e5761401e6156cc565b0361403f5760405163fce698f760e01b815260048101829052602401610ce3565b6003826003811115614053576140536156cc565b03612381576040516335e2f38360e21b815260048101829052602401610ce3565b600080614082858585614380565b905060008380614094576140946150c6565b858709905080156140a857816001016140aa565b815b9695505050505050565b60006140c38360800151613ab7565b6140cc57600080fd5b6140d98260200151613ab7565b6140e257600080fd5b60006141376140f9856080015185604001516142ee565b614132614128604080518082018252600080825260209182015281518083019092526001825260029082015290565b86606001516142ee565b614335565b845160208087015186516040519495506000946141669493019283526020830191909152604082015260600190565b60405160208183030381529060405290506000614182826144a6565b905060006141a961419b876020015188604001516142ee565b6141328489606001516142ee565b9050600060026141db604080518082018252600080825260209182015281518083019092526001825260029082015290565b848a608001518a6020015189876040516020016141fd969594939291906156e2565b60408051601f198184030181529082905261421791615091565b602060405180830381855afa158015614234573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061425791906150ad565b90506142837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001826150dc565b6040880151149550505050505092915050565b600060405160208101602081526020808201526020604082015284606082015283608082015260008051602061574e83398151915260a082015260208260c0836005600019fa6142e557600080fd5b50519392505050565b604080518082019091526000808252602082015260405183518152602084015160208201528260408201526040826060836007600019fa61432e57600080fd5b5092915050565b6040805180820190915260008082526020820152604051835181526020840151602082015282516040820152602083015160608201526040826080836006600019fa61432e57600080fd5b60008082116143c45760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ce3565b836000036143d457506000612183565b838302838582816143e7576143e76150c6565b0403614405578281816143fc576143fc6150c6565b04915050612183565b506000614412838661519b565b9050600061442084876150dc565b9050600061442e858761519b565b9050600061443c86886150dc565b9050856144498285614fc2565b614453919061519b565b61445d8385614fc2565b6144678387614fc2565b886144728689614fc2565b61447c9190614fc2565b6144869190614faf565b6144909190614faf565b61449a9190614faf565b98975050505050505050565b604080518082019091526000808252602082015260006002836040516144cc9190615091565b602060405180830381855afa1580156144e9573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061450c91906150ad565b9050600061452860008051602061574e833981519152836150dc565b905060005b61453682614569565b90508015614557576040805180820190915291825260208201529392505050565b614562600183614faf565b915061452d565b60008060008051602061574e833981519152614586846003614296565b614591906003614faf565b61459b91906150dc565b905060006145cd8260026145be600160008051602061574e83398151915261527c565b6145c8919061519b565b614296565b90508060011415806145dd575081155b156145ec575060009392505050565b61460b8260046145be60008051602061574e8339815191526001614faf565b949350505050565b508054600082559060005260206000209081019061062791906146b6565b50805461463d90614dca565b6000825580601f1061464d575050565b601f01602090049060005260206000209081019061062791906146b6565b8280548282559060005260206000209081019282156146a6579160200282015b828111156146a657825182559160200191906001019061468b565b506146b29291506146b6565b5090565b5b808211156146b257600081556001016146b7565b6000602082840312156146dd57600080fd5b813560ff8116811461218357600080fd5b6000806020838503121561470157600080fd5b82356001600160401b038082111561471857600080fd5b818501915085601f83011261472c57600080fd5b81358181111561473b57600080fd5b8660208260051b850101111561475057600080fd5b60209290920196919550909350505050565b600081518084526020808501945080840160005b8381101561479257815187529582019590820190600101614776565b509495945050505050565b60008151808452602080850194508084016000805b848110156147d0578251820b885296830196918301916001016147b2565b50959695505050505050565b6060815260006147ef6060830186614762565b8281036020840152614801818661479d565b9150506001600160401b0383166040830152949350505050565b6080808252855190820181905260009060209060a0840190828901845b8281101561485e5781516001600160581b03191684529284019290840190600101614838565b505050838103828501526148728188614762565b9150508281036040840152614887818661479d565b9150506001600160401b038316606083015295945050505050565b6000602082840312156148b457600080fd5b81356001600160401b038111156148ca57600080fd5b8201610140818503121561218357600080fd5b6000602082840312156148ef57600080fd5b81356001600160e01b03198116811461218357600080fd5b6001600160a01b038116811461062757600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156149545761495461491c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156149825761498261491c565b604052919050565b600080600080608085870312156149a057600080fd5b84356149ab81614907565b935060208581013593506040860135925060608601356001600160401b03808211156149d657600080fd5b818801915088601f8301126149ea57600080fd5b8135818111156149fc576149fc61491c565b614a0e601f8201601f1916850161495a565b91508082528984828501011115614a2457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60005b83811015614a5f578181015183820152602001614a47565b50506000910152565b60008151808452614a80816020860160208601614a44565b601f01601f19169290920160200192915050565b82815260406020820152600061460b6040830184614a68565b600060208284031215614abf57600080fd5b813561218381614907565b60006001600160401b03821115614ae357614ae361491c565b5060051b60200190565b60006020808385031215614b0057600080fd5b82356001600160401b03811115614b1657600080fd5b8301601f81018513614b2757600080fd5b8035614b3a614b3582614aca565b61495a565b81815260059190911b82018301908381019087831115614b5957600080fd5b928401925b82841015614b7757833582529284019290840190614b5e565b979650505050505050565b600082601f830112614b9357600080fd5b81356020614ba3614b3583614aca565b82815260059290921b84018101918181019086841115614bc257600080fd5b8286015b84811015614be6578035614bd981614907565b8352918301918301614bc6565b509695505050505050565b60008060408385031215614c0457600080fd5b82356001600160401b0380821115614c1b57600080fd5b818501915085601f830112614c2f57600080fd5b81356020614c3f614b3583614aca565b82815260059290921b84018101918181019089841115614c5e57600080fd5b948201945b83861015614c7c57853582529482019490820190614c63565b96505086013592505080821115614c9257600080fd5b50614c9f85828601614b82565b9150509250929050565b600060208284031215614cbb57600080fd5b5035919050565b6020815260006121836020830184614762565b60008060408385031215614ce857600080fd5b8235614cf381614907565b91506020830135614d0381614907565b809150509250929050565b6020815260006121836020830184614a68565b80516001600160581b031981168114614d3957600080fd5b919050565b60006020808385031215614d5157600080fd5b82516001600160401b03811115614d6757600080fd5b8301601f81018513614d7857600080fd5b8051614d86614b3582614aca565b81815260059190911b82018301908381019087831115614da557600080fd5b928401925b82841015614b7757614dbb84614d21565b82529284019290840190614daa565b600181811c90821680614dde57607f821691505b60208210810361271e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e5257614e52614e2a565b5060010190565b8051600081900b8114614d3957600080fd5b600082601f830112614e7c57600080fd5b81516020614e8c614b3583614aca565b82815260059290921b84018101918181019086841115614eab57600080fd5b8286015b84811015614be657614ec081614e59565b8352918301918301614eaf565b80516001600160401b0381168114614d3957600080fd5b600080600060608486031215614ef957600080fd5b83516001600160401b0380821115614f1057600080fd5b818601915086601f830112614f2457600080fd5b81516020614f34614b3583614aca565b82815260059290921b8401810191818101908a841115614f5357600080fd5b948201945b83861015614f7157855182529482019490820190614f58565b91890151919750909350505080821115614f8a57600080fd5b50614f9786828701614e6b565b925050614fa660408501614ecd565b90509250925092565b808201808211156125b3576125b3614e2a565b80820281158282048414176125b3576125b3614e2a565b6000808335601e19843603018112614ff057600080fd5b8301803591506001600160401b0382111561500a57600080fd5b60200191503681900382131561309c57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b84815283356020820152602084013560408201526040840135606082015260608401356080820152608084013560a082015260e060c082015260006140aa60e08301848661501f565b600082516150a3818460208701614a44565b9190910192915050565b6000602082840312156150bf57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826150eb576150eb6150c6565b500690565b600081830360a081121561510357600080fd5b604051608081018181106001600160401b03821117156151255761512561491c565b604090815284358252601f198301121561513e57600080fd5b615146614932565b915060208401358252604084013560208301528160208201526060840135604082015260808401356060820152809250505092915050565b60006020828403121561519057600080fd5b815161218381614907565b6000826151aa576151aa6150c6565b500490565b6000602082840312156151c157600080fd5b61218382614d21565b805161ffff81168114614d3957600080fd5b600060a082840312156151ee57600080fd5b60405160a081018181106001600160401b03821117156152105761521061491c565b604052825163ffffffff8116811461522757600080fd5b815261523560208401614d21565b602082015260408301518060030b811461524e57600080fd5b604082015261525f606084016151ca565b606082015261527060808401614e59565b60808201529392505050565b818103818111156125b3576125b3614e2a565b63ffffffff82811682821603908082111561432e5761432e614e2a565b6040815260006152bf6040830185614762565b8281036020840152613d0d818561479d565b6000602082840312156152e357600080fd5b815162ffffff8116811461218357600080fd5b60ff81811683821601908111156125b3576125b3614e2a565b60008060006060848603121561532457600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561534f57600080fd5b8151801515811461218357600080fd5b600181815b8085111561539a57816000190482111561538057615380614e2a565b8085161561538d57918102915b93841c9390800290615364565b509250929050565b6000826153b1575060016125b3565b816153be575060006125b3565b81600181146153d457600281146153de576153fa565b60019150506125b3565b60ff8411156153ef576153ef614e2a565b50506001821b6125b3565b5060208310610133831016604e8410600b841016171561541d575081810a6125b3565b615427838361535f565b806000190482111561543b5761543b614e2a565b029392505050565b600061218383836153a2565b601f821115611c7857600081815260208120601f850160051c810160208610156154765750805b601f850160051c820191505b8181101561549557828155600101615482565b505050505050565b81516001600160401b038111156154b6576154b661491c565b6154ca816154c48454614dca565b8461544f565b602080601f8311600181146154ff57600084156154e75750858301515b600019600386901b1c1916600185901b178555615495565b600085815260208120601f198616915b8281101561552e5788860151825594840194600190910190840161550f565b508582101561554c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b851681528360208201526060604082015260006140aa60608301848661501f565b6000806000806080858703121561559b57600080fd5b84519350602085015192506155b2604086016151ca565b91506155c0606086016151ca565b905092959194509250565b6001600160401b038311156155e2576155e261491c565b6155f6836155f08354614dca565b8361544f565b6000601f84116001811461562a57600085156156125750838201355b600019600387901b1c1916600186901b178355613a2a565b600083815260209020601f19861690835b8281101561565b578685013582556020948501946001909201910161563b565b50868210156156785760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082810b9082900b03607f198112607f821317156125b3576125b3614e2a565b600081810b9083900b01607f8113607f19821217156125b3576125b3614e2a565b634e487b7160e01b600052602160045260246000fd5b865181526020808801518183015286516040830152868101516060830152855160808301528581015160a0830152845160c08301528481015160e083015283516101008301528381015161012083015282516101408301528201516101608201526101808101614b7756fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122085593ec3b965bb2a49d1c787856a93122b44643749afcf8141e8e48d6c71e75564736f6c63430008140033", } // FastUpdaterABI is the input ABI used to generate the binding from. @@ -73,7 +73,7 @@ var FastUpdaterABI = FastUpdaterMetaData.ABI var FastUpdaterBin = FastUpdaterMetaData.Bin // DeployFastUpdater deploys a new Ethereum contract, binding an instance of FastUpdater to it. -func DeployFastUpdater(auth *bind.TransactOpts, backend bind.ContractBackend, _governanceSettings common.Address, _initialGovernance common.Address, _addressUpdater common.Address, _flareDaemon common.Address, _firstVotingRoundStartTs uint32, _votingEpochDurationSeconds uint8, _submissionWindow *big.Int) (common.Address, *types.Transaction, *FastUpdater, error) { +func DeployFastUpdater(auth *bind.TransactOpts, backend bind.ContractBackend, _governanceSettings common.Address, _initialGovernance common.Address, _addressUpdater common.Address, _flareDaemon common.Address, _firstVotingRoundStartTs uint32, _votingEpochDurationSeconds uint8, _submissionWindow uint8) (common.Address, *types.Transaction, *FastUpdater, error) { parsed, err := FastUpdaterMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -231,6 +231,37 @@ func (_FastUpdater *FastUpdaterTransactorRaw) Transact(opts *bind.TransactOpts, return _FastUpdater.Contract.contract.Transact(opts, method, params...) } +// MAXBLOCKSHISTORY is a free data retrieval call binding the contract method 0xc1bff139. +// +// Solidity: function MAX_BLOCKS_HISTORY() view returns(uint256) +func (_FastUpdater *FastUpdaterCaller) MAXBLOCKSHISTORY(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FastUpdater.contract.Call(opts, &out, "MAX_BLOCKS_HISTORY") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXBLOCKSHISTORY is a free data retrieval call binding the contract method 0xc1bff139. +// +// Solidity: function MAX_BLOCKS_HISTORY() view returns(uint256) +func (_FastUpdater *FastUpdaterSession) MAXBLOCKSHISTORY() (*big.Int, error) { + return _FastUpdater.Contract.MAXBLOCKSHISTORY(&_FastUpdater.CallOpts) +} + +// MAXBLOCKSHISTORY is a free data retrieval call binding the contract method 0xc1bff139. +// +// Solidity: function MAX_BLOCKS_HISTORY() view returns(uint256) +func (_FastUpdater *FastUpdaterCallerSession) MAXBLOCKSHISTORY() (*big.Int, error) { + return _FastUpdater.Contract.MAXBLOCKSHISTORY(&_FastUpdater.CallOpts) +} + // MAXFEEDAGEINVOTINGEPOCHS is a free data retrieval call binding the contract method 0x7fe3341a. // // Solidity: function MAX_FEED_AGE_IN_VOTING_EPOCHS() view returns(uint256) @@ -262,12 +293,43 @@ func (_FastUpdater *FastUpdaterCallerSession) MAXFEEDAGEINVOTINGEPOCHS() (*big.I return _FastUpdater.Contract.MAXFEEDAGEINVOTINGEPOCHS(&_FastUpdater.CallOpts) } -// CircularLength is a free data retrieval call binding the contract method 0x488f9806. +// BlockScoreCutoff is a free data retrieval call binding the contract method 0xdcb1476e. +// +// Solidity: function blockScoreCutoff(uint256 _blockNum) view returns(uint256 _cutoff) +func (_FastUpdater *FastUpdaterCaller) BlockScoreCutoff(opts *bind.CallOpts, _blockNum *big.Int) (*big.Int, error) { + var out []interface{} + err := _FastUpdater.contract.Call(opts, &out, "blockScoreCutoff", _blockNum) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BlockScoreCutoff is a free data retrieval call binding the contract method 0xdcb1476e. // -// Solidity: function circularLength() view returns(uint256) -func (_FastUpdater *FastUpdaterCaller) CircularLength(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function blockScoreCutoff(uint256 _blockNum) view returns(uint256 _cutoff) +func (_FastUpdater *FastUpdaterSession) BlockScoreCutoff(_blockNum *big.Int) (*big.Int, error) { + return _FastUpdater.Contract.BlockScoreCutoff(&_FastUpdater.CallOpts, _blockNum) +} + +// BlockScoreCutoff is a free data retrieval call binding the contract method 0xdcb1476e. +// +// Solidity: function blockScoreCutoff(uint256 _blockNum) view returns(uint256 _cutoff) +func (_FastUpdater *FastUpdaterCallerSession) BlockScoreCutoff(_blockNum *big.Int) (*big.Int, error) { + return _FastUpdater.Contract.BlockScoreCutoff(&_FastUpdater.CallOpts, _blockNum) +} + +// CurrentRewardEpochId is a free data retrieval call binding the contract method 0x8e0e9f7c. +// +// Solidity: function currentRewardEpochId() view returns(uint24) +func (_FastUpdater *FastUpdaterCaller) CurrentRewardEpochId(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _FastUpdater.contract.Call(opts, &out, "circularLength") + err := _FastUpdater.contract.Call(opts, &out, "currentRewardEpochId") if err != nil { return *new(*big.Int), err @@ -279,18 +341,18 @@ func (_FastUpdater *FastUpdaterCaller) CircularLength(opts *bind.CallOpts) (*big } -// CircularLength is a free data retrieval call binding the contract method 0x488f9806. +// CurrentRewardEpochId is a free data retrieval call binding the contract method 0x8e0e9f7c. // -// Solidity: function circularLength() view returns(uint256) -func (_FastUpdater *FastUpdaterSession) CircularLength() (*big.Int, error) { - return _FastUpdater.Contract.CircularLength(&_FastUpdater.CallOpts) +// Solidity: function currentRewardEpochId() view returns(uint24) +func (_FastUpdater *FastUpdaterSession) CurrentRewardEpochId() (*big.Int, error) { + return _FastUpdater.Contract.CurrentRewardEpochId(&_FastUpdater.CallOpts) } -// CircularLength is a free data retrieval call binding the contract method 0x488f9806. +// CurrentRewardEpochId is a free data retrieval call binding the contract method 0x8e0e9f7c. // -// Solidity: function circularLength() view returns(uint256) -func (_FastUpdater *FastUpdaterCallerSession) CircularLength() (*big.Int, error) { - return _FastUpdater.Contract.CircularLength(&_FastUpdater.CallOpts) +// Solidity: function currentRewardEpochId() view returns(uint24) +func (_FastUpdater *FastUpdaterCallerSession) CurrentRewardEpochId() (*big.Int, error) { + return _FastUpdater.Contract.CurrentRewardEpochId(&_FastUpdater.CallOpts) } // CurrentScoreCutoff is a free data retrieval call binding the contract method 0x0799fe75. @@ -419,19 +481,21 @@ func (_FastUpdater *FastUpdaterCallerSession) FastUpdatesConfiguration() (common // FetchAllCurrentFeeds is a free data retrieval call binding the contract method 0x4691377f. // -// Solidity: function fetchAllCurrentFeeds() view returns(bytes21[] _feedIds, uint256[] _feeds, int8[] _decimals) +// Solidity: function fetchAllCurrentFeeds() view returns(bytes21[] _feedIds, uint256[] _feeds, int8[] _decimals, uint64 _timestamp) func (_FastUpdater *FastUpdaterCaller) FetchAllCurrentFeeds(opts *bind.CallOpts) (struct { - FeedIds [][21]byte - Feeds []*big.Int - Decimals []int8 + FeedIds [][21]byte + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }, error) { var out []interface{} err := _FastUpdater.contract.Call(opts, &out, "fetchAllCurrentFeeds") outstruct := new(struct { - FeedIds [][21]byte - Feeds []*big.Int - Decimals []int8 + FeedIds [][21]byte + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }) if err != nil { return *outstruct, err @@ -440,6 +504,7 @@ func (_FastUpdater *FastUpdaterCaller) FetchAllCurrentFeeds(opts *bind.CallOpts) outstruct.FeedIds = *abi.ConvertType(out[0], new([][21]byte)).(*[][21]byte) outstruct.Feeds = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) outstruct.Decimals = *abi.ConvertType(out[2], new([]int8)).(*[]int8) + outstruct.Timestamp = *abi.ConvertType(out[3], new(uint64)).(*uint64) return *outstruct, err @@ -447,39 +512,43 @@ func (_FastUpdater *FastUpdaterCaller) FetchAllCurrentFeeds(opts *bind.CallOpts) // FetchAllCurrentFeeds is a free data retrieval call binding the contract method 0x4691377f. // -// Solidity: function fetchAllCurrentFeeds() view returns(bytes21[] _feedIds, uint256[] _feeds, int8[] _decimals) +// Solidity: function fetchAllCurrentFeeds() view returns(bytes21[] _feedIds, uint256[] _feeds, int8[] _decimals, uint64 _timestamp) func (_FastUpdater *FastUpdaterSession) FetchAllCurrentFeeds() (struct { - FeedIds [][21]byte - Feeds []*big.Int - Decimals []int8 + FeedIds [][21]byte + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }, error) { return _FastUpdater.Contract.FetchAllCurrentFeeds(&_FastUpdater.CallOpts) } // FetchAllCurrentFeeds is a free data retrieval call binding the contract method 0x4691377f. // -// Solidity: function fetchAllCurrentFeeds() view returns(bytes21[] _feedIds, uint256[] _feeds, int8[] _decimals) +// Solidity: function fetchAllCurrentFeeds() view returns(bytes21[] _feedIds, uint256[] _feeds, int8[] _decimals, uint64 _timestamp) func (_FastUpdater *FastUpdaterCallerSession) FetchAllCurrentFeeds() (struct { - FeedIds [][21]byte - Feeds []*big.Int - Decimals []int8 + FeedIds [][21]byte + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }, error) { return _FastUpdater.Contract.FetchAllCurrentFeeds(&_FastUpdater.CallOpts) } // FetchCurrentFeeds is a free data retrieval call binding the contract method 0x45a15d3c. // -// Solidity: function fetchCurrentFeeds(uint256[] _indices) view returns(uint256[] _feeds, int8[] _decimals) +// Solidity: function fetchCurrentFeeds(uint256[] _indices) view returns(uint256[] _feeds, int8[] _decimals, uint64 _timestamp) func (_FastUpdater *FastUpdaterCaller) FetchCurrentFeeds(opts *bind.CallOpts, _indices []*big.Int) (struct { - Feeds []*big.Int - Decimals []int8 + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }, error) { var out []interface{} err := _FastUpdater.contract.Call(opts, &out, "fetchCurrentFeeds", _indices) outstruct := new(struct { - Feeds []*big.Int - Decimals []int8 + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }) if err != nil { return *outstruct, err @@ -487,6 +556,7 @@ func (_FastUpdater *FastUpdaterCaller) FetchCurrentFeeds(opts *bind.CallOpts, _i outstruct.Feeds = *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) outstruct.Decimals = *abi.ConvertType(out[1], new([]int8)).(*[]int8) + outstruct.Timestamp = *abi.ConvertType(out[2], new(uint64)).(*uint64) return *outstruct, err @@ -494,20 +564,22 @@ func (_FastUpdater *FastUpdaterCaller) FetchCurrentFeeds(opts *bind.CallOpts, _i // FetchCurrentFeeds is a free data retrieval call binding the contract method 0x45a15d3c. // -// Solidity: function fetchCurrentFeeds(uint256[] _indices) view returns(uint256[] _feeds, int8[] _decimals) +// Solidity: function fetchCurrentFeeds(uint256[] _indices) view returns(uint256[] _feeds, int8[] _decimals, uint64 _timestamp) func (_FastUpdater *FastUpdaterSession) FetchCurrentFeeds(_indices []*big.Int) (struct { - Feeds []*big.Int - Decimals []int8 + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }, error) { return _FastUpdater.Contract.FetchCurrentFeeds(&_FastUpdater.CallOpts, _indices) } // FetchCurrentFeeds is a free data retrieval call binding the contract method 0x45a15d3c. // -// Solidity: function fetchCurrentFeeds(uint256[] _indices) view returns(uint256[] _feeds, int8[] _decimals) +// Solidity: function fetchCurrentFeeds(uint256[] _indices) view returns(uint256[] _feeds, int8[] _decimals, uint64 _timestamp) func (_FastUpdater *FastUpdaterCallerSession) FetchCurrentFeeds(_indices []*big.Int) (struct { - Feeds []*big.Int - Decimals []int8 + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 }, error) { return _FastUpdater.Contract.FetchCurrentFeeds(&_FastUpdater.CallOpts, _indices) } @@ -791,6 +863,68 @@ func (_FastUpdater *FastUpdaterCallerSession) IsExecutor(_address common.Address return _FastUpdater.Contract.IsExecutor(&_FastUpdater.CallOpts, _address) } +// NumberOfUpdates is a free data retrieval call binding the contract method 0xe36da7b7. +// +// Solidity: function numberOfUpdates(uint256 _historySize) view returns(uint256[] _noOfUpdates) +func (_FastUpdater *FastUpdaterCaller) NumberOfUpdates(opts *bind.CallOpts, _historySize *big.Int) ([]*big.Int, error) { + var out []interface{} + err := _FastUpdater.contract.Call(opts, &out, "numberOfUpdates", _historySize) + + if err != nil { + return *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) + + return out0, err + +} + +// NumberOfUpdates is a free data retrieval call binding the contract method 0xe36da7b7. +// +// Solidity: function numberOfUpdates(uint256 _historySize) view returns(uint256[] _noOfUpdates) +func (_FastUpdater *FastUpdaterSession) NumberOfUpdates(_historySize *big.Int) ([]*big.Int, error) { + return _FastUpdater.Contract.NumberOfUpdates(&_FastUpdater.CallOpts, _historySize) +} + +// NumberOfUpdates is a free data retrieval call binding the contract method 0xe36da7b7. +// +// Solidity: function numberOfUpdates(uint256 _historySize) view returns(uint256[] _noOfUpdates) +func (_FastUpdater *FastUpdaterCallerSession) NumberOfUpdates(_historySize *big.Int) ([]*big.Int, error) { + return _FastUpdater.Contract.NumberOfUpdates(&_FastUpdater.CallOpts, _historySize) +} + +// NumberOfUpdatesInBlock is a free data retrieval call binding the contract method 0xfc79c300. +// +// Solidity: function numberOfUpdatesInBlock(uint256 _blockNumber) view returns(uint256) +func (_FastUpdater *FastUpdaterCaller) NumberOfUpdatesInBlock(opts *bind.CallOpts, _blockNumber *big.Int) (*big.Int, error) { + var out []interface{} + err := _FastUpdater.contract.Call(opts, &out, "numberOfUpdatesInBlock", _blockNumber) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumberOfUpdatesInBlock is a free data retrieval call binding the contract method 0xfc79c300. +// +// Solidity: function numberOfUpdatesInBlock(uint256 _blockNumber) view returns(uint256) +func (_FastUpdater *FastUpdaterSession) NumberOfUpdatesInBlock(_blockNumber *big.Int) (*big.Int, error) { + return _FastUpdater.Contract.NumberOfUpdatesInBlock(&_FastUpdater.CallOpts, _blockNumber) +} + +// NumberOfUpdatesInBlock is a free data retrieval call binding the contract method 0xfc79c300. +// +// Solidity: function numberOfUpdatesInBlock(uint256 _blockNumber) view returns(uint256) +func (_FastUpdater *FastUpdaterCallerSession) NumberOfUpdatesInBlock(_blockNumber *big.Int) (*big.Int, error) { + return _FastUpdater.Contract.NumberOfUpdatesInBlock(&_FastUpdater.CallOpts, _blockNumber) +} + // ProductionMode is a free data retrieval call binding the contract method 0xe17f212e. // // Solidity: function productionMode() view returns(bool) @@ -824,16 +958,16 @@ func (_FastUpdater *FastUpdaterCallerSession) ProductionMode() (bool, error) { // SubmissionWindow is a free data retrieval call binding the contract method 0xe621dbc7. // -// Solidity: function submissionWindow() view returns(uint256) -func (_FastUpdater *FastUpdaterCaller) SubmissionWindow(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function submissionWindow() view returns(uint8) +func (_FastUpdater *FastUpdaterCaller) SubmissionWindow(opts *bind.CallOpts) (uint8, error) { var out []interface{} err := _FastUpdater.contract.Call(opts, &out, "submissionWindow") if err != nil { - return *new(*big.Int), err + return *new(uint8), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) return out0, err @@ -841,15 +975,15 @@ func (_FastUpdater *FastUpdaterCaller) SubmissionWindow(opts *bind.CallOpts) (*b // SubmissionWindow is a free data retrieval call binding the contract method 0xe621dbc7. // -// Solidity: function submissionWindow() view returns(uint256) -func (_FastUpdater *FastUpdaterSession) SubmissionWindow() (*big.Int, error) { +// Solidity: function submissionWindow() view returns(uint8) +func (_FastUpdater *FastUpdaterSession) SubmissionWindow() (uint8, error) { return _FastUpdater.Contract.SubmissionWindow(&_FastUpdater.CallOpts) } // SubmissionWindow is a free data retrieval call binding the contract method 0xe621dbc7. // -// Solidity: function submissionWindow() view returns(uint256) -func (_FastUpdater *FastUpdaterCallerSession) SubmissionWindow() (*big.Int, error) { +// Solidity: function submissionWindow() view returns(uint8) +func (_FastUpdater *FastUpdaterCallerSession) SubmissionWindow() (uint8, error) { return _FastUpdater.Contract.SubmissionWindow(&_FastUpdater.CallOpts) } @@ -1146,24 +1280,24 @@ func (_FastUpdater *FastUpdaterTransactorSession) ResetFeeds(_indices []*big.Int return _FastUpdater.Contract.ResetFeeds(&_FastUpdater.TransactOpts, _indices) } -// SetSubmissionWindow is a paid mutator transaction binding the contract method 0x274965db. +// SetSubmissionWindow is a paid mutator transaction binding the contract method 0x0a166051. // -// Solidity: function setSubmissionWindow(uint256 _submissionWindow) returns() -func (_FastUpdater *FastUpdaterTransactor) SetSubmissionWindow(opts *bind.TransactOpts, _submissionWindow *big.Int) (*types.Transaction, error) { +// Solidity: function setSubmissionWindow(uint8 _submissionWindow) returns() +func (_FastUpdater *FastUpdaterTransactor) SetSubmissionWindow(opts *bind.TransactOpts, _submissionWindow uint8) (*types.Transaction, error) { return _FastUpdater.contract.Transact(opts, "setSubmissionWindow", _submissionWindow) } -// SetSubmissionWindow is a paid mutator transaction binding the contract method 0x274965db. +// SetSubmissionWindow is a paid mutator transaction binding the contract method 0x0a166051. // -// Solidity: function setSubmissionWindow(uint256 _submissionWindow) returns() -func (_FastUpdater *FastUpdaterSession) SetSubmissionWindow(_submissionWindow *big.Int) (*types.Transaction, error) { +// Solidity: function setSubmissionWindow(uint8 _submissionWindow) returns() +func (_FastUpdater *FastUpdaterSession) SetSubmissionWindow(_submissionWindow uint8) (*types.Transaction, error) { return _FastUpdater.Contract.SetSubmissionWindow(&_FastUpdater.TransactOpts, _submissionWindow) } -// SetSubmissionWindow is a paid mutator transaction binding the contract method 0x274965db. +// SetSubmissionWindow is a paid mutator transaction binding the contract method 0x0a166051. // -// Solidity: function setSubmissionWindow(uint256 _submissionWindow) returns() -func (_FastUpdater *FastUpdaterTransactorSession) SetSubmissionWindow(_submissionWindow *big.Int) (*types.Transaction, error) { +// Solidity: function setSubmissionWindow(uint8 _submissionWindow) returns() +func (_FastUpdater *FastUpdaterTransactorSession) SetSubmissionWindow(_submissionWindow uint8) (*types.Transaction, error) { return _FastUpdater.Contract.SetSubmissionWindow(&_FastUpdater.TransactOpts, _submissionWindow) } @@ -1753,38 +1887,47 @@ func (it *FastUpdaterFastUpdateFeedsSubmittedIterator) Close() error { // FastUpdaterFastUpdateFeedsSubmitted represents a FastUpdateFeedsSubmitted event raised by the FastUpdater contract. type FastUpdaterFastUpdateFeedsSubmitted struct { + VotingRoundId uint32 SigningPolicyAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterFastUpdateFeedsSubmitted is a free log retrieval operation binding the contract event 0x46726b7af6062bbfbcc71cdfd206e449f91eb91d8a78d596181219c8251d83ee. +// FilterFastUpdateFeedsSubmitted is a free log retrieval operation binding the contract event 0x63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d936. // -// Solidity: event FastUpdateFeedsSubmitted(address indexed signingPolicyAddress) -func (_FastUpdater *FastUpdaterFilterer) FilterFastUpdateFeedsSubmitted(opts *bind.FilterOpts, signingPolicyAddress []common.Address) (*FastUpdaterFastUpdateFeedsSubmittedIterator, error) { +// Solidity: event FastUpdateFeedsSubmitted(uint32 indexed votingRoundId, address indexed signingPolicyAddress) +func (_FastUpdater *FastUpdaterFilterer) FilterFastUpdateFeedsSubmitted(opts *bind.FilterOpts, votingRoundId []uint32, signingPolicyAddress []common.Address) (*FastUpdaterFastUpdateFeedsSubmittedIterator, error) { + var votingRoundIdRule []interface{} + for _, votingRoundIdItem := range votingRoundId { + votingRoundIdRule = append(votingRoundIdRule, votingRoundIdItem) + } var signingPolicyAddressRule []interface{} for _, signingPolicyAddressItem := range signingPolicyAddress { signingPolicyAddressRule = append(signingPolicyAddressRule, signingPolicyAddressItem) } - logs, sub, err := _FastUpdater.contract.FilterLogs(opts, "FastUpdateFeedsSubmitted", signingPolicyAddressRule) + logs, sub, err := _FastUpdater.contract.FilterLogs(opts, "FastUpdateFeedsSubmitted", votingRoundIdRule, signingPolicyAddressRule) if err != nil { return nil, err } return &FastUpdaterFastUpdateFeedsSubmittedIterator{contract: _FastUpdater.contract, event: "FastUpdateFeedsSubmitted", logs: logs, sub: sub}, nil } -// WatchFastUpdateFeedsSubmitted is a free log subscription operation binding the contract event 0x46726b7af6062bbfbcc71cdfd206e449f91eb91d8a78d596181219c8251d83ee. +// WatchFastUpdateFeedsSubmitted is a free log subscription operation binding the contract event 0x63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d936. // -// Solidity: event FastUpdateFeedsSubmitted(address indexed signingPolicyAddress) -func (_FastUpdater *FastUpdaterFilterer) WatchFastUpdateFeedsSubmitted(opts *bind.WatchOpts, sink chan<- *FastUpdaterFastUpdateFeedsSubmitted, signingPolicyAddress []common.Address) (event.Subscription, error) { +// Solidity: event FastUpdateFeedsSubmitted(uint32 indexed votingRoundId, address indexed signingPolicyAddress) +func (_FastUpdater *FastUpdaterFilterer) WatchFastUpdateFeedsSubmitted(opts *bind.WatchOpts, sink chan<- *FastUpdaterFastUpdateFeedsSubmitted, votingRoundId []uint32, signingPolicyAddress []common.Address) (event.Subscription, error) { + var votingRoundIdRule []interface{} + for _, votingRoundIdItem := range votingRoundId { + votingRoundIdRule = append(votingRoundIdRule, votingRoundIdItem) + } var signingPolicyAddressRule []interface{} for _, signingPolicyAddressItem := range signingPolicyAddress { signingPolicyAddressRule = append(signingPolicyAddressRule, signingPolicyAddressItem) } - logs, sub, err := _FastUpdater.contract.WatchLogs(opts, "FastUpdateFeedsSubmitted", signingPolicyAddressRule) + logs, sub, err := _FastUpdater.contract.WatchLogs(opts, "FastUpdateFeedsSubmitted", votingRoundIdRule, signingPolicyAddressRule) if err != nil { return nil, err } @@ -1816,9 +1959,9 @@ func (_FastUpdater *FastUpdaterFilterer) WatchFastUpdateFeedsSubmitted(opts *bin }), nil } -// ParseFastUpdateFeedsSubmitted is a log parse operation binding the contract event 0x46726b7af6062bbfbcc71cdfd206e449f91eb91d8a78d596181219c8251d83ee. +// ParseFastUpdateFeedsSubmitted is a log parse operation binding the contract event 0x63db91b14b3d088c677f046180aefcea7a236649704d90ce810cde455d38d936. // -// Solidity: event FastUpdateFeedsSubmitted(address indexed signingPolicyAddress) +// Solidity: event FastUpdateFeedsSubmitted(uint32 indexed votingRoundId, address indexed signingPolicyAddress) func (_FastUpdater *FastUpdaterFilterer) ParseFastUpdateFeedsSubmitted(log types.Log) (*FastUpdaterFastUpdateFeedsSubmitted, error) { event := new(FastUpdaterFastUpdateFeedsSubmitted) if err := _FastUpdater.contract.UnpackLog(event, "FastUpdateFeedsSubmitted", log); err != nil { diff --git a/go-client/contracts-interface/fast_updates_configuration/FastUpdatesConfiguration.go b/go-client/contracts-interface/fast_updates_configuration/FastUpdatesConfiguration.go index 9270869..ec62b2d 100644 --- a/go-client/contracts-interface/fast_updates_configuration/FastUpdatesConfiguration.go +++ b/go-client/contracts-interface/fast_updates_configuration/FastUpdatesConfiguration.go @@ -38,8 +38,8 @@ type IFastUpdatesConfigurationFeedConfiguration struct { // FastUpdatesConfigurationMetaData contains all meta data concerning the FastUpdatesConfiguration contract. var FastUpdatesConfigurationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FeedAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FeedRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FeedUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"name\":\"GovernanceCallTimelocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initialGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceInitialised\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"governanceSettings\",\"type\":\"address\"}],\"name\":\"GovernedProductionModeEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallExecuted\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"_feedConfigs\",\"type\":\"tuple[]\"}],\"name\":\"addFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"cancelGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"executeGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdater\",\"outputs\":[{\"internalType\":\"contractIIFastUpdater\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedConfigurations\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedConfigurationsBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"_feedIds\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_rewardBandValues\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_inflationShares\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getFeedId\",\"outputs\":[{\"internalType\":\"bytes21\",\"name\":\"_feedId\",\"type\":\"bytes21\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedIds\",\"outputs\":[{\"internalType\":\"bytes21[]\",\"name\":\"_feedIds\",\"type\":\"bytes21[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes21\",\"name\":\"_feedId\",\"type\":\"bytes21\"}],\"name\":\"getFeedIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumberOfFeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnusedIndices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceSettings\",\"outputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isExecutor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"productionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes21[]\",\"name\":\"_feedIds\",\"type\":\"bytes21[]\"}],\"name\":\"removeFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToProductionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"timelockedCalls\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_contractNameHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_contractAddresses\",\"type\":\"address[]\"}],\"name\":\"updateContractAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"_feedConfigs\",\"type\":\"tuple[]\"}],\"name\":\"updateFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b50604051620027f4380380620027f483398101604081905262000034916200020b565b80838362000043828262000079565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b505050506200025f565b600054600160a01b900460ff1615620000d95760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620001315760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000d0565b6001600160a01b0381166200017c5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000d0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200020857600080fd5b50565b6000806000606084860312156200022157600080fd5b83516200022e81620001f2565b60208501519093506200024181620001f2565b60408501519092506200025481620001f2565b809150509250925092565b612585806200026f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806374e6310e116100b8578063c906b1b41161007c578063c906b1b4146102da578063d29a4fa9146102e2578063debfda30146102f5578063e17f212e14610318578063ef88bf131461032c578063f5a983831461033f57600080fd5b806374e6310e146102545780639310283614610275578063a087d184146102a1578063a59b2c46146102b4578063b00c0b76146102c757600080fd5b806348a924821161010a57806348a92482146101c15780635267a15d146101d85780635aa6e675146102135780635ff270791461021b57806362354e031461022e57806367fc40291461024157600080fd5b80630a9cabe7146101475780630c518dce1461016d578063247c9cf71461018257806331038aad1461019757806331864f1f146101ac575b600080fd5b61015a610155366004611c81565b610347565b6040519081526020015b60405180910390f35b61017561039b565b6040516101649190611c9e565b610195610190366004611cec565b61045b565b005b61019f6107da565b6040516101649190611d61565b6101b4610868565b6040516101649190611dcf565b6101c96108c0565b60405161016493929190611e57565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719545b6040516001600160a01b039091168152602001610164565b6101fb610bcf565b610195610229366004611e9a565b610c6b565b6000546101fb906001600160a01b031681565b61019561024f366004611e9a565b610ef1565b610267610262366004611e9a565b610fd2565b604051610164929190611ec4565b610288610283366004611ee5565b611077565b6040516001600160581b03199091168152602001610164565b6101956102af366004611cec565b6110e3565b6101956102c2366004611efe565b6112db565b6101956102d5366004612055565b61155b565b60045461015a565b6003546101fb906001600160a01b031681565b61030861030336600461210e565b611636565b6040519015158152602001610164565b60005461030890600160a81b900460ff1681565b61019561033a36600461212b565b6116bf565b610195611825565b6001600160581b031981166000908152600560205260408120549081900361038a5760405162461bcd60e51b815260040161038190612164565b60405180910390fd5b80610394816121a7565b9392505050565b6004546060908067ffffffffffffffff8111156103ba576103ba611f61565b6040519080825280602002602001820160405280156103e3578160200160208202803683370190505b50915060005b818110156104565760048181548110610404576104046121be565b600091825260209091200154835160589190911b9084908390811061042b5761042b6121be565b6001600160581b0319909216602092830291909101909101528061044e816121d4565b9150506103e9565b505090565b600054600160b01b900460ff168061047d5750600054600160a81b900460ff16155b156107cb5761048a6118eb565b60008167ffffffffffffffff8111156104a5576104a5611f61565b6040519080825280602002602001820160405280156104ce578160200160208202803683370190505b50905060005b828110156107635760008484838181106104f0576104f06121be565b6105069260206060909202019081019150611c81565b90506001600160581b031981166105515760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b6044820152606401610381565b6001600160581b03198116600090815260056020526040902054156105ae5760405162461bcd60e51b81526020600482015260136024820152726665656420616c72656164792065786973747360681b6044820152606401610381565b6006546000901561061257600680546105c9906001906121ed565b815481106105d9576105d96121be565b9060005260206000200154905060068054806105f7576105f7612200565b60019003818190600052602060002001600090559055610624565b50600480546001810182556000919091525b80848481518110610637576106376121be565b602002602001018181525050858584818110610655576106556121be565b9050606002016004828154811061066e5761066e6121be565b9060005260206000200181816106849190612239565b5061069290508160016122c0565b6001600160581b031983166000818152600560205260409020919091557f3ca318c85958cdc1745f9edcd68164b4579efa8050b27b9d634f5e0427e7e33a8787868181106106e2576106e26121be565b90506060020160200160208101906106fa91906122d3565b88888781811061070c5761070c6121be565b905060600201604001602081019061072491906122f0565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a25050808061075b906121d4565b9150506104d4565b506003546040516363f921db60e01b81526001600160a01b03909116906363f921db90610794908490600401611dcf565b600060405180830381600087803b1580156107ae57600080fd5b505af11580156107c2573d6000803e3d6000fd5b50505050505050565b6107d6600036611925565b5050565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561085f5760008481526020908190206040805160608101825291850154605881901b6001600160581b0319168352600160a81b810463ffffffff1683850152600160c81b900462ffffff16908201528252600190920191016107fe565b50505050905090565b606060068054806020026020016040519081016040528092919081815260200182805480156108b657602002820191906000526020600020905b8154815260200190600101908083116108a2575b5050505050905090565b600454606090819081906108d581601561230d565b67ffffffffffffffff8111156108ed576108ed611f61565b6040519080825280601f01601f191660200182016040528015610917576020820181803683370190505b50935061092581600461230d565b67ffffffffffffffff81111561093d5761093d611f61565b6040519080825280601f01601f191660200182016040528015610967576020820181803683370190505b50925061097581600361230d565b67ffffffffffffffff81111561098d5761098d611f61565b6040519080825280601f01601f1916602001820160405280156109b7576020820181803683370190505b50915060005b81811015610bc8576000600482815481106109da576109da6121be565b60009182526020822001546004805460589290921b93509084908110610a0257610a026121be565b9060005260206000200160000160159054906101000a900463ffffffff1660e01b9050600060048481548110610a3a57610a3a6121be565b6000918252602082200154600160c81b900460e81b6001600160e81b03191691505b6015811015610acb57838160158110610a7757610a776121be565b1a60f81b8982610a8888601561230d565b610a9291906122c0565b81518110610aa257610aa26121be565b60200101906001600160f81b031916908160001a90535080610ac3816121d4565b915050610a5c565b5060005b6004811015610b3e57828160048110610aea57610aea6121be565b1a60f81b8882610afb88600461230d565b610b0591906122c0565b81518110610b1557610b156121be565b60200101906001600160f81b031916908160001a90535080610b36816121d4565b915050610acf565b5060005b6003811015610bb157818160038110610b5d57610b5d6121be565b1a60f81b8782610b6e88600361230d565b610b7891906122c0565b81518110610b8857610b886121be565b60200101906001600160f81b031916908160001a90535080610ba9816121d4565b915050610b42565b505050508080610bc0906121d4565b9150506109bd565b5050909192565b60008054600160a81b900460ff16610bf157506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c669190612324565b905090565b610c7433611636565b610cb05760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b6044820152606401610381565b6001600160e01b0319811660009081526002602052604081208054909103610d1a5760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610381565b8054421015610d6b5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610381565b6000816001018054610d7c90612341565b80601f0160208091040260200160405190810160405280929190818152602001828054610da890612341565b8015610df55780601f10610dca57610100808354040283529160200191610df5565b820191906000526020600020905b815481529060010190602001808311610dd857829003601f168201915b505050506001600160e01b0319851660009081526002602052604081208181559293509050610e276001830182611c15565b50506000805460ff60b01b1916600160b01b1781556040513090610e4c90849061237b565b6000604051808303816000865af19150503d8060008114610e89576040519150601f19603f3d011682016040523d82523d6000602084013e610e8e565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610eeb81611a71565b50505050565b610ef9611a8e565b6001600160e01b031981166000908152600260205260408120549003610f615760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610381565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590610fcd6001830182611c15565b505050565b60026020526000908152604090208054600182018054919291610ff490612341565b80601f016020809104026020016040519081016040528092919081815260200182805461102090612341565b801561106d5780601f106110425761010080835404028352916020019161106d565b820191906000526020600020905b81548152906001019060200180831161105057829003601f168201915b5050505050905082565b60045460009082106110bb5760405162461bcd60e51b815260206004820152600d60248201526c0d2dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610381565b600482815481106110ce576110ce6121be565b60009182526020909120015460581b92915050565b600054600160b01b900460ff16806111055750600054600160a81b900460ff16155b156107cb576111126118eb565b60005b81811015610fcd576000838383818110611131576111316121be565b6111479260206060909202019081019150611c81565b90506001600160581b031981166111925760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b6044820152606401610381565b6001600160581b03198116600090815260056020526040812054908190036111cc5760405162461bcd60e51b815260040161038190612164565b806111d6816121a7565b9150508484848181106111eb576111eb6121be565b90506060020160048281548110611204576112046121be565b90600052602060002001818161121a9190612239565b50506001600160581b031982167f317c7e03c79b6fcd22d6f17813b4e8e8a4a14104fdfb79431c6c73b550c7ca9d86868681811061125a5761125a6121be565b905060600201602001602081019061127291906122d3565b878787818110611284576112846121be565b905060600201604001602081019061129c91906122f0565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a2505080806112d3906121d4565b915050611115565b600054600160b01b900460ff16806112fd5750600054600160a81b900460ff16155b156107cb5761130a6118eb565b60008167ffffffffffffffff81111561132557611325611f61565b60405190808252806020026020018201604052801561134e578160200160208202803683370190505b50905060005b8281101561152a57600060056000868685818110611374576113746121be565b90506020020160208101906113899190611c81565b6affffffffffffffffffffff19166affffffffffffffffffffff19168152602001908152602001600020549050806000036113d65760405162461bcd60e51b815260040161038190612164565b806113e0816121a7565b915050808383815181106113f6576113f66121be565b6020908102919091010152600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600480548290811061144a5761144a6121be565b6000918252602082200180546001600160e01b0319169055600590868685818110611477576114776121be565b905060200201602081019061148c9190611c81565b6001600160581b031916815260208101919091526040016000908120558484838181106114bb576114bb6121be565b90506020020160208101906114d09190611c81565b6affffffffffffffffffffff19167fbb4bc8e9bdadd13a82544df890de25d2c6403cd23a7655410eb2ad4f542425ab8260405161150f91815260200190565b60405180910390a25080611522816121d4565b915050611354565b50600354604051630abfaf1760e41b81526001600160a01b039091169063abfaf17090610794908490600401611dcf565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146115d45760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610381565b61162c61160883836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611ae8565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6107d68282611bc3565b60008054600160a01b900460ff1680156116b95750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b99190612397565b92915050565b600054600160a01b900460ff16156117105760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610381565b6001600160a01b0382166117665760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610381565b6001600160a01b0381166117af5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610381565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61182d611a8e565b600054600160a81b900460ff16156118875760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610381565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff161561191b5733301461190c5761190c6123b9565b6000805460ff60b01b19169055565b611923611a8e565b565b61192d611a8e565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015611979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199d91906123cf565b905060006119ab82426122c0565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b03198616815260026020908152604090912083518155908301519091506001820190611a299082612436565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051611a6294939291906124f6565b60405180910390a15050505050565b3d604051818101604052816000823e8215611a8a578181f35b8181fd5b611a96610bcf565b6001600160a01b0316336001600160a01b0316146119235760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610381565b60008082604051602001611afc919061253c565b6040516020818303038152906040528051906020012090506000805b8651811015611b7457868181518110611b3357611b336121be565b60200260200101518303611b6257858181518110611b5357611b536121be565b60200260200101519150611b74565b80611b6c816121d4565b915050611b18565b506001600160a01b038116611bba5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610381565b95945050505050565b611bf182826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611ae8565b600380546001600160a01b0319166001600160a01b03929092169190911790555050565b508054611c2190612341565b6000825580601f10611c31575050565b601f016020900490600052602060002090810190611c4f9190611c52565b50565b5b80821115611c675760008155600101611c53565b5090565b6001600160581b031981168114611c4f57600080fd5b600060208284031215611c9357600080fd5b813561039481611c6b565b6020808252825182820181905260009190848201906040850190845b81811015611ce05783516001600160581b03191683529284019291840191600101611cba565b50909695505050505050565b60008060208385031215611cff57600080fd5b823567ffffffffffffffff80821115611d1757600080fd5b818501915085601f830112611d2b57600080fd5b813581811115611d3a57600080fd5b866020606083028501011115611d4f57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015611dc257815180516001600160581b03191685528681015163ffffffff168786015285015162ffffff168585015260609093019290850190600101611d7e565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ce057835183529284019291840191600101611deb565b60005b83811015611e22578181015183820152602001611e0a565b50506000910152565b60008151808452611e43816020860160208601611e07565b601f01601f19169290920160200192915050565b606081526000611e6a6060830186611e2b565b8281036020840152611e7c8186611e2b565b90508281036040840152611e908185611e2b565b9695505050505050565b600060208284031215611eac57600080fd5b81356001600160e01b03198116811461039457600080fd5b828152604060208201526000611edd6040830184611e2b565b949350505050565b600060208284031215611ef757600080fd5b5035919050565b60008060208385031215611f1157600080fd5b823567ffffffffffffffff80821115611f2957600080fd5b818501915085601f830112611f3d57600080fd5b813581811115611f4c57600080fd5b8660208260051b8501011115611d4f57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fa057611fa0611f61565b604052919050565b600067ffffffffffffffff821115611fc257611fc2611f61565b5060051b60200190565b6001600160a01b0381168114611c4f57600080fd5b600082601f830112611ff257600080fd5b8135602061200761200283611fa8565b611f77565b82815260059290921b8401810191818101908684111561202657600080fd5b8286015b8481101561204a57803561203d81611fcc565b835291830191830161202a565b509695505050505050565b6000806040838503121561206857600080fd5b823567ffffffffffffffff8082111561208057600080fd5b818501915085601f83011261209457600080fd5b813560206120a461200283611fa8565b82815260059290921b840181019181810190898411156120c357600080fd5b948201945b838610156120e1578535825294820194908201906120c8565b965050860135925050808211156120f757600080fd5b5061210485828601611fe1565b9150509250929050565b60006020828403121561212057600080fd5b813561039481611fcc565b6000806040838503121561213e57600080fd5b823561214981611fcc565b9150602083013561215981611fcc565b809150509250929050565b6020808252601390820152721999595908191bd95cc81b9bdd08195e1a5cdd606a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816121b6576121b6612191565b506000190190565b634e487b7160e01b600052603260045260246000fd5b6000600182016121e6576121e6612191565b5060010190565b818103818111156116b9576116b9612191565b634e487b7160e01b600052603160045260246000fd5b63ffffffff81168114611c4f57600080fd5b62ffffff81168114611c4f57600080fd5b813561224481611c6b565b81546001600160a81b0319811660589290921c9182178355602084013561226a81612216565b63ffffffff60a81b60a89190911b166001600160c81b03198216831781178455604085013561229881612228565b6001600160e01b0319929092169092179190911760c89190911b62ffffff60c81b1617905550565b808201808211156116b9576116b9612191565b6000602082840312156122e557600080fd5b813561039481612216565b60006020828403121561230257600080fd5b813561039481612228565b80820281158282048414176116b9576116b9612191565b60006020828403121561233657600080fd5b815161039481611fcc565b600181811c9082168061235557607f821691505b60208210810361237557634e487b7160e01b600052602260045260246000fd5b50919050565b6000825161238d818460208701611e07565b9190910192915050565b6000602082840312156123a957600080fd5b8151801515811461039457600080fd5b634e487b7160e01b600052600160045260246000fd5b6000602082840312156123e157600080fd5b5051919050565b601f821115610fcd57600081815260208120601f850160051c8101602086101561240f5750805b601f850160051c820191505b8181101561242e5782815560010161241b565b505050505050565b815167ffffffffffffffff81111561245057612450611f61565b6124648161245e8454612341565b846123e8565b602080601f83116001811461249957600084156124815750858301515b600019600386901b1c1916600185901b17855561242e565b600085815260208120601f198616915b828110156124c8578886015182559484019460019091019084016124a9565b50858210156124e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020815260006103946020830184611e2b56fea2646970667358221220b08b7ff7fb5a3d9e52089197b82b82f21e80c777cd96ba19a88731aecbdbe75f64736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FeedAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FeedRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"FeedUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"name\":\"GovernanceCallTimelocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initialGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceInitialised\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"governanceSettings\",\"type\":\"address\"}],\"name\":\"GovernedProductionModeEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallExecuted\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"_feedConfigs\",\"type\":\"tuple[]\"}],\"name\":\"addFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"cancelGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"executeGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdater\",\"outputs\":[{\"internalType\":\"contractIIFastUpdater\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedConfigurations\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getFeedId\",\"outputs\":[{\"internalType\":\"bytes21\",\"name\":\"_feedId\",\"type\":\"bytes21\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedIds\",\"outputs\":[{\"internalType\":\"bytes21[]\",\"name\":\"_feedIds\",\"type\":\"bytes21[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes21\",\"name\":\"_feedId\",\"type\":\"bytes21\"}],\"name\":\"getFeedIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumberOfFeeds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnusedIndices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceSettings\",\"outputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isExecutor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"productionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes21[]\",\"name\":\"_feedIds\",\"type\":\"bytes21[]\"}],\"name\":\"removeFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToProductionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"timelockedCalls\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_contractNameHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_contractAddresses\",\"type\":\"address[]\"}],\"name\":\"updateContractAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"_feedConfigs\",\"type\":\"tuple[]\"}],\"name\":\"updateFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620024693803806200246983398101604081905262000034916200020b565b80838362000043828262000079565b506200006f9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b505050506200025f565b600054600160a01b900460ff1615620000d95760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216620001315760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401620000d0565b6001600160a01b0381166200017c5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401620000d0565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6001600160a01b03811681146200020857600080fd5b50565b6000806000606084860312156200022157600080fd5b83516200022e81620001f2565b60208501519093506200024181620001f2565b60408501519092506200025481620001f2565b809150509250925092565b6121fa806200026f6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806374e6310e116100b8578063c906b1b41161007c578063c906b1b4146102b8578063d29a4fa9146102c0578063debfda30146102d3578063e17f212e146102f6578063ef88bf131461030a578063f5a983831461031d57600080fd5b806374e6310e146102325780639310283614610253578063a087d1841461027f578063a59b2c4614610292578063b00c0b76146102a557600080fd5b80635267a15d116100ff5780635267a15d146101b65780635aa6e675146101f15780635ff27079146101f957806362354e031461020c57806367fc40291461021f57600080fd5b80630a9cabe71461013c5780630c518dce14610162578063247c9cf71461017757806331038aad1461018c57806331864f1f146101a1575b600080fd5b61014f61014a366004611950565b610325565b6040519081526020015b60405180910390f35b61016a610379565b604051610159919061196d565b61018a6101853660046119bb565b610439565b005b6101946107b8565b6040516101599190611a30565b6101a9610846565b6040516101599190611a9e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719545b6040516001600160a01b039091168152602001610159565b6101d961089e565b61018a610207366004611ad6565b61093a565b6000546101d9906001600160a01b031681565b61018a61022d366004611ad6565b610bc0565b610245610240366004611ad6565b610ca1565b604051610159929190611b50565b610266610261366004611b71565b610d46565b6040516001600160581b03199091168152602001610159565b61018a61028d3660046119bb565b610db2565b61018a6102a0366004611b8a565b610faa565b61018a6102b3366004611ce1565b61122a565b60045461014f565b6003546101d9906001600160a01b031681565b6102e66102e1366004611d9a565b611305565b6040519015158152602001610159565b6000546102e690600160a81b900460ff1681565b61018a610318366004611db7565b61138e565b61018a6114f4565b6001600160581b03198116600090815260056020526040812054908190036103685760405162461bcd60e51b815260040161035f90611df0565b60405180910390fd5b8061037281611e33565b9392505050565b6004546060908067ffffffffffffffff81111561039857610398611bed565b6040519080825280602002602001820160405280156103c1578160200160208202803683370190505b50915060005b8181101561043457600481815481106103e2576103e2611e4a565b600091825260209091200154835160589190911b9084908390811061040957610409611e4a565b6001600160581b0319909216602092830291909101909101528061042c81611e60565b9150506103c7565b505090565b600054600160b01b900460ff168061045b5750600054600160a81b900460ff16155b156107a9576104686115ba565b60008167ffffffffffffffff81111561048357610483611bed565b6040519080825280602002602001820160405280156104ac578160200160208202803683370190505b50905060005b828110156107415760008484838181106104ce576104ce611e4a565b6104e49260206060909202019081019150611950565b90506001600160581b0319811661052f5760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b604482015260640161035f565b6001600160581b031981166000908152600560205260409020541561058c5760405162461bcd60e51b81526020600482015260136024820152726665656420616c72656164792065786973747360681b604482015260640161035f565b600654600090156105f057600680546105a790600190611e79565b815481106105b7576105b7611e4a565b9060005260206000200154905060068054806105d5576105d5611e8c565b60019003818190600052602060002001600090559055610602565b50600480546001810182556000919091525b8084848151811061061557610615611e4a565b60200260200101818152505085858481811061063357610633611e4a565b9050606002016004828154811061064c5761064c611e4a565b9060005260206000200181816106629190611ec5565b506106709050816001611f4c565b6001600160581b031983166000818152600560205260409020919091557f3ca318c85958cdc1745f9edcd68164b4579efa8050b27b9d634f5e0427e7e33a8787868181106106c0576106c0611e4a565b90506060020160200160208101906106d89190611f5f565b8888878181106106ea576106ea611e4a565b90506060020160400160208101906107029190611f7c565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a25050808061073990611e60565b9150506104b2565b506003546040516363f921db60e01b81526001600160a01b03909116906363f921db90610772908490600401611a9e565b600060405180830381600087803b15801561078c57600080fd5b505af11580156107a0573d6000803e3d6000fd5b50505050505050565b6107b46000366115f4565b5050565b60606004805480602002602001604051908101604052809291908181526020016000905b8282101561083d5760008481526020908190206040805160608101825291850154605881901b6001600160581b0319168352600160a81b810463ffffffff1683850152600160c81b900462ffffff16908201528252600190920191016107dc565b50505050905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561089457602002820191906000526020600020905b815481526020019060010190808311610880575b5050505050905090565b60008054600160a81b900460ff166108c057506001546001600160a01b031690565b60008054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109359190611f99565b905090565b61094333611305565b61097f5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015260640161035f565b6001600160e01b03198116600090815260026020526040812080549091036109e95760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015260640161035f565b8054421015610a3a5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015260640161035f565b6000816001018054610a4b90611fb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7790611fb6565b8015610ac45780601f10610a9957610100808354040283529160200191610ac4565b820191906000526020600020905b815481529060010190602001808311610aa757829003601f168201915b505050506001600160e01b0319851660009081526002602052604081208181559293509050610af660018301826118e4565b50506000805460ff60b01b1916600160b01b1781556040513090610b1b908490611ff0565b6000604051808303816000865af19150503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b50506000805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610bba81611740565b50505050565b610bc861175d565b6001600160e01b031981166000908152600260205260408120549003610c305760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015260640161035f565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260026020526040812081815590610c9c60018301826118e4565b505050565b60026020526000908152604090208054600182018054919291610cc390611fb6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cef90611fb6565b8015610d3c5780601f10610d1157610100808354040283529160200191610d3c565b820191906000526020600020905b815481529060010190602001808311610d1f57829003601f168201915b5050505050905082565b6004546000908210610d8a5760405162461bcd60e51b815260206004820152600d60248201526c0d2dcecc2d8d2c840d2dcc8caf609b1b604482015260640161035f565b60048281548110610d9d57610d9d611e4a565b60009182526020909120015460581b92915050565b600054600160b01b900460ff1680610dd45750600054600160a81b900460ff16155b156107a957610de16115ba565b60005b81811015610c9c576000838383818110610e0057610e00611e4a565b610e169260206060909202019081019150611950565b90506001600160581b03198116610e615760405162461bcd60e51b815260206004820152600f60248201526e1a5b9d985b1a590819995959081a59608a1b604482015260640161035f565b6001600160581b0319811660009081526005602052604081205490819003610e9b5760405162461bcd60e51b815260040161035f90611df0565b80610ea581611e33565b915050848484818110610eba57610eba611e4a565b90506060020160048281548110610ed357610ed3611e4a565b906000526020600020018181610ee99190611ec5565b50506001600160581b031982167f317c7e03c79b6fcd22d6f17813b4e8e8a4a14104fdfb79431c6c73b550c7ca9d868686818110610f2957610f29611e4a565b9050606002016020016020810190610f419190611f5f565b878787818110610f5357610f53611e4a565b9050606002016040016020810190610f6b9190611f7c565b6040805163ffffffff909316835262ffffff9091166020830152810184905260600160405180910390a250508080610fa290611e60565b915050610de4565b600054600160b01b900460ff1680610fcc5750600054600160a81b900460ff16155b156107a957610fd96115ba565b60008167ffffffffffffffff811115610ff457610ff4611bed565b60405190808252806020026020018201604052801561101d578160200160208202803683370190505b50905060005b828110156111f95760006005600086868581811061104357611043611e4a565b90506020020160208101906110589190611950565b6affffffffffffffffffffff19166affffffffffffffffffffff19168152602001908152602001600020549050806000036110a55760405162461bcd60e51b815260040161035f90611df0565b806110af81611e33565b915050808383815181106110c5576110c5611e4a565b6020908102919091010152600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01819055600480548290811061111957611119611e4a565b6000918252602082200180546001600160e01b031916905560059086868581811061114657611146611e4a565b905060200201602081019061115b9190611950565b6001600160581b0319168152602081019190915260400160009081205584848381811061118a5761118a611e4a565b905060200201602081019061119f9190611950565b6affffffffffffffffffffff19167fbb4bc8e9bdadd13a82544df890de25d2c6403cd23a7655410eb2ad4f542425ab826040516111de91815260200190565b60405180910390a250806111f181611e60565b915050611023565b50600354604051630abfaf1760e41b81526001600160a01b039091169063abfaf17090610772908490600401611a9e565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b0316146112a35760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015260640161035f565b6112fb6112d783836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b8152506117b7565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6107b48282611892565b60008054600160a01b900460ff1680156113885750600054604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611388919061200c565b92915050565b600054600160a01b900460ff16156113df5760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015260640161035f565b6001600160a01b0382166114355760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f0000000000000000604482015260640161035f565b6001600160a01b03811661147e5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015260640161035f565b600080546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600180549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b6114fc61175d565b600054600160a81b900460ff16156115565760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015260640161035f565b600180546001600160a01b031916905560008054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600054600160b01b900460ff16156115ea573330146115db576115db61202e565b6000805460ff60b01b19169055565b6115f261175d565b565b6115fc61175d565b6000805460408051636221a54b60e01b81529051853593926001600160a01b031691636221a54b9160048083019260209291908290030181865afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190612044565b9050600061167a8242611f4c565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600260209081526040909120835181559083015190915060018201906116f890826120ab565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b683828787604051611731949392919061216b565b60405180910390a15050505050565b3d604051818101604052816000823e8215611759578181f35b8181fd5b61176561089e565b6001600160a01b0316336001600160a01b0316146115f25760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015260640161035f565b600080826040516020016117cb91906121b1565b6040516020818303038152906040528051906020012090506000805b86518110156118435786818151811061180257611802611e4a565b602002602001015183036118315785818151811061182257611822611e4a565b60200260200101519150611843565b8061183b81611e60565b9150506117e7565b506001600160a01b0381166118895760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015260640161035f565b95945050505050565b6118c082826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b8152506117b7565b600380546001600160a01b0319166001600160a01b03929092169190911790555050565b5080546118f090611fb6565b6000825580601f10611900575050565b601f01602090049060005260206000209081019061191e9190611921565b50565b5b808211156119365760008155600101611922565b5090565b6001600160581b03198116811461191e57600080fd5b60006020828403121561196257600080fd5b81356103728161193a565b6020808252825182820181905260009190848201906040850190845b818110156119af5783516001600160581b03191683529284019291840191600101611989565b50909695505050505050565b600080602083850312156119ce57600080fd5b823567ffffffffffffffff808211156119e657600080fd5b818501915085601f8301126119fa57600080fd5b813581811115611a0957600080fd5b866020606083028501011115611a1e57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015611a9157815180516001600160581b03191685528681015163ffffffff168786015285015162ffffff168585015260609093019290850190600101611a4d565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156119af57835183529284019291840191600101611aba565b600060208284031215611ae857600080fd5b81356001600160e01b03198116811461037257600080fd5b60005b83811015611b1b578181015183820152602001611b03565b50506000910152565b60008151808452611b3c816020860160208601611b00565b601f01601f19169290920160200192915050565b828152604060208201526000611b696040830184611b24565b949350505050565b600060208284031215611b8357600080fd5b5035919050565b60008060208385031215611b9d57600080fd5b823567ffffffffffffffff80821115611bb557600080fd5b818501915085601f830112611bc957600080fd5b813581811115611bd857600080fd5b8660208260051b8501011115611a1e57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c2c57611c2c611bed565b604052919050565b600067ffffffffffffffff821115611c4e57611c4e611bed565b5060051b60200190565b6001600160a01b038116811461191e57600080fd5b600082601f830112611c7e57600080fd5b81356020611c93611c8e83611c34565b611c03565b82815260059290921b84018101918181019086841115611cb257600080fd5b8286015b84811015611cd6578035611cc981611c58565b8352918301918301611cb6565b509695505050505050565b60008060408385031215611cf457600080fd5b823567ffffffffffffffff80821115611d0c57600080fd5b818501915085601f830112611d2057600080fd5b81356020611d30611c8e83611c34565b82815260059290921b84018101918181019089841115611d4f57600080fd5b948201945b83861015611d6d57853582529482019490820190611d54565b96505086013592505080821115611d8357600080fd5b50611d9085828601611c6d565b9150509250929050565b600060208284031215611dac57600080fd5b813561037281611c58565b60008060408385031215611dca57600080fd5b8235611dd581611c58565b91506020830135611de581611c58565b809150509250929050565b6020808252601390820152721999595908191bd95cc81b9bdd08195e1a5cdd606a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081611e4257611e42611e1d565b506000190190565b634e487b7160e01b600052603260045260246000fd5b600060018201611e7257611e72611e1d565b5060010190565b8181038181111561138857611388611e1d565b634e487b7160e01b600052603160045260246000fd5b63ffffffff8116811461191e57600080fd5b62ffffff8116811461191e57600080fd5b8135611ed08161193a565b81546001600160a81b0319811660589290921c91821783556020840135611ef681611ea2565b63ffffffff60a81b60a89190911b166001600160c81b031982168317811784556040850135611f2481611eb4565b6001600160e01b0319929092169092179190911760c89190911b62ffffff60c81b1617905550565b8082018082111561138857611388611e1d565b600060208284031215611f7157600080fd5b813561037281611ea2565b600060208284031215611f8e57600080fd5b813561037281611eb4565b600060208284031215611fab57600080fd5b815161037281611c58565b600181811c90821680611fca57607f821691505b602082108103611fea57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251612002818460208701611b00565b9190910192915050565b60006020828403121561201e57600080fd5b8151801515811461037257600080fd5b634e487b7160e01b600052600160045260246000fd5b60006020828403121561205657600080fd5b5051919050565b601f821115610c9c57600081815260208120601f850160051c810160208610156120845750805b601f850160051c820191505b818110156120a357828155600101612090565b505050505050565b815167ffffffffffffffff8111156120c5576120c5611bed565b6120d9816120d38454611fb6565b8461205d565b602080601f83116001811461210e57600084156120f65750858301515b600019600386901b1c1916600185901b1785556120a3565b600085815260208120601f198616915b8281101561213d5788860151825594840194600190910190840161211e565b508582101561215b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020815260006103726020830184611b2456fea26469706673582212208468310239d6c546a062b47f99f13a3080ca01044492c03cf40d4e7c66fcb10364736f6c63430008140033", } // FastUpdatesConfigurationABI is the input ABI used to generate the binding from. @@ -302,56 +302,6 @@ func (_FastUpdatesConfiguration *FastUpdatesConfigurationCallerSession) GetFeedC return _FastUpdatesConfiguration.Contract.GetFeedConfigurations(&_FastUpdatesConfiguration.CallOpts) } -// GetFeedConfigurationsBytes is a free data retrieval call binding the contract method 0x48a92482. -// -// Solidity: function getFeedConfigurationsBytes() view returns(bytes _feedIds, bytes _rewardBandValues, bytes _inflationShares) -func (_FastUpdatesConfiguration *FastUpdatesConfigurationCaller) GetFeedConfigurationsBytes(opts *bind.CallOpts) (struct { - FeedIds []byte - RewardBandValues []byte - InflationShares []byte -}, error) { - var out []interface{} - err := _FastUpdatesConfiguration.contract.Call(opts, &out, "getFeedConfigurationsBytes") - - outstruct := new(struct { - FeedIds []byte - RewardBandValues []byte - InflationShares []byte - }) - if err != nil { - return *outstruct, err - } - - outstruct.FeedIds = *abi.ConvertType(out[0], new([]byte)).(*[]byte) - outstruct.RewardBandValues = *abi.ConvertType(out[1], new([]byte)).(*[]byte) - outstruct.InflationShares = *abi.ConvertType(out[2], new([]byte)).(*[]byte) - - return *outstruct, err - -} - -// GetFeedConfigurationsBytes is a free data retrieval call binding the contract method 0x48a92482. -// -// Solidity: function getFeedConfigurationsBytes() view returns(bytes _feedIds, bytes _rewardBandValues, bytes _inflationShares) -func (_FastUpdatesConfiguration *FastUpdatesConfigurationSession) GetFeedConfigurationsBytes() (struct { - FeedIds []byte - RewardBandValues []byte - InflationShares []byte -}, error) { - return _FastUpdatesConfiguration.Contract.GetFeedConfigurationsBytes(&_FastUpdatesConfiguration.CallOpts) -} - -// GetFeedConfigurationsBytes is a free data retrieval call binding the contract method 0x48a92482. -// -// Solidity: function getFeedConfigurationsBytes() view returns(bytes _feedIds, bytes _rewardBandValues, bytes _inflationShares) -func (_FastUpdatesConfiguration *FastUpdatesConfigurationCallerSession) GetFeedConfigurationsBytes() (struct { - FeedIds []byte - RewardBandValues []byte - InflationShares []byte -}, error) { - return _FastUpdatesConfiguration.Contract.GetFeedConfigurationsBytes(&_FastUpdatesConfiguration.CallOpts) -} - // GetFeedId is a free data retrieval call binding the contract method 0x93102836. // // Solidity: function getFeedId(uint256 _index) view returns(bytes21 _feedId) diff --git a/go-client/contracts-interface/incentive/FastUpdateIncentiveManager.go b/go-client/contracts-interface/incentive/FastUpdateIncentiveManager.go index a139b8b..35772a8 100644 --- a/go-client/contracts-interface/incentive/FastUpdateIncentiveManager.go +++ b/go-client/contracts-interface/incentive/FastUpdateIncentiveManager.go @@ -35,10 +35,17 @@ type IFastUpdateIncentiveManagerIncentiveOffer struct { RangeLimit *big.Int } +// IFastUpdatesConfigurationFeedConfiguration is an auto generated low-level Go binding around an user-defined struct. +type IFastUpdatesConfigurationFeedConfiguration struct { + FeedId [21]byte + RewardBandValue uint32 + InflationShare *big.Int +} + // IncentiveMetaData contains all meta data concerning the Incentive contract. var IncentiveMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"},{\"internalType\":\"SampleSize\",\"name\":\"_ss\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"_r\",\"type\":\"uint256\"},{\"internalType\":\"SampleSize\",\"name\":\"_sil\",\"type\":\"uint256\"},{\"internalType\":\"Fee\",\"name\":\"_rip\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_dur\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"authorizedAmountWei\",\"type\":\"uint256\"}],\"name\":\"DailyAuthorizedInflationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"name\":\"GovernanceCallTimelocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initialGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceInitialised\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"governanceSettings\",\"type\":\"address\"}],\"name\":\"GovernedProductionModeEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"Range\",\"name\":\"rangeIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"SampleSize\",\"name\":\"sampleSizeIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"Fee\",\"name\":\"offerAmount\",\"type\":\"uint256\"}],\"name\":\"IncentiveOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedWei\",\"type\":\"uint256\"}],\"name\":\"InflationReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"rewardEpochId\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"feedIds\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"rewardBandValues\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"inflationShares\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InflationRewardsOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"advance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"cancelGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"circularLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dailyAuthorizedInflation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"executeGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdatesConfiguration\",\"outputs\":[{\"internalType\":\"contractIFastUpdatesConfiguration\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flareSystemsManager\",\"outputs\":[{\"internalType\":\"contractIIFlareSystemsManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpectedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpectedSampleSize\",\"outputs\":[{\"internalType\":\"SampleSize\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentiveDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInflationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"Precision\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRange\",\"outputs\":[{\"internalType\":\"Range\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScale\",\"outputs\":[{\"internalType\":\"Scale\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenPoolSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lockedFundsWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalInflationAuthorizedWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalClaimedWei\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceSettings\",\"outputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isExecutor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastInflationAuthorizationReceivedTs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastInflationReceivedTs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Range\",\"name\":\"rangeIncrease\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"rangeLimit\",\"type\":\"uint256\"}],\"internalType\":\"structIFastUpdateIncentiveManager.IncentiveOffer\",\"name\":\"_offer\",\"type\":\"tuple\"}],\"name\":\"offerIncentive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"productionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rangeIncreasePrice\",\"outputs\":[{\"internalType\":\"Fee\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveInflation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardManager\",\"outputs\":[{\"internalType\":\"contractIIRewardManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sampleIncreaseLimit\",\"outputs\":[{\"internalType\":\"SampleSize\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_toAuthorizeWei\",\"type\":\"uint256\"}],\"name\":\"setDailyAuthorizedInflation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SampleSize\",\"name\":\"_ss\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"_r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_dur\",\"type\":\"uint256\"}],\"name\":\"setIncentiveParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Fee\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setRangeIncreasePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SampleSize\",\"name\":\"_lim\",\"type\":\"uint256\"}],\"name\":\"setSampleIncreaseLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToProductionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"timelockedCalls\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalInflationAuthorizedWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalInflationReceivedWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalInflationRewardsOfferedWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"_currentRewardEpochId\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"_currentRewardEpochExpectedEndTs\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_rewardEpochDurationSeconds\",\"type\":\"uint64\"}],\"name\":\"triggerRewardEpochSwitchover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_contractNameHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_contractAddresses\",\"type\":\"address[]\"}],\"name\":\"updateContractAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200344f3803806200344f8339810160408190526200003491620006c0565b878787808084848b8b60018a806200004c81620000cc565b506200005b848484846200014d565b50505050620000718282620001e560201b60201c565b506200009d9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5050505050620000b3836200035a60201b60201c565b620000be82620003b8565b50505050505050506200075a565b60008111620001485760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e2030000000000060648201526084015b60405180910390fd5b600055565b620001588462000416565b620001638362000474565b828411620001c05760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b60648201526084016200013f565b620001ca82600655565b620001d581620000cc565b620001df620004c4565b50505050565b600754600160a01b900460ff1615620002415760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064016200013f565b6001600160a01b038216620002995760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016200013f565b6001600160a01b038116620002e45760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016200013f565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b62000365816200060d565b620003b35760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c617267650060448201526064016200013f565b601555565b620003c3816200060d565b620004115760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c61726765000060448201526064016200013f565b601655565b62000421816200060d565b6200046f5760405162461bcd60e51b815260206004820152601560248201527f53616d706c652073697a6520746f6f206c61726765000000000000000000000060448201526064016200013f565b600455565b6200047f816200060d565b620004bf5760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b60448201526064016200013f565b600555565b620004d26001600062000623565b620004e06002600062000623565b620004ee6003600062000623565b6000546001600160401b038111156200050b576200050b62000744565b60405190808252806020026020018201604052801562000535578160200160208202803683370190505b5080516200054c9160019160209091019062000643565b506000546001600160401b038111156200056a576200056a62000744565b60405190808252806020026020018201604052801562000594578160200160208202803683370190505b508051620005ab9160029160209091019062000643565b506000546001600160401b03811115620005c957620005c962000744565b604051908082528060200260200182016040528015620005f3578160200160208202803683370190505b5080516200060a9160039160209091019062000643565b50565b60006200061d82600160801b1190565b92915050565b50805460008255906000526020600020908101906200060a919062000693565b82805482825590600052602060002090810192821562000681579160200282015b828111156200068157825182559160200191906001019062000664565b506200068f92915062000693565b5090565b5b808211156200068f576000815560010162000694565b6001600160a01b03811681146200060a57600080fd5b600080600080600080600080610100898b031215620006de57600080fd5b8851620006eb81620006aa565b60208a0151909850620006fe81620006aa565b60408a01519097506200071181620006aa565b60608a015160808b015160a08c015160c08d015160e0909d01519b9e9a9d50929b919a9099929850909650945092505050565b634e487b7160e01b600052604160045260246000fd5b612ce5806200076a6000396000f3fe6080604052600436106102465760003560e01c8063a5555aea11610139578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f81461064a578063ef88bf1314610668578063f5a9838314610688578063f5f5ba721461069d578063f7690bfe146106e9578063faae7fc91461070957600080fd5b8063dd8dca9f146105af578063debfda30146105c4578063e17f212e146105f4578063e273956314610615578063ea105ac71461063557600080fd5b8063bd76b69c116100fd578063bd76b69c1461052d578063c10f489a14610543578063d0c1c39314610563578063d29a4fa914610579578063d4ab8f941461059957600080fd5b8063a5555aea146104ad578063af04cd3b146104c3578063b00c0b76146104d8578063b5cddab8146104f8578063b97e1f5d1461050d57600080fd5b80635aa6e675116101c7578063708e34ce1161018b578063708e34ce1461041f57806374e6310e1461043557806391f25679146104635780639670c0bc146104835780639b85961f1461049857600080fd5b80635aa6e675146103955780635ff27079146103aa57806362354e03146103ca57806367fc4029146103ea5780636d62b4131461040a57600080fd5b8063362471801161020e578063362471801461030c578063473252c41461031f578063488f98061461033557806352545a7c1461034b5780635267a15d1461036157600080fd5b806306201f1d1461024b5780630d6e9537146102555780630f4ef8a61461027557806312afcf0b146102b25780632dafdbbf146102d6575b600080fd5b610253610729565b005b34801561026157600080fd5b506102536102703660046124a9565b61078b565b34801561028157600080fd5b50601254610295906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102be57600080fd5b506102c8600d5481565b6040519081526020016102a9565b3480156102e257600080fd5b506102f1600a54601454600092565b604080519384526020840192909252908201526060016102a9565b61025361031a3660046124c2565b6107d1565b34801561032b57600080fd5b506102c8600c5481565b34801561034157600080fd5b506102c860005481565b34801561035757600080fd5b506102c860165481565b34801561036d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771954610295565b3480156103a157600080fd5b50610295610955565b3480156103b657600080fd5b506102536103c53660046124da565b6109f5565b3480156103d657600080fd5b50600754610295906001600160a01b031681565b3480156103f657600080fd5b506102536104053660046124da565b610c83565b34801561041657600080fd5b506004546102c8565b34801561042b57600080fd5b506102c8600e5481565b34801561044157600080fd5b506104556104503660046124da565b610d64565b6040516102a9929190612554565b34801561046f57600080fd5b5061025361047e3660046125a2565b610e09565b34801561048f57600080fd5b506102c8610e6e565b3480156104a457600080fd5b506005546102c8565b3480156104b957600080fd5b506102c8600b5481565b3480156104cf57600080fd5b506102c8610e78565b3480156104e457600080fd5b506102536104f33660046126d9565b610e82565b34801561050457600080fd5b506102c8610f61565b34801561051957600080fd5b50610253610528366004612791565b610f77565b34801561053957600080fd5b506102c860145481565b34801561054f57600080fd5b50601354610295906001600160a01b031681565b34801561056f57600080fd5b506102c8600a5481565b34801561058557600080fd5b50601154610295906001600160a01b031681565b3480156105a557600080fd5b506102c860155481565b3480156105bb57600080fd5b506000546102c8565b3480156105d057600080fd5b506105e46105df3660046127bd565b610fbe565b60405190151581526020016102a9565b34801561060057600080fd5b506007546105e490600160a81b900460ff1681565b34801561062157600080fd5b506102536106303660046124a9565b611049565b34801561064157600080fd5b506102536110a1565b34801561065657600080fd5b50600f546001600160a01b0316610295565b34801561067457600080fd5b506102536106833660046127da565b6110f7565b34801561069457600080fd5b5061025361125d565b3480156106a957600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102a99190612813565b3480156106f557600080fd5b506102536107043660046124a9565b611323565b34801561071557600080fd5b50601054610295906001600160a01b031681565b61073161135b565b6107396113c3565b34600b54610747919061283c565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a161078961140e565b565b600754600160b01b900460ff16806107ad5750600754600160a81b900460ff16155b156107c6576107ba611455565b6107c38161148d565b50565b6107c36000366114e7565b6107d961135b565b6000806107e583611637565b9150915060006107f58383611774565b60125460408051637056269760e01b815290519293506001600160a01b039091169163a02e86e5918691849163705626979160048083019260209291908290030181865afa15801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f919061284f565b6040516001600160e01b031960e085901b16815262ffffff9091166004820152600060248201526044016000604051808303818588803b1580156108b257600080fd5b505af11580156108c6573d6000803e3d6000fd5b505060408051868152602081018690529081018790527fe2bf2dae8fb2fd1f86fd6d50871b97c48b27cd148bb07311c99b4b7b24453f5b9350606001915061090b9050565b60405180910390a1336108fc610921853461286c565b6040518115909202916000818181858888f19350505050158015610949573d6000803e3d6000fd5b505050506107c361140e565b600754600090600160a81b900460ff1661097957506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f0919061287f565b905090565b6109fe33610fbe565b610a3f5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064015b60405180910390fd5b6001600160e01b0319811660009081526009602052604081208054909103610aa95760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a36565b8054421015610afa5760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610a36565b6000816001018054610b0b9061289c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b379061289c565b8015610b845780601f10610b5957610100808354040283529160200191610b84565b820191906000526020600020905b815481529060010190602001808311610b6757829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610bb660018301826123f1565b50506007805460ff60b01b1916600160b01b1790556040516000903090610bde9084906128d0565b6000604051808303816000865af19150503d8060008114610c1b576040519150601f19603f3d011682016040523d82523d6000602084013e610c20565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610c7d81611834565b50505050565b610c8b611851565b6001600160e01b031981166000908152600960205260408120549003610cf35760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610a36565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610d5f60018301826123f1565b505050565b60096020526000908152604090208054600182018054919291610d869061289c565b80601f0160208091040260200160405190810160405280929190818152602001828054610db29061289c565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b5050505050905082565b6010546001600160a01b03163314610e635760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610a36565b610d5f8383836118ab565b60006109f0611a95565b60006109f0611aa5565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b031614610efb5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610a36565b610f53610f2f83836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611ab7565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610f5d8282611b94565b5050565b60006109f0610f6e611a95565b6001607f1b0190565b600754600160b01b900460ff1680610f995750600754600160a81b900460ff16155b15610fb357610fa6611455565b610d5f8383600184611cac565b610d5f6000366114e7565b600754600090600160a01b900460ff1680156110435750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa15801561101f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104391906128ec565b92915050565b6110516113c3565b600e819055600a5461106490829061283c565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146110ef5760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610a36565b610789611d33565b600754600160a01b900460ff16156111485760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610a36565b6001600160a01b03821661119e5760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610a36565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610a36565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b611265611851565b600754600160a81b900460ff16156112bf5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610a36565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff16806113455750600754600160a81b900460ff16155b156107c657611352611455565b6107c381611e0c565b600034611366611aa5565b611370919061283c565b905047818111156113b35761dead6108fc61138b848461286c565b6040518115909202916000818181858888f19350505050158015610d5f573d6000803e3d6000fd5b81811015610f5d57610f5d61290e565b600f546001600160a01b031633146107895760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610a36565b611416611aa5565b47146107895760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610a36565b600754600160b01b900460ff1615611485573330146114765761147661290e565b6007805460ff60b01b19169055565b610789611851565b61149681611e66565b6114e25760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610a36565b601655565b6114ef611851565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190612924565b90506000611571824261283c565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906115ef908261298b565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516116289493929190612a4a565b60405180910390a15050505050565b6000803460781c1561169c5760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610a36565b5050600554346001600160f01b031690823590810160208401358111156116fe578360200135905060006116d1826005541190565b6116df5760055482036116e2565b60005b90506116f96116f18285611e75565b850260801c90565b935091505b611709816004541190565b61176e5760405162461bcd60e51b815260206004820152603060248201527f4f6666657220776f756c64206d616b652074686520707265636973696f6e206760448201526f726561746572207468616e203130302560801b6064820152608401610a36565b50915091565b600080611785601654840260781c90565b9050838111156117f35760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610a36565b8084036117ff81611e98565b61181861180e82600654611e75565b6015540260801c90565b925061182383611ef6565b61182c84611f34565b505092915050565b3d604051818101604052816000823e821561184d578181f35b8181fd5b611859610955565b6001600160a01b0316336001600160a01b0316146107895760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610a36565b60006118b8826002612a90565b6118c29084612ab3565b6001600160401b0316905060006118fb62015180600d546118e3919061283c565b6118ed8587612ab3565b6001600160401b0316611f72565b9050600061192d6001600160401b038516611916858561286c565b601454600b54611926919061286c565b9190611f88565b9050600061193c876001612ada565b90506000806000601360009054906101000a90046001600160a01b03166001600160a01b03166348a924826040518163ffffffff1660e01b8152600401600060405180830381865afa158015611996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119be9190810190612b59565b9250925092508362ffffff167ffdd0b465b401aa1b01bf9945ca3b5ad04d97007d090db1f5b126a502e890d610848484896040516119ff9493929190612be0565b60405180910390a28460146000828254611a19919061283c565b909155505060125460405163a02e86e560e01b815262ffffff86166004820152600160248201526001600160a01b039091169063a02e86e59087906044016000604051808303818588803b158015611a7057600080fd5b505af1158015611a84573d6000803e3d6000fd5b505050505050505050505050505050565b60006109f06005546004546120ae565b6000601454600b546109f0919061286c565b60008082604051602001611acb9190612813565b6040516020818303038152906040528051906020012090506000805b8651811015611b4357868181518110611b0257611b02612c2b565b60200260200101518303611b3157858181518110611b2257611b22612c2b565b60200260200101519150611b43565b80611b3b81612c41565b915050611ae7565b506001600160a01b038116611b895760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610a36565b9150505b9392505050565b611b9e82826120c6565b611bcc82826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611ab7565b601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611c2282826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611ab7565b601260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611c8882826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611ab7565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b611cb58461212a565b611cbe8361217c565b828411611d195760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610a36565b611d2282600655565b611d2b816121c8565b610c7d612243565b611d636006546003611d43612371565b81548110611d5357611d53612c2b565b9060005260206000200154900390565b600655600554611d77906002611d43612371565b600555600454611d8b906001611d43612371565b60045560006001611d9a612371565b81548110611daa57611daa612c2b565b906000526020600020018190555060006002611dc4612371565b81548110611dd457611dd4612c2b565b906000526020600020018190555060006003611dee612371565b81548110611dfe57611dfe612c2b565b600091825260209091200155565b611e1581611e66565b611e615760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610a36565b601555565b600061104382600160801b1190565b6000608083901b8282818381611e8d57611e8d612c5a565b049695505050505050565b611ec56003611ea561237d565b81548110611eb557611eb5612c2b565b9060005260206000200154820190565b6003611ecf61237d565b81548110611edf57611edf612c2b565b600091825260209091200155600654810160065550565b611f036001611ea561237d565b6001611f0d61237d565b81548110611f1d57611f1d612c2b565b600091825260209091200155600454810160045550565b611f416002611ea561237d565b6002611f4b61237d565b81548110611f5b57611f5b612c2b565b600091825260209091200155600554810160055550565b6000818311611f815781611b8d565b5090919050565b6000808211611fcc5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610a36565b83600003611fdc57506000611b8d565b83830283858281611fef57611fef612c5a565b040361200d5782818161200457612004612c5a565b04915050611b8d565b50600061201a8386612c70565b905060006120288487612c84565b905060006120368587612c70565b905060006120448688612c84565b9050856120518285612c98565b61205b9190612c70565b6120658385612c98565b61206f8387612c98565b8861207a8689612c98565b6120849190612c98565b61208e919061283c565b612098919061283c565b6120a2919061283c565b98975050505050505050565b6000607f83901b8282818381611e8d57611e8d612c5a565b6120d08282612389565b612106828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611ab7565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b61213381611e66565b6121775760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610a36565b600455565b61218581611e66565b6121c35760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610a36565b600555565b6000811161223e5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610a36565b600055565b61224f6001600061242b565b61225b6002600061242b565b6122676003600061242b565b6000546001600160401b03811115612281576122816125e7565b6040519080825280602002602001820160405280156122aa578160200160208202803683370190505b5080516122bf91600191602090910190612449565b506000546001600160401b038111156122da576122da6125e7565b604051908082528060200260200182016040528015612303578160200160208202803683370190505b50805161231891600291602090910190612449565b506000546001600160401b03811115612333576123336125e7565b60405190808252806020026020018201604052801561235c578160200160208202803683370190505b5080516107c391600391602090910190612449565b60006109f060016123d9565b60006109f060006123d9565b6123b582826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611ab7565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546123e7438461283c565b6110439190612c84565b5080546123fd9061289c565b6000825580601f1061240d575050565b601f0160209004906000526020600020908101906107c39190612494565b50805460008255906000526020600020908101906107c39190612494565b828054828255906000526020600020908101928215612484579160200282015b82811115612484578251825591602001919060010190612469565b50612490929150612494565b5090565b5b808211156124905760008155600101612495565b6000602082840312156124bb57600080fd5b5035919050565b6000604082840312156124d457600080fd5b50919050565b6000602082840312156124ec57600080fd5b81356001600160e01b031981168114611b8d57600080fd5b60005b8381101561251f578181015183820152602001612507565b50506000910152565b60008151808452612540816020860160208601612504565b601f01601f19169290920160200192915050565b82815260406020820152600061256d6040830184612528565b949350505050565b62ffffff811681146107c357600080fd5b80356001600160401b038116811461259d57600080fd5b919050565b6000806000606084860312156125b757600080fd5b83356125c281612575565b92506125d060208501612586565b91506125de60408501612586565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612625576126256125e7565b604052919050565b60006001600160401b03821115612646576126466125e7565b5060051b60200190565b6001600160a01b03811681146107c357600080fd5b600082601f83011261267657600080fd5b8135602061268b6126868361262d565b6125fd565b82815260059290921b840181019181810190868411156126aa57600080fd5b8286015b848110156126ce5780356126c181612650565b83529183019183016126ae565b509695505050505050565b600080604083850312156126ec57600080fd5b82356001600160401b038082111561270357600080fd5b818501915085601f83011261271757600080fd5b813560206127276126868361262d565b82815260059290921b8401810191818101908984111561274657600080fd5b948201945b838610156127645785358252948201949082019061274b565b9650508601359250508082111561277a57600080fd5b5061278785828601612665565b9150509250929050565b6000806000606084860312156127a657600080fd5b505081359360208301359350604090920135919050565b6000602082840312156127cf57600080fd5b8135611b8d81612650565b600080604083850312156127ed57600080fd5b82356127f881612650565b9150602083013561280881612650565b809150509250929050565b602081526000611b8d6020830184612528565b634e487b7160e01b600052601160045260246000fd5b8082018082111561104357611043612826565b60006020828403121561286157600080fd5b8151611b8d81612575565b8181038181111561104357611043612826565b60006020828403121561289157600080fd5b8151611b8d81612650565b600181811c908216806128b057607f821691505b6020821081036124d457634e487b7160e01b600052602260045260246000fd5b600082516128e2818460208701612504565b9190910192915050565b6000602082840312156128fe57600080fd5b81518015158114611b8d57600080fd5b634e487b7160e01b600052600160045260246000fd5b60006020828403121561293657600080fd5b5051919050565b601f821115610d5f57600081815260208120601f850160051c810160208610156129645750805b601f850160051c820191505b8181101561298357828155600101612970565b505050505050565b81516001600160401b038111156129a4576129a46125e7565b6129b8816129b2845461289c565b8461293d565b602080601f8311600181146129ed57600084156129d55750858301515b600019600386901b1c1916600185901b178555612983565b600085815260208120601f198616915b82811015612a1c578886015182559484019460019091019084016129fd565b5085821015612a3a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b0381811683821602808216919082811461182c5761182c612826565b6001600160401b03828116828216039080821115612ad357612ad3612826565b5092915050565b62ffffff818116838216019080821115612ad357612ad3612826565b600082601f830112612b0757600080fd5b81516001600160401b03811115612b2057612b206125e7565b612b33601f8201601f19166020016125fd565b818152846020838601011115612b4857600080fd5b61256d826020830160208701612504565b600080600060608486031215612b6e57600080fd5b83516001600160401b0380821115612b8557600080fd5b612b9187838801612af6565b94506020860151915080821115612ba757600080fd5b612bb387838801612af6565b93506040860151915080821115612bc957600080fd5b50612bd686828701612af6565b9150509250925092565b608081526000612bf36080830187612528565b8281036020840152612c058187612528565b90508281036040840152612c198186612528565b91505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612c5357612c53612826565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612c7f57612c7f612c5a565b500490565b600082612c9357612c93612c5a565b500690565b80820281158282048414176110435761104361282656fea2646970667358221220eeeb751c26a44ed2689e0131369651666e567d74523f9596a27193311cd2057c64736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"},{\"internalType\":\"SampleSize\",\"name\":\"_ss\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"_r\",\"type\":\"uint256\"},{\"internalType\":\"SampleSize\",\"name\":\"_sil\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"_ril\",\"type\":\"uint256\"},{\"internalType\":\"Fee\",\"name\":\"_x\",\"type\":\"uint256\"},{\"internalType\":\"Fee\",\"name\":\"_rip\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_dur\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"authorizedAmountWei\",\"type\":\"uint256\"}],\"name\":\"DailyAuthorizedInflationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"name\":\"GovernanceCallTimelocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initialGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceInitialised\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"governanceSettings\",\"type\":\"address\"}],\"name\":\"GovernedProductionModeEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"rewardEpochId\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"Range\",\"name\":\"rangeIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"SampleSize\",\"name\":\"sampleSizeIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"Fee\",\"name\":\"offerAmount\",\"type\":\"uint256\"}],\"name\":\"IncentiveOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedWei\",\"type\":\"uint256\"}],\"name\":\"InflationReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint24\",\"name\":\"rewardEpochId\",\"type\":\"uint24\"},{\"components\":[{\"internalType\":\"bytes21\",\"name\":\"feedId\",\"type\":\"bytes21\"},{\"internalType\":\"uint32\",\"name\":\"rewardBandValue\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"inflationShare\",\"type\":\"uint24\"}],\"indexed\":false,\"internalType\":\"structIFastUpdatesConfiguration.FeedConfiguration[]\",\"name\":\"feedConfigurations\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InflationRewardsOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"TimelockedGovernanceCallExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"advance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"cancelGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dailyAuthorizedInflation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"executeGovernanceCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fastUpdatesConfiguration\",\"outputs\":[{\"internalType\":\"contractIFastUpdatesConfiguration\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"flareSystemsManager\",\"outputs\":[{\"internalType\":\"contractIIFlareSystemsManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_addressUpdater\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseScale\",\"outputs\":[{\"internalType\":\"Scale\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentSampleSizeIncreasePrice\",\"outputs\":[{\"internalType\":\"Fee\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpectedBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpectedSampleSize\",\"outputs\":[{\"internalType\":\"SampleSize\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentiveDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInflationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"Precision\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRange\",\"outputs\":[{\"internalType\":\"Range\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScale\",\"outputs\":[{\"internalType\":\"Scale\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenPoolSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lockedFundsWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalInflationAuthorizedWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalClaimedWei\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governanceSettings\",\"outputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGovernanceSettings\",\"name\":\"_governanceSettings\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialGovernance\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isExecutor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastInflationAuthorizationReceivedTs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastInflationReceivedTs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Range\",\"name\":\"rangeIncrease\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"rangeLimit\",\"type\":\"uint256\"}],\"internalType\":\"structIFastUpdateIncentiveManager.IncentiveOffer\",\"name\":\"_offer\",\"type\":\"tuple\"}],\"name\":\"offerIncentive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"productionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rangeIncreaseLimit\",\"outputs\":[{\"internalType\":\"Range\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rangeIncreasePrice\",\"outputs\":[{\"internalType\":\"Fee\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveInflation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardManager\",\"outputs\":[{\"internalType\":\"contractIIRewardManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sampleIncreaseLimit\",\"outputs\":[{\"internalType\":\"SampleSize\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_toAuthorizeWei\",\"type\":\"uint256\"}],\"name\":\"setDailyAuthorizedInflation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SampleSize\",\"name\":\"_ss\",\"type\":\"uint256\"},{\"internalType\":\"Range\",\"name\":\"_r\",\"type\":\"uint256\"},{\"internalType\":\"Fee\",\"name\":\"_x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_dur\",\"type\":\"uint256\"}],\"name\":\"setIncentiveParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Range\",\"name\":\"_lim\",\"type\":\"uint256\"}],\"name\":\"setRangeIncreaseLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Fee\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setRangeIncreasePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SampleSize\",\"name\":\"_lim\",\"type\":\"uint256\"}],\"name\":\"setSampleIncreaseLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"switchToProductionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"timelockedCalls\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"allowedAfterTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCall\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalInflationAuthorizedWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalInflationReceivedWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalInflationRewardsOfferedWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"_currentRewardEpochId\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"_currentRewardEpochExpectedEndTs\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_rewardEpochDurationSeconds\",\"type\":\"uint64\"}],\"name\":\"triggerRewardEpochSwitchover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_contractNameHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"_contractAddresses\",\"type\":\"address[]\"}],\"name\":\"updateContractAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162003e2938038062003e29833981016040819052620000349162000a54565b898989808084848d8d8b8a806200004b81620000fb565b506200005a848484846200017c565b505050506200007082826200029c60201b60201c565b506200009c9050817f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b5050505050620000b48685846200041160201b60201c565b620000c084886200054d565b620000cb85620005d3565b620000d68462000631565b620000e1826200068f565b620000eb620006ed565b5050505050505050505062000b3d565b60008111620001775760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e2030000000000060648201526084015b60405180910390fd5b600055565b620001878462000709565b620001928362000767565b828411620001ef5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b60648201526084016200016e565b60006066620001ff8587620007b7565b901c11620002765760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d32352900000000000000000060648201526084016200016e565b6200028182620007dd565b6200028c81620000fb565b620002966200083b565b50505050565b600754600160a01b900460ff1615620002f85760405162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c736500000000000000000000000060448201526064016200016e565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f000000000000000060448201526064016200016e565b6001600160a01b0381166200039b5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b60448201526064016200016e565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b81831115620004895760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e2074686560448201527f2072616e676520696e637265617365206c696d6974000000000000000000000060648201526084016200016e565b620004ae6000620004aa83620004a3620f42408862000b04565b0260781c90565b1190565b620005485760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a4016200016e565b505050565b818111620005cf5760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a4016200016e565b5050565b620005de8162000984565b6200062c5760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c617267650060448201526064016200016e565b601555565b6200063c8162000984565b6200068a5760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c61726765000060448201526064016200016e565b601655565b6200069a8162000984565b620006e85760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c61726765000060448201526064016200016e565b601755565b62000704620006fb6200099a565b6001607f1b0190565b601855565b620007148162000984565b620007625760405162461bcd60e51b815260206004820152601560248201527f53616d706c652073697a6520746f6f206c61726765000000000000000000000060448201526064016200016e565b600455565b620007728162000984565b620007b25760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b60448201526064016200016e565b600555565b6000607f83901b8282818381620007d257620007d262000aee565b049695505050505050565b620007e88162000984565b620008365760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c617267650000000060448201526064016200016e565b600655565b6200084960016000620009b7565b6200085760026000620009b7565b6200086560036000620009b7565b6000546001600160401b0381111562000882576200088262000b27565b604051908082528060200260200182016040528015620008ac578160200160208202803683370190505b508051620008c391600191602090910190620009d7565b506000546001600160401b03811115620008e157620008e162000b27565b6040519080825280602002602001820160405280156200090b578160200160208202803683370190505b5080516200092291600291602090910190620009d7565b506000546001600160401b0381111562000940576200094062000b27565b6040519080825280602002602001820160405280156200096a578160200160208202803683370190505b5080516200098191600391602090910190620009d7565b50565b60006200099482600160801b1190565b92915050565b6000620009b2600554600454620007b760201b60201c565b905090565b508054600082559060005260206000209081019062000981919062000a27565b82805482825590600052602060002090810192821562000a15579160200282015b8281111562000a15578251825591602001919060010190620009f8565b5062000a2392915062000a27565b5090565b5b8082111562000a23576000815560010162000a28565b6001600160a01b03811681146200098157600080fd5b6000806000806000806000806000806101408b8d03121562000a7557600080fd5b8a5162000a828162000a3e565b60208c0151909a5062000a958162000a3e565b60408c015190995062000aa88162000a3e565b8098505060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b634e487b7160e01b600052601260045260246000fd5b60008262000b2257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6132dc8062000b4d6000396000f3fe6080604052600436106102675760003560e01c80639670c0bc11610144578063dd8dca9f116100b6578063ed39d3f81161007a578063ed39d3f8146106b5578063ef88bf13146106d3578063f5a98383146106f3578063f5f5ba7214610708578063f7690bfe14610754578063faae7fc91461077457600080fd5b8063dd8dca9f1461061a578063debfda301461062f578063e17f212e1461065f578063e273956314610680578063ea105ac7146106a057600080fd5b8063b5cddab811610108578063b5cddab814610583578063bd76b69c14610598578063c10f489a146105ae578063d0c1c393146105ce578063d29a4fa9146105e4578063d4ab8f941461060457600080fd5b80639670c0bc1461050e5780639b85961f14610523578063a5555aea14610538578063af04cd3b1461054e578063b00c0b761461056357600080fd5b80635ff27079116101dd57806374e6310e116101a157806374e6310e1461045557806374f3eff91461048357806375d71307146104995780637a68533f146104b9578063864578e8146104ce57806391f25679146104ee57600080fd5b80635ff27079146103ca57806362354e03146103ea57806367fc40291461040a5780636d62b4131461042a578063708e34ce1461043f57600080fd5b80632de490c31161022f5780632de490c31461032d5780633624718014610342578063473252c41461035557806352545a7c1461036b5780635267a15d146103815780635aa6e675146103b557600080fd5b806306201f1d1461026c5780630d6e9537146102765780630f4ef8a61461029657806312afcf0b146102d35780632dafdbbf146102f7575b600080fd5b610274610794565b005b34801561028257600080fd5b50610274610291366004612a38565b6107f6565b3480156102a257600080fd5b506012546102b6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102df57600080fd5b506102e9600d5481565b6040519081526020016102ca565b34801561030357600080fd5b50610312600a54601454600092565b604080519384526020840192909252908201526060016102ca565b34801561033957600080fd5b506006546102e9565b610274610350366004612a51565b610866565b34801561036157600080fd5b506102e9600c5481565b34801561037757600080fd5b506102e960175481565b34801561038d57600080fd5b507f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546102b6565b3480156103c157600080fd5b506102b66109f3565b3480156103d657600080fd5b506102746103e5366004612a63565b610a93565b3480156103f657600080fd5b506007546102b6906001600160a01b031681565b34801561041657600080fd5b50610274610425366004612a63565b610d21565b34801561043657600080fd5b506004546102e9565b34801561044b57600080fd5b506102e9600e5481565b34801561046157600080fd5b50610475610470366004612a63565b610e02565b6040516102ca929190612add565b34801561048f57600080fd5b506102e960165481565b3480156104a557600080fd5b506102746104b4366004612afe565b610ea7565b3480156104c557600080fd5b506018546102e9565b3480156104da57600080fd5b506102746104e9366004612a38565b610f15565b3480156104fa57600080fd5b50610274610509366004612b5d565b610f8c565b34801561051a57600080fd5b506102e9610ff1565b34801561052f57600080fd5b506005546102e9565b34801561054457600080fd5b506102e9600b5481565b34801561055a57600080fd5b506102e9610ffb565b34801561056f57600080fd5b5061027461057e366004612cbc565b611005565b34801561058f57600080fd5b506102e96110e0565b3480156105a457600080fd5b506102e960145481565b3480156105ba57600080fd5b506013546102b6906001600160a01b031681565b3480156105da57600080fd5b506102e9600a5481565b3480156105f057600080fd5b506011546102b6906001600160a01b031681565b34801561061057600080fd5b506102e960155481565b34801561062657600080fd5b506000546102e9565b34801561063b57600080fd5b5061064f61064a366004612d74565b6110f6565b60405190151581526020016102ca565b34801561066b57600080fd5b5060075461064f90600160a81b900460ff1681565b34801561068c57600080fd5b5061027461069b366004612a38565b611181565b3480156106ac57600080fd5b506102746111d9565b3480156106c157600080fd5b50600f546001600160a01b03166102b6565b3480156106df57600080fd5b506102746106ee366004612d91565b61122f565b3480156106ff57600080fd5b50610274611395565b34801561071457600080fd5b50604080518082018252601a81527f46617374557064617465496e63656e746976654d616e61676572000000000000602082015290516102ca9190612dca565b34801561076057600080fd5b5061027461076f366004612a38565b61145b565b34801561078057600080fd5b506010546102b6906001600160a01b031681565b61079c611493565b6107a46114fb565b34600b546107b29190612df3565b600b5542600d556040513481527f95c4e29cc99bc027cfc3cd719d6fd973d5f0317061885fbb322b9b17d8d35d379060200160405180910390a16107f4611546565b565b600754600160b01b900460ff16806108185750600754600160a81b900460ff16155b156108585761082561158d565b600061083c60055461083760026115c5565b900390565b905061084b8160165484611607565b6108548261172e565b5050565b610863600036611788565b50565b61086e611493565b600080600061087c846118d8565b9250925092506000601260009054906101000a90046001600160a01b03166001600160a01b031663705626976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fb9190612e06565b60125460405163a02e86e560e01b815262ffffff83166004820152600060248201529192506001600160a01b03169063a02e86e59086906044016000604051808303818588803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050604080518781526020810187905290810188905262ffffff851693507f1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf826039250606001905060405180910390a2336108fc6109be8634612e23565b6040518115909202916000818181858888f193505050501580156109e6573d6000803e3d6000fd5b5050505050610863611546565b600754600090600160a81b900460ff16610a1757506008546001600160a01b031690565b600760009054906101000a90046001600160a01b03166001600160a01b031663732524946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612e36565b905090565b610a9c336110f6565b610add5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b60448201526064015b60405180910390fd5b6001600160e01b0319811660009081526009602052604081208054909103610b475760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b8054421015610b985760405162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f77656420796574000000000000006044820152606401610ad4565b6000816001018054610ba990612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590612e53565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b505050506001600160e01b0319851660009081526009602052604081208181559293509050610c546001830182612980565b50506007805460ff60b01b1916600160b01b1790556040516000903090610c7c908490612e87565b6000604051808303816000865af19150503d8060008114610cb9576040519150601f19603f3d011682016040523d82523d6000602084013e610cbe565b606091505b50506007805460ff60b01b19169055604080516001600160e01b0319871681524260208201529192507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438910160405180910390a1610d1b81611af6565b50505050565b610d29611b13565b6001600160e01b031981166000908152600960205260408120549003610d915760405162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f720000000000006044820152606401610ad4565b604080516001600160e01b0319831681524260208201527f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8910160405180910390a16001600160e01b03198116600090815260096020526040812081815590610dfd6001830182612980565b505050565b60096020526000908152604090208054600182018054919291610e2490612e53565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5090612e53565b8015610e9d5780601f10610e7257610100808354040283529160200191610e9d565b820191906000526020600020905b815481529060010190602001808311610e8057829003601f168201915b5050505050905082565b600754600160b01b900460ff1680610ec95750600754600160a81b900460ff16155b15610f0a57610ed661158d565b610ee583601654601754611607565b610ef160165485611b6d565b610efd84848484611bed565b610f05611cf7565b610d1b565b610d1b600036611788565b600754600160b01b900460ff1680610f375750600754600160a81b900460ff16155b1561085857610f4461158d565b6000610f5660055461083760026115c5565b9050610f658183601754611607565b6000610f776004546108376001611d07565b9050610f838382611b6d565b610dfd83611d34565b6010546001600160a01b03163314610fe65760405162461bcd60e51b815260206004820152601960248201527f6f6e6c7920666c6172652073797374656d206d616e61676572000000000000006044820152606401610ad4565b610dfd838383611d8e565b6000610a8e611f6b565b6000610a8e611f7b565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e7719546001600160a01b0316336001600160a01b03161461107e5760405162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b6044820152606401610ad4565b6110d66110b283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611f8d565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b610854828261206a565b6000610a8e6110ed611f6b565b6001607f1b0190565b600754600090600160a01b900460ff16801561117b5750600754604051630debfda360e41b81526001600160a01b0384811660048301529091169063debfda3090602401602060405180830381865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b9190612ea3565b92915050565b6111896114fb565b600e819055600a5461119c908290612df3565b600a5542600c556040518181527f187f32a0f765499f15b3bb52ed0aebf6015059f230f2ace7e701e60a476695959060200160405180910390a150565b6011546001600160a01b031633146112275760405162461bcd60e51b815260206004820152601160248201527037b7363c903330b9ba103ab83230ba32b960791b6044820152606401610ad4565b6107f4612182565b600754600160a01b900460ff16156112805760405162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b6044820152606401610ad4565b6001600160a01b0382166112d65760405162461bcd60e51b815260206004820152601860248201527f676f7665726e616e63652073657474696e6773207a65726f00000000000000006044820152606401610ad4565b6001600160a01b03811661131f5760405162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b6044820152606401610ad4565b600780546001600160a01b038481166001600160a81b031990921691909117600160a01b17909155600880549183166001600160a01b0319909216821790556040519081527f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db9060200160405180910390a15050565b61139d611b13565b600754600160a81b900460ff16156113f75760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f64650000000000006044820152606401610ad4565b600880546001600160a01b031916905560078054600160a81b60ff60a81b198216179091556040516001600160a01b0390911681527f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9060200160405180910390a1565b600754600160b01b900460ff168061147d5750600754600160a81b900460ff16155b156108585761148a61158d565b6108638161225b565b60003461149e611f7b565b6114a89190612df3565b905047818111156114eb5761dead6108fc6114c38484612e23565b6040518115909202916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b8181101561085457610854612ec5565b600f546001600160a01b031633146107f45760405162461bcd60e51b815260206004820152600e60248201526d696e666c6174696f6e206f6e6c7960901b6044820152606401610ad4565b61154e611f7b565b47146107f45760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610ad4565b600754600160b01b900460ff16156115bd573330146115ae576115ae612ec5565b6007805460ff60b01b19169055565b6107f4611b13565b6000805b8254811015611601576115f7828483815481106115e8576115e8612edb565b90600052602060002001540190565b91506001016115c9565b50919050565b818311156116755760405162461bcd60e51b815260206004820152603560248201527f52616e67652063616e6e6f742062652067726561746572207468616e20746865604482015274081c985b99d9481a5b98dc99585cd9481b1a5b5a5d605a1b6064820152608401610ad4565b61169660006116928361168b620f424088612f07565b0260781c90565b1190565b610dfd5760405162461bcd60e51b815260206004820152605d60248201527f52616e676520696e63726561736520707269636520746f6f206c6f772c20726160448201527f6e676520696e637265617365206f662031652d36206f6620626173652072616e60648201527f67652073686f756c6420636f7374206174206c65617374203120776569000000608482015260a401610ad4565b611737816122b5565b6117835760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e63726561736520707269636520746f6f206c6172676500006044820152606401610ad4565b601755565b611790611b13565b60075460408051636221a54b60e01b815290518435926000926001600160a01b0390911691636221a54b916004808201926020929091908290030181865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118049190612f1b565b905060006118128242612df3565b9050604051806040016040528082815260200186868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160e01b031986168152600960209081526040909120835181559083015190915060018201906118909082612f82565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b6838287876040516118c99493929190613041565b60405180910390a15050505050565b600080803460781c1561193e5760405162461bcd60e51b815260206004820152602860248201527f496e63656e74697665206f666665722076616c75652063617070656420617420604482015267313230206269747360c01b6064820152608401610ad4565b61194884356122b5565b6119945760405162461bcd60e51b815260206004820152601860248201527f52616e676520696e63726561736520746f6f206c6172676500000000000000006044820152606401610ad4565b60055434935084359250820160208501358111156119ed578460200135905060006119c0826005541190565b6119ce5760055482036119d1565b60005b90506119e86119e082866122c4565b860260801c90565b945092505b601654811115611a2e5760165490506000611a09826005541190565b611a17576005548203611a1a565b60005b9050611a296119e082866122c4565b945092505b6000611a3e601754850260781c90565b905084811115611aac5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420636f6e747269627574696f6e20746f2070617960448201527220666f722072616e676520696e63726561736560681b6064820152608401610ad4565b611ab5846122e7565b808503858214611aec57611ac88161238b565b611ae1611ad7826006546122c4565b6015540260801c90565b9350611aec8461241d565b5050509193909250565b3d604051818101604052816000823e8215611b0f578181f35b8181fd5b611b1b6109f3565b6001600160a01b0316336001600160a01b0316146107f45760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b6044820152606401610ad4565b8181116108545760405162461bcd60e51b815260206004820152604260248201527f506172616d65746572732073686f756c64206e6f7420616c6c6f77206d616b6960448201527f6e672074686520707265636973696f6e2067726561746572207468616e203130606482015261302560f01b608482015260a401610ad4565b611bf6846124a7565b611bff836124f9565b828411611c5a5760405162461bcd60e51b815260206004820152602360248201527f52616e6765206d757374206265206c657373207468616e2073616d706c652073604482015262697a6560e81b6064820152608401610ad4565b60006066611c688587612545565b901c11611cdd5760405162461bcd60e51b815260206004820152603760248201527f507265636973696f6e2076616c7565206f662075706461746573206e6565647360448201527f20746f206265206174206c6561737420325e282d3235290000000000000000006064820152608401610ad4565b611ce68261255d565b611cef816125b7565b610d1b612632565b611d026110ed611f6b565b601855565b6000805b825481101561160157611d2a828483815481106115e8576115e8612edb565b9150600101611d0b565b611d3d816122b5565b611d895760405162461bcd60e51b815260206004820152601e60248201527f52616e676520696e637265617365206c696d697420746f6f206c6172676500006044820152606401610ad4565b601655565b6000611d9b826002613087565b611da590846130b2565b6001600160401b031690506000611dde62015180600d54611dc69190612df3565b611dd085876130b2565b6001600160401b0316612760565b90506000611e106001600160401b038516611df98585612e23565b601454600b54611e099190612e23565b9190612776565b90506000611e1f8760016130d9565b90506000601360009054906101000a90046001600160a01b03166001600160a01b03166331038aad6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e9e91908101906130f5565b90508162ffffff167f58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da8285604051611ed79291906131e9565b60405180910390a28260146000828254611ef19190612df3565b909155505060125460405163a02e86e560e01b815262ffffff84166004820152600160248201526001600160a01b039091169063a02e86e59085906044016000604051808303818588803b158015611f4857600080fd5b505af1158015611f5c573d6000803e3d6000fd5b50505050505050505050505050565b6000610a8e600554600454612545565b6000601454600b54610a8e9190612e23565b60008082604051602001611fa19190612dca565b6040516020818303038152906040528051906020012090506000805b865181101561201957868181518110611fd857611fd8612edb565b6020026020010151830361200757858181518110611ff857611ff8612edb565b60200260200101519150612019565b8061201181613262565b915050611fbd565b506001600160a01b03811661205f5760405162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b6044820152606401610ad4565b9150505b9392505050565b612074828261289c565b6120a282826040518060400160405280600b81526020016a2330b9ba2ab83230ba32b960a91b815250611f8d565b601160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506120f882826040518060400160405280600d81526020016c2932bbb0b93226b0b730b3b2b960991b815250611f8d565b601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061215e82826040518060400160405280601881526020017f4661737455706461746573436f6e66696775726174696f6e0000000000000000815250611f8d565b601380546001600160a01b0319166001600160a01b03929092169190911790555050565b6121b26006546003612192612900565b815481106121a2576121a2612edb565b9060005260206000200154900390565b6006556005546121c6906002612192612900565b6005556004546121da906001612192612900565b600455600060016121e9612900565b815481106121f9576121f9612edb565b906000526020600020018190555060006002612213612900565b8154811061222357612223612edb565b90600052602060002001819055506000600361223d612900565b8154811061224d5761224d612edb565b600091825260209091200155565b612264816122b5565b6122b05760405162461bcd60e51b815260206004820152601f60248201527f53616d706c6520696e637265617365206c696d697420746f6f206c61726765006044820152606401610ad4565b601555565b600061117b82600160801b1190565b6000608083901b82828183816122dc576122dc612ef1565b049695505050505050565b61231460026122f461290c565b8154811061230457612304612edb565b9060005260206000200154820190565b600261231e61290c565b8154811061232e5761232e612edb565b6000918252602090912001556005548101600581905561234d906122b5565b6108635760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b61239860036122f461290c565b60036123a261290c565b815481106123b2576123b2612edb565b600091825260209091200155600654810160068190556123d1906122b5565b6108635760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b61242a60016122f461290c565b600161243461290c565b8154811061244457612444612edb565b60009182526020909120015560045481016004819055612463906122b5565b6108635760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b6124b0816122b5565b6124f45760405162461bcd60e51b815260206004820152601560248201527453616d706c652073697a6520746f6f206c6172676560581b6044820152606401610ad4565b600455565b612502816122b5565b6125405760405162461bcd60e51b815260206004820152600f60248201526e52616e676520746f6f206c6172676560881b6044820152606401610ad4565b600555565b6000607f83901b82828183816122dc576122dc612ef1565b612566816122b5565b6125b25760405162461bcd60e51b815260206004820152601c60248201527f457863657373206f666665722076616c756520746f6f206c61726765000000006044820152606401610ad4565b600655565b6000811161262d5760405162461bcd60e51b815260206004820152603b60248201527f43697263756c61724c6973744d616e616765723a2063697263756c6172206c6560448201527f6e677468206d7573742062652067726561746572207468616e203000000000006064820152608401610ad4565b600055565b61263e600160006129ba565b61264a600260006129ba565b612656600360006129ba565b6000546001600160401b0381111561267057612670612ba2565b604051908082528060200260200182016040528015612699578160200160208202803683370190505b5080516126ae916001916020909101906129d8565b506000546001600160401b038111156126c9576126c9612ba2565b6040519080825280602002602001820160405280156126f2578160200160208202803683370190505b508051612707916002916020909101906129d8565b506000546001600160401b0381111561272257612722612ba2565b60405190808252806020026020018201604052801561274b578160200160208202803683370190505b508051610863916003916020909101906129d8565b600081831161276f5781612063565b5090919050565b60008082116127ba5760405162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b6044820152606401610ad4565b836000036127ca57506000612063565b838302838582816127dd576127dd612ef1565b04036127fb578281816127f2576127f2612ef1565b04915050612063565b5060006128088386612f07565b90506000612816848761327b565b905060006128248587612f07565b90506000612832868861327b565b90508561283f828561328f565b6128499190612f07565b612853838561328f565b61285d838761328f565b88612868868961328f565b612872919061328f565b61287c9190612df3565b6128869190612df3565b6128909190612df3565b98975050505050505050565b6128a68282612918565b6128dc828260405180604001604052806013815260200172233630b932a9bcb9ba32b6b9a6b0b730b3b2b960691b815250611f8d565b601080546001600160a01b0319166001600160a01b03929092169190911790555050565b6000610a8e6001612968565b6000610a8e6000612968565b61294482826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250611f8d565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b600080546129764384612df3565b61117b919061327b565b50805461298c90612e53565b6000825580601f1061299c575050565b601f0160209004906000526020600020908101906108639190612a23565b50805460008255906000526020600020908101906108639190612a23565b828054828255906000526020600020908101928215612a13579160200282015b82811115612a135782518255916020019190600101906129f8565b50612a1f929150612a23565b5090565b5b80821115612a1f5760008155600101612a24565b600060208284031215612a4a57600080fd5b5035919050565b60006040828403121561160157600080fd5b600060208284031215612a7557600080fd5b81356001600160e01b03198116811461206357600080fd5b60005b83811015612aa8578181015183820152602001612a90565b50506000910152565b60008151808452612ac9816020860160208601612a8d565b601f01601f19169290920160200192915050565b828152604060208201526000612af66040830184612ab1565b949350505050565b60008060008060808587031215612b1457600080fd5b5050823594602084013594506040840135936060013592509050565b62ffffff8116811461086357600080fd5b80356001600160401b0381168114612b5857600080fd5b919050565b600080600060608486031215612b7257600080fd5b8335612b7d81612b30565b9250612b8b60208501612b41565b9150612b9960408501612b41565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612bda57612bda612ba2565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c0857612c08612ba2565b604052919050565b60006001600160401b03821115612c2957612c29612ba2565b5060051b60200190565b6001600160a01b038116811461086357600080fd5b600082601f830112612c5957600080fd5b81356020612c6e612c6983612c10565b612be0565b82815260059290921b84018101918181019086841115612c8d57600080fd5b8286015b84811015612cb1578035612ca481612c33565b8352918301918301612c91565b509695505050505050565b60008060408385031215612ccf57600080fd5b82356001600160401b0380821115612ce657600080fd5b818501915085601f830112612cfa57600080fd5b81356020612d0a612c6983612c10565b82815260059290921b84018101918181019089841115612d2957600080fd5b948201945b83861015612d4757853582529482019490820190612d2e565b96505086013592505080821115612d5d57600080fd5b50612d6a85828601612c48565b9150509250929050565b600060208284031215612d8657600080fd5b813561206381612c33565b60008060408385031215612da457600080fd5b8235612daf81612c33565b91506020830135612dbf81612c33565b809150509250929050565b6020815260006120636020830184612ab1565b634e487b7160e01b600052601160045260246000fd5b8082018082111561117b5761117b612ddd565b600060208284031215612e1857600080fd5b815161206381612b30565b8181038181111561117b5761117b612ddd565b600060208284031215612e4857600080fd5b815161206381612c33565b600181811c90821680612e6757607f821691505b60208210810361160157634e487b7160e01b600052602260045260246000fd5b60008251612e99818460208701612a8d565b9190910192915050565b600060208284031215612eb557600080fd5b8151801515811461206357600080fd5b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612f1657612f16612ef1565b500490565b600060208284031215612f2d57600080fd5b5051919050565b601f821115610dfd57600081815260208120601f850160051c81016020861015612f5b5750805b601f850160051c820191505b81811015612f7a57828155600101612f67565b505050505050565b81516001600160401b03811115612f9b57612f9b612ba2565b612faf81612fa98454612e53565b84612f34565b602080601f831160018114612fe45760008415612fcc5750858301515b600019600386901b1c1916600185901b178555612f7a565b600085815260208120601f198616915b8281101561301357888601518255948401946001909101908401612ff4565b50858210156130315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff60e01b8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6001600160401b038181168382160280821691908281146130aa576130aa612ddd565b505092915050565b6001600160401b038281168282160390808211156130d2576130d2612ddd565b5092915050565b62ffffff8181168382160190808211156130d2576130d2612ddd565b6000602080838503121561310857600080fd5b82516001600160401b0381111561311e57600080fd5b8301601f8101851361312f57600080fd5b805161313d612c6982612c10565b8181526060918202830184019184820191908884111561315c57600080fd5b938501935b838510156131dd5780858a0312156131795760008081fd5b613181612bb8565b85516affffffffffffffffffffff198116811461319e5760008081fd5b81528587015163ffffffff811681146131b75760008081fd5b818801526040868101516131ca81612b30565b9082015283529384019391850191613161565b50979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b8381101561324e57815180516affffffffffffffffffffff191686528381015163ffffffff168487015287015162ffffff16878601529385019390820190600101613208565b505095909501959095525092949350505050565b60006001820161327457613274612ddd565b5060010190565b60008261328a5761328a612ef1565b500690565b808202811582820484141761117b5761117b612ddd56fea26469706673582212205edfb76a35f36c646f4b3bb88dd1d73f109dcb953ca71c7ef6cef90bfb8f686064736f6c63430008140033", } // IncentiveABI is the input ABI used to generate the binding from. @@ -50,7 +57,7 @@ var IncentiveABI = IncentiveMetaData.ABI var IncentiveBin = IncentiveMetaData.Bin // DeployIncentive deploys a new Ethereum contract, binding an instance of Incentive to it. -func DeployIncentive(auth *bind.TransactOpts, backend bind.ContractBackend, _governanceSettings common.Address, _initialGovernance common.Address, _addressUpdater common.Address, _ss *big.Int, _r *big.Int, _sil *big.Int, _rip *big.Int, _dur *big.Int) (common.Address, *types.Transaction, *Incentive, error) { +func DeployIncentive(auth *bind.TransactOpts, backend bind.ContractBackend, _governanceSettings common.Address, _initialGovernance common.Address, _addressUpdater common.Address, _ss *big.Int, _r *big.Int, _sil *big.Int, _ril *big.Int, _x *big.Int, _rip *big.Int, _dur *big.Int) (common.Address, *types.Transaction, *Incentive, error) { parsed, err := IncentiveMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -59,7 +66,7 @@ func DeployIncentive(auth *bind.TransactOpts, backend bind.ContractBackend, _gov return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(IncentiveBin), backend, _governanceSettings, _initialGovernance, _addressUpdater, _ss, _r, _sil, _rip, _dur) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(IncentiveBin), backend, _governanceSettings, _initialGovernance, _addressUpdater, _ss, _r, _sil, _ril, _x, _rip, _dur) if err != nil { return common.Address{}, nil, nil, err } @@ -208,37 +215,6 @@ func (_Incentive *IncentiveTransactorRaw) Transact(opts *bind.TransactOpts, meth return _Incentive.Contract.contract.Transact(opts, method, params...) } -// CircularLength is a free data retrieval call binding the contract method 0x488f9806. -// -// Solidity: function circularLength() view returns(uint256) -func (_Incentive *IncentiveCaller) CircularLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Incentive.contract.Call(opts, &out, "circularLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// CircularLength is a free data retrieval call binding the contract method 0x488f9806. -// -// Solidity: function circularLength() view returns(uint256) -func (_Incentive *IncentiveSession) CircularLength() (*big.Int, error) { - return _Incentive.Contract.CircularLength(&_Incentive.CallOpts) -} - -// CircularLength is a free data retrieval call binding the contract method 0x488f9806. -// -// Solidity: function circularLength() view returns(uint256) -func (_Incentive *IncentiveCallerSession) CircularLength() (*big.Int, error) { - return _Incentive.Contract.CircularLength(&_Incentive.CallOpts) -} - // DailyAuthorizedInflation is a free data retrieval call binding the contract method 0x708e34ce. // // Solidity: function dailyAuthorizedInflation() view returns(uint256) @@ -394,6 +370,37 @@ func (_Incentive *IncentiveCallerSession) GetAddressUpdater() (common.Address, e return _Incentive.Contract.GetAddressUpdater(&_Incentive.CallOpts) } +// GetBaseScale is a free data retrieval call binding the contract method 0x7a68533f. +// +// Solidity: function getBaseScale() view returns(uint256) +func (_Incentive *IncentiveCaller) GetBaseScale(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Incentive.contract.Call(opts, &out, "getBaseScale") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetBaseScale is a free data retrieval call binding the contract method 0x7a68533f. +// +// Solidity: function getBaseScale() view returns(uint256) +func (_Incentive *IncentiveSession) GetBaseScale() (*big.Int, error) { + return _Incentive.Contract.GetBaseScale(&_Incentive.CallOpts) +} + +// GetBaseScale is a free data retrieval call binding the contract method 0x7a68533f. +// +// Solidity: function getBaseScale() view returns(uint256) +func (_Incentive *IncentiveCallerSession) GetBaseScale() (*big.Int, error) { + return _Incentive.Contract.GetBaseScale(&_Incentive.CallOpts) +} + // GetContractName is a free data retrieval call binding the contract method 0xf5f5ba72. // // Solidity: function getContractName() pure returns(string) @@ -425,6 +432,37 @@ func (_Incentive *IncentiveCallerSession) GetContractName() (string, error) { return _Incentive.Contract.GetContractName(&_Incentive.CallOpts) } +// GetCurrentSampleSizeIncreasePrice is a free data retrieval call binding the contract method 0x2de490c3. +// +// Solidity: function getCurrentSampleSizeIncreasePrice() view returns(uint256) +func (_Incentive *IncentiveCaller) GetCurrentSampleSizeIncreasePrice(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Incentive.contract.Call(opts, &out, "getCurrentSampleSizeIncreasePrice") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCurrentSampleSizeIncreasePrice is a free data retrieval call binding the contract method 0x2de490c3. +// +// Solidity: function getCurrentSampleSizeIncreasePrice() view returns(uint256) +func (_Incentive *IncentiveSession) GetCurrentSampleSizeIncreasePrice() (*big.Int, error) { + return _Incentive.Contract.GetCurrentSampleSizeIncreasePrice(&_Incentive.CallOpts) +} + +// GetCurrentSampleSizeIncreasePrice is a free data retrieval call binding the contract method 0x2de490c3. +// +// Solidity: function getCurrentSampleSizeIncreasePrice() view returns(uint256) +func (_Incentive *IncentiveCallerSession) GetCurrentSampleSizeIncreasePrice() (*big.Int, error) { + return _Incentive.Contract.GetCurrentSampleSizeIncreasePrice(&_Incentive.CallOpts) +} + // GetExpectedBalance is a free data retrieval call binding the contract method 0xaf04cd3b. // // Solidity: function getExpectedBalance() view returns(uint256) @@ -878,6 +916,37 @@ func (_Incentive *IncentiveCallerSession) ProductionMode() (bool, error) { return _Incentive.Contract.ProductionMode(&_Incentive.CallOpts) } +// RangeIncreaseLimit is a free data retrieval call binding the contract method 0x74f3eff9. +// +// Solidity: function rangeIncreaseLimit() view returns(uint256) +func (_Incentive *IncentiveCaller) RangeIncreaseLimit(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Incentive.contract.Call(opts, &out, "rangeIncreaseLimit") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// RangeIncreaseLimit is a free data retrieval call binding the contract method 0x74f3eff9. +// +// Solidity: function rangeIncreaseLimit() view returns(uint256) +func (_Incentive *IncentiveSession) RangeIncreaseLimit() (*big.Int, error) { + return _Incentive.Contract.RangeIncreaseLimit(&_Incentive.CallOpts) +} + +// RangeIncreaseLimit is a free data retrieval call binding the contract method 0x74f3eff9. +// +// Solidity: function rangeIncreaseLimit() view returns(uint256) +func (_Incentive *IncentiveCallerSession) RangeIncreaseLimit() (*big.Int, error) { + return _Incentive.Contract.RangeIncreaseLimit(&_Incentive.CallOpts) +} + // RangeIncreasePrice is a free data retrieval call binding the contract method 0x52545a7c. // // Solidity: function rangeIncreasePrice() view returns(uint256) @@ -1256,25 +1325,46 @@ func (_Incentive *IncentiveTransactorSession) SetDailyAuthorizedInflation(_toAut return _Incentive.Contract.SetDailyAuthorizedInflation(&_Incentive.TransactOpts, _toAuthorizeWei) } -// SetIncentiveParameters is a paid mutator transaction binding the contract method 0xb97e1f5d. +// SetIncentiveParameters is a paid mutator transaction binding the contract method 0x75d71307. +// +// Solidity: function setIncentiveParameters(uint256 _ss, uint256 _r, uint256 _x, uint256 _dur) returns() +func (_Incentive *IncentiveTransactor) SetIncentiveParameters(opts *bind.TransactOpts, _ss *big.Int, _r *big.Int, _x *big.Int, _dur *big.Int) (*types.Transaction, error) { + return _Incentive.contract.Transact(opts, "setIncentiveParameters", _ss, _r, _x, _dur) +} + +// SetIncentiveParameters is a paid mutator transaction binding the contract method 0x75d71307. +// +// Solidity: function setIncentiveParameters(uint256 _ss, uint256 _r, uint256 _x, uint256 _dur) returns() +func (_Incentive *IncentiveSession) SetIncentiveParameters(_ss *big.Int, _r *big.Int, _x *big.Int, _dur *big.Int) (*types.Transaction, error) { + return _Incentive.Contract.SetIncentiveParameters(&_Incentive.TransactOpts, _ss, _r, _x, _dur) +} + +// SetIncentiveParameters is a paid mutator transaction binding the contract method 0x75d71307. +// +// Solidity: function setIncentiveParameters(uint256 _ss, uint256 _r, uint256 _x, uint256 _dur) returns() +func (_Incentive *IncentiveTransactorSession) SetIncentiveParameters(_ss *big.Int, _r *big.Int, _x *big.Int, _dur *big.Int) (*types.Transaction, error) { + return _Incentive.Contract.SetIncentiveParameters(&_Incentive.TransactOpts, _ss, _r, _x, _dur) +} + +// SetRangeIncreaseLimit is a paid mutator transaction binding the contract method 0x864578e8. // -// Solidity: function setIncentiveParameters(uint256 _ss, uint256 _r, uint256 _dur) returns() -func (_Incentive *IncentiveTransactor) SetIncentiveParameters(opts *bind.TransactOpts, _ss *big.Int, _r *big.Int, _dur *big.Int) (*types.Transaction, error) { - return _Incentive.contract.Transact(opts, "setIncentiveParameters", _ss, _r, _dur) +// Solidity: function setRangeIncreaseLimit(uint256 _lim) returns() +func (_Incentive *IncentiveTransactor) SetRangeIncreaseLimit(opts *bind.TransactOpts, _lim *big.Int) (*types.Transaction, error) { + return _Incentive.contract.Transact(opts, "setRangeIncreaseLimit", _lim) } -// SetIncentiveParameters is a paid mutator transaction binding the contract method 0xb97e1f5d. +// SetRangeIncreaseLimit is a paid mutator transaction binding the contract method 0x864578e8. // -// Solidity: function setIncentiveParameters(uint256 _ss, uint256 _r, uint256 _dur) returns() -func (_Incentive *IncentiveSession) SetIncentiveParameters(_ss *big.Int, _r *big.Int, _dur *big.Int) (*types.Transaction, error) { - return _Incentive.Contract.SetIncentiveParameters(&_Incentive.TransactOpts, _ss, _r, _dur) +// Solidity: function setRangeIncreaseLimit(uint256 _lim) returns() +func (_Incentive *IncentiveSession) SetRangeIncreaseLimit(_lim *big.Int) (*types.Transaction, error) { + return _Incentive.Contract.SetRangeIncreaseLimit(&_Incentive.TransactOpts, _lim) } -// SetIncentiveParameters is a paid mutator transaction binding the contract method 0xb97e1f5d. +// SetRangeIncreaseLimit is a paid mutator transaction binding the contract method 0x864578e8. // -// Solidity: function setIncentiveParameters(uint256 _ss, uint256 _r, uint256 _dur) returns() -func (_Incentive *IncentiveTransactorSession) SetIncentiveParameters(_ss *big.Int, _r *big.Int, _dur *big.Int) (*types.Transaction, error) { - return _Incentive.Contract.SetIncentiveParameters(&_Incentive.TransactOpts, _ss, _r, _dur) +// Solidity: function setRangeIncreaseLimit(uint256 _lim) returns() +func (_Incentive *IncentiveTransactorSession) SetRangeIncreaseLimit(_lim *big.Int) (*types.Transaction, error) { + return _Incentive.Contract.SetRangeIncreaseLimit(&_Incentive.TransactOpts, _lim) } // SetRangeIncreasePrice is a paid mutator transaction binding the contract method 0x0d6e9537. @@ -1989,30 +2079,41 @@ func (it *IncentiveIncentiveOfferedIterator) Close() error { // IncentiveIncentiveOffered represents a IncentiveOffered event raised by the Incentive contract. type IncentiveIncentiveOffered struct { + RewardEpochId *big.Int RangeIncrease *big.Int SampleSizeIncrease *big.Int OfferAmount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterIncentiveOffered is a free log retrieval operation binding the contract event 0xe2bf2dae8fb2fd1f86fd6d50871b97c48b27cd148bb07311c99b4b7b24453f5b. +// FilterIncentiveOffered is a free log retrieval operation binding the contract event 0x1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf82603. // -// Solidity: event IncentiveOffered(uint256 rangeIncrease, uint256 sampleSizeIncrease, uint256 offerAmount) -func (_Incentive *IncentiveFilterer) FilterIncentiveOffered(opts *bind.FilterOpts) (*IncentiveIncentiveOfferedIterator, error) { +// Solidity: event IncentiveOffered(uint24 indexed rewardEpochId, uint256 rangeIncrease, uint256 sampleSizeIncrease, uint256 offerAmount) +func (_Incentive *IncentiveFilterer) FilterIncentiveOffered(opts *bind.FilterOpts, rewardEpochId []*big.Int) (*IncentiveIncentiveOfferedIterator, error) { + + var rewardEpochIdRule []interface{} + for _, rewardEpochIdItem := range rewardEpochId { + rewardEpochIdRule = append(rewardEpochIdRule, rewardEpochIdItem) + } - logs, sub, err := _Incentive.contract.FilterLogs(opts, "IncentiveOffered") + logs, sub, err := _Incentive.contract.FilterLogs(opts, "IncentiveOffered", rewardEpochIdRule) if err != nil { return nil, err } return &IncentiveIncentiveOfferedIterator{contract: _Incentive.contract, event: "IncentiveOffered", logs: logs, sub: sub}, nil } -// WatchIncentiveOffered is a free log subscription operation binding the contract event 0xe2bf2dae8fb2fd1f86fd6d50871b97c48b27cd148bb07311c99b4b7b24453f5b. +// WatchIncentiveOffered is a free log subscription operation binding the contract event 0x1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf82603. // -// Solidity: event IncentiveOffered(uint256 rangeIncrease, uint256 sampleSizeIncrease, uint256 offerAmount) -func (_Incentive *IncentiveFilterer) WatchIncentiveOffered(opts *bind.WatchOpts, sink chan<- *IncentiveIncentiveOffered) (event.Subscription, error) { +// Solidity: event IncentiveOffered(uint24 indexed rewardEpochId, uint256 rangeIncrease, uint256 sampleSizeIncrease, uint256 offerAmount) +func (_Incentive *IncentiveFilterer) WatchIncentiveOffered(opts *bind.WatchOpts, sink chan<- *IncentiveIncentiveOffered, rewardEpochId []*big.Int) (event.Subscription, error) { - logs, sub, err := _Incentive.contract.WatchLogs(opts, "IncentiveOffered") + var rewardEpochIdRule []interface{} + for _, rewardEpochIdItem := range rewardEpochId { + rewardEpochIdRule = append(rewardEpochIdRule, rewardEpochIdItem) + } + + logs, sub, err := _Incentive.contract.WatchLogs(opts, "IncentiveOffered", rewardEpochIdRule) if err != nil { return nil, err } @@ -2044,9 +2145,9 @@ func (_Incentive *IncentiveFilterer) WatchIncentiveOffered(opts *bind.WatchOpts, }), nil } -// ParseIncentiveOffered is a log parse operation binding the contract event 0xe2bf2dae8fb2fd1f86fd6d50871b97c48b27cd148bb07311c99b4b7b24453f5b. +// ParseIncentiveOffered is a log parse operation binding the contract event 0x1c5543607841f3a87aa841c3bfa973bf64f4d545b1d9c12af3cd5831ecf82603. // -// Solidity: event IncentiveOffered(uint256 rangeIncrease, uint256 sampleSizeIncrease, uint256 offerAmount) +// Solidity: event IncentiveOffered(uint24 indexed rewardEpochId, uint256 rangeIncrease, uint256 sampleSizeIncrease, uint256 offerAmount) func (_Incentive *IncentiveFilterer) ParseIncentiveOffered(log types.Log) (*IncentiveIncentiveOffered, error) { event := new(IncentiveIncentiveOffered) if err := _Incentive.contract.UnpackLog(event, "IncentiveOffered", log); err != nil { @@ -2259,17 +2360,15 @@ func (it *IncentiveInflationRewardsOfferedIterator) Close() error { // IncentiveInflationRewardsOffered represents a InflationRewardsOffered event raised by the Incentive contract. type IncentiveInflationRewardsOffered struct { - RewardEpochId *big.Int - FeedIds []byte - RewardBandValues []byte - InflationShares []byte - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos + RewardEpochId *big.Int + FeedConfigurations []IFastUpdatesConfigurationFeedConfiguration + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterInflationRewardsOffered is a free log retrieval operation binding the contract event 0xfdd0b465b401aa1b01bf9945ca3b5ad04d97007d090db1f5b126a502e890d610. +// FilterInflationRewardsOffered is a free log retrieval operation binding the contract event 0x58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da. // -// Solidity: event InflationRewardsOffered(uint24 indexed rewardEpochId, bytes feedIds, bytes rewardBandValues, bytes inflationShares, uint256 amount) +// Solidity: event InflationRewardsOffered(uint24 indexed rewardEpochId, (bytes21,uint32,uint24)[] feedConfigurations, uint256 amount) func (_Incentive *IncentiveFilterer) FilterInflationRewardsOffered(opts *bind.FilterOpts, rewardEpochId []*big.Int) (*IncentiveInflationRewardsOfferedIterator, error) { var rewardEpochIdRule []interface{} @@ -2284,9 +2383,9 @@ func (_Incentive *IncentiveFilterer) FilterInflationRewardsOffered(opts *bind.Fi return &IncentiveInflationRewardsOfferedIterator{contract: _Incentive.contract, event: "InflationRewardsOffered", logs: logs, sub: sub}, nil } -// WatchInflationRewardsOffered is a free log subscription operation binding the contract event 0xfdd0b465b401aa1b01bf9945ca3b5ad04d97007d090db1f5b126a502e890d610. +// WatchInflationRewardsOffered is a free log subscription operation binding the contract event 0x58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da. // -// Solidity: event InflationRewardsOffered(uint24 indexed rewardEpochId, bytes feedIds, bytes rewardBandValues, bytes inflationShares, uint256 amount) +// Solidity: event InflationRewardsOffered(uint24 indexed rewardEpochId, (bytes21,uint32,uint24)[] feedConfigurations, uint256 amount) func (_Incentive *IncentiveFilterer) WatchInflationRewardsOffered(opts *bind.WatchOpts, sink chan<- *IncentiveInflationRewardsOffered, rewardEpochId []*big.Int) (event.Subscription, error) { var rewardEpochIdRule []interface{} @@ -2326,9 +2425,9 @@ func (_Incentive *IncentiveFilterer) WatchInflationRewardsOffered(opts *bind.Wat }), nil } -// ParseInflationRewardsOffered is a log parse operation binding the contract event 0xfdd0b465b401aa1b01bf9945ca3b5ad04d97007d090db1f5b126a502e890d610. +// ParseInflationRewardsOffered is a log parse operation binding the contract event 0x58575ff9908663af0451165c3cefcb802da242d63261f6d9df3be0e05366e4da. // -// Solidity: event InflationRewardsOffered(uint24 indexed rewardEpochId, bytes feedIds, bytes rewardBandValues, bytes inflationShares, uint256 amount) +// Solidity: event InflationRewardsOffered(uint24 indexed rewardEpochId, (bytes21,uint32,uint24)[] feedConfigurations, uint256 amount) func (_Incentive *IncentiveFilterer) ParseInflationRewardsOffered(log types.Log) (*IncentiveInflationRewardsOffered, error) { event := new(IncentiveInflationRewardsOffered) if err := _Incentive.contract.UnpackLog(event, "InflationRewardsOffered", log); err != nil { diff --git a/go-client/provider/feed_provider.go b/go-client/provider/feed_provider.go index 704970f..04119b2 100644 --- a/go-client/provider/feed_provider.go +++ b/go-client/provider/feed_provider.go @@ -9,8 +9,9 @@ import ( ) type ValuesDecimals struct { - Feeds []*big.Int - Decimals []int8 + Feeds []*big.Int + Decimals []int8 + Timestamp uint64 } // Values provider is an interface needed to provide current off-chain values. @@ -21,12 +22,15 @@ type ValuesProvider interface { // GetDeltas calculates the deltas between the provider values and the chain values for each feed. // It returns the deltas as a byte slice, the deltas as a string, and any error that occurred. // rawChainValues and providerValues contain values for supported feeds. -func GetDeltas(chainValues []float64, providerValues []float64, valueIndexToFeedIndex []int, scale *big.Int) ([]byte, string, error) { +func GetDeltas(chainValues []float64, providerValues []float64, valueIndexToFeedIndex []int, scale, sampleSize *big.Int) ([]byte, string, error) { if len(chainValues) != len(providerValues) { return nil, "", errors.New("chain and provider values length mismatch") } + expectedSampleSize, _ := sampleSize.Float64() + expectedSampleSize /= math.Pow(2, 120) + // calculate the approx. expected change that all updates in one block do scaleDiff, _ := new(big.Int).Sub(scale, new(big.Int).Exp(big.NewInt(2), big.NewInt(127), nil)).Float64() - scaleDiff = scaleDiff / math.Pow(2, 127) + scaleDiff = (scaleDiff / math.Pow(2, 127)) * expectedSampleSize lastFeedIndex := valueIndexToFeedIndex[len(valueIndexToFeedIndex)-1] deltasList := make([]byte, lastFeedIndex+1) diff --git a/go-client/tests/configs/config1.toml b/go-client/tests/configs/config1.toml index 7cbc075..34c9b34 100644 --- a/go-client/tests/configs/config1.toml +++ b/go-client/tests/configs/config1.toml @@ -7,7 +7,6 @@ submission_address = "0x18b9306737eaf6E8FC8e737F488a1AE077b18053" flare_system_manager = "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF" incentive_manager_address = "0x78Aeff0658Fa67735fBF99Ce7CDB01Fe5D520259" submission_window = 8 -advance_blocks = 0 max_weight = 256 value_provider_base_url = "http://host.docker.internal:3101" diff --git a/go-client/tests/configs/config2.toml b/go-client/tests/configs/config2.toml index 23896ac..a98247d 100644 --- a/go-client/tests/configs/config2.toml +++ b/go-client/tests/configs/config2.toml @@ -7,7 +7,6 @@ submission_address = "0x18b9306737eaf6E8FC8e737F488a1AE077b18053" flare_system_manager = "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF" incentive_manager_address = "0x78Aeff0658Fa67735fBF99Ce7CDB01Fe5D520259" submission_window = 8 -advance_blocks = 0 max_weight = 256 value_provider_base_url = "http://host.docker.internal:3101" diff --git a/go-client/tests/configs/config3.toml b/go-client/tests/configs/config3.toml index 9b7863f..628c3a6 100644 --- a/go-client/tests/configs/config3.toml +++ b/go-client/tests/configs/config3.toml @@ -7,7 +7,6 @@ submission_address = "0x18b9306737eaf6E8FC8e737F488a1AE077b18053" flare_system_manager = "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF" incentive_manager_address = "0x78Aeff0658Fa67735fBF99Ce7CDB01Fe5D520259" submission_window = 8 -advance_blocks = 0 max_weight = 256 value_provider_base_url = "http://host.docker.internal:3101" diff --git a/go-client/tests/configs/config_coston2.toml b/go-client/tests/configs/config_coston2.toml index ec09416..09310f7 100644 --- a/go-client/tests/configs/config_coston2.toml +++ b/go-client/tests/configs/config_coston2.toml @@ -5,7 +5,6 @@ fast_updater_address = "0x740e30661aE6d8eF368088A34b3f4AD302F63841" mock_address = "0x3b9a1E27c317DdD9c256dD5a49f7f2C67E603c06" flare_system_manager = "0x3b9a1E27c317DdD9c256dD5a49f7f2C67E603c06" submission_window = 8 -advance_blocks = 0 max_weight = 512 value_provider_base_url = "http://host.docker.internal:3101" diff --git a/go-client/tests/configs/config_hardhat.toml b/go-client/tests/configs/config_hardhat.toml index 293e412..2cff01d 100644 --- a/go-client/tests/configs/config_hardhat.toml +++ b/go-client/tests/configs/config_hardhat.toml @@ -4,7 +4,6 @@ sortition_private_key = "0x28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdf fast_updater_address = "0x0C6c3C47A1f650809B0D1048FDf9603e09473D7E" flare_system_manager = "0xa4bcDF64Cdd5451b6ac3743B414124A6299B65FF" submission_window = 8 -advance_blocks = 0 max_weight = 256 value_provider_base_url = "http://host.docker.internal:3101" diff --git a/go-client/tests/docker-compose.yaml b/go-client/tests/docker-compose.yaml index 226cf25..bd2d2f2 100644 --- a/go-client/tests/docker-compose.yaml +++ b/go-client/tests/docker-compose.yaml @@ -3,7 +3,7 @@ version: '3.3' services: ganache: image: trufflesuite/ganache:latest - command: --chain.hardfork="london" --miner.blockTime=5 --wallet.accounts "0xc5e8f61d1ab959b397eecc0a37a6517b8e67a0e7cf1f4bce5591f3ed80199122, 10000000000000000000000" "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb, 10000000000000000000000" "0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569, 10000000000000000000000" "0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131, 10000000000000000000000" "0x87630b2d1de0fbd5044eb6891b3d9d98c34c8d310c852f98550ba774480e47cc, 10000000000000000000000" "0x275cc4a2bfd4f612625204a20a2280ab53a6da2d14860c47a9f5affe58ad86d4, 10000000000000000000000" "0x7f307c41137d1ed409f0a7b028f6c7596f12734b1d289b58099b99d60a96efff, 10000000000000000000000" "0x2a8aede924268f84156a00761de73998dac7bf703408754b776ff3f873bcec60, 10000000000000000000000" "0x8b24fd94f1ce869d81a34b95351e7f97b2cd88a891d5c00abc33d0ec9501902e, 10000000000000000000000" "0x28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29085, 10000000000000000000000" "0x28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29086, 10000000000000000000000" + command: --chain.hardfork="london" --gasLimit 100000000 --miner.blockTime=5 --wallet.accounts "0xc5e8f61d1ab959b397eecc0a37a6517b8e67a0e7cf1f4bce5591f3ed80199122, 10000000000000000000000" "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb, 10000000000000000000000" "0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569, 10000000000000000000000" "0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131, 10000000000000000000000" "0x87630b2d1de0fbd5044eb6891b3d9d98c34c8d310c852f98550ba774480e47cc, 10000000000000000000000" "0x275cc4a2bfd4f612625204a20a2280ab53a6da2d14860c47a9f5affe58ad86d4, 10000000000000000000000" "0x7f307c41137d1ed409f0a7b028f6c7596f12734b1d289b58099b99d60a96efff, 10000000000000000000000" "0x2a8aede924268f84156a00761de73998dac7bf703408754b776ff3f873bcec60, 10000000000000000000000" "0x8b24fd94f1ce869d81a34b95351e7f97b2cd88a891d5c00abc33d0ec9501902e, 10000000000000000000000" "0x28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29085, 10000000000000000000000" "0x28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29086, 10000000000000000000000" ports: - 8545:8545 diff --git a/go-client/tests/test.go b/go-client/tests/test.go index 9965aa7..2186f74 100644 --- a/go-client/tests/test.go +++ b/go-client/tests/test.go @@ -3,6 +3,7 @@ package main import ( "flag" "fmt" + "math/big" "os" "strconv" @@ -38,5 +39,27 @@ func main() { logger.Fatal("Registering error: %s", err) return } + } else if arg == "incentive" { + rangeIncreaseStr := os.Args[4] + rangeIncrease, err := strconv.ParseFloat(rangeIncreaseStr, 64) + if err != nil { + logger.Fatal("Incentive error: %s", err) + return + } + + sampleCostStr := os.Args[5] + var sampleCost *big.Int + var check bool + if sampleCostStr == "" { + sampleCost = big.NewInt(0) + } else { + sampleCost, check = new(big.Int).SetString(sampleCostStr, 10) + if !check { + logger.Fatal("Could not read sample cost") + return + } + } + + test_utils.Incentivize(cfg, rangeIncrease, sampleCost) } } diff --git a/go-client/tests/test_utils/test_utils.go b/go-client/tests/test_utils/test_utils.go index f2af0e1..b352816 100644 --- a/go-client/tests/test_utils/test_utils.go +++ b/go-client/tests/test_utils/test_utils.go @@ -4,6 +4,8 @@ import ( "context" "crypto/ecdsa" "encoding/hex" + "math" + "strconv" "fast-updates-client/client" "fast-updates-client/config" @@ -15,8 +17,10 @@ import ( "log" "math/big" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" ) @@ -25,12 +29,14 @@ var ( BASE_SAMPLE_SIZE, _ = new(big.Int).SetString("0x01000000000000000000000000000000", 0) BASE_RANGE, _ = new(big.Int).SetString("0x00000800000000000000000000000000", 0) SAMPLE_INCREASE_LIMIT, _ = new(big.Int).SetString("0x00100000000000000000000000000000", 0) - RANGE_INCREASE_PRICE = big.NewInt(1000000) + RANGE_INCREASE_LIMIT, _ = new(big.Int).SetString("0x00008000000000000000000000000000", 0) + SAMPLE_INCREASE_PRICE = big.NewInt(5) + RANGE_INCREASE_PRICE = new(big.Int).Exp(big.NewInt(10), big.NewInt(24), nil) DURATION = big.NewInt(8) EPOCH_LEN = big.NewInt(1000) // starting feeds hardcoded in mocked contract to be 100000 FEEDS_INDICES = []*big.Int{big.NewInt(0), big.NewInt(1), big.NewInt(2), big.NewInt(3), big.NewInt(4), big.NewInt(5), big.NewInt(6), big.NewInt(7), big.NewInt(8)} - SUBMISSION_WINDOW = big.NewInt(10) + SUBMISSION_WINDOW = uint8(5) BACKLOG_LEN = big.NewInt(20) ) @@ -102,11 +108,7 @@ func Deploy(cfg *config.Config) ContractAddresses { opts.GasLimit = uint64(cfg.Transactions.GasLimit) opts.GasPrice = gasPrice - mockAddress, tx1, _, err := mock.DeployMock(opts, client, big.NewInt(1), EPOCH_LEN) - if err != nil { - logger.Fatal("Error: %s", err) - } - _, err = bind.WaitMined(context.Background(), client, tx1) + mockAddress, _, _, err := mock.DeployMock(opts, client, big.NewInt(1), EPOCH_LEN) if err != nil { logger.Fatal("Error: %s", err) } @@ -115,7 +117,7 @@ func Deploy(cfg *config.Config) ContractAddresses { incentiveAddress, _, _, err := incentive.DeployIncentive( opts, client, fromAddress, fromAddress, fromAddress, BASE_SAMPLE_SIZE, BASE_RANGE, - SAMPLE_INCREASE_LIMIT, RANGE_INCREASE_PRICE, DURATION) + SAMPLE_INCREASE_LIMIT, RANGE_INCREASE_LIMIT, SAMPLE_INCREASE_PRICE, RANGE_INCREASE_PRICE, DURATION) if err != nil { logger.Fatal("Error: %s", err) } @@ -128,19 +130,41 @@ func Deploy(cfg *config.Config) ContractAddresses { logger.Fatal("Error: %s", err) } - fastUpdaterAddress, _, _, err := fast_updater.DeployFastUpdater(opts, client, fromAddress, fromAddress, + fastUpdaterAddress, tx, _, err := fast_updater.DeployFastUpdater(opts, client, fromAddress, fromAddress, fromAddress, fromAddress, uint32(block.Time()), 90, SUBMISSION_WINDOW) if err != nil { logger.Fatal("Error: %s", err) } + receipt, err := bind.WaitMined(context.Background(), client, tx) + if err != nil { + logger.Fatal("Error: %s", err) + } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } logger.Info("fastUpdater address %s", fastUpdaterAddress.Hex()) opts.Nonce.Add(opts.Nonce, big.NewInt(1)) - fastUpdatesConfigurationAddress, _, _, err := fast_updates_configuration.DeployFastUpdatesConfiguration(opts, client, fromAddress, fromAddress, fromAddress) + fastUpdatesConfigurationAddress, tx, _, err := fast_updates_configuration.DeployFastUpdatesConfiguration(opts, client, fromAddress, fromAddress, fromAddress) if err != nil { logger.Fatal("Error: %s", err) } logger.Info("fastUpdatesConfiguration address %s", fastUpdatesConfigurationAddress.Hex()) + receipt, err = bind.WaitMined(context.Background(), client, tx) + if err != nil { + logger.Fatal("Error: %s", err) + } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } opts.Nonce.Add(opts.Nonce, big.NewInt(1)) fastUpdaterContract, err := fast_updater.NewFastUpdater(fastUpdaterAddress, client) @@ -175,14 +199,21 @@ func Deploy(cfg *config.Config) ContractAddresses { fastUpdatesConfigurationAddress, mockAddress, } - tx, err := fastUpdaterContract.UpdateContractAddresses(opts, addressesBytes, addresses) + tx, err = fastUpdaterContract.UpdateContractAddresses(opts, addressesBytes, addresses) if err != nil { logger.Fatal("Error: %s", err) } - _, err = bind.WaitMined(context.Background(), client, tx) + receipt, err = bind.WaitMined(context.Background(), client, tx) if err != nil { logger.Fatal("Error: %s", err) } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } opts.Nonce.Add(opts.Nonce, big.NewInt(1)) fastUpdatesConfigurationContract, err := fast_updates_configuration.NewFastUpdatesConfiguration(fastUpdatesConfigurationAddress, client) @@ -214,27 +245,91 @@ func Deploy(cfg *config.Config) ContractAddresses { if err != nil { logger.Fatal("Error: %s", err) } - _, err = bind.WaitMined(context.Background(), client, tx) + receipt, err = bind.WaitMined(context.Background(), client, tx) + if err != nil { + logger.Fatal("Error: %s", err) + } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } + opts.Nonce.Add(opts.Nonce, big.NewInt(1)) + + incentiveContract, err := incentive.NewIncentive(incentiveAddress, client) + if err != nil { + logger.Fatal("Error: %s", err) + } + + addressesHash = []string{ + "0x12e7f85251b6a8cc2a2841f61f59a88110842aebcb7b0156dd0c10bd473fcb7a", + "0x2b5425460b937e96e509004540fff99ad6ec17948dba96effce0ba122b8bb899", + "0x3ea59489aed5d8b20b9ba382cadf6c13290f9ee8edecbebabb7712ee6ad2b232", + "0x23c7c13c4a1e2bdc03481c359a1b7a7bbd0b2f5bd53eab76cf21b9e145f735eb", + "0x0cf0bcabf35e9f54dc06269101d6c97535ba08da6ca99a9c5df65a4dd717919c", + "0x6be6257da65c607a560a35b4efea3c17b461c71f51e72de30b7c1e124e6b8153", + } + addressesBytes = make([][32]byte, len(addressesHash)) + for i := 0; i < len(addressesHash); i++ { + var buf [32]byte + b, err := hex.DecodeString(addressesHash[i][2:]) + if err != nil { + log.Fatal(err) + } + copy(buf[:], b) + addressesBytes[i] = buf + } + + addresses = []common.Address{ + fromAddress, + fromAddress, + fromAddress, + fromAddress, + fastUpdaterAddress, + fromAddress, + } + + tx, err = incentiveContract.UpdateContractAddresses(opts, addressesBytes, addresses) + if err != nil { + logger.Fatal("Error: %s", err) + } + receipt, err = bind.WaitMined(context.Background(), client, tx) if err != nil { logger.Fatal("Error: %s", err) } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } opts.Nonce.Add(opts.Nonce, big.NewInt(1)) feedsConfigurations := make([]fast_updates_configuration.IFastUpdatesConfigurationFeedConfiguration, len(FEEDS_INDICES)) for i := 0; i < len(FEEDS_INDICES); i++ { feedId := [21]byte{} feedId[20] = byte(i + 1) - feedsConfigurations[i] = fast_updates_configuration.IFastUpdatesConfigurationFeedConfiguration{FeedId: feedId, RewardBandValue: 200, InflationShare: big.NewInt(200)} + feedsConfigurations[i] = fast_updates_configuration.IFastUpdatesConfigurationFeedConfiguration{FeedId: feedId, RewardBandValue: 2000, InflationShare: big.NewInt(200)} } tx, err = fastUpdatesConfigurationContract.AddFeeds(opts, feedsConfigurations) if err != nil { logger.Fatal("Error: %s", err) } - _, err = bind.WaitMined(context.Background(), client, tx) + receipt, err = bind.WaitMined(context.Background(), client, tx) if err != nil { logger.Fatal("Error: %s", err) } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } opts.Nonce.Add(opts.Nonce, big.NewInt(1)) @@ -244,19 +339,24 @@ func Deploy(cfg *config.Config) ContractAddresses { } if int(numFeedsCheck.Int64()) != len(FEEDS_INDICES) { - logger.Fatal("Error: Feeds wrong number") + logger.Fatal("Error: Wrong number of feeds: %d != %d", numFeedsCheck.Int64(), len(FEEDS_INDICES)) } - // tx, err = fastUpdaterContract.ResetFeeds(opts, FEEDS_INDICES) - // if err != nil { - // logger.Fatal("Error: %s", err) - // } - // _, err = bind.WaitMined(context.Background(), client, tx) - // if err != nil { - // logger.Fatal("Error: %s", err) - // } + logger.Info("Contracts deployed, wait " + strconv.Itoa(int(SUBMISSION_WINDOW)) + " blocks for the daemon to set thresholds") + for i := 0; i < int(SUBMISSION_WINDOW+1); i++ { + tx, err = fastUpdaterContract.Daemonize(opts) + if err != nil { + logger.Fatal("Error: %s", err) + } + rec, err := bind.WaitMined(context.Background(), client, tx) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Info("block mined %s", rec.BlockNumber.String()) + // reason, err := GetFailingMessage(*client, tx.Hash()) - // fmt.Println(fastUpdaterContract.CurrentScoreCutoff(nil)) + opts.Nonce.Add(opts.Nonce, big.NewInt(1)) + } contracts := ContractAddresses{ FastUpdater: fastUpdaterAddress, @@ -267,3 +367,143 @@ func Deploy(cfg *config.Config) ContractAddresses { return contracts } + +func GetFailingMessage(client ethclient.Client, hash common.Hash) (string, error) { + tx, _, err := client.TransactionByHash(context.Background(), hash) + if err != nil { + return "", err + } + + from, err := types.Sender(types.NewEIP155Signer(tx.ChainId()), tx) + if err != nil { + return "", err + } + + msg := ethereum.CallMsg{ + From: from, + To: tx.To(), + Gas: tx.Gas(), + GasPrice: tx.GasPrice(), + Value: tx.Value(), + Data: tx.Data(), + } + + res, err := client.CallContract(context.Background(), msg, nil) + if err != nil { + return "", err + } + + return string(res), nil +} + +func Incentivize(cfg *config.Config, rangeIncrease float64, sampleCost *big.Int) { + client, err := ethclient.Dial(cfg.Chain.NodeURL) + if err != nil { + logger.Fatal("Error: %s", err) + } + privateKey := cfg.Transactions.Accounts[0] + if privateKey[:2] == "0x" { + privateKey = privateKey[2:] + } + privateKeyECDSA, err := crypto.HexToECDSA(privateKey) + if err != nil { + logger.Fatal("Error: %s", err) + } + + publicKey := privateKeyECDSA.Public() + publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey) + if !ok { + logger.Fatal("error casting public key to ECDSA") + } + + fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA) + nonce, err := client.PendingNonceAt(context.Background(), fromAddress) + if err != nil { + logger.Fatal("Error: %s", err) + } + + gasPrice, err := client.SuggestGasPrice(context.Background()) + if err != nil { + logger.Fatal("Error: %s", err) + } + + opts, err := bind.NewKeyedTransactorWithChainID(privateKeyECDSA, big.NewInt(int64(cfg.Chain.ChainId))) + if err != nil { + logger.Fatal("Error: %s", err) + } + opts.Nonce = big.NewInt(int64(nonce)) + opts.Value = big.NewInt(int64(cfg.Transactions.Value)) + opts.GasLimit = uint64(cfg.Transactions.GasLimit) + opts.GasPrice = gasPrice + + incentiveInterface, err := incentive.NewIncentive(common.HexToAddress(cfg.Client.IncentiveManagerAddress), client) + if err != nil { + logger.Fatal("Error: %s", err) + } + + rangeInt, err := incentiveInterface.GetRange(nil) + if err != nil { + logger.Fatal("Error: %s", err) + } + rangeFloat, _ := rangeInt.Float64() + rangeFloat = rangeFloat / math.Pow(2, 120) + increase := rangeFloat * rangeIncrease + increaseBigFloat := new(big.Float).SetFloat64(increase) + logger.Info("current range %f, increasing for %f", rangeFloat, increase) + increaseBigFloat.Mul(increaseBigFloat, big.NewFloat(math.Pow(2, 120))) + increaseBigInt, _ := increaseBigFloat.Int(nil) + + rangeIncreasePrice, err := incentiveInterface.RangeIncreasePrice(nil) + if err != nil { + logger.Fatal("Error: %s", err) + } + price := new(big.Int).Mul(rangeIncreasePrice, increaseBigInt) + price.Rsh(price, 120) + priceFloat, _ := price.Float64() + + logger.Info("price for range increase %f wei", priceFloat) + maxRange := new(big.Int).Exp(big.NewInt(2), big.NewInt(127), nil) + + sampleSizeInt, err := incentiveInterface.GetExpectedSampleSize(nil) + if err != nil { + logger.Fatal("Error: %s", err) + } + sampleFloat, _ := sampleSizeInt.Float64() + sampleFloat = sampleFloat / math.Pow(2, 120) + sampleCostFloat, _ := sampleCost.Float64() + logger.Info("current sample size %f, increasing for price of %f wei", sampleFloat, sampleCostFloat) + + offer := incentive.IFastUpdateIncentiveManagerIncentiveOffer{RangeIncrease: increaseBigInt, RangeLimit: maxRange} + opts.Value = new(big.Int).Add(price, sampleCost) + tx, err := incentiveInterface.OfferIncentive(opts, offer) + if err != nil { + logger.Fatal("Error: %s", err) + } + receipt, err := bind.WaitMined(context.Background(), client, tx) + if err != nil { + logger.Fatal("Error: %s", err) + } + if receipt.Status == 0 { + reason, err := GetFailingMessage(*client, tx.Hash()) + if err != nil { + logger.Fatal("Error: %s", err) + } + logger.Fatal("Error: Transaction fail: %s", reason) + } + opts.Nonce.Add(opts.Nonce, big.NewInt(1)) + + rangeInt, err = incentiveInterface.GetRange(nil) + if err != nil { + logger.Fatal("Error: %s", err) + } + rangeFloat, _ = rangeInt.Float64() + rangeFloat = rangeFloat / math.Pow(2, 120) + sampleSizeInt, err = incentiveInterface.GetExpectedSampleSize(nil) + if err != nil { + logger.Fatal("Error: %s", err) + } + sampleFloat, _ = sampleSizeInt.Float64() + sampleFloat = sampleFloat / math.Pow(2, 120) + logger.Info("range after transaction %f, sample size after transaction %f", rangeFloat, sampleFloat) + +}