From 04ffce4be6f911d29ff864c3f98cd724b3446533 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Wed, 29 Apr 2026 16:52:03 -0400 Subject: [PATCH 01/21] start for nitro --- espresso_e2e/nitro/docker-compose.yml | 120 ++++++++++ .../nitro/nitro-config/l2_chain_config.json | 33 +++ .../nitro/nitro-config/nitro_config.json | 141 ++++++++++++ go.mod | 4 +- go.sum | 8 +- mock_light_client.go | 41 ++++ verifier/nitro/nitro_verifier.go | 208 ++++++++++++++++++ 7 files changed, 549 insertions(+), 6 deletions(-) create mode 100644 espresso_e2e/nitro/docker-compose.yml create mode 100644 espresso_e2e/nitro/nitro-config/l2_chain_config.json create mode 100644 espresso_e2e/nitro/nitro-config/nitro_config.json create mode 100644 mock_light_client.go create mode 100644 verifier/nitro/nitro_verifier.go diff --git a/espresso_e2e/nitro/docker-compose.yml b/espresso_e2e/nitro/docker-compose.yml new file mode 100644 index 0000000..68f4f10 --- /dev/null +++ b/espresso_e2e/nitro/docker-compose.yml @@ -0,0 +1,120 @@ +services: + demo-l1-network: + image: ghcr.io/espressosystems/timeboost/geth-l1:rollup-creator-round2 + command: --dev --dev.period=1 --verbosity=2 + ports: + - 8545:8545 + - 8546:8546 + espresso-dev-node: + image: ghcr.io/espressosystems/espresso-sequencer/espresso-dev-node:release-20251120-lip2p-tcp-3855 + ports: + - "41000:41000" + - "41003:41003" + - "20000:20000" + environment: + - ESPRESSO_BUILDER_PORT=41003 + - ESPRESSO_DEPLOYER_ACCOUNT_INDEX=5 + - ESPRESSO_DEV_NODE_PORT=20000 + - ESPRESSO_SEQUENCER_API_PORT=41000 + - ESPRESSO_SEQUENCER_ETH_MNEMONIC=indoor dish desk flag debris potato excuse depart ticket judge file exit + - ESPRESSO_SEQUENCER_L1_PROVIDER=http://demo-l1-network:8545 + - ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS=25 + - ESPRESSO_DEV_NODE_EPOCH_HEIGHT=1000000 + - ESPRESSO_DEV_NODE_MAX_BLOCK_SIZE=10485760 + - ESPRESSO_SEQUENCER_STORAGE_PATH=/data/espresso + - RUST_LOG=WARN + - RUST_LOG_FORMAT + - ESPRESSO_DEV_NODE_VERSION=0.4 + volumes: + - espresso_storage:/data/espresso + depends_on: + demo-l1-network: + condition: service_healthy + healthcheck: + test: + [ + "CMD", + "curl", + "-s", + "-X", + "POST", + "--data", + '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}', + "-H", + "Content-Type: application/json", + "http://localhost:8545", + ] + interval: 5s + timeout: 3s + retries: 10 + + rollup-creator: + image: ghcr.io/espressosystems/timeboost/rollup-creator:rpc + volumes: + - "config:/config" + - "./nitro-config:/nitro-config" + environment: + AUTHORIZE_VALIDATORS: 10 + CHAIN_DEPLOYMENT_INFO: "/config/deployment.json" + CHILD_CHAIN_CONFIG_PATH: "/nitro-config/l2_chain_config.json" + CHILD_CHAIN_INFO: "/config/deployed_chain_info.json" + CHILD_CHAIN_NAME: "arb-dev-test" + DEPLOYER_PRIVKEY: 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff + MAX_DATA_SIZE: 117964 + OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E + PARENT_CHAIN_ID: 1337 + PARENT_CHAIN_RPC: "http://demo-l1-network:8545" + SEQUENCER_ADDRESS: 0x2F1eAe7Dd46D88f08fC2f8ED27Fcb2Ab183eb2d0 + WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a + command: ["create-rollup-testnode"] + depends_on: + demo-l1-network: + condition: service_healthy + + nitro: + image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:integration-v3.9.8 + entrypoint: /usr/local/bin/nitro + ports: + - "8547:8547" + - "8548:8548" + - "9642:9642" + volumes: + - "nitro:/home/user/.arbitrum/local/nitro" + - "l1keystore:/home/user/l1keystore" + - "config:/config" + - "./nitro-config:/nitro-config" + command: + - --conf.file=/nitro-config/nitro_config.json + - --node.feed.output.enable + - --node.feed.output.port=9642 + - --http.api=net,web3,eth,txpool,debug,timeboost,auctioneer,batcher + - --node.seq-coordinator.my-url=http://nitro:8547 + - --graphql.enable + - --graphql.vhosts=* + - --graphql.corsdomain=* + depends_on: + rollup-creator: + condition: service_completed_successfully + healthcheck: + test: + [ + "CMD", + "curl", + "-s", + "-X", + "POST", + "--data", + '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}', + "-H", + "Content-Type: application/json", + "http://localhost:8547", + ] + interval: 5s + timeout: 3s + retries: 12 + +volumes: + config: + l1keystore: + espresso_storage: + nitro: \ No newline at end of file diff --git a/espresso_e2e/nitro/nitro-config/l2_chain_config.json b/espresso_e2e/nitro/nitro-config/l2_chain_config.json new file mode 100644 index 0000000..5c080ce --- /dev/null +++ b/espresso_e2e/nitro/nitro-config/l2_chain_config.json @@ -0,0 +1,33 @@ +{ + "chainId": 412346, + "homesteadBlock": 0, + "daoForkSupport": true, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 0, + "epoch": 0 + }, + "alloc": { + "0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e": { + "balance": "0x21e19e0c9bab2400000" + } + }, + "arbitrum": { + "EnableArbOS": true, + "AllowDebugPrecompiles": true, + "DataAvailabilityCommittee": false, + "InitialArbOSVersion": 40, + "InitialChainOwner": "0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e", + "GenesisBlockNum": 0 + } +} \ No newline at end of file diff --git a/espresso_e2e/nitro/nitro-config/nitro_config.json b/espresso_e2e/nitro/nitro-config/nitro_config.json new file mode 100644 index 0000000..5979ff0 --- /dev/null +++ b/espresso_e2e/nitro/nitro-config/nitro_config.json @@ -0,0 +1,141 @@ +{ + "ensure-rollup-deployment": false, + "parent-chain": { + "connection": { + "url": "ws://demo-l1-network:8546" + } + }, + "chain": { + "id": 412346, + "info-files": [ + "/config/deployed_chain_info.json" + ] + }, + "node": { + "staker": { + "dangerous": { + "without-block-validator": false + }, + "parent-chain-wallet": { + "account": "0x6A568afe0f82d34759347bb36F14A6bB171d2CBe", + "password": "passphrase", + "pathname": "/home/user/l1keystore" + }, + "disable-challenge": false, + "enable": false, + "staker-interval": "10s", + "make-assertion-interval": "10s", + "strategy": "MakeNodes" + }, + "sequencer": true, + "dangerous": { + "no-sequencer-coordinator": true, + "disable-blob-reader": true + }, + "delayed-sequencer": { + "enable": true + }, + "seq-coordinator": { + "enable": false, + "redis-url": "redis://redis:6379", + "lockout-duration": "30s", + "lockout-spare": "1s", + "my-url": "", + "retry-interval": "0.5s", + "seq-num-duration": "24h0m0s", + "update-interval": "3s" + }, + "batch-poster": { + "enable": true, + "max-delay": "1m", + "l1-block-bound": "ignore", + "parent-chain-wallet": { + "private-key": "4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff" + }, + "data-poster": { + "redis-signer": { + "signing-key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + }, + "wait-for-l1-finality": false, + "replacement-times": [ + "5s", + "10s", + "20s" + ] + }, + "poll-interval": "10s" + }, + "espresso": { + "batch-poster": { + "hotshot-first-posting-block": 0, + "hotshot-url": "http://espresso-dev-node:41000", + "resubmit-espresso-tx-deadline": "2m", + "tee-type": "SGX", + "txns-monitoring-interval": "1s" + }, + "streamer": { + "txns-polling-interval": "1s" + } + }, + "block-validator": { + "validation-server": { + "url": "ws://validation_node:8549", + "jwtsecret": "/config/val_jwt.hex" + } + }, + "feed": { + "input": { + "url": [] + }, + "output": { + "enable": true, + "signed": false, + "addr": "0.0.0.0", + "port": 9642 + } + }, + "data-availability": { + "enable": false, + "rpc-aggregator": { + "enable": false, + "assumed-honest": 1, + "backends": [ + { + "url": "http://das-committee-a:9876", + "pubkey": "" + }, + { + "url": "http://das-committee-b:9876", + "pubkey": "" + } + ] + }, + "rest-aggregator": { + "enable": true, + "urls": [ + "http://das-mirror:9877" + ] + }, + "parent-chain-node-url": "ws://geth:8546", + "sequencer-inbox-address": "0x6be3f7c539009f9b3ae2ce11e231bf064c081cd9" + } + }, + "execution": { + "sequencer": { + "enable": false + }, + "forwarding-target": "null" + }, + "persistent": { + "chain": "local" + }, + "ws": { + "addr": "0.0.0.0" + }, + "http": { + "addr": "0.0.0.0", + "vhosts": "*", + "corsdomain": "*" + }, + "log-level": "INFO" +} \ No newline at end of file diff --git a/go.mod b/go.mod index 7e9c1ab..50d4273 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,7 @@ go 1.25.1 require ( github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 - github.com/EspressoSystems/espresso-streamers v1.0.2 - github.com/ccoveille/go-safecast v1.1.0 + github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff github.com/ethereum-optimism/optimism v1.16.7 github.com/ethereum/go-ethereum v1.17.1 github.com/spf13/pflag v1.0.6 @@ -25,6 +24,7 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/ccoveille/go-safecast v1.8.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect diff --git a/go.sum b/go.sum index afb136f..5d0e951 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 h1:1hf/k2rGqIGEGQW8O3fQFltPIyxSmumph8aKIa6AjCk= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4/go.mod h1:kaxR08mJb5Mijy7a2RhWCIWOevFI4PcXwDkzoEbsVTk= -github.com/EspressoSystems/espresso-streamers v1.0.2 h1:7MV5HK0QCumv6WPQ9Z6eB9COUQHYNGbLcCqH84tHF1U= -github.com/EspressoSystems/espresso-streamers v1.0.2/go.mod h1:Op3SNwQnZ3bqwrUXMAORnL2/pNiFzpfOED4ltYs5o/U= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff h1:yBjgxfSZuqLpJ/PB7GjwKfXpsPi8fgDcZv2Og/rNJmc= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -51,8 +51,8 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/ccoveille/go-safecast v1.1.0 h1:iHKNWaZm+OznO7Eh6EljXPjGfGQsSfa6/sxPlIEKO+g= -github.com/ccoveille/go-safecast v1.1.0/go.mod h1:QqwNjxQ7DAqY0C721OIO9InMk9zCwcsO7tnRuHytad8= +github.com/ccoveille/go-safecast v1.8.2 h1:+d+s5UGQiCVJX9oYc8XvYcB2zCMBlax6lIP7YdxXLHA= +github.com/ccoveille/go-safecast v1.8.2/go.mod h1:M0Ubpl11x63fE7iOfk5MtngQFXsntcRzOoSsFDqQYDY= github.com/celo-org/op-geth v1.101411.1-0.20260316145005-3a40c398c038 h1:jq/uIi/RBva6kPt103r+5UM/9iY07yLuQMnFYzibJa8= github.com/celo-org/op-geth v1.101411.1-0.20260316145005-3a40c398c038/go.mod h1:9J7De8kDwXE/lrMgVEHc0F33TZqcN1Lb5nYaW6UZt38= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= diff --git a/mock_light_client.go b/mock_light_client.go new file mode 100644 index 0000000..1fb1edf --- /dev/null +++ b/mock_light_client.go @@ -0,0 +1,41 @@ +package main + +import ( + "context" + "math/big" + + opStreamer "github.com/EspressoSystems/espresso-streamers/op" + "github.com/ethereum/go-ethereum/accounts/abi/bind" +) + +const finalizedBlocks = 500 + +// mockLightClient implements opStreamer.LightClientCallerInterface for dev/test +// environments where the real light client contract is not available. +// It tracks the live Espresso head and returns a height lagged by finalizedBlocks. +type mockLightClient struct { + client opStreamer.EspressoClient + last uint64 +} + +var _ opStreamer.LightClientCallerInterface = (*mockLightClient)(nil) + +func newMockLightClient(client opStreamer.EspressoClient) *mockLightClient { + return &mockLightClient{client: client} +} + +func (m *mockLightClient) FinalizedState(_ *bind.CallOpts) (opStreamer.FinalizedState, error) { + current, err := m.client.FetchLatestBlockHeight(context.Background()) + result := m.last + if err == nil { + m.last = 0 + if current > finalizedBlocks { + m.last = current - finalizedBlocks + } + } + return opStreamer.FinalizedState{ + BlockHeight: result, + ViewNum: 0, + BlockCommRoot: big.NewInt(0), + }, nil +} diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go new file mode 100644 index 0000000..14486a9 --- /dev/null +++ b/verifier/nitro/nitro_verifier.go @@ -0,0 +1,208 @@ +package verifier + +import ( + "context" + "fmt" + "math/big" + "sync" + "sync/atomic" + "time" + + espressoNetClient "github.com/EspressoSystems/espresso-network/sdks/go/client" + nitroStreamer "github.com/EspressoSystems/espresso-streamers/nitro" + espressoStore "proxy/store" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" +) + +type NitroEspressoBatchVerifierConfig struct { + FullNodeExecutionRPC string `json:"full_node_execution_rpc"` + VerificationInterval time.Duration `json:"verification_interval"` + QueryServiceURL string `json:"query_service_url"` + Namespace uint64 `json:"namespace"` + InitialHotshotBlock uint64 `json:"initial_hotshot_block"` + ValidBatcherAddresses []string `json:"valid_batcher_addresses"` +} + +// NitroEspressoBatchVerifier verifies that messages produced by the Nitro full +// node match what the Nitro Espresso streamer has buffered from HotShot. +// It peeks the next message from the streamer, checks the Nitro node has a +// block at the corresponding inbox position, and on success advances the +// streamer and updates the EspressoStore. +type NitroEspressoBatchVerifier struct { + streamer nitroStreamer.EspressoStreamerInterface + espressoStore *espressoStore.EspressoStore + config *NitroEspressoBatchVerifierConfig + ethClient *ethclient.Client + logger log.Logger + cancel context.CancelFunc + runWg sync.WaitGroup + running atomic.Bool +} + +func NewNitroEspressoBatchVerifier( + ctx context.Context, + logger log.Logger, + store *espressoStore.EspressoStore, + config *NitroEspressoBatchVerifierConfig, +) *NitroEspressoBatchVerifier { + if config == nil { + logger.Crit("Nitro verifier config is nil") + return nil + } + + ethClient, err := ethclient.DialContext(ctx, config.FullNodeExecutionRPC) + if err != nil { + logger.Crit("failed to dial Nitro full node", "url", config.FullNodeExecutionRPC, "error", err) + return nil + } + + ec := espressoNetClient.NewClient(config.QueryServiceURL) + if ec == nil { + logger.Crit("failed to create Espresso client") + return nil + } + + batcherAddrs := make([]common.Address, 0, len(config.ValidBatcherAddresses)) + for _, addr := range config.ValidBatcherAddresses { + batcherAddrs = append(batcherAddrs, common.HexToAddress(addr)) + } + + espressoState := store.GetState() + startHotshotBlock := config.InitialHotshotBlock + if espressoState.FallbackHotshotHeight > startHotshotBlock { + startHotshotBlock = espressoState.FallbackHotshotHeight + } + + streamer := nitroStreamer.NewEspressoStreamer( + config.Namespace, + startHotshotBlock, + ec, + batcherAddrs, + time.Second, + ) + + return &NitroEspressoBatchVerifier{ + streamer: streamer, + espressoStore: store, + config: config, + ethClient: ethClient, + logger: logger, + } +} + +func (v *NitroEspressoBatchVerifier) Start(ctx context.Context) { + if !v.running.CompareAndSwap(false, true) { + v.logger.Warn("Nitro verifier is already running") + return + } + + ctx, cancel := context.WithCancel(ctx) + v.cancel = cancel + + if err := v.streamer.Start(ctx); err != nil { + v.logger.Crit("failed to start Nitro Espresso streamer", "error", err) + return + } + + v.runWg.Add(1) + go v.run(ctx) +} + +func (v *NitroEspressoBatchVerifier) run(ctx context.Context) { + defer v.runWg.Done() + ticker := time.NewTicker(v.config.VerificationInterval) + defer ticker.Stop() + + espressoState := v.espressoStore.GetState() + v.logger.Info("Starting Nitro verifier", + "start_block_number", espressoState.L2BlockNumber, + "start_hotshot_height", espressoState.FallbackHotshotHeight, + ) + + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + v.verifyAndAdvance(ctx) + } + } +} + +func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { + v.logger.Debug("Starting Nitro batch verification") + + msg := v.streamer.Peek() + if msg == nil { + v.logger.Debug("no new messages to verify") + return + } + + msgPos := uint64(msg.Pos) + + block, err := v.ethClient.BlockByNumber(ctx, new(big.Int).SetUint64(msgPos)) + if err != nil { + v.logger.Debug("Nitro full node does not have block at message position yet, will retry", + "msg_pos", msgPos, "error", err) + return + } + if block == nil { + v.logger.Debug("Nitro full node returned nil block at message position, will retry", + "msg_pos", msgPos) + return + } + + updated, err := v.espressoStore.UpdateIfGreater(msgPos, msg.HotshotHeight) + if err != nil { + v.logger.Error("failed to update espresso state in store", "error", err) + return + } + if !updated { + v.logger.Warn("espresso state not updated — message position not greater than current", + "msg_pos", msgPos) + } + + v.streamer.Advance() + v.logger.Info("Successfully verified and advanced Nitro message", "msg_pos", msgPos, + "hotshot_height", msg.HotshotHeight) +} + +func (v *NitroEspressoBatchVerifier) Stop() { + if !v.running.CompareAndSwap(true, false) { + v.logger.Warn("Nitro verifier is not running") + return + } + v.logger.Info("Stopping Nitro verifier") + if v.cancel != nil { + v.cancel() + } + v.runWg.Wait() + v.streamer.StopAndWait() + v.ethClient.Close() + v.logger.Info("Nitro verifier stopped") +} + +func (v *NitroEspressoBatchVerifier) GetCurrentEarliestHotShotBlock() uint64 { + espressoState := v.espressoStore.GetState() + return v.streamer.GetCurrentEarliestHotShotBlockNumber(espressoState.L2BlockNumber) +} + +// validateConfig checks required fields. +func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error { + if config.FullNodeExecutionRPC == "" { + return fmt.Errorf("full_node_execution_rpc is required") + } + if config.QueryServiceURL == "" { + return fmt.Errorf("query_service_url is required") + } + if config.Namespace == 0 { + return fmt.Errorf("namespace is required") + } + if len(config.ValidBatcherAddresses) == 0 { + return fmt.Errorf("at least one valid_batcher_address is required") + } + return nil +} From 05289323fa70e16de6d8b08d94b73e2c78dade82 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Wed, 29 Apr 2026 18:06:15 -0400 Subject: [PATCH 02/21] fixes --- espresso_e2e/nitro/docker-compose.yml | 2 +- espresso_e2e/nitro/nitro-config/nitro_config.json | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/espresso_e2e/nitro/docker-compose.yml b/espresso_e2e/nitro/docker-compose.yml index 68f4f10..7282316 100644 --- a/espresso_e2e/nitro/docker-compose.yml +++ b/espresso_e2e/nitro/docker-compose.yml @@ -64,7 +64,7 @@ services: OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E PARENT_CHAIN_ID: 1337 PARENT_CHAIN_RPC: "http://demo-l1-network:8545" - SEQUENCER_ADDRESS: 0x2F1eAe7Dd46D88f08fC2f8ED27Fcb2Ab183eb2d0 + SEQUENCER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a command: ["create-rollup-testnode"] depends_on: diff --git a/espresso_e2e/nitro/nitro-config/nitro_config.json b/espresso_e2e/nitro/nitro-config/nitro_config.json index 5979ff0..d9152b2 100644 --- a/espresso_e2e/nitro/nitro-config/nitro_config.json +++ b/espresso_e2e/nitro/nitro-config/nitro_config.json @@ -48,26 +48,21 @@ "batch-poster": { "enable": true, "max-delay": "1m", + "wait-for-max-delay": false, "l1-block-bound": "ignore", "parent-chain-wallet": { - "private-key": "4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff" + "private-key": "b6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659" }, "data-poster": { "redis-signer": { "signing-key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" }, - "wait-for-l1-finality": false, - "replacement-times": [ - "5s", - "10s", - "20s" - ] + "wait-for-l1-finality": false }, "poll-interval": "10s" }, "espresso": { "batch-poster": { - "hotshot-first-posting-block": 0, "hotshot-url": "http://espresso-dev-node:41000", "resubmit-espresso-tx-deadline": "2m", "tee-type": "SGX", @@ -122,7 +117,7 @@ }, "execution": { "sequencer": { - "enable": false + "enable": true }, "forwarding-target": "null" }, From dd5a7c29f4901ff2e539c5fee65df601db8b284a Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 4 May 2026 14:59:42 -0400 Subject: [PATCH 03/21] changes --- config.go | 61 ++++++++++-- go.mod | 14 +-- go.sum | 28 +++--- main.go | 50 +++++++--- verifier/nitro/feed_client/client.go | 142 +++++++++++++++++++++++++++ verifier/nitro/feed_client/types.go | 23 +++++ verifier/nitro/nitro_verifier.go | 92 ++++++++++------- 7 files changed, 331 insertions(+), 79 deletions(-) create mode 100644 verifier/nitro/feed_client/client.go create mode 100644 verifier/nitro/feed_client/types.go diff --git a/config.go b/config.go index feea24b..7a0475a 100644 --- a/config.go +++ b/config.go @@ -7,7 +7,8 @@ import ( "net/url" "os" "proxy/proxy" - verifier "proxy/verifier/op" + nitroVerifier "proxy/verifier/nitro" + opVerifier "proxy/verifier/op" "time" "github.com/ethereum/go-ethereum/common" @@ -25,6 +26,16 @@ type OPConfig struct { BatchAuthenticatorAddress string `json:"batch_authenticator_address"` } +type NitroConfig struct { + Enable bool `json:"enable"` + FeedURL string `json:"feed_url"` + VerificationInterval time.Duration `json:"verification_interval"` + QueryServiceURL string `json:"query_service_url"` + Namespace uint64 `json:"namespace"` + InitialHotshotBlock uint64 `json:"initial_hotshot_block"` + ValidBatcherAddresses []string `json:"valid_batcher_addresses"` +} + type Config struct { FullNodeExecutionRPC string `json:"full_node_execution_rpc"` L1RPC string `json:"l1_rpc"` @@ -34,7 +45,8 @@ type Config struct { InitialHotshotHeight uint64 `json:"initial_hotshot_height"` MaxBatchSize int `json:"max_batch_size"` MaxRequestBodySize int `json:"max_request_body_size"` - OPConfig OPConfig `json:"op"` + OPConfig OPConfig `json:"op"` + NitroConfig NitroConfig `json:"nitro"` LogLevel string `json:"log_level"` TrackBatchLatency bool `json:"track_batch_latency"` } @@ -50,6 +62,9 @@ func defaultConfig() *Config { OPConfig: OPConfig{ VerificationInterval: 10 * time.Millisecond, }, + NitroConfig: NitroConfig{ + VerificationInterval: 10 * time.Millisecond, + }, } } @@ -83,7 +98,7 @@ func parseConfig() *Config { pflag.IntVar(&cfg.MaxBatchSize, "max-batch-size", cfg.MaxBatchSize, "maximum number of requests in a JSON-RPC batch (0 = no limit)") pflag.IntVar(&cfg.MaxRequestBodySize, "max-request-body-size", cfg.MaxRequestBodySize, "maximum request body size in bytes (0 = no limit)") - pflag.BoolVar(&cfg.OPConfig.Enable, "op.enable", cfg.OPConfig.Enable, "enable OP mode") + pflag.BoolVar(&cfg.OPConfig.Enable, "op.enable", cfg.OPConfig.Enable, "enable OP verifier mode") pflag.StringVar(&cfg.OPConfig.FullNodeConsensusRPC, "op.full-node-consensus-rpc", cfg.OPConfig.FullNodeConsensusRPC, "OP full node consensus RPC URL") pflag.DurationVar(&cfg.OPConfig.VerificationInterval, "op.verification-interval", cfg.OPConfig.VerificationInterval, "OP verification interval") pflag.StringVar(&cfg.OPConfig.QueryServiceURL, "op.query-service-url", cfg.OPConfig.QueryServiceURL, "Espresso query service URL") @@ -91,6 +106,14 @@ func parseConfig() *Config { pflag.StringVar(&cfg.OPConfig.BatcherAddress, "op.batcher-address", cfg.OPConfig.BatcherAddress, "OP batcher address") pflag.StringVar(&cfg.OPConfig.BatchAuthenticatorAddress, "op.batch-authenticator-address", cfg.OPConfig.BatchAuthenticatorAddress, "Espresso batch authenticator contract address") + pflag.BoolVar(&cfg.NitroConfig.Enable, "nitro.enable", cfg.NitroConfig.Enable, "enable Nitro verifier mode") + pflag.StringVar(&cfg.NitroConfig.FeedURL, "nitro.feed-url", cfg.NitroConfig.FeedURL, "Nitro sequencer feed WebSocket URL") + pflag.DurationVar(&cfg.NitroConfig.VerificationInterval, "nitro.verification-interval", cfg.NitroConfig.VerificationInterval, "Nitro verification interval") + pflag.StringVar(&cfg.NitroConfig.QueryServiceURL, "nitro.query-service-url", cfg.NitroConfig.QueryServiceURL, "Espresso query service URL for Nitro") + pflag.Uint64Var(&cfg.NitroConfig.Namespace, "nitro.namespace", cfg.NitroConfig.Namespace, "Nitro namespace") + pflag.Uint64Var(&cfg.NitroConfig.InitialHotshotBlock, "nitro.initial-hotshot-block", cfg.NitroConfig.InitialHotshotBlock, "initial HotShot block for Nitro streamer") + pflag.StringArrayVar(&cfg.NitroConfig.ValidBatcherAddresses, "nitro.valid-batcher-addresses", cfg.NitroConfig.ValidBatcherAddresses, "valid batcher addresses for Nitro verifier") + pflag.Parse() if err := cfg.validate(); err != nil { @@ -131,9 +154,13 @@ func (c *Config) validate() error { var errs []error errs = append(errs, validateURL("full-node-execution-rpc", c.FullNodeExecutionRPC)) - errs = append(errs, validateURL("l1-rpc", c.L1RPC)) + + if c.OPConfig.Enable && c.NitroConfig.Enable { + errs = append(errs, fmt.Errorf("cannot enable both op and nitro verifiers simultaneously")) + } if c.OPConfig.Enable { + errs = append(errs, validateURL("l1-rpc", c.L1RPC)) errs = append(errs, validateURL("op.full-node-consensus-rpc", c.OPConfig.FullNodeConsensusRPC)) errs = append(errs, validateURL("op.query-service-url", c.OPConfig.QueryServiceURL)) errs = append(errs, validateAddress("op.light-client-address", c.OPConfig.LightClientAddress)) @@ -141,6 +168,17 @@ func (c *Config) validate() error { errs = append(errs, validateAddress("op.batch-authenticator-address", c.OPConfig.BatchAuthenticatorAddress)) } + if c.NitroConfig.Enable { + errs = append(errs, validateURL("nitro.feed-url", c.NitroConfig.FeedURL)) + errs = append(errs, validateURL("nitro.query-service-url", c.NitroConfig.QueryServiceURL)) + if c.NitroConfig.Namespace == 0 { + errs = append(errs, fmt.Errorf("nitro.namespace: must not be zero")) + } + if len(c.NitroConfig.ValidBatcherAddresses) == 0 { + errs = append(errs, fmt.Errorf("nitro.valid-batcher-addresses: at least one address required")) + } + } + if c.ListenAddr == "" { errs = append(errs, fmt.Errorf("listen-addr: must not be empty")) } @@ -163,8 +201,8 @@ func (c *Config) toProxyConfig() *proxy.ProxyConfig { } } -func (c *Config) toOPVerifierConfig() *verifier.OPEspressoBatchVerifierConfig { - return &verifier.OPEspressoBatchVerifierConfig{ +func (c *Config) toOPVerifierConfig() *opVerifier.OPEspressoBatchVerifierConfig { + return &opVerifier.OPEspressoBatchVerifierConfig{ FullNodeExecutionRPC: c.FullNodeExecutionRPC, FullNodeConsensusRPC: c.OPConfig.FullNodeConsensusRPC, VerificationInterval: c.OPConfig.VerificationInterval, @@ -174,3 +212,14 @@ func (c *Config) toOPVerifierConfig() *verifier.OPEspressoBatchVerifierConfig { TrackBatchLatency: c.TrackBatchLatency, } } + +func (c *Config) toNitroVerifierConfig() *nitroVerifier.NitroEspressoBatchVerifierConfig { + return &nitroVerifier.NitroEspressoBatchVerifierConfig{ + FeedURL: c.NitroConfig.FeedURL, + VerificationInterval: c.NitroConfig.VerificationInterval, + QueryServiceURL: c.NitroConfig.QueryServiceURL, + Namespace: c.NitroConfig.Namespace, + InitialHotshotBlock: c.NitroConfig.InitialHotshotBlock, + ValidBatcherAddresses: c.NitroConfig.ValidBatcherAddresses, + } +} diff --git a/go.mod b/go.mod index 50d4273..8b8ff00 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.25.1 require ( github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 - github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff + github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b github.com/ethereum-optimism/optimism v1.16.7 github.com/ethereum/go-ethereum v1.17.1 github.com/spf13/pflag v1.0.6 @@ -122,15 +122,15 @@ require ( github.com/wlynxg/anet v0.0.4 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - golang.org/x/crypto v0.45.0 // indirect + golang.org/x/crypto v0.46.0 // indirect golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect - golang.org/x/net v0.47.0 // indirect - golang.org/x/sync v0.18.0 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.39.0 // indirect - golang.org/x/term v0.37.0 // indirect - golang.org/x/text v0.31.0 // indirect + golang.org/x/term v0.38.0 // indirect + golang.org/x/text v0.32.0 // indirect golang.org/x/time v0.11.0 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 5d0e951..28073ab 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 h1:1hf/k2rGqIGEGQW8O3fQFltPIyxSmumph8aKIa6AjCk= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4/go.mod h1:kaxR08mJb5Mijy7a2RhWCIWOevFI4PcXwDkzoEbsVTk= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff h1:yBjgxfSZuqLpJ/PB7GjwKfXpsPi8fgDcZv2Og/rNJmc= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b h1:uwJlK4OxQRjUM67cULaaFo1BVZ+T9LEZu6Xu98EImps= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -405,8 +405,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -431,8 +431,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -440,8 +440,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -478,8 +478,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -489,8 +489,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -513,8 +513,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/main.go b/main.go index 1322756..a5bc6de 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,8 @@ import ( "os/signal" "proxy/proxy" "proxy/store" - verifier "proxy/verifier/op" + nitroVerifier "proxy/verifier/nitro" + opVerifier "proxy/verifier/op" "runtime/debug" "syscall" "time" @@ -81,26 +82,45 @@ func main() { logger.Crit("failed to create espresso store", "error", err) } - // Create an L1 client - l1Client, err := ethclient.DialContext(ctx, cfg.L1RPC) - if err != nil { - logger.Crit("failed to create L1 client", "error", err) + type BatchVerifier interface { + Start(ctx context.Context) + Stop() } - // Create light client interface - lightClientAddr := common.HexToAddress(cfg.OPConfig.LightClientAddress) - espressoLightClient, err := espressoLightClient.NewLightclientCaller(lightClientAddr, l1Client) - if err != nil || espressoLightClient == nil { - logger.Crit("failed to create light client") - } + var fullNodeVerifier BatchVerifier + + switch { + case cfg.OPConfig.Enable: + l1Client, err := ethclient.DialContext(ctx, cfg.L1RPC) + if err != nil { + logger.Crit("failed to create L1 client", "error", err) + } + lightClientAddr := common.HexToAddress(cfg.OPConfig.LightClientAddress) + lc, err := espressoLightClient.NewLightclientCaller(lightClientAddr, l1Client) + if err != nil || lc == nil { + logger.Crit("failed to create light client") + } + v := opVerifier.NewOPEspressoBatchVerifier(ctx, logger, espressoStore, l1Client, lc, cfg.toOPVerifierConfig()) + if v == nil { + logger.Crit("failed to create OP verifier") + } + fullNodeVerifier = v + logger.Info("OP verifier enabled") + + case cfg.NitroConfig.Enable: + v := nitroVerifier.NewNitroEspressoBatchVerifier(ctx, logger, espressoStore, cfg.toNitroVerifierConfig()) + if v == nil { + logger.Crit("failed to create Nitro verifier") + } + fullNodeVerifier = v + logger.Info("Nitro verifier enabled") - fullNodeVerifier := verifier.NewOPEspressoBatchVerifier(ctx, logger, espressoStore, l1Client, espressoLightClient, cfg.toOPVerifierConfig()) - if fullNodeVerifier == nil { - logger.Crit("failed to create OP verifier") + default: + logger.Crit("no verifier enabled: set --op.enable or --nitro.enable") } fullNodeVerifier.Start(ctx) - logger.Info("OP Verifier Started") + logger.Info("Verifier started") fullNodeProxy := proxy.NewProxy(cfg.toProxyConfig(), espressoStore) mux := http.NewServeMux() diff --git a/verifier/nitro/feed_client/client.go b/verifier/nitro/feed_client/client.go new file mode 100644 index 0000000..c98bb03 --- /dev/null +++ b/verifier/nitro/feed_client/client.go @@ -0,0 +1,142 @@ +package feedclient + +import ( + "context" + "encoding/json" + "net/http" + "strconv" + "sync" + "time" + + "github.com/gorilla/websocket" + + "github.com/ethereum/go-ethereum/log" +) + +type FeedClient struct { + feedWSURL string + nextSeqNum uint64 + mu sync.RWMutex + messages map[uint64]*BroadcastFeedMessage + logger log.Logger + + reconnectBackoff time.Duration + maxBackoff time.Duration +} + +const ( + headerRequestedSequenceNumber = "Arbitrum-Requested-Sequence-Number" + headerFeedClientVersion = "Arbitrum-Feed-Client-Version" + feedClientVersion = "2" + broadcastMessageVersion = 1 +) + +var ( + defaultBackoff = 1 * time.Second + defaultMaxBackoff = 30 * time.Second +) + +func NewFeedClient(feedWSURL string, startSeqNum uint64, logger log.Logger, reconnectBackoff *time.Duration, maxBackoff *time.Duration) *FeedClient { + if reconnectBackoff == nil { + reconnectBackoff = &defaultBackoff + } + if maxBackoff == nil { + maxBackoff = &defaultMaxBackoff + } + return &FeedClient{ + feedWSURL: feedWSURL, + nextSeqNum: startSeqNum, + messages: make(map[uint64]*BroadcastFeedMessage), + logger: logger, + reconnectBackoff: *reconnectBackoff, + maxBackoff: *maxBackoff, + } +} + +func (fc *FeedClient) GetMessage(seqNum uint64) *BroadcastFeedMessage { + fc.mu.RLock() + defer fc.mu.RUnlock() + return fc.messages[seqNum] +} + +func (fc *FeedClient) Start(ctx context.Context) { + go fc.readLoop(ctx) +} + +func (fc *FeedClient) readLoop(ctx context.Context) { + backoff := fc.reconnectBackoff + + for { + select { + case <-ctx.Done(): + return + default: + } + + header := http.Header{ + headerFeedClientVersion: []string{feedClientVersion}, + headerRequestedSequenceNumber: []string{strconv.FormatUint(fc.nextSeqNum, 10)}, + } + dialer := websocket.Dialer{EnableCompression: true} + conn, _, err := dialer.DialContext(ctx, fc.feedWSURL, header) + if err != nil { + fc.logger.Error("failed to connect to the feed", "url", fc.feedWSURL, "error", err) + select { + case <-time.After(backoff): + if backoff < fc.maxBackoff { + backoff *= 2 + } + case <-ctx.Done(): + return + } + continue + } + + fc.logger.Info("connected to the feed", "url", fc.feedWSURL) + backoff = fc.reconnectBackoff + fc.readMessages(ctx, conn) + if err := conn.Close(); err != nil { + fc.logger.Warn("error closing connection", "err", err) + } + } +} + +func (fc *FeedClient) readMessages(ctx context.Context, conn *websocket.Conn) { + for { + select { + case <-ctx.Done(): + return + default: + } + + _, msg, err := conn.ReadMessage() + if err != nil { + fc.logger.Error("error reading message from feed", "error", err) + return + } + + var feedMsg BroadcastMessage + if err := json.Unmarshal(msg, &feedMsg); err != nil { + fc.logger.Error("failed to unmarshal feed message", "error", err) + continue + } + + if feedMsg.Version != broadcastMessageVersion { + fc.logger.Warn("received message with unexpected version", "expected", broadcastMessageVersion, "got", feedMsg.Version) + continue + } + + fc.mu.Lock() + for _, feedMsg := range feedMsg.Messages { + if feedMsg == nil { + continue + } + if fc.messages[feedMsg.SequenceNumber] != nil { + fc.logger.Warn("received duplicate message", "seqNum", feedMsg.SequenceNumber) + continue + } + fc.messages[feedMsg.SequenceNumber] = feedMsg + } + fc.mu.Unlock() + } +} diff --git a/verifier/nitro/feed_client/types.go b/verifier/nitro/feed_client/types.go new file mode 100644 index 0000000..e6bab9e --- /dev/null +++ b/verifier/nitro/feed_client/types.go @@ -0,0 +1,23 @@ +package feedclient + +import ( + "github.com/EspressoSystems/espresso-streamers/nitro" + "github.com/ethereum/go-ethereum/common" +) + +type BroadcastMessage struct { + Version int `json:"version"` + Messages []*BroadcastFeedMessage `json:"messages,omitempty"` + ConfirmedSequenceNumberMessage *ConfirmedSequenceNumberMessage `json:"confirmedSequenceNumberMessage,omitempty"` +} + +type BroadcastFeedMessage struct { + SequenceNumber uint64 `json:"sequenceNumber"` + Message nitro.MessageWithMetadata `json:"message"` + BlockHash *common.Hash `json:"blockHash,omitempty"` + Signature []byte `json:"signature"` +} + +type ConfirmedSequenceNumberMessage struct { + SequenceNumber uint64 `json:"sequenceNumber"` +} diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 14486a9..03ab4ba 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -1,24 +1,28 @@ package verifier import ( + "bytes" "context" + "errors" "fmt" - "math/big" "sync" "sync/atomic" "time" + feedclient "proxy/verifier/nitro/feed_client" + + espressoStore "proxy/store" + espressoNetClient "github.com/EspressoSystems/espresso-network/sdks/go/client" nitroStreamer "github.com/EspressoSystems/espresso-streamers/nitro" - espressoStore "proxy/store" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" ) type NitroEspressoBatchVerifierConfig struct { - FullNodeExecutionRPC string `json:"full_node_execution_rpc"` + FeedURL string `json:"feed_url"` VerificationInterval time.Duration `json:"verification_interval"` QueryServiceURL string `json:"query_service_url"` Namespace uint64 `json:"namespace"` @@ -26,16 +30,15 @@ type NitroEspressoBatchVerifierConfig struct { ValidBatcherAddresses []string `json:"valid_batcher_addresses"` } -// NitroEspressoBatchVerifier verifies that messages produced by the Nitro full -// node match what the Nitro Espresso streamer has buffered from HotShot. -// It peeks the next message from the streamer, checks the Nitro node has a -// block at the corresponding inbox position, and on success advances the -// streamer and updates the EspressoStore. +// NitroEspressoBatchVerifier verifies that messages from the Nitro sequencer feed +// match what the Nitro Espresso streamer has buffered from HotShot. +// It peeks the next message from the streamer, fetches the corresponding message +// from the feed by sequence number, and compares them byte-for-byte via RLP encoding. type NitroEspressoBatchVerifier struct { streamer nitroStreamer.EspressoStreamerInterface + feedClient *feedclient.FeedClient espressoStore *espressoStore.EspressoStore config *NitroEspressoBatchVerifierConfig - ethClient *ethclient.Client logger log.Logger cancel context.CancelFunc runWg sync.WaitGroup @@ -53,12 +56,6 @@ func NewNitroEspressoBatchVerifier( return nil } - ethClient, err := ethclient.DialContext(ctx, config.FullNodeExecutionRPC) - if err != nil { - logger.Crit("failed to dial Nitro full node", "url", config.FullNodeExecutionRPC, "error", err) - return nil - } - ec := espressoNetClient.NewClient(config.QueryServiceURL) if ec == nil { logger.Crit("failed to create Espresso client") @@ -82,13 +79,16 @@ func NewNitroEspressoBatchVerifier( ec, batcherAddrs, time.Second, + logger, ) + fc := feedclient.NewFeedClient(config.FeedURL, 1, logger, nil, nil) + return &NitroEspressoBatchVerifier{ streamer: streamer, + feedClient: fc, espressoStore: store, config: config, - ethClient: ethClient, logger: logger, } } @@ -107,6 +107,8 @@ func (v *NitroEspressoBatchVerifier) Start(ctx context.Context) { return } + v.feedClient.Start(ctx) + v.runWg.Add(1) go v.run(ctx) } @@ -132,42 +134,59 @@ func (v *NitroEspressoBatchVerifier) run(ctx context.Context) { } } -func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { +func (v *NitroEspressoBatchVerifier) verifyAndAdvance(_ context.Context) { v.logger.Debug("Starting Nitro batch verification") - msg := v.streamer.Peek() - if msg == nil { + espressoMsg := v.streamer.Peek() + if espressoMsg == nil { v.logger.Debug("no new messages to verify") return } - msgPos := uint64(msg.Pos) - - block, err := v.ethClient.BlockByNumber(ctx, new(big.Int).SetUint64(msgPos)) - if err != nil { - v.logger.Debug("Nitro full node does not have block at message position yet, will retry", - "msg_pos", msgPos, "error", err) + feedMsg := v.feedClient.GetMessage(espressoMsg.Pos) + if feedMsg == nil { + v.logger.Info("feed does not have message yet, will retry", "seq_num", espressoMsg.Pos) return } - if block == nil { - v.logger.Debug("Nitro full node returned nil block at message position, will retry", - "msg_pos", msgPos) + + if err := ensureMessagesMatch(&espressoMsg.MessageWithMeta, &feedMsg.Message); err != nil { + v.logger.Error("message mismatch between Espresso and Nitro feed", + "seq_num", espressoMsg.Pos, + "error", err, + ) return } - updated, err := v.espressoStore.UpdateIfGreater(msgPos, msg.HotshotHeight) + updated, err := v.espressoStore.UpdateIfGreater(espressoMsg.Pos, espressoMsg.HotshotHeight) if err != nil { v.logger.Error("failed to update espresso state in store", "error", err) return } if !updated { v.logger.Warn("espresso state not updated — message position not greater than current", - "msg_pos", msgPos) + "seq_num", espressoMsg.Pos) } v.streamer.Advance() - v.logger.Info("Successfully verified and advanced Nitro message", "msg_pos", msgPos, - "hotshot_height", msg.HotshotHeight) + v.logger.Info("Successfully verified and advanced Nitro message", + "seq_num", espressoMsg.Pos, + "hotshot_height", espressoMsg.HotshotHeight, + ) +} + +func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) error { + espressoBytes, err := rlp.EncodeToBytes(espresso) + if err != nil { + return fmt.Errorf("failed to RLP-encode Espresso message: %w", err) + } + feedBytes, err := rlp.EncodeToBytes(feed) + if err != nil { + return fmt.Errorf("failed to RLP-encode feed message: %w", err) + } + if !bytes.Equal(espressoBytes, feedBytes) { + return errors.New("Espresso message does not match Nitro feed message") + } + return nil } func (v *NitroEspressoBatchVerifier) Stop() { @@ -181,7 +200,6 @@ func (v *NitroEspressoBatchVerifier) Stop() { } v.runWg.Wait() v.streamer.StopAndWait() - v.ethClient.Close() v.logger.Info("Nitro verifier stopped") } @@ -190,10 +208,10 @@ func (v *NitroEspressoBatchVerifier) GetCurrentEarliestHotShotBlock() uint64 { return v.streamer.GetCurrentEarliestHotShotBlockNumber(espressoState.L2BlockNumber) } -// validateConfig checks required fields. +// ValidateNitroVerifierConfig checks required fields. func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error { - if config.FullNodeExecutionRPC == "" { - return fmt.Errorf("full_node_execution_rpc is required") + if config.FeedURL == "" { + return fmt.Errorf("feed_url is required") } if config.QueryServiceURL == "" { return fmt.Errorf("query_service_url is required") From 8a565038ca34c7c8b02c48d3166413c2e238e445 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Wed, 6 May 2026 16:15:08 -0400 Subject: [PATCH 04/21] WIP --- config.go | 1 + espresso_e2e/nitro/.env | 31 + espresso_e2e/nitro/docker-compose.reorg.yml | 207 +++++ espresso_e2e/nitro/docker-compose.yml | 6 +- espresso_e2e/nitro/l1-config/genesis.json | 800 ++++++++++++++++++ .../nitro/nitro-config/nitro_config.json | 4 +- .../op/deployment/l1-config/genesis.json | 2 +- go.mod | 2 +- go.sum | 2 + verifier/nitro/nitro_verifier.go | 155 +++- 10 files changed, 1200 insertions(+), 10 deletions(-) create mode 100644 espresso_e2e/nitro/.env create mode 100644 espresso_e2e/nitro/docker-compose.reorg.yml create mode 100644 espresso_e2e/nitro/l1-config/genesis.json diff --git a/config.go b/config.go index c53d286..c03279f 100644 --- a/config.go +++ b/config.go @@ -222,6 +222,7 @@ func (c *Config) toOPVerifierConfig() *opVerifier.OPEspressoBatchVerifierConfig func (c *Config) toNitroVerifierConfig() *nitroVerifier.NitroEspressoBatchVerifierConfig { return &nitroVerifier.NitroEspressoBatchVerifierConfig{ FeedURL: c.NitroConfig.FeedURL, + FullNodeExecutionRPC: c.FullNodeExecutionRPC, VerificationInterval: c.NitroConfig.VerificationInterval, QueryServiceURL: c.NitroConfig.QueryServiceURL, Namespace: c.NitroConfig.Namespace, diff --git a/espresso_e2e/nitro/.env b/espresso_e2e/nitro/.env new file mode 100644 index 0000000..ba98cb0 --- /dev/null +++ b/espresso_e2e/nitro/.env @@ -0,0 +1,31 @@ +# Used by docker-compose.reorg.yml only. +# docker-compose.yml hardcodes all values directly. + +ESPRESSO_DEV_NODE_L1_DEPLOYMENT=skip +ESPRESSO_SEQUENCER_API_PORT=24000 +ESPRESSO_DEV_NODE_PORT=24002 +ESPRESSO_BUILDER_PORT=31003 +ESPRESSO_DEV_NODE_IMAGE=ghcr.io/espressosystems/espresso-sequencer/espresso-dev-node:release-20251120-lip2p-tcp-3855 + +# Contract addresses (from integration allocs, used by dev node) +ESPRESSO_SEQUENCER_FEE_CONTRACT_ADDRESS=0x0165878a594ca255338adfa4d48449f69242eb8f +ESPRESSO_SEQUENCER_ESP_TOKEN_ADDRESS=0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6 +ESPRESSO_SEQUENCER_PLONK_VERIFIER_ADDRESS=0x5fbdb2315678afecb367f032d93f642f64180aa3 +ESPRESSO_SEQUENCER_STAKE_TABLE_ADDRESS=0x610178da211fef7d417bc0e6fed39f05609ad788 +ESPRESSO_SEQUENCER_ESP_TOKEN_PROXY_ADDRESS=0x8a791620dd6260079bf849dc5567adc3f2fdc318 +ESPRESSO_SEQUENCER_LIGHT_CLIENT_PROXY_ADDRESS=0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0 +ESPRESSO_SEQUENCER_FEE_CONTRACT_PROXY_ADDRESS=0xa513e6e4b8f2a923d98304ec87f64353c4d5c853 +ESPRESSO_SEQUENCER_STAKE_TABLE_PROXY_ADDRESS=0xb7f8bc63bbcad18155201308c8f3540b07f84f5e +ESPRESSO_SEQUENCER_PLONK_VERIFIER_V2_ADDRESS=0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 + +L1_GETH_IMAGE=ghcr.io/espressosystems/optimism-espresso-integration/l1-geth:celo-integration-rebase-16.3 +LIGHTHOUSE_IMAGE=sigp/lighthouse:v7.1.0 + +L1_HTTP_PORT=8545 +L1_ENGINE_PORT=8551 +L1_BEACON_PORT=5052 +L1_CHAIN_ID=11155111 + +# Pre-funded in the OP genesis; used by rollup-creator as the deployer +OPERATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 +OPERATOR_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 diff --git a/espresso_e2e/nitro/docker-compose.reorg.yml b/espresso_e2e/nitro/docker-compose.reorg.yml new file mode 100644 index 0000000..7a3dc4f --- /dev/null +++ b/espresso_e2e/nitro/docker-compose.reorg.yml @@ -0,0 +1,207 @@ +services: + l1-data-init: + image: busybox + command: > + sh -c ' + mkdir -p /l1-config + mkdir -p /data/lighthouse-validator /data/lighthouse-beacon + chown -R ${U_ID:-1000}:${GID:-1000} /l1-config /data + ' + volumes: + - l1-config:/l1-config + - l1-data:/data + + l1-genesis: + platform: linux/amd64 + user: ${U_ID:-1000}:${GID:-1000} + restart: on-failure + depends_on: + l1-data-init: + condition: service_completed_successfully + image: ${L1_GETH_IMAGE} + environment: + - MODE=genesis + volumes: + - l1-config:/config + - l1-data:/data + - ./l1-config:/deployment/l1-config:ro + + l1-geth: + depends_on: + l1-genesis: + condition: service_completed_successfully + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:${L1_HTTP_PORT}"] + interval: 3s + timeout: 2s + retries: 40 + image: ${L1_GETH_IMAGE} + environment: + L1_HTTP_PORT: ${L1_HTTP_PORT} + L1_ENGINE_PORT: ${L1_ENGINE_PORT} + L1_CHAIN_ID: ${L1_CHAIN_ID} + volumes: + - l1-config:/config:ro + - l1-data:/data + ports: + - "${L1_HTTP_PORT}:${L1_HTTP_PORT}" + - "${L1_ENGINE_PORT}:${L1_ENGINE_PORT}" + + mock-l1-beacon: + build: + context: ../ + dockerfile: mock-l1-beacon/Dockerfile + depends_on: + l1-geth: + condition: service_healthy + volumes: + - l1-config:/config:ro + ports: + - "${L1_BEACON_PORT}:${L1_BEACON_PORT}" + command: + - --engine=http://l1-geth:${L1_ENGINE_PORT} + - --eth=http://l1-geth:${L1_HTTP_PORT} + - --jwt=/config/jwt.txt + - --block-time=1s + - --finalized-distance=20 + - --safe-distance=10 + - --addr=0.0.0.0:${L1_BEACON_PORT} + + l1-validator: + image: ${LIGHTHOUSE_IMAGE} + depends_on: + l1-genesis: + condition: service_completed_successfully + l1-geth: + condition: service_started + mock-l1-beacon: + condition: service_started + volumes: + - l1-data:/data + - l1-config:/config:ro + command: + - lighthouse + - validator_client + - --testnet-dir + - /config + - --beacon-nodes + - http://mock-l1-beacon:${L1_BEACON_PORT} + - --init-slashing-protection + - --datadir + - /data/lighthouse-validator + - --suggested-fee-recipient + - ${OPERATOR_ADDRESS} + + espresso-dev-node: + image: ${ESPRESSO_DEV_NODE_IMAGE} + depends_on: + l1-geth: + condition: service_healthy + ports: + - "${ESPRESSO_SEQUENCER_API_PORT}:${ESPRESSO_SEQUENCER_API_PORT}" + - "${ESPRESSO_DEV_NODE_PORT}:${ESPRESSO_DEV_NODE_PORT}" + - "${ESPRESSO_BUILDER_PORT}:${ESPRESSO_BUILDER_PORT}" + volumes: + - espresso-data:/data + env_file: + - ./.env + environment: + RUST_LOG: warn + ESPRESSO_DEV_NODE_L1_DEPLOYMENT: skip + RUST_BACKTRACE: 1 + ESPRESSO_SEQUENCER_STORAGE_PATH: /data/espresso + ESPRESSO_SEQUENCER_L1_PROVIDER: http://l1-geth:${L1_HTTP_PORT} + ESPRESSO_DEPLOYER_ACCOUNT_INDEX: 0 + ESPRESSO_DEV_NODE_EPOCH_HEIGHT: "4294967295" + ESPRESSO_SEQUENCER_ETH_MNEMONIC: "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" + + tx-generator: + image: ghcr.io/foundry-rs/foundry:v1.5.1 + depends_on: + nitro: + condition: service_healthy + entrypoint: ["sh", "-c"] + command: + - | + while true; do + cast send \ + --rpc-url http://nitro:8547 \ + --private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 \ + 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E \ + --value 0 2>&1 || true + sleep 2 + done + + rollup-creator: + image: ghcr.io/espressosystems/timeboost/rollup-creator:rpc + volumes: + - "config:/config" + - "./nitro-config:/nitro-config" + environment: + AUTHORIZE_VALIDATORS: 10 + CHAIN_DEPLOYMENT_INFO: "/config/deployment.json" + CHILD_CHAIN_CONFIG_PATH: "/nitro-config/l2_chain_config.json" + CHILD_CHAIN_INFO: "/config/deployed_chain_info.json" + CHILD_CHAIN_NAME: "arb-dev-test" + DEPLOYER_PRIVKEY: ${OPERATOR_PRIVATE_KEY} + MAX_DATA_SIZE: 117964 + OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E + PARENT_CHAIN_ID: ${L1_CHAIN_ID} + PARENT_CHAIN_RPC: http://l1-geth:${L1_HTTP_PORT} + SEQUENCER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E + WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a + command: ["create-rollup-testnode"] + depends_on: + l1-geth: + condition: service_healthy + + nitro: + image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:integration-v3.9.8 + entrypoint: /usr/local/bin/nitro + ports: + - "8547:8547" + - "8548:8548" + - "9642:9642" + volumes: + - "nitro:/home/user/.arbitrum/local/nitro" + - "l1keystore:/home/user/l1keystore" + - "config:/config" + - "./nitro-config:/nitro-config" + command: + - --conf.file=/nitro-config/nitro_config.json + - --parent-chain.connection.url=http://l1-geth:${L1_HTTP_PORT} + - --node.feed.output.enable + - --node.feed.output.port=9642 + - --http.api=net,web3,eth,txpool,debug,timeboost,auctioneer,batcher + - --node.seq-coordinator.my-url=http://nitro:8547 + - --graphql.enable + - --graphql.vhosts=* + - --graphql.corsdomain=* + depends_on: + rollup-creator: + condition: service_completed_successfully + healthcheck: + test: + [ + "CMD", + "curl", + "-s", + "-X", + "POST", + "--data", + '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}', + "-H", + "Content-Type: application/json", + "http://localhost:8547", + ] + interval: 5s + timeout: 3s + retries: 12 + +volumes: + l1-config: + l1-data: + config: + l1keystore: + espresso-data: + nitro: \ No newline at end of file diff --git a/espresso_e2e/nitro/docker-compose.yml b/espresso_e2e/nitro/docker-compose.yml index 7282316..8fc106a 100644 --- a/espresso_e2e/nitro/docker-compose.yml +++ b/espresso_e2e/nitro/docker-compose.yml @@ -1,5 +1,5 @@ services: - demo-l1-network: + l1-geth: image: ghcr.io/espressosystems/timeboost/geth-l1:rollup-creator-round2 command: --dev --dev.period=1 --verbosity=2 ports: @@ -63,12 +63,12 @@ services: MAX_DATA_SIZE: 117964 OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E PARENT_CHAIN_ID: 1337 - PARENT_CHAIN_RPC: "http://demo-l1-network:8545" + PARENT_CHAIN_RPC: "http://l1-geth:8545" SEQUENCER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a command: ["create-rollup-testnode"] depends_on: - demo-l1-network: + l1-geth: condition: service_healthy nitro: diff --git a/espresso_e2e/nitro/l1-config/genesis.json b/espresso_e2e/nitro/l1-config/genesis.json new file mode 100644 index 0000000..c4031ee --- /dev/null +++ b/espresso_e2e/nitro/l1-config/genesis.json @@ -0,0 +1,800 @@ +{ + "alloc": { + "0x0165878a594ca255338adfa4d48449f69242eb8f": { + "balance": "0x0", + "code": "0x6080604052600436106100aa575f3560e01c80638da5cb5b116100635780638da5cb5b1461019c5780638ed83271146101e2578063ad3cb1cc146101f6578063c4d66de814610233578063f2fde38b14610252578063f340fa0114610271576100c8565b80630d8e6e2c146100e157806327e235e3146101115780634f1ef2861461014a57806352d1902d1461015f578063645006ca14610173578063715018a614610188576100c8565b366100c85760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100ec575f5ffd5b5060408051600181525f60208201819052918101919091526060015b60405180910390f35b34801561011c575f5ffd5b5061013c61012b366004610a40565b60026020525f908152604090205481565b604051908152602001610108565b61015d610158366004610a6d565b610284565b005b34801561016a575f5ffd5b5061013c6102a3565b34801561017e575f5ffd5b5061013c60015481565b348015610193575f5ffd5b5061015d6102be565b3480156101a7575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610108565b3480156101ed575f5ffd5b5061013c5f5481565b348015610201575f5ffd5b50610226604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101089190610b31565b34801561023e575f5ffd5b5061015d61024d366004610a40565b6102df565b34801561025d575f5ffd5b5061015d61026c366004610a40565b61040b565b61015d61027f366004610a40565b61044d565b61028c610526565b610295826105cc565b61029f8282610613565b5050565b5f6102ac6106d4565b505f516020610bb35f395f51905f5290565b6102c661071d565b6040516317d5c96560e11b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103245750825b90505f8267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b61039f86610778565b6103a7610789565b670de0b6b3a76400005f5566038d7ea4c68000600155831561040357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61041361071d565b6001600160a01b03811661044157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61044a81610791565b50565b60015434101561047057604051636ba4a1c760e01b815260040160405180910390fd5b5f543411156104925760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b0381166104b957604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b0381165f90815260026020526040812080543492906104e0908490610b66565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f1614806105ac57507f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03166105a05f516020610bb35f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105ca5760405163703e46dd60e11b815260040160405180910390fd5b565b6105d461071d565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200160405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066d575060408051601f3d908101601f1916820190925261066a91810190610b85565b60015b61069557604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610438565b5f516020610bb35f395f51905f5281146106c557604051632a87526960e21b815260048101829052602401610438565b6106cf8383610801565b505050565b306001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16146105ca5760405163703e46dd60e11b815260040160405180910390fd5b3361074f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105ca5760405163118cdaa760e01b8152336004820152602401610438565b610780610856565b61044a8161089f565b6105ca610856565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61080a826108a7565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561084e576106cf828261090a565b61029f61097e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105ca57604051631afcd79f60e31b815260040160405180910390fd5b610413610856565b806001600160a01b03163b5f036108dc57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610438565b5f516020610bb35f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516109269190610b9c565b5f60405180830381855af49150503d805f811461095e576040519150601f19603f3d011682016040523d82523d5f602084013e610963565b606091505b509150915061097385838361099d565b925050505b92915050565b34156105ca5760405163b398979f60e01b815260040160405180910390fd5b6060826109b2576109ad826109fc565b6109f5565b81511580156109c957506001600160a01b0384163b155b156109f257604051639996b31560e01b81526001600160a01b0385166004820152602401610438565b50805b9392505050565b805115610a0c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a3b575f5ffd5b919050565b5f60208284031215610a50575f5ffd5b6109f582610a25565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610a7e575f5ffd5b610a8783610a25565b9150602083013567ffffffffffffffff811115610aa2575f5ffd5b8301601f81018513610ab2575f5ffd5b803567ffffffffffffffff811115610acc57610acc610a59565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610afb57610afb610a59565b604052818152828201602001871015610b12575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8082018082111561097857634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610b95575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6": { + "balance": "0x0", + "code": "0x6080604052600436106100fa575f3560e01c806370a08231116100925780639ab8367e116100625780639ab8367e146102d0578063a9059cbb146102ef578063ad3cb1cc1461030e578063dd62ed3e1461033e578063f2fde38b1461035d575f5ffd5b806370a0823114610222578063715018a6146102625780638da5cb5b1461027657806395d89b41146102bc575f5ffd5b806323b872dd116100cd57806323b872dd146101bf578063313ce567146101de5780634f1ef286146101f957806352d1902d1461020e575f5ffd5b806306fdde03146100fe578063095ea7b3146101285780630d8e6e2c1461015757806318160ddd14610182575b5f5ffd5b348015610109575f5ffd5b5061011261037c565b60405161011f9190610f2c565b60405180910390f35b348015610133575f5ffd5b50610147610142366004610f7c565b61043c565b604051901515815260200161011f565b348015610162575f5ffd5b5060408051600181525f602082018190529181019190915260600161011f565b34801561018d575f5ffd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b60405190815260200161011f565b3480156101ca575f5ffd5b506101476101d9366004610fa4565b610455565b3480156101e9575f5ffd5b506040516012815260200161011f565b61020c610207366004611069565b61047a565b005b348015610219575f5ffd5b506101b1610499565b34801561022d575f5ffd5b506101b161023c3660046110c7565b6001600160a01b03165f9081525f5160206114515f395f51905f52602052604090205490565b34801561026d575f5ffd5b5061020c6104b4565b348015610281575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161011f565b3480156102c7575f5ffd5b506101126104d5565b3480156102db575f5ffd5b5061020c6102ea3660046110fe565b610513565b3480156102fa575f5ffd5b50610147610309366004610f7c565b610659565b348015610319575f5ffd5b50610112604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610349575f5ffd5b506101b161035836600461118c565b610666565b348015610368575f5ffd5b5061020c6103773660046110c7565b6106af565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f5160206114515f395f51905f52916103ba906111bd565b80601f01602080910402602001604051908101604052809291908181526020018280546103e6906111bd565b80156104315780601f1061040857610100808354040283529160200191610431565b820191905f5260205f20905b81548152906001019060200180831161041457829003601f168201915b505050505091505090565b5f336104498185856106f1565b60019150505b92915050565b5f33610462858285610703565b61046d858585610766565b60019150505b9392505050565b6104826107c3565b61048b82610869565b6104958282610871565b5050565b5f6104a261092d565b505f5160206114715f395f51905f5290565b6104bc610976565b6040516317d5c96560e11b815260040160405180910390fd5b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f5160206114515f395f51905f52916103ba906111bd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156105585750825b90505f8267ffffffffffffffff1660011480156105745750303b155b905081158015610582575080155b156105a05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ca57845460ff60401b1916600160401b1785555b6105d487876109d1565b6105dd8a6109e3565b6105e56109f4565b6105f16012600a6112ec565b6105fb90896112fa565b975061060789896109fc565b831561064d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f33610449818585610766565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6106b7610976565b6001600160a01b0381166106e557604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106ee81610a30565b50565b6106fe8383836001610aa0565b505050565b5f61070e8484610666565b90505f198114610760578181101561075257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106dc565b61076084848484035f610aa0565b50505050565b6001600160a01b03831661078f57604051634b637e8f60e11b81525f60048201526024016106dc565b6001600160a01b0382166107b85760405163ec442f0560e01b81525f60048201526024016106dc565b6106fe838383610b84565b306001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616148061084957507f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031661083d5f5160206114715f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156108675760405163703e46dd60e11b815260040160405180910390fd5b565b6106ee610976565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108cb575060408051601f3d908101601f191682019092526108c891810190611311565b60015b6108f357604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106dc565b5f5160206114715f395f51905f52811461092357604051632a87526960e21b8152600481018290526024016106dc565b6106fe8383610cbd565b306001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146108675760405163703e46dd60e11b815260040160405180910390fd5b336109a87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108675760405163118cdaa760e01b81523360048201526024016106dc565b6109d9610d12565b6104958282610d5b565b6109eb610d12565b6106ee81610dab565b610867610d12565b6001600160a01b038216610a255760405163ec442f0560e01b81525f60048201526024016106dc565b6104955f8383610b84565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5160206114515f395f51905f526001600160a01b038516610ad75760405163e602df0560e01b81525f60048201526024016106dc565b6001600160a01b038416610b0057604051634a1406b160e11b81525f60048201526024016106dc565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610b7d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b7491815260200190565b60405180910390a35b5050505050565b5f5160206114515f395f51905f526001600160a01b038416610bbe5781816002015f828254610bb39190611328565b90915550610c2e9050565b6001600160a01b0384165f9081526020829052604090205482811015610c105760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106dc565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610c4c576002810180548390039055610c6a565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610caf91815260200190565b60405180910390a350505050565b610cc682610db3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610d0a576106fe8282610e16565b610495610e88565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661086757604051631afcd79f60e31b815260040160405180910390fd5b610d63610d12565b5f5160206114515f395f51905f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d9c848261137f565b5060048101610760838261137f565b6106b7610d12565b806001600160a01b03163b5f03610de857604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106dc565b5f5160206114715f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610e32919061143a565b5f60405180830381855af49150503d805f8114610e6a576040519150601f19603f3d011682016040523d82523d5f602084013e610e6f565b606091505b5091509150610e7f858383610ea7565b95945050505050565b34156108675760405163b398979f60e01b815260040160405180910390fd5b606082610ebc57610eb782610f03565b610473565b8151158015610ed357506001600160a01b0384163b155b15610efc57604051639996b31560e01b81526001600160a01b03851660048201526024016106dc565b5080610473565b805115610f135780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610f77575f5ffd5b919050565b5f5f60408385031215610f8d575f5ffd5b610f9683610f61565b946020939093013593505050565b5f5f5f60608486031215610fb6575f5ffd5b610fbf84610f61565b9250610fcd60208501610f61565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff84111561100c5761100c610fde565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561103b5761103b610fde565b604052838152905080828401851015611052575f5ffd5b838360208301375f60208583010152509392505050565b5f5f6040838503121561107a575f5ffd5b61108383610f61565b9150602083013567ffffffffffffffff81111561109e575f5ffd5b8301601f810185136110ae575f5ffd5b6110bd85823560208401610ff2565b9150509250929050565b5f602082840312156110d7575f5ffd5b61047382610f61565b5f82601f8301126110ef575f5ffd5b61047383833560208501610ff2565b5f5f5f5f5f60a08688031215611112575f5ffd5b61111b86610f61565b945061112960208701610f61565b935060408601359250606086013567ffffffffffffffff81111561114b575f5ffd5b611157888289016110e0565b925050608086013567ffffffffffffffff811115611173575f5ffd5b61117f888289016110e0565b9150509295509295909350565b5f5f6040838503121561119d575f5ffd5b6111a683610f61565b91506111b460208401610f61565b90509250929050565b600181811c908216806111d157607f821691505b6020821081036111ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561124457808504811115611228576112286111f5565b600184161561123657908102905b60019390931c92800261120d565b935093915050565b5f8261125a5750600161044f565b8161126657505f61044f565b816001811461127c5760028114611286576112a2565b600191505061044f565b60ff841115611297576112976111f5565b50506001821b61044f565b5060208310610133831016604e8410600b84101617156112c5575081810a61044f565b6112d15f198484611209565b805f19048211156112e4576112e46111f5565b029392505050565b5f61047360ff84168361124c565b808202811582820484141761044f5761044f6111f5565b5f60208284031215611321575f5ffd5b5051919050565b8082018082111561044f5761044f6111f5565b601f8211156106fe57805f5260205f20601f840160051c810160208510156113605750805b601f840160051c820191505b81811015610b7d575f815560010161136c565b815167ffffffffffffffff81111561139957611399610fde565b6113ad816113a784546111bd565b8461133b565b6020601f8211600181146113df575f83156113c85750848201515b5f19600385901b1c1916600184901b178455610b7d565b5f84815260208120601f198516915b8281101561140e57878501518255602094850194600190920191016113ee565b508482101561142b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82518060208501845e5f92019182525091905056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x4e59b44847b379578588920ca78fbf26c0b4956c": { + "balance": "0x0", + "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", + "nonce": "1", + "storage": {} + }, + "0x5fbdb2315678afecb367f032d93f642f64180aa3": { + "balance": "0x0", + "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x685d256e9be7152506222a87b2d2d582926a289249af3bc94a19432f63c6720e": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xb689b7fb27041302cb3f75ab02fdfc43b274e2d4faa9d0959400e9b9af08e7ee": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0x610178da211fef7d417bc0e6fed39f05609ad788": { + "balance": "0x0", + "code": "0x608060405260043610610161575f3560e01c80639b30a5e6116100cd578063b5700e6811610087578063c64814dd11610062578063c64814dd1461047c578063f2fde38b146104b2578063fa52c7d8146104d1578063fc0c546a14610514575f5ffd5b8063b5700e6814610413578063b5ecb34414610432578063be2030941461045d575f5ffd5b80639b30a5e6146102f35780639e9a8f3114610312578063a2d78dd514610327578063a3066aab14610379578063ad3cb1cc14610398578063b3e6ebd5146103d5575f5ffd5b80634f1ef2861161011e5780634f1ef2861461023557806352d1902d146102485780635544c2f11461025c5780636a911ccf1461027b578063715018a61461028f5780638da5cb5b146102a3575f5ffd5b8063026e402b146101655780630d8e6e2c1461018657806313b9057a146101b65780632140fecd146101d55780633e9df9b5146101f45780634d99dd1614610216575b5f5ffd5b348015610170575f5ffd5b5061018461017f366004612346565b610533565b005b348015610191575f5ffd5b5060408051600181525f60208201819052918101919091526060015b60405180910390f35b3480156101c1575f5ffd5b506101846101d036600461246c565b6106d6565b3480156101e0575f5ffd5b506101846101ef3660046124ca565b610869565b3480156101ff575f5ffd5b506102085f5481565b6040519081526020016101ad565b348015610221575f5ffd5b50610184610230366004612346565b61098a565b6101846102433660046124e3565b610b3c565b348015610253575f5ffd5b50610208610b5b565b348015610267575f5ffd5b50610184610276366004612588565b610b76565b348015610286575f5ffd5b50610184610c3f565b34801561029a575f5ffd5b50610184610ccd565b3480156102ae575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101ad565b3480156102fe575f5ffd5b5061020861030d3660046125cc565b610cee565b34801561031d575f5ffd5b5061020860085481565b348015610332575f5ffd5b506103646103413660046125e6565b600760209081525f92835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101ad565b348015610384575f5ffd5b506101846103933660046124ca565b610d48565b3480156103a3575f5ffd5b506103c8604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101ad9190612617565b3480156103e0575f5ffd5b506104036103ef36600461264c565b60046020525f908152604090205460ff1681565b60405190151581526020016101ad565b34801561041e575f5ffd5b506001546102db906001600160a01b031681565b34801561043d575f5ffd5b5061020861044c3660046124ca565b60056020525f908152604090205481565b348015610468575f5ffd5b50610184610477366004612663565b610e58565b348015610487575f5ffd5b506102086104963660046125e6565b600660209081525f928352604080842090915290825290205481565b3480156104bd575f5ffd5b506101846104cc3660046124ca565b610f84565b3480156104dc575f5ffd5b506105066104eb3660046124ca565b60036020525f90815260409020805460019091015460ff1682565b6040516101ad9291906126c1565b34801561051f575f5ffd5b506002546102db906001600160a01b031681565b61053c82610fc1565b335f82900361055e57604051631f2a200560e01b815260040160405180910390fd5b600254604051636eb1769f60e11b81526001600160a01b0383811660048301523060248301525f92169063dd62ed3e90604401602060405180830381865afa1580156105ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d091906126f1565b9050828110156106025760405163054365bb60e31b815260048101829052602481018490526044015b60405180910390fd5b60025461061a906001600160a01b0316833086611042565b6001600160a01b0384165f908152600360205260408120805485929061064190849061271c565b90915550506001600160a01b038085165f9081526006602090815260408083209386168352929052908120805485929061067c90849061271c565b92505081905550836001600160a01b0316826001600160a01b03167fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b856040516106c891815260200190565b60405180910390a350505050565b336106e0816110e6565b6106e984611133565b6106f28561116e565b604080516001600160a01b03831660208201525f910160405160208183030381529060405290506107248185886111aa565b6127108361ffff16111561074b5760405163dc81db8560e01b815260040160405180910390fd5b600160045f61075989610cee565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180604001604052805f8152602001600160028111156107a0576107a06126ad565b90526001600160a01b0383165f908152600360209081526040909120825181559082015160018083018054909160ff19909116908360028111156107e6576107e66126ad565b02179055505060408051885181526020808a01518183015289830151828401526060808b0151908301528851608083015288015160a082015261ffff861660c082015290516001600160a01b03851692507ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f9181900360e00190a2505050505050565b6001600160a01b0381165f9081526005602052604081205433918190036108a3576040516379298a5360e11b815260040160405180910390fd5b804210156108c457604051635a77435760e01b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209386168352929052908120549081900361090c57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038085165f90815260066020908152604080832087851684529091528120556002546109419116848361123f565b826001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658260405161097c91815260200190565b60405180910390a250505050565b61099382610fc1565b335f8290036109b557604051631f2a200560e01b815260040160405180910390fd5b6001600160a01b038084165f90815260076020908152604080832093851683529290522054156109f85760405163d423a4f160e01b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209385168352929052205482811015610a4157604051639266535160e01b8152600481018290526024016105f9565b6001600160a01b038085165f90815260066020908152604080832093861683529290529081208054859290610a7790849061272f565b92505081905550604051806040016040528084815260200160085442610a9d919061271c565b90526001600160a01b038086165f81815260076020908152604080832094881683529381528382208551815594810151600190950194909455908152600390925281208054859290610af090849061272f565b92505081905550836001600160a01b0316826001600160a01b03167f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c856040516106c891815260200190565b610b446112ce565b610b4d82611374565b610b57828261137c565b5050565b5f610b6461143d565b505f516020612a1c5f395f51905f5290565b33610b8081610fc1565b610b8983611133565b610b928461116e565b604080516001600160a01b03831660208201525f91016040516020818303038152906040529050610bc48184876111aa565b600160045f610bd288610cee565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550816001600160a01b03167f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d8686604051610c30929190612742565b60405180910390a25050505050565b33610c4981610fc1565b6001600160a01b0381165f908152600360205260409020600101805460ff19166002179055600854610c7b904261271c565b6001600160a01b0382165f8181526005602090815260408083209490945560039052828120819055915190917ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd1691a250565b610cd5611486565b6040516317d5c96560e11b815260040160405180910390fd5b5f815f0151826020015183604001518460600151604051602001610d2b949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f9081526007602090815260408083203380855292528220549091819003610d8d57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f90815260076020908152604080832093861683529290522060010154421015610dd557604051635a77435760e01b815260040160405180910390fd5b6001600160a01b038084165f9081526007602090815260408083208685168452909152812081815560010155600254610e109116838361123f565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610e4b91815260200190565b60405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610e9d5750825b90505f8267ffffffffffffffff166001148015610eb95750303b155b905081158015610ec7575080155b15610ee55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f0f57845460ff60401b1916600160401b1785555b610f18866114e1565b610f206114f2565b610f286114fa565b610f33898989611600565b8315610f7957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610f8c611486565b6001600160a01b038116610fb557604051631e4fbdf760e01b81525f60048201526024016105f9565b610fbe816116ab565b50565b6001600160a01b0381165f9081526003602052604081206001015460ff1690816002811115610ff257610ff26126ad565b036110105760405163508a793f60e01b815260040160405180910390fd5b6002816002811115611024576110246126ad565b03610b575760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af191505080601f3d1160015f51141615161561109b5750833b153d17155b806110df5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016105f9565b5050505050565b6001600160a01b0381165f9081526003602052604081206001015460ff166002811115611115576111156126ad565b14610fbe5760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152611150828261171b565b15610b57576040516306cf438f60e01b815260040160405180910390fd5b60045f61117a83610cee565b815260208101919091526040015f205460ff1615610fbe5760405162da8a5760e11b815260040160405180910390fd5b6111b38261173e565b5f6040518060600160405280602481526020016129d86024913990505f84826040516020016111e3929190612793565b60405160208183030381529060405290505f6111fe826117a5565b905061121b818561120e88611892565b611216611909565b6119d6565b6112375760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af191505080601f3d1160015f5114161516156112895750823b153d17155b806112c85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016105f9565b50505050565b306001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816148061135457507f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad7886001600160a01b03166113485f516020612a1c5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156113725760405163703e46dd60e11b815260040160405180910390fd5b565b610fbe611486565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d6575060408051601f3d908101601f191682019092526113d3918101906126f1565b60015b6113fe57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016105f9565b5f516020612a1c5f395f51905f52811461142e57604051632a87526960e21b8152600481018290526024016105f9565b6114388383611a85565b505050565b306001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816146113725760405163703e46dd60e11b815260040160405180910390fd5b336114b87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146113725760405163118cdaa760e01b81523360048201526024016105f9565b6114e9611ada565b610fbe81611b23565b611372611ada565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561153f5750825b90505f8267ffffffffffffffff16600114801561155b5750303b155b905081158015611569575080155b156115875760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156115b157845460ff60401b1916600160401b1785555b435f5583156110df57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0383166116275760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03821661164e5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b038086166001600160a01b03199283161790925560018054928516929091169190911790556202a300808210156116a35760405163b57e21df60e01b815260040160405180910390fd5b506008555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b805182515f91148015611735575081602001518360200151145b90505b92915050565b805160208201515f915f5160206129fc5f395f51905f5291159015161561176457505050565b8251602084015182600384858586098509088382830914838210848410161693505050816114385760405163279e345360e21b815260040160405180910390fd5b604080518082019091525f80825260208201525f6117c283611b2b565b90505f5160206129fc5f395f51905f5260035f82848509905082806117e9576117e96127af565b848209905082806117fc576117fc6127af565b82820890505f5f61180c83611d34565b925090505b80611875578480611824576118246127af565b6001870895508480611838576118386127af565b8687099250848061184b5761184b6127af565b8684099250848061185e5761185e6127af565b848408925061186c83611d34565b92509050611811565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f80825260208201528151602083015115901516156118b9575090565b6040518060400160405280835f015181526020015f5160206129fc5f395f51905f5284602001516118ea91906127c3565b611901905f5160206129fc5f395f51905f5261272f565b905292915050565b61193060405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f51915080611a795760405163c206334f60e01b815260040160405180910390fd5b50151595945050505050565b611a8e82611dfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611ad2576114388282611e5f565b610b57611ed1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661137257604051631afcd79f60e31b815260040160405180910390fd5b610f8c611ada565b5f5f611b3683611ef0565b805190915060308114611b4b57611b4b6127e2565b5f8167ffffffffffffffff811115611b6557611b6561236e565b6040519080825280601f01601f191660200182016040528015611b8f576020820181803683370190505b5090505f5b82811015611bfe57836001611ba9838661272f565b611bb3919061272f565b81518110611bc357611bc36127f6565b602001015160f81c60f81b828281518110611be057611be06127f6565b60200101906001600160f81b03191690815f1a905350600101611b94565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b82811015611c8e578381611c3a858861272f565b611c44919061271c565b81518110611c5457611c546127f6565b602001015160f81c60f81b60f81c828281518110611c7457611c746127f6565b60ff90921660209283029190910190910152600101611c26565b505f611c998261223c565b90506101005f5160206129fc5f395f51905f525f611cb7868961272f565b90505f5b81811015611d24575f886001611cd1848661272f565b611cdb919061272f565b81518110611ceb57611ceb6127f6565b016020015160f81c90508380611d0357611d036127af565b85870995508380611d1657611d166127af565b818708955050600101611cbb565b50929a9950505050505050505050565b5f5f5f5f5f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f5160206129fc5f395f51905f52905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f51925083611dc257604051630c9d3e9960e21b815260040160405180910390fd5b80600184901b1115611ddb57611dd8838261272f565b92505b8080611de957611de96127af565b8384099690961496919550909350505050565b806001600160a01b03163b5f03611e3157604051634c9c8ce360e01b81526001600160a01b03821660048201526024016105f9565b5f516020612a1c5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611e7b919061280a565b5f60405180830381855af49150503d805f8114611eb3576040519150601f19603f3d011682016040523d82523d5f602084013e611eb8565b606091505b5091509150611ec88583836122a3565b95945050505050565b34156113725760405163b398979f60e01b815260040160405180910390fd5b604080516030808252606082810190935290602090600160f91b905f90846020820181803683370190505090508086604051602001611f30929190612793565b6040516020818303038152906040529050808460f81b604051602001611f57929190612815565b604051602081830303815290604052905080604051602001611f79919061283f565b60408051601f1981840301815290829052915061010160f01b90611fa39083908390602001612857565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff8111156120135761201361236e565b6040519080825280601f01601f19166020018201604052801561203d576020820181803683370190505b5090505f8260405160200161205491815260200190565b60408051601f1981840301815291905290505f5b81518110156120be57818181518110612083576120836127f6565b602001015160f81c60f81b8382815181106120a0576120a06127f6565b60200101906001600160f81b03191690815f1a905350600101612068565b505f846040516020016120d391815260200190565b60408051601f19818403018152602083019091525f80835291985091505b89811015612165575f83828151811061210c5761210c6127f6565b602001015160f81c60f81b838381518110612129576121296127f6565b602001015160f81c60f81b189050888160405160200161214a92919061287b565b60408051601f198184030181529190529850506001016120f1565b5086888760405160200161217b9392919061289f565b604051602081830303815290604052965086805190602001209350836040516020016121a991815260200190565b60408051601f1981840301815291905291505f5b6121ca8a60ff8d1661272f565b81101561222b578281815181106121e3576121e36127f6565b01602001516001600160f81b031916846121fd838d61271c565b8151811061220d5761220d6127f6565b60200101906001600160f81b03191690815f1a9053506001016121bd565b50919b9a5050505050505050505050565b5f80805b835181101561229c5783818151811061225b5761225b6127f6565b602002602001015160ff1681600861227391906128d2565b61227e9060026129cc565b61228891906128d2565b612292908361271c565b9150600101612240565b5092915050565b6060826122b8576122b382612302565b6122fb565b81511580156122cf57506001600160a01b0384163b155b156122f857604051639996b31560e01b81526001600160a01b03851660048201526024016105f9565b50805b9392505050565b8051156123125780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114612341575f5ffd5b919050565b5f5f60408385031215612357575f5ffd5b6123608361232b565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156123a5576123a561236e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156123d4576123d461236e565b604052919050565b5f608082840312156123ec575f5ffd5b6040516080810167ffffffffffffffff8111828210171561240f5761240f61236e565b6040908152833582526020808501359083015283810135908201526060928301359281019290925250919050565b5f6040828403121561244d575f5ffd5b612455612382565b823581526020928301359281019290925250919050565b5f5f5f5f6101208587031215612480575f5ffd5b61248a86866123dc565b9350612499866080870161243d565b92506124a88660c0870161243d565b915061010085013561ffff811681146124bf575f5ffd5b939692955090935050565b5f602082840312156124da575f5ffd5b6117358261232b565b5f5f604083850312156124f4575f5ffd5b6124fd8361232b565b9150602083013567ffffffffffffffff811115612518575f5ffd5b8301601f81018513612528575f5ffd5b803567ffffffffffffffff8111156125425761254261236e565b612555601f8201601f19166020016123ab565b818152866020838501011115612569575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f610100848603121561259b575f5ffd5b6125a585856123dc565b92506125b4856080860161243d565b91506125c38560c0860161243d565b90509250925092565b5f608082840312156125dc575f5ffd5b61173583836123dc565b5f5f604083850312156125f7575f5ffd5b6126008361232b565b915061260e6020840161232b565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561265c575f5ffd5b5035919050565b5f5f5f5f60808587031215612676575f5ffd5b61267f8561232b565b935061268d6020860161232b565b9250604085013591506126a26060860161232b565b905092959194509250565b634e487b7160e01b5f52602160045260245ffd5b82815260408101600383106126e457634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f60208284031215612701575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561173857611738612708565b8181038181111561173857611738612708565b825181526020808401518183015260408085015190830152606080850151908301528251608083015282015160a082015260c081016122fb565b5f81518060208401855e5f93019283525090919050565b5f6127a76127a1838661277c565b8461277c565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b5f826127dd57634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611735828461277c565b5f612820828561277c565b5f81526001600160f81b03199390931660018401525050600201919050565b5f61284a828461277c565b5f81526001019392505050565b5f612862828561277c565b6001600160f01b03199390931683525050600201919050565b5f612886828561277c565b6001600160f81b03199390931683525050600101919050565b5f6128aa828661277c565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b808202811582820484141761173857611738612708565b6001815b60018411156129245780850481111561290857612908612708565b600184161561291657908102905b60019390931c9280026128ed565b935093915050565b5f8261293a57506001611738565b8161294657505f611738565b816001811461295c576002811461296657612982565b6001915050611738565b60ff84111561297757612977612708565b50506001821b611738565b5060208310610133831016604e8410600b84101617156129a5575081810a611738565b6129b15f1984846128e9565b805f19048211156129c4576129c4612708565b029392505050565b5f611735838361292c56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x6f6c6d0e7a6bb0898333aadaeb4c87368041c9d6": { + "balance": "0x8ac6f96f0ea1d2fe", + "code": "0x", + "nonce": 3, + "storage": {} + }, + "0x8a791620dd6260079bf849dc5567adc3f2fdc318": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x03b401b7b39ad5148aeb9ef28bef316a982c01bdaadee32abc45fed3bc7f4746": "0x00000000000000000000000000000000000000000b9993a58a7a70d408c00000", + "0x2167eff7539e891c54e98b32937b10a4f6269ef4c2975ae5edbcdc76e7da9ebf": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x25a12f267ec5c0c6bc157bd9f2a5f8853928b268c69df0f4f481a5b93de807bc": "0x00000000000000000000000000000000000000000000002b5e3af16b18800000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6", + "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02": "0x00000000000000000000000000000000000000000b999411f60dcc5fc6000000", + "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03": "0x457370726573736f000000000000000000000000000000000000000000000010", + "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04": "0x4553500000000000000000000000000000000000000000000000000000000006", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xa723b6812b36513a13b880a4cb14668a0e53064052b338092d0622774b736bae": "0x000000000000000000000000000000000000000000000030ca024f987b900000", + "0xeb3cf0b3fdb786328dc87f4ae2f6ff264030822d601983cfa90e9c396887ec91": "0x00000000000000000000000000000000000000000000001043561a8829300000", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf2d351354d16d58033c2b6b59a768e7acfc5d94d06391b408a001f1980ef2bcb": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0e28d2d3671776a08300039b18dd065a1acdb6282aee49e329b4085ac511e1a0", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x02d4b4bf8826b33f87f986dde73bb311d77e297f55b133dad21288833be1b8b4", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x2dfcb5714318766addfd9e7cbdda0321b7e8bbf57e42fd4fc546d314f312b6db", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000d2f000000000000000000000000000000000000000000", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000010000000000000001000000000000012c", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0e28d2d3671776a08300039b18dd065a1acdb6282aee49e329b4085ac511e1a0", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x02d4b4bf8826b33f87f986dde73bb311d77e297f55b133dad21288833be1b8b4", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x2dfcb5714318766addfd9e7cbdda0321b7e8bbf57e42fd4fc546d314f312b6db", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000002" + } + }, + "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000038d7ea4c68000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000002a300", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x65988aaab6fee60b915a7c6b43c7588db33087a016180dd1a794699707697e08": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x7f159dfb2339d762a397026e6cfea24f9ddfa67757f734cbde60a0a04c80d411": "0x00000000000000000000000000000000000000000000000ad78ebc5ac6200000", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xa4aaa97df7f6bcdc97da4ca9e4116885d4a807ec2b5ad4a9b130b094dc97a171": "0x00000000000000000000000000000000000000000000000ad78ebc5ac6200000", + "0xa4aaa97df7f6bcdc97da4ca9e4116885d4a807ec2b5ad4a9b130b094dc97a172": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb0f3cc9fe3f537bf629d5d8b7774df4118bac03cf980517e5bd1c420d6326395": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "0xc8108b74fd3c6b13a7516728f2f1252673903e850abc5c5f03033fce78ec2501": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "0xc8108b74fd3c6b13a7516728f2f1252673903e850abc5c5f03033fce78ec2502": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xfbbe536cce17c94bdd99c5535667338ecd0323409ac4888e1f8a7e808f3c1d66": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660002", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000b08cc720f511062537ca78bdb0ae691f04f5a957", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3" + } + }, + "0xd208510a88ed64fe278dc04d331901fd8ad99434": { + "balance": "0x8ac6ff51571280c7", + "code": "0x", + "nonce": 3, + "storage": {} + }, + "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9": { + "balance": "0x0", + "code": "0x608060405260043610610254575f3560e01c8063715018a61161013f578063b33bc491116100b3578063d24d933d11610078578063d24d933d14610835578063e030330114610864578063f068205414610883578063f2fde38b146108a2578063f5676160146108c1578063f9e50d19146108e0575f5ffd5b8063b33bc49114610790578063b3daf254146107af578063b5adea3c146107c3578063c23b9e9e146107e2578063c8e5e4981461081a575f5ffd5b80638da5cb5b116101045780638da5cb5b1461066557806390c14390146106a157806396c1ca61146106c05780639baa3cc9146106df5780639fdb54a7146106fe578063ad3cb1cc14610753575f5ffd5b8063715018a6146105c3578063757c37ad146105d757806376671808146105f6578063826e41fc1461060a5780638584d23f14610629575f5ffd5b8063300c89dd116101d6578063426d31941161019b578063426d319414610510578063433dba9f146105315780634f1ef2861461055057806352d1902d14610563578063623a13381461057757806369cc6a04146105af575f5ffd5b8063300c89dd1461043b578063313df7b11461045a578063378ec23b146104915780633c23b6db146104ad5780633ed55b7b146104ea575f5ffd5b8063167ac6181161021c578063167ac618146103645780632063d4f71461038357806325297427146103a25780632d52aad6146103d15780632f79889d146103fd575f5ffd5b8063013fa5fc1461025857806302b592f3146102795780630625e19b146102d65780630d8e6e2c1461031857806312173c2c14610343575b5f5ffd5b348015610263575f5ffd5b50610277610272366004612a09565b6108f4565b005b348015610284575f5ffd5b50610298610293366004612a22565b6109a7565b6040516102cd94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b3480156102e1575f5ffd5b50600b54600c54600d54600e546102f89392919084565b6040805194855260208501939093529183015260608201526080016102cd565b348015610323575f5ffd5b5060408051600281525f60208201819052918101919091526060016102cd565b34801561034e575f5ffd5b506103576109f0565b6040516102cd9190612a39565b34801561036f575f5ffd5b5061027761037e366004612c50565b61101f565b34801561038e575f5ffd5b5061027761039d366004612f34565b611096565b3480156103ad575f5ffd5b506103c16103bc366004612c50565b6110af565b60405190151581526020016102cd565b3480156103dc575f5ffd5b506102776103eb366004612a22565b600f805460ff19166001179055601055565b348015610408575f5ffd5b5060085461042390600160c01b90046001600160401b031681565b6040516001600160401b0390911681526020016102cd565b348015610446575f5ffd5b506103c1610455366004612c50565b611111565b348015610465575f5ffd5b50600854610479906001600160a01b031681565b6040516001600160a01b0390911681526020016102cd565b34801561049c575f5ffd5b50435b6040519081526020016102cd565b3480156104b8575f5ffd5b506102776104c7366004612c50565b600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b3480156104f5575f5ffd5b50600a5461042390600160401b90046001600160401b031681565b34801561051b575f5ffd5b505f546001546002546003546102f89392919084565b34801561053c575f5ffd5b5061027761054b366004612f7b565b6111a6565b61027761055e366004612f94565b6111ba565b34801561056e575f5ffd5b5061049f6111d9565b348015610582575f5ffd5b5061027761059136600461307a565b8051600b556020810151600c556040810151600d5560600151600e55565b3480156105ba575f5ffd5b506102776111f4565b3480156105ce575f5ffd5b50610277611262565b3480156105e2575f5ffd5b506102776105f1366004613094565b611283565b348015610601575f5ffd5b506104236115b6565b348015610615575f5ffd5b506008546001600160a01b031615156103c1565b348015610634575f5ffd5b50610648610643366004612a22565b6115e0565b604080519283526001600160401b039091166020830152016102cd565b348015610670575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610479565b3480156106ac575f5ffd5b506104236106bb3660046130d8565b61170b565b3480156106cb575f5ffd5b506102776106da366004612f7b565b61177a565b3480156106ea575f5ffd5b506102776106f9366004613100565b611803565b348015610709575f5ffd5b5060065460075461072d916001600160401b0380821692600160401b909204169083565b604080516001600160401b039485168152939092166020840152908201526060016102cd565b34801561075e575f5ffd5b50610783604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102cd9190613155565b34801561079b575f5ffd5b506102776107aa3660046130d8565b611925565b3480156107ba575f5ffd5b50610423611a91565b3480156107ce575f5ffd5b506102776107dd36600461318a565b611ab2565b3480156107ed575f5ffd5b5060085461080590600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016102cd565b348015610825575f5ffd5b50610277600f805460ff19169055565b348015610840575f5ffd5b5060045460055461072d916001600160401b0380821692600160401b909204169083565b34801561086f575f5ffd5b506103c161087e3660046131a4565b611af9565b34801561088e575f5ffd5b50600a54610423906001600160401b031681565b3480156108ad575f5ffd5b506102776108bc366004612a09565b611b2c565b3480156108cc575f5ffd5b506102776108db3660046131c4565b611b6b565b3480156108eb575f5ffd5b5060095461049f565b6108fc611c16565b6001600160a01b0381166109235760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036109525760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b600981815481106109b6575f80fd5b5f918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6109f8612728565b620100008152600b60208201527f2faf5a113efd87d75818e63ff9a6170007f22c89bbc4a8bd0f2b48268757b0146040820151527f185aee05f8d3babfce67931f15db39e61f25f794a4134d7bee6e18c5ad1ec0576020604083015101527f0dccf5dcf667a37ca93b8d721091d8f3a8049b3d1e89a56d66e42751bbaf7b5e6060820151527f2cf10949fc5bfcecb3bc54dd4121e55807430f17f30498a7ea6a026070b191626020606083015101527f08d70e4e0184fe53bd566f0d7edc4cd7b0e339490973d0faec7dac2089f538e56080820151527ef665fe1fd110d37d1dea446e8400f06f06b9b58ab3df90fbae7c47ee5860416020608083015101527f087e14d71924ac0f2880adf0f106925e5a6fdd57d020bb3c8aa70fa9fc00ccf360a0820151527f01db7e3178b342f91d54fc972cee72569f429a393988ee43c289e2ed96077152602060a083015101527f196dd42d767201f7f196c42aaef485656046310f5083559592bd1313e16948b760c0820151527f17889680810aaabd1ff3ac4a6c5492100579e059170cd2b77e2b3da6d37cc246602060c083015101527f24935e7a77ac313fd3d60ff3f1a0a79ec32c7dc519b39da0acb2c49f367771cc60e0820151527f168e29425ef138cb6943c75352f33c190e5f1488eb54a9e11deb744da7fb6b2e602060e083015101527f1b58d558b5526453bd1028ca938c940bb89e723f7c35787c02f9f179ae9a0cea610100820151527f21afc121d91d9d1c17dafb9236bc9b872c5b43df064c0b1286012fb43a762324602061010083015101527f1047fc55794d1e597de155077611e3c789a0a2be02183821bba56cf61cc1b8ed610120820151527f174252324727c0d2ee5e50eb57a5231f67474ceed6932ad4ffe9bcf866aa3428602061012083015101527f28db289a4cfb73ba92961572f3185298ae366ed1a44971607bcbf801f120f561610140820151527f045cfe7ae2cd175508172e7d9c2e899bb1d216dfc31fe89fc6c917caaee877a2602061014083015101527f195f2eec8547727fc46ed01b79e8f666ded64ae54f57073874a5a2470380a785610160820151527f1527322e85da1aefbd839e65d11dc695aac16b0db6c62591d9813242d41cbe31602061016083015101527f10c8d7d7355f7e0f8c002f482cc3b98c90baa94261c59a17b424eecfe4e963b2610180820151527f2272e30178647167bbead3a2d7371988f2e198e65815029ded4c64bfc0850f1f602061018083015101527f15d56ea7ab2fa61265f551c2ae25389c8fe7bcb3bf6608082c36a201f225f77d6101a0820151527f0b58546887202e7273d3d0c55d65dd6132cac98ebf04efb1b52445c513c4a4df60206101a083015101527f050d6f43774e8dffaa868f2a7dc82f566c69d175d818d4517cc70ac5fcb2f1b16101c0820151527f2fff87bf605e998373bb64553f3a625dabcd12888692d678a8f44d136440c86360206101c083015101527f12d085608c602cfb5b8c03ec7bd13ac0ff9e64a9ac1e9aa746594a033e464bf26101e0820151527f18ac5a3536042eeb0b0c7c2f43f5e2ca3b2173daa4c2812ffca64787e8e956b260206101e083015101527f0f0f9891fc2b790e74dc253c8854df6392e010f4de6760b8423a3dd69bbe5dce610200820151527f16bed1d244a2fe3ab9a652c7feec5650161d8a75227dece7294f3c8fc542fd6c602061020083015101527f0fa36d00672fa6a1c44cd3c259212c1ada48c66bf7bb085f24471b15b17e6e51610220820151527f182088e56b64955232460891d2b279765325813aef1dae855e5f496c418afc41602061022083015101527f2baf5ae2dd832e1449facc611b6b80fd66d58c871d5827c5c8e2747064e29964610240820151527f29f543b543137e881804c989cd3b99934010002238e8ab3eec882e09d306681f602061024083015101527f2db0ddc7123b42f520e257466a0d92da8b564fe01ec665096c14119643012984610260820151527f1b7ab27a66966284d7fb29bce9d550eafba16c49fbc6267827cdfc8d0b16f94f602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611027611c16565b600a80546fffffffffffffffff0000000000000000198116600160401b6001600160401b0385811682029283179485905561106d9491909104811692811691161761170b565b600a60106101000a8154816001600160401b0302191690836001600160401b0316021790555050565b604051634e405c8d60e01b815260040160405180910390fd5b5f6001600160401b03821615806110cf5750600a546001600160401b0316155b156110db57505f919050565b600a546001600160401b03166110f28360056132d0565b6110fc9190613303565b6001600160401b03161592915050565b919050565b5f6001600160401b03821615806111315750600a546001600160401b0316155b1561113d57505f919050565b600a54611153906001600160401b031683613303565b6001600160401b031615806111a05750600a5461117b906005906001600160401b0316613330565b600a546001600160401b0391821691611195911684613303565b6001600160401b0316115b92915050565b6111ae611c16565b6111b78161177a565b50565b6111c2611c71565b6111cb82611d15565b6111d58282611d56565b5050565b5f6111e2611e17565b505f5160206138315f395f51905f5290565b6111fc611c16565b6008546001600160a01b03161561124757600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c02450905f90a1565b60405163a863aec960e01b815260040160405180910390fd5b565b61126a611c16565b6040516317d5c96560e11b815260040160405180910390fd5b6008546001600160a01b0316151580156112a857506008546001600160a01b03163314155b156112c6576040516301474c8f60e71b815260040160405180910390fd5b60065483516001600160401b0391821691161115806112ff575060065460208401516001600160401b03600160401b9092048216911611155b1561131d5760405163051c46ef60e01b815260040160405180910390fd5b61132a8360400151611e60565b6113378260200151611e60565b6113448260400151611e60565b6113518260600151611e60565b5f61135a6115b6565b6020850151600a549192505f9161137a91906001600160401b031661170b565b600a549091506001600160401b03600160801b9091048116908216106113c5576113a78560200151611111565b156113c55760405163080ae8d960e01b815260040160405180910390fd5b600a546001600160401b03600160801b909104811690821611156114785760026113ef8383613330565b6001600160401b0316106114165760405163080ae8d960e01b815260040160405180910390fd5b6114218260016132d0565b6001600160401b0316816001600160401b031614801561145a575060065461145890600160401b90046001600160401b03166110af565b155b156114785760405163080ae8d960e01b815260040160405180910390fd5b611483858585611ea1565b84516006805460208801516001600160401b03908116600160401b026001600160801b0319909216938116939093171790556040860151600755600a54600160801b90048116908216108015906114e257506114e285602001516110af565b1561154c578351600b556020840151600c556040840151600d556060840151600e557f31eabd9099fdb25dacddd206abff87311e553441fc9d0fcdef201062d7e7071b6115308260016132d0565b6040516001600160401b03909116815260200160405180910390a15b611557434287612018565b84602001516001600160401b0316855f01516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae687604001516040516115a791815260200190565b60405180910390a35050505050565b600654600a545f916115db916001600160401b03600160401b9092048216911661170b565b905090565b600980545f918291906115f460018361334f565b8154811061160457611604613362565b5f918252602090912060029091020154600160801b90046001600160401b0316841061164357604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b8181101561170457846009828154811061167357611673613362565b5f918252602090912060029091020154600160801b90046001600160401b031611156116fc57600981815481106116ac576116ac613362565b905f5260205f20906002020160010154600982815481106116cf576116cf613362565b905f5260205f2090600202015f0160109054906101000a90046001600160401b0316935093505050915091565b600101611657565b5050915091565b5f816001600160401b03165f0361172357505f6111a0565b826001600160401b03165f0361173b575060016111a0565b6117458284613303565b6001600160401b03165f036117655761175e8284613376565b90506111a0565b61176f8284613376565b61175e9060016132d0565b611782611c16565b610e108163ffffffff1610806117a157506301e133808163ffffffff16115b806117bf575060085463ffffffff600160a01b909104811690821611155b156117dd576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156118475750825b90505f826001600160401b031660011480156118625750303b155b905081158015611870575080155b1561188e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156118b857845460ff60401b1916600160401b1785555b6118c186612201565b6118c9612212565b6118d489898961221a565b831561191a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b61192d611c16565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611976575080546001600160401b03808416911610155b156119945760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b0380841691909117600160401b1782556005908516116119dc576040516350dd03f760e11b815260040160405180910390fd5b5f54600b55600154600c55600254600d55600354600e55600a80546001600160401b03858116600160401b026001600160801b031990921690871617179055611a25838561170b565b600a805467ffffffffffffffff60801b1916600160801b6001600160401b0393841602179055815460ff60401b1916825560405190831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b600a545f906115db906001600160401b03600160401b82048116911661170b565b80516006805460208401516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560408101516007556111b7434283612018565b600f545f9060ff16611b1457611b0f8383612346565b611b25565b8160105484611b23919061334f565b115b9392505050565b611b34611c16565b6001600160a01b038116611b6257604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6111b78161249e565b611b7660095f61298d565b5f5b81518110156111d5576009828281518110611b9557611b95613362565b6020908102919091018101518254600181810185555f94855293839020825160029092020180549383015160408401516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990971691909416179490941793909316178255606001519082015501611b78565b33611c487f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146112605760405163118cdaa760e01b8152336004820152602401611b59565b306001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9161480611cf757507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316611ceb5f5160206138315f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156112605760405163703e46dd60e11b815260040160405180910390fd5b611d1d611c16565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200161099c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611db0575060408051601f3d908101601f19168201909252611dad918101906133a3565b60015b611dd857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611b59565b5f5160206138315f395f51905f528114611e0857604051632a87526960e21b815260048101829052602401611b59565b611e12838361250e565b505050565b306001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146112605760405163703e46dd60e11b815260040160405180910390fd5b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806111d55760405163016c173360e21b815260040160405180910390fd5b5f611eaa6109f0565b9050611eb46129ab565b84516001600160401b0390811682526020808701805183169184019190915260408088015190840152600c546060840152600d546080840152600e5460a0840152600b5460c0840152600a549051600160401b9091048216911610801590611f245750611f2485602001516110af565b15611f5657602084015160e0820152604084015161010082015260608401516101208201528351610140820152611f7a565b600c5460e0820152600d54610100820152600e54610120820152600b546101408201525b60405163fc8660c760e01b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99063fc8660c790611fb59085908590889060040161359c565b602060405180830381865af4158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff491906137bc565b612011576040516309bde33960e01b815260040160405180910390fd5b5050505050565b6009541580159061208d575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b031690811061205857612058613362565b5f91825260209091206002909102015461208290600160401b90046001600160401b031684613330565b6001600160401b0316115b1561212057600854600980549091600160c01b90046001600160401b03169081106120ba576120ba613362565b5f9182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b03169060186120fa836137db565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b03948516815292841660208085019182528301518516848301908152929091015160608401908152600980546001810182555f91909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b612209612563565b6111b7816125ac565b611260612563565b82516001600160401b031615158061223e575060208301516001600160401b031615155b8061224b57506020820151155b8061225857506040820151155b8061226557506060820151155b8061226f57508151155b806122815750610e108163ffffffff16105b8061229557506301e133808163ffffffff16115b156122b3576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b0319938416919095169081178517909355604096870151600581905586515f5590860151600155958501516002556060909401516003556006805490941617179091556007919091556008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6009545f9043841180612357575080155b806123a15750600854600980549091600160c01b90046001600160401b031690811061238557612385613362565b5f9182526020909120600290910201546001600160401b031684105b156123bf5760405163b0b4387760e01b815260040160405180910390fd5b5f80806123cd60018561334f565b90505b8161246957600854600160c01b90046001600160401b0316811061246957866009828154811061240257612402613362565b5f9182526020909120600290910201546001600160401b03161161245757600191506009818154811061243757612437613362565b5f9182526020909120600290910201546001600160401b03169250612469565b8061246181613805565b9150506123d0565b816124875760405163b0b4387760e01b815260040160405180910390fd5b85612492848961334f565b11979650505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b612517826125b4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561255b57611e128282612617565b6111d5612689565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661126057604051631afcd79f60e31b815260040160405180910390fd5b611b34612563565b806001600160a01b03163b5f036125e957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b59565b5f5160206138315f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612633919061381a565b5f60405180830381855af49150503d805f811461266b576040519150601f19603f3d011682016040523d82523d5f602084013e612670565b606091505b50915091506126808583836126a8565b95945050505050565b34156112605760405163b398979f60e01b815260040160405180910390fd5b6060826126b857611b0f826126ff565b81511580156126cf57506001600160a01b0384163b155b156126f857604051639996b31560e01b81526001600160a01b0385166004820152602401611b59565b5092915050565b80511561270f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806102c001604052805f81526020015f815260200161275b60405180604001604052805f81526020015f81525090565b815260200161277b60405180604001604052805f81526020015f81525090565b815260200161279b60405180604001604052805f81526020015f81525090565b81526020016127bb60405180604001604052805f81526020015f81525090565b81526020016127db60405180604001604052805f81526020015f81525090565b81526020016127fb60405180604001604052805f81526020015f81525090565b815260200161281b60405180604001604052805f81526020015f81525090565b815260200161283b60405180604001604052805f81526020015f81525090565b815260200161285b60405180604001604052805f81526020015f81525090565b815260200161287b60405180604001604052805f81526020015f81525090565b815260200161289b60405180604001604052805f81526020015f81525090565b81526020016128bb60405180604001604052805f81526020015f81525090565b81526020016128db60405180604001604052805f81526020015f81525090565b81526020016128fb60405180604001604052805f81526020015f81525090565b815260200161291b60405180604001604052805f81526020015f81525090565b815260200161293b60405180604001604052805f81526020015f81525090565b815260200161295b60405180604001604052805f81526020015f81525090565b815260200161297b60405180604001604052805f81526020015f81525090565b81526020015f81526020015f81525090565b5080545f8255600202905f5260205f20908101906111b791906129ca565b604051806101600160405280600b906020820280368337509192915050565b5b808211156129ef5780546001600160c01b03191681555f60018201556002016129cb565b5090565b80356001600160a01b038116811461110c575f5ffd5b5f60208284031215612a19575f5ffd5b611b25826129f3565b5f60208284031215612a32575f5ffd5b5035919050565b5f6105008201905082518252602083015160208301526040830151612a6b604084018280518252602090810151910152565b50606083015180516080840152602081015160a0840152506080830151805160c0840152602081015160e08401525060a0830151805161010084015260208101516101208401525060c0830151805161014084015260208101516101608401525060e0830151805161018084015260208101516101a08401525061010083015180516101c084015260208101516101e08401525061012083015180516102008401526020810151610220840152506101408301518051610240840152602081015161026084015250610160830151805161028084015260208101516102a08401525061018083015180516102c084015260208101516102e0840152506101a083015180516103008401526020810151610320840152506101c083015180516103408401526020810151610360840152506101e0830151805161038084015260208101516103a08401525061020083015180516103c084015260208101516103e08401525061022083015180516104008401526020810151610420840152506102408301518051610440840152602081015161046084015250610260830151805161048084015260208101516104a0840152506102808301516104c08301526102a0909201516104e09091015290565b80356001600160401b038116811461110c575f5ffd5b5f60208284031215612c60575f5ffd5b611b2582612c3a565b634e487b7160e01b5f52604160045260245ffd5b6040516102e081016001600160401b0381118282101715612ca057612ca0612c69565b60405290565b604051608081016001600160401b0381118282101715612ca057612ca0612c69565b604051601f8201601f191681016001600160401b0381118282101715612cf057612cf0612c69565b604052919050565b5f60608284031215612d08575f5ffd5b604051606081016001600160401b0381118282101715612d2a57612d2a612c69565b604052905080612d3983612c3a565b8152612d4760208401612c3a565b6020820152604092830135920191909152919050565b5f60408284031215612d6d575f5ffd5b604080519081016001600160401b0381118282101715612d8f57612d8f612c69565b604052823581526020928301359281019290925250919050565b5f6104808284031215612dba575f5ffd5b612dc2612c7d565b9050612dce8383612d5d565b8152612ddd8360408401612d5d565b6020820152612def8360808401612d5d565b6040820152612e018360c08401612d5d565b6060820152612e14836101008401612d5d565b6080820152612e27836101408401612d5d565b60a0820152612e3a836101808401612d5d565b60c0820152612e4d836101c08401612d5d565b60e0820152612e60836102008401612d5d565b610100820152612e74836102408401612d5d565b610120820152612e88836102808401612d5d565b610140820152612e9c836102c08401612d5d565b610160820152612eb0836103008401612d5d565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f6104e08385031215612f46575f5ffd5b612f508484612cf8565b9150612f5f8460608501612da9565b90509250929050565b803563ffffffff8116811461110c575f5ffd5b5f60208284031215612f8b575f5ffd5b611b2582612f68565b5f5f60408385031215612fa5575f5ffd5b612fae836129f3565b915060208301356001600160401b03811115612fc8575f5ffd5b8301601f81018513612fd8575f5ffd5b80356001600160401b03811115612ff157612ff1612c69565b613004601f8201601f1916602001612cc8565b818152866020838501011115613018575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60808284031215613047575f5ffd5b61304f612ca6565b8235815260208084013590820152604080840135908201526060928301359281019290925250919050565b5f6080828403121561308a575f5ffd5b611b258383613037565b5f5f5f61056084860312156130a7575f5ffd5b6130b18585612cf8565b92506130c08560608601613037565b91506130cf8560e08601612da9565b90509250925092565b5f5f604083850312156130e9575f5ffd5b6130f283612c3a565b9150612f5f60208401612c3a565b5f5f5f5f6101208587031215613114575f5ffd5b61311e8686612cf8565b935061312d8660608701613037565b925061313b60e08601612f68565b915061314a61010086016129f3565b905092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6060828403121561319a575f5ffd5b611b258383612cf8565b5f5f604083850312156131b5575f5ffd5b50508035926020909101359150565b5f602082840312156131d4575f5ffd5b81356001600160401b038111156131e9575f5ffd5b8201601f810184136131f9575f5ffd5b80356001600160401b0381111561321257613212612c69565b61322160208260051b01612cc8565b8082825260208201915060208360071b850101925086831115613242575f5ffd5b6020840193505b828410156132b25760808488031215613260575f5ffd5b613268612ca6565b61327185612c3a565b815261327f60208601612c3a565b602082015261329060408601612c3a565b6040820152606085810135908201528252608090930192602090910190613249565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156111a0576111a06132bc565b634e487b7160e01b5f52601260045260245ffd5b5f6001600160401b0383168061331b5761331b6132ef565b806001600160401b0384160691505092915050565b6001600160401b0382811682821603908111156111a0576111a06132bc565b818103818111156111a0576111a06132bc565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b0383168061338e5761338e6132ef565b806001600160401b0384160491505092915050565b5f602082840312156133b3575f5ffd5b5051919050565b805f5b600b8110156133dc5781518452602093840193909101906001016133bd565b50505050565b6133f782825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e0840152506080810151805161010084015260208101516101208401525060a0810151805161014084015260208101516101608401525060c0810151805161018084015260208101516101a08401525060e081015180516101c084015260208101516101e08401525061010081015180516102008401526020810151610220840152506101208101518051610240840152602081015161026084015250610140810151805161028084015260208101516102a08401525061016081015180516102c084015260208101516102e08401525061018081015180516103008401526020810151610320840152506101a08101516103408301526101c08101516103608301526101e08101516103808301526102008101516103a08301526102208101516103c08301526102408101516103e08301526102608101516104008301526102808101516104208301526102a08101516104408301526102c0015161046090910152565b5f610ae082019050845182526020850151602083015260408501516135ce604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151805161010084015260208101516101208401525060c0850151805161014084015260208101516101608401525060e0850151805161018084015260208101516101a08401525061010085015180516101c084015260208101516101e08401525061012085015180516102008401526020810151610220840152506101408501518051610240840152602081015161026084015250610160850151805161028084015260208101516102a08401525061018085015180516102c084015260208101516102e0840152506101a085015180516103008401526020810151610320840152506101c085015180516103408401526020810151610360840152506101e0850151805161038084015260208101516103a08401525061020085015180516103c084015260208101516103e08401525061022085015180516104008401526020810151610420840152506102408501518051610440840152602081015161046084015250610260850151805161048084015260208101516104a0840152506102808501516104c08301526102a08501516104e08301526137a66105008301856133ba565b6137b46106608301846133e2565b949350505050565b5f602082840312156137cc575f5ffd5b81518015158114611b25575f5ffd5b5f6001600160401b0382166001600160401b0381036137fc576137fc6132bc565b60010192915050565b5f81613813576138136132bc565b505f190190565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512": { + "balance": "0x0", + "code": "0x6080604052600436106101ba575f3560e01c8063826e41fc116100f2578063b5adea3c11610092578063e030330111610062578063e030330114610640578063f2fde38b1461065f578063f56761601461067e578063f9e50d191461069d575f5ffd5b8063b5adea3c14610567578063c23b9e9e146105be578063c8e5e498146105f6578063d24d933d14610611575f5ffd5b806396c1ca61116100cd57806396c1ca61146104975780639baa3cc9146104b65780639fdb54a7146104d5578063ad3cb1cc1461052a575f5ffd5b8063826e41fc146103f45780638584d23f1461041f5780638da5cb5b1461045b575f5ffd5b8063313df7b11161015d5780634f1ef286116101385780634f1ef286146103a557806352d1902d146103b857806369cc6a04146103cc578063715018a6146103e0575f5ffd5b8063313df7b114610311578063378ec23b14610348578063426d319414610364575f5ffd5b806312173c2c1161019857806312173c2c146102675780632063d4f7146102885780632d52aad6146102a75780632f79889d146102d3575f5ffd5b8063013fa5fc146101be57806302b592f3146101df5780630d8e6e2c1461023c575b5f5ffd5b3480156101c9575f5ffd5b506101dd6101d8366004612189565b6106b1565b005b3480156101ea575f5ffd5b506101fe6101f93660046121a2565b610764565b60405161023394939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b348015610247575f5ffd5b5060408051600181525f6020820181905291810191909152606001610233565b348015610272575f5ffd5b5061027b6107ad565b60405161023391906121b9565b348015610293575f5ffd5b506101dd6102a2366004612510565b6107c2565b3480156102b2575f5ffd5b506101dd6102c13660046121a2565b600a805460ff19166001179055600b55565b3480156102de575f5ffd5b506008546102f990600160c01b90046001600160401b031681565b6040516001600160401b039091168152602001610233565b34801561031c575f5ffd5b50600854610330906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610353575f5ffd5b50435b604051908152602001610233565b34801561036f575f5ffd5b505f546001546002546003546103859392919084565b604080519485526020850193909352918301526060820152608001610233565b6101dd6103b33660046126c0565b61091c565b3480156103c3575f5ffd5b5061035661093b565b3480156103d7575f5ffd5b506101dd610956565b3480156103eb575f5ffd5b506101dd6109c4565b3480156103ff575f5ffd5b506008546001600160a01b031615155b6040519015158152602001610233565b34801561042a575f5ffd5b5061043e6104393660046121a2565b6109e5565b604080519283526001600160401b03909116602083015201610233565b348015610466575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610330565b3480156104a2575f5ffd5b506101dd6104b1366004612776565b610b10565b3480156104c1575f5ffd5b506101dd6104d036600461278f565b610b99565b3480156104e0575f5ffd5b50600654600754610504916001600160401b0380821692600160401b909204169083565b604080516001600160401b03948516815293909216602084015290820152606001610233565b348015610535575f5ffd5b5061055a604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102339190612817565b348015610572575f5ffd5b506101dd61058136600461284c565b80516006805460208401516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560400151600755565b3480156105c9575f5ffd5b506008546105e190600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610233565b348015610601575f5ffd5b506101dd600a805460ff19169055565b34801561061c575f5ffd5b50600454600554610504916001600160401b0380821692600160401b909204169083565b34801561064b575f5ffd5b5061040f61065a366004612866565b610cbb565b34801561066a575f5ffd5b506101dd610679366004612189565b610cf0565b348015610689575f5ffd5b506101dd610698366004612886565b610d32565b3480156106a8575f5ffd5b50600954610356565b6106b9610ddd565b6001600160a01b0381166106e05760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b039081169082160361070f5760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b60098181548110610773575f80fd5b5f918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6107b5611ea4565b6107bd610e38565b905090565b6008546001600160a01b0316151580156107e757506008546001600160a01b03163314155b15610805576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b03918216911611158061083e575060065460208301516001600160401b03600160401b9092048216911611155b1561085c5760405163051c46ef60e01b815260040160405180910390fd5b6108698260400151611468565b61087382826114a9565b81516006805460208501516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560408201516007556108c06108b94390565b428461159d565b81602001516001600160401b0316825f01516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6846040015160405161091091815260200190565b60405180910390a35050565b610924611786565b61092d8261182a565b610937828261186b565b5050565b5f61094461192c565b505f516020612e605f395f51905f5290565b61095e610ddd565b6008546001600160a01b0316156109a957600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c02450905f90a1565b60405163a863aec960e01b815260040160405180910390fd5b565b6109cc610ddd565b6040516317d5c96560e11b815260040160405180910390fd5b600980545f918291906109f9600183612992565b81548110610a0957610a096129a5565b5f918252602090912060029091020154600160801b90046001600160401b03168410610a4857604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b81811015610b09578460098281548110610a7857610a786129a5565b5f918252602090912060029091020154600160801b90046001600160401b03161115610b015760098181548110610ab157610ab16129a5565b905f5260205f2090600202016001015460098281548110610ad457610ad46129a5565b905f5260205f2090600202015f0160109054906101000a90046001600160401b0316935093505050915091565b600101610a5c565b5050915091565b610b18610ddd565b610e108163ffffffff161080610b3757506301e133808163ffffffff16115b80610b55575060085463ffffffff600160a01b909104811690821611155b15610b73576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bdd5750825b90505f826001600160401b03166001148015610bf85750303b155b905081158015610c06575080155b15610c245760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4e57845460ff60401b1916600160401b1785555b610c5786611975565b610c5f611986565b610c6a89898961198e565b8315610cb057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600a545f9060ff16610cd657610cd18383611aba565b610ce7565b81600b5484610ce59190612992565b115b90505b92915050565b610cf8610ddd565b6001600160a01b038116610d2657604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610d2f81611c12565b50565b610d3d60095f612109565b5f5b8151811015610937576009828281518110610d5c57610d5c6129a5565b6020908102919091018101518254600181810185555f94855293839020825160029092020180549383015160408401516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990971691909416179490941793909316178255606001519082015501610d3f565b33610e0f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146109c25760405163118cdaa760e01b8152336004820152602401610d1d565b610e40611ea4565b620100008152600760208201527f1369aa78dc50135ad756d62c97a64a0edcd30066584168200d9d1facf82ca4f56040820151527f2cf23456d712b06f8e3aa5bf0acc3e46a3d094602a3a2b99d873bba05a4391476020604083015101527f08a35f379d2d2c490a51006697275e4db79b67b4a175c1477e262d29e25e42316060820151527f218828131bb7940ccc88c561b299755af4bf0b71ed930b129e8be0a1218139ea6020606083015101527f23a2172436c1145b36d5bc6d3b31fa1610c73a543ea443918aaa3ee175f9921b6080820151527f2502adf404d62877c310214ae9942e93c40b154d34c024bab48a3ca057e60a116020608083015101527f1bb88ada91ab7734882f7826b81275320081ac485f9cf8bfbc3ba54b6eb4dff360a0820151527f25c74a27e9a3b20114a3a91f31c20f01777e7ed913e0ef949f0285e2e7c2069b602060a083015101527f12b0ce76ac8b0dbd405ebc5dd0bae0f91aed50033c7ea36fc62aaba2b98333dc60c0820151527f185b42af49dd1cbe337a84f74b704172428e754a0bea024ab3eb2f996afb2c47602060c083015101527f21f53ad4538b45438bbf0521446070223920e3df6f9022a64cc16d7f94e85c0860e0820151527f2278ac3dedfdac7feb9725a022497175518eada52c8932fc40e6e75bea889fb8602060e083015101527f0876136f81c16298487bfb1be74d4a3487ec45645ab1d09dc2e5b865d62230df610100820151527f098c641c947ecd798dfd5e1b2fe428024cdf03061a53ff774ea8a9e3de9d3f2b602061010083015101527f15eaac2c6232d2268bf79dc47ed9666f992fb3d96ad23fb21690c21586c5472e610120820151527f0f10f1ffc54881287fda6f200bc85d8245b508d844a974098a41119867b325d0602061012083015101527f0895ceea40b085534e9739ca5442ba48b3a3592affde2b509df74521b47d8ab0610140820151527f2e12ec5800ac92fe2a8e7040bc5b435b9eb71e31380173fa7688bf81fcbba455602061014083015101527f2f5384eb5653e47576efe248e7903f463243414bfed5237dda750df3996bd918610160820151527f1c3cd6b11da8704cdc871ab4fa323d7ee57bd40ce165b49a56d5ef6489cd251a602061016083015101527f13579994957ce1554cc1e5b194fb63c9513707f627414f8442681ae736e36450610180820151527f26c9bdcd96d8e420b12974ade93ad9c312c4185213d2f6831a7c625a18890e95602061018083015101527f0cc70a1d542a9a1535ae5d9201696adc5c99c1bcebd9951dfa8afec79fa0b6446101a0820151527f10b043d9f1869181b96579d6616efc17a5df7b84c4d431d966c9094bf1e8815360206101a083015101527f198a65309d131a43b0ab1c47659d0336cfbf62b27f4727106b4fd971c73dd4036101c0820151527f23df99eac3c1947903b211b800efeb76f47d5e87b7414866543492e8c7798d1a60206101c083015101527f221cc5e47b81ce8dcfa72ef981916a8eddef12fcde59c56c62830c126ebef0de6101e0820151527f231f99340c35c9e09652a6df73c9cec5d88738cb71ff45716fdc9e9e45a4926e60206101e083015101527f2c9f1489fce0f263e03f3e97bf0a72273aafcca9325ff47786adb04a52a6d22c610200820151527f21f66e28f17e01e9fd593e16d022c4eca25bd5db96daec606d97b604cc414838602061020083015101527f2015745604a9571e226bd99043cfaf1f96267cc5de67f497563ff81100531d26610220820151527f206889ff4c58dd08ee1107191a2a5bc5dbae55c49d7d8397801799868d10f805602061022083015101527f21062ab8f8ecd8932b429a1eb8614b1e03db61bff6a5cd2d5d7ea193e90e9927610240820151527f217f9b27b934b88ffe555d682dfe6e8b6d503f86b14bbd96342bc48487a60b27602061024083015101527f1c9eda2d195cb731f903235ead6a4f7c66db49da713ecb27afee076f0eea7154610260820151527f2647c161c00b90258e1cefebb17481f8a5d91b5f9dca626e3e89a9215bcca16a602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806109375760405163016c173360e21b815260040160405180910390fd5b5f6114b26107ad565b90506114bc612127565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a08301525f5460c08301525163ce537a7760e01b8152735fbdb2315678afecb367f032d93f642f64180aa39063ce537a779061153b90859085908890600401612b95565b602060405180830381865af4158015611556573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157a9190612db5565b611597576040516309bde33960e01b815260040160405180910390fd5b50505050565b60095415801590611612575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b03169081106115dd576115dd6129a5565b5f91825260209091206002909102015461160790600160401b90046001600160401b031684612dd4565b6001600160401b0316115b156116a557600854600980549091600160c01b90046001600160401b031690811061163f5761163f6129a5565b5f9182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b031690601861167f83612df3565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b03948516815292841660208085019182528301518516848301908152929091015160608401908152600980546001810182555f91909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f051216148061180c57507f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f05126001600160a01b03166118005f516020612e605f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156109c25760405163703e46dd60e11b815260040160405180910390fd5b611832610ddd565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d90602001610759565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118c5575060408051601f3d908101601f191682019092526118c291810190612e1d565b60015b6118ed57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610d1d565b5f516020612e605f395f51905f52811461191d57604051632a87526960e21b815260048101829052602401610d1d565b6119278383611c82565b505050565b306001600160a01b037f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f051216146109c25760405163703e46dd60e11b815260040160405180910390fd5b61197d611cd7565b610d2f81611d20565b6109c2611cd7565b82516001600160401b03161515806119b2575060208301516001600160401b031615155b806119bf57506020820151155b806119cc57506040820151155b806119d957506060820151155b806119e357508151155b806119f55750610e108163ffffffff16105b80611a0957506301e133808163ffffffff16115b15611a27576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b0319938416919095169081178517909355604096870151600581905586515f5590860151600155958501516002556060909401516003556006805490941617179091556007919091556008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6009545f9043841180611acb575080155b80611b155750600854600980549091600160c01b90046001600160401b0316908110611af957611af96129a5565b5f9182526020909120600290910201546001600160401b031684105b15611b335760405163b0b4387760e01b815260040160405180910390fd5b5f8080611b41600185612992565b90505b81611bdd57600854600160c01b90046001600160401b03168110611bdd578660098281548110611b7657611b766129a5565b5f9182526020909120600290910201546001600160401b031611611bcb576001915060098181548110611bab57611bab6129a5565b5f9182526020909120600290910201546001600160401b03169250611bdd565b80611bd581612e34565b915050611b44565b81611bfb5760405163b0b4387760e01b815260040160405180910390fd5b85611c068489612992565b11979650505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611c8b82611d28565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611ccf576119278282611d8b565b610937611dfd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166109c257604051631afcd79f60e31b815260040160405180910390fd5b610cf8611cd7565b806001600160a01b03163b5f03611d5d57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610d1d565b5f516020612e605f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611da79190612e49565b5f60405180830381855af49150503d805f8114611ddf576040519150601f19603f3d011682016040523d82523d5f602084013e611de4565b606091505b5091509150611df4858383611e1c565b95945050505050565b34156109c25760405163b398979f60e01b815260040160405180910390fd5b606082611e3157611e2c82611e7b565b611e74565b8151158015611e4857506001600160a01b0384163b155b15611e7157604051639996b31560e01b81526001600160a01b0385166004820152602401610d1d565b50805b9392505050565b805115611e8b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806102c001604052805f81526020015f8152602001611ed760405180604001604052805f81526020015f81525090565b8152602001611ef760405180604001604052805f81526020015f81525090565b8152602001611f1760405180604001604052805f81526020015f81525090565b8152602001611f3760405180604001604052805f81526020015f81525090565b8152602001611f5760405180604001604052805f81526020015f81525090565b8152602001611f7760405180604001604052805f81526020015f81525090565b8152602001611f9760405180604001604052805f81526020015f81525090565b8152602001611fb760405180604001604052805f81526020015f81525090565b8152602001611fd760405180604001604052805f81526020015f81525090565b8152602001611ff760405180604001604052805f81526020015f81525090565b815260200161201760405180604001604052805f81526020015f81525090565b815260200161203760405180604001604052805f81526020015f81525090565b815260200161205760405180604001604052805f81526020015f81525090565b815260200161207760405180604001604052805f81526020015f81525090565b815260200161209760405180604001604052805f81526020015f81525090565b81526020016120b760405180604001604052805f81526020015f81525090565b81526020016120d760405180604001604052805f81526020015f81525090565b81526020016120f760405180604001604052805f81526020015f81525090565b81526020015f81526020015f81525090565b5080545f8255600202905f5260205f2090810190610d2f9190612145565b6040518060e001604052806007906020820280368337509192915050565b5b8082111561216a5780546001600160c01b03191681555f6001820155600201612146565b5090565b80356001600160a01b0381168114612184575f5ffd5b919050565b5f60208284031215612199575f5ffd5b610ce78261216e565b5f602082840312156121b2575f5ffd5b5035919050565b5f61050082019050825182526020830151602083015260408301516121eb604084018280518252602090810151910152565b50606083015180516080840152602081015160a0840152506080830151805160c0840152602081015160e08401525060a0830151805161010084015260208101516101208401525060c0830151805161014084015260208101516101608401525060e0830151805161018084015260208101516101a08401525061010083015180516101c084015260208101516101e08401525061012083015180516102008401526020810151610220840152506101408301518051610240840152602081015161026084015250610160830151805161028084015260208101516102a08401525061018083015180516102c084015260208101516102e0840152506101a083015180516103008401526020810151610320840152506101c083015180516103408401526020810151610360840152506101e0830151805161038084015260208101516103a08401525061020083015180516103c084015260208101516103e08401525061022083015180516104008401526020810151610420840152506102408301518051610440840152602081015161046084015250610260830151805161048084015260208101516104a0840152506102808301516104c08301526102a0909201516104e09091015290565b634e487b7160e01b5f52604160045260245ffd5b6040516102e081016001600160401b03811182821017156123f1576123f16123ba565b60405290565b604051608081016001600160401b03811182821017156123f1576123f16123ba565b604051601f8201601f191681016001600160401b0381118282101715612441576124416123ba565b604052919050565b80356001600160401b0381168114612184575f5ffd5b5f6060828403121561246f575f5ffd5b604051606081016001600160401b0381118282101715612491576124916123ba565b6040529050806124a083612449565b81526124ae60208401612449565b6020820152604092830135920191909152919050565b5f604082840312156124d4575f5ffd5b604080519081016001600160401b03811182821017156124f6576124f66123ba565b604052823581526020928301359281019290925250919050565b5f5f8284036104e0811215612523575f5ffd5b61252d858561245f565b9250610480605f1982011215612541575f5ffd5b5061254a6123ce565b61255785606086016124c4565b81526125668560a086016124c4565b60208201526125788560e086016124c4565b604082015261258b8561012086016124c4565b606082015261259e8561016086016124c4565b60808201526125b1856101a086016124c4565b60a08201526125c4856101e086016124c4565b60c08201526125d78561022086016124c4565b60e08201526125ea8561026086016124c4565b6101008201526125fe856102a086016124c4565b610120820152612612856102e086016124c4565b6101408201526126268561032086016124c4565b61016082015261263a8561036086016124c4565b6101808201526103a08401356101a08201526103c08401356101c08201526103e08401356101e08201526104008401356102008201526104208401356102208201526104408401356102408201526104608401356102608201526104808401356102808201526104a08401356102a08201526104c0909301356102c08401525092909150565b5f5f604083850312156126d1575f5ffd5b6126da8361216e565b915060208301356001600160401b038111156126f4575f5ffd5b8301601f81018513612704575f5ffd5b80356001600160401b0381111561271d5761271d6123ba565b612730601f8201601f1916602001612419565b818152866020838501011115612744575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b803563ffffffff81168114612184575f5ffd5b5f60208284031215612786575f5ffd5b610ce782612763565b5f5f5f5f8486036101208112156127a4575f5ffd5b6127ae878761245f565b94506080605f19820112156127c1575f5ffd5b506127ca6123f7565b60608681013582526080870135602083015260a0870135604083015260c08701359082015292506127fd60e08601612763565b915061280c610100860161216e565b905092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6060828403121561285c575f5ffd5b610ce7838361245f565b5f5f60408385031215612877575f5ffd5b50508035926020909101359150565b5f60208284031215612896575f5ffd5b81356001600160401b038111156128ab575f5ffd5b8201601f810184136128bb575f5ffd5b80356001600160401b038111156128d4576128d46123ba565b6128e360208260051b01612419565b8082825260208201915060208360071b850101925086831115612904575f5ffd5b6020840193505b828410156129745760808488031215612922575f5ffd5b61292a6123f7565b61293385612449565b815261294160208601612449565b602082015261295260408601612449565b604082015260608581013590820152825260809093019260209091019061290b565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610cea57610cea61297e565b634e487b7160e01b5f52603260045260245ffd5b805f5b60078110156115975781518452602093840193909101906001016129bc565b6129f082825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e0840152506080810151805161010084015260208101516101208401525060a0810151805161014084015260208101516101608401525060c0810151805161018084015260208101516101a08401525060e081015180516101c084015260208101516101e08401525061010081015180516102008401526020810151610220840152506101208101518051610240840152602081015161026084015250610140810151805161028084015260208101516102a08401525061016081015180516102c084015260208101516102e08401525061018081015180516103008401526020810151610320840152506101a08101516103408301526101c08101516103608301526101e08101516103808301526102008101516103a08301526102208101516103c08301526102408101516103e08301526102608101516104008301526102808101516104208301526102a08101516104408301526102c0015161046090910152565b5f610a608201905084518252602085015160208301526040850151612bc7604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151805161010084015260208101516101208401525060c0850151805161014084015260208101516101608401525060e0850151805161018084015260208101516101a08401525061010085015180516101c084015260208101516101e08401525061012085015180516102008401526020810151610220840152506101408501518051610240840152602081015161026084015250610160850151805161028084015260208101516102a08401525061018085015180516102c084015260208101516102e0840152506101a085015180516103008401526020810151610320840152506101c085015180516103408401526020810151610360840152506101e0850151805161038084015260208101516103a08401525061020085015180516103c084015260208101516103e08401525061022085015180516104008401526020810151610420840152506102408501518051610440840152602081015161046084015250610260850151805161048084015260208101516104a0840152506102808501516104c08301526102a08501516104e0830152612d9f6105008301856129b9565b612dad6105e08301846129db565b949350505050565b5f60208284031215612dc5575f5ffd5b81518015158114611e74575f5ffd5b6001600160401b038281168282160390811115610cea57610cea61297e565b5f6001600160401b0382166001600160401b038103612e1457612e1461297e565b60010192915050565b5f60208284031215612e2d575f5ffd5b5051919050565b5f81612e4257612e4261297e565b505f190190565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000", + "code": "0x", + "nonce": 46, + "storage": {} + }, + "0x0000000000000000000000000000000000000000": { + "balance": "0x3c58cefa618d2600", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x0000000000000000000000000000000000000004": { + "balance": "0x0", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x0b6872da7070dc6237f3be0685cf32032638ba40": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000001bb26b99a924018c063ae4be222997aadfdec0c3", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0x0dead0118ed1ce6ad508bcedceded7987fc0566b": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c8063622d56f1116100e3578063b51f9c2b1161008c578063c993f27c11610066578063c993f27c1461045f578063cbeda5a714610472578063f3edcbe11461048557600080fd5b8063b51f9c2b146103ba578063ba7903db14610411578063becbdf4a1461043857600080fd5b806378ecabce116100bd57806378ecabce146103715780638970ac4414610394578063b23cc044146103a757600080fd5b8063622d56f1146103035780636624856a1461032a5780636ab5f6611461035157600080fd5b8063318b1b801161014557806354fd4d501161011f57806354fd4d501461029557806358084273146102ce578063604aa628146102e357600080fd5b8063318b1b801461024857806335e80ab31461025b57806341fe53851461028257600080fd5b80631481a724116101765780631481a724146101f65780631d8a4e921461021d57806330e9012c1461023357600080fd5b806303dbe68c146101925780630e9d5cb9146101d6575b600080fd5b6101b97f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f182881565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e96101e4366004611393565b610498565b6040516101cd9190611436565b6101b97f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa484881565b610225610551565b6040519081526020016101cd565b61023b6105da565b6040516101cd9190611449565b6101b96102563660046115b1565b6106ee565b6101b97f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b6101e96102903660046115ca565b610799565b60408051808201909152600581527f362e302e3100000000000000000000000000000000000000000000000000000060208201526101e9565b6102e16102dc366004611602565b61084f565b005b6102f66102f1366004611715565b610955565b6040516101cd91906118aa565b6101b97f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db81565b6101b97f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61036461035f366004611906565b610a70565b6040516101cd9190611942565b61038461037f3660046115b1565b610bbe565b60405190151581526020016101cd565b6101e96103a2366004611b02565b610c63565b6102e16103b5366004611be6565b610ccf565b6103c2610dd0565b6040516101cd919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6101b97f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd81565b6101b97f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda981565b6102e161046d366004611c2f565b610e7d565b6102e1610480366004611be6565b610f83565b6101e9610493366004611c4c565b611084565b6040517f0e9d5cb90000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd1690630e9d5cb99061050490879087908790600401611c79565b600060405180830381865afa158015610521573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105499190810190611cdb565b949350505050565b60007f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190611d52565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa1580156106ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190611d76565b6040517f318b1b80000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b03169063318b1b8090602401602060405180830381865afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190611ece565b92915050565b6040517f41fe53850000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd16906341fe5385906108039086908690600401611eeb565b600060405180830381865afa158015610820573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108489190810190611cdb565b9392505050565b6108576110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b1630036108b9576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816040516024016108cc9190611ffd565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f580842730000000000000000000000000000000000000000000000000000000017905290506109507f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa484882611133565b505050565b606061095f6110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b1630036109c1576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826040516024016109d491906120f0565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f604aa6280000000000000000000000000000000000000000000000000000000017905290506000610a5a7f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda983611133565b9050808060200190518101906105499190612225565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152610af16110ee565b6040517fcefe12230000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db169063cefe122390610b7a9085907f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc990339060040161240e565b6101e0604051808303816000875af1158015610b9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079391906125e2565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079391906126f9565b6040517f8970ac440000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd1690638970ac449061050490879087908790600401612716565b610cd76110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b163003610d39576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081604051602401610d4c9190612787565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb23cc0440000000000000000000000000000000000000000000000000000000017905290506109507f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda982611133565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d591906127f2565b610e856110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b163003610ee7576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038216602482015260009060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc993f27c0000000000000000000000000000000000000000000000000000000017905290506109507f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f182882611133565b610f8b6110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b163003610fed576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081604051602401611000919061288a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbeda5a70000000000000000000000000000000000000000000000000000000017905290506109507f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f182882611133565b6040517ff3edcbe10000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd169063f3edcbe19061080390869086906004016128e9565b6110fa62010000610bbe565b15611131576040517fe232d67700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080846001600160a01b031684604051611150919061293e565b600060405180830381855af49150503d806000811461118b576040519150601f19603f3d011682016040523d82523d6000602084013e611190565b606091505b50915091508161054957805160208201fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156111f4576111f46111a2565b60405290565b604051610180810167ffffffffffffffff811182821017156111f4576111f46111a2565b604051610240810167ffffffffffffffff811182821017156111f4576111f46111a2565b6040516101e0810167ffffffffffffffff811182821017156111f4576111f46111a2565b604051601f8201601f1916810167ffffffffffffffff8111828210171561128f5761128f6111a2565b604052919050565b6001600160a01b03811681146112ac57600080fd5b50565b80356112ba81611297565b919050565b6000608082840312156112d157600080fd5b6040516080810181811067ffffffffffffffff821117156112f4576112f46111a2565b604052905080823561130581611297565b808252506020830135602082015260408301356040820152606083013561132b81611297565b6060919091015292915050565b80151581146112ac57600080fd5b80356112ba81611338565b60006040828403121561136357600080fd5b61136b6111d1565b9050813561137881611297565b8152602082013561138881611297565b602082015292915050565b600080600060e084860312156113a857600080fd5b6113b285856112bf565b925060808401356113c281611338565b91506113d18560a08601611351565b90509250925092565b60005b838110156113f55781810151838201526020016113dd565b83811115611404576000848401525b50505050565b600081518084526114228160208601602086016113da565b601f01601f19169290920160200192915050565b602081526000610848602083018461140a565b81516001600160a01b031681526102408101602083015161147560208401826001600160a01b03169052565b50604083015161149060408401826001600160a01b03169052565b5060608301516114ab60608401826001600160a01b03169052565b5060808301516114c660808401826001600160a01b03169052565b5060a08301516114e160a08401826001600160a01b03169052565b5060c08301516114fc60c08401826001600160a01b03169052565b5060e083015161151760e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102208085015191821681850152905b505092915050565b6000602082840312156115c357600080fd5b5035919050565b60008060a083850312156115dd57600080fd5b6115e784846112bf565b915060808301356115f781611338565b809150509250929050565b60006020828403121561161457600080fd5b813567ffffffffffffffff81111561162b57600080fd5b8201610160818503121561084857600080fd5b600067ffffffffffffffff821115611658576116586111a2565b5060051b60200190565b600067ffffffffffffffff82111561167c5761167c6111a2565b50601f01601f191660200190565b600082601f83011261169b57600080fd5b81356116ae6116a982611662565b611266565b8181528460208386010111156116c357600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146112ba57600080fd5b67ffffffffffffffff811681146112ac57600080fd5b80356112ba816116f4565b6000602080838503121561172857600080fd5b823567ffffffffffffffff8082111561174057600080fd5b818501915085601f83011261175457600080fd5b81356117626116a98261163e565b81815260059190911b8301840190848101908883111561178157600080fd5b8585015b8381101561189d5780358581111561179d5760008081fd5b8601610180818c03601f19018113156117b65760008081fd5b6117be6111fa565b89830135888111156117d05760008081fd5b6117de8e8c8387010161168a565b82525060406117ee8185016112af565b8b83015260606117ff8186016112af565b82840152608091506118128286016116e0565b818401525060a0808501358284015260c0915081850135818401525060e08085013582840152610100915061184882860161170a565b9083015261012061185a85820161170a565b82840152610140915081850135818401525061016061187a8186016112af565b82840152611889848601611346565b908301525085525050918601918601611785565b5098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156118f957815180516001600160a01b03908116865290870151168685015292840192908501906001016118c7565b5091979650505050505050565b60006020828403121561191857600080fd5b813567ffffffffffffffff81111561192f57600080fd5b8201610260818503121561084857600080fd5b81516001600160a01b031681526101e08101602083015161196e60208401826001600160a01b03169052565b50604083015161198960408401826001600160a01b03169052565b5060608301516119a460608401826001600160a01b03169052565b5060808301516119bf60808401826001600160a01b03169052565b5060a08301516119da60a08401826001600160a01b03169052565b5060c08301516119f560c08401826001600160a01b03169052565b5060e0830151611a1060e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c08085015191821681850152906115a9565b600060a08284031215611a9157600080fd5b60405160a0810181811067ffffffffffffffff82111715611ab457611ab46111a2565b6040529050808235611ac581611297565b808252506020830135602082015260408301356040820152606083013560608201526080830135611af581611297565b6080919091015292915050565b60008060006101008486031215611b1857600080fd5b611b228585611a7f565b925060a0840135611b3281611338565b91506113d18560c08601611351565b6000611b4f6116a98461163e565b83815290506020808201906060808602850187811115611b6e57600080fd5b855b81811015611bda5782818a031215611b885760008081fd5b6040805184810181811067ffffffffffffffff82111715611bab57611bab6111a2565b82528235611bb881611297565b8152828601358682015281830135918101919091528552938301938201611b70565b50505050509392505050565b600060208284031215611bf857600080fd5b813567ffffffffffffffff811115611c0f57600080fd5b8201601f81018413611c2057600080fd5b61054984823560208401611b41565b600060208284031215611c4157600080fd5b813561084881611297565b60008060c08385031215611c5f57600080fd5b611c698484611a7f565b915060a08301356115f781611338565b60e08101611cb1828680516001600160a01b039081168352602080830151908401526040808301519084015260609182015116910152565b831515608083015282516001600160a01b0390811660a084015260208401511660c0830152610549565b600060208284031215611ced57600080fd5b815167ffffffffffffffff811115611d0457600080fd5b8201601f81018413611d1557600080fd5b8051611d236116a982611662565b818152856020838501011115611d3857600080fd5b611d498260208301602086016113da565b95945050505050565b600060208284031215611d6457600080fd5b5051919050565b80516112ba81611297565b60006102408284031215611d8957600080fd5b611d9161121e565b611d9a83611d6b565b8152611da860208401611d6b565b6020820152611db960408401611d6b565b6040820152611dca60608401611d6b565b6060820152611ddb60808401611d6b565b6080820152611dec60a08401611d6b565b60a0820152611dfd60c08401611d6b565b60c0820152611e0e60e08401611d6b565b60e0820152610100611e21818501611d6b565b90820152610120611e33848201611d6b565b90820152610140611e45848201611d6b565b90820152610160611e57848201611d6b565b90820152610180611e69848201611d6b565b908201526101a0611e7b848201611d6b565b908201526101c0611e8d848201611d6b565b908201526101e0611e9f848201611d6b565b90820152610200611eb1848201611d6b565b90820152610220611ec3848201611d6b565b908201529392505050565b600060208284031215611ee057600080fd5b815161084881611297565b60a08101611f23828580516001600160a01b039081168352602080830151908401526040808301519084015260609182015116910152565b82151560808301529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f6757600080fd5b830160208101925035905067ffffffffffffffff811115611f8757600080fd5b606081023603821315611f9957600080fd5b9250929050565b8183526000602080850194508260005b85811015611ff2578135611fc381611297565b6001600160a01b0316875281830135838801526040808301359088015260609687019690910190600101611fb0565b509495945050505050565b602081526000823561200e81611338565b8015156020840152506020830135604083015260408301356060830152606083013561203981611297565b6001600160a01b0380821660808501526080850135915061205982611297565b80821660a0850152505060a083013560c083015260c083013560e083015261010060e084013581840152808401359050612092816116f4565b61012067ffffffffffffffff8216818501526120af81860161170a565b9150506101406120ca8185018367ffffffffffffffff169052565b6120d681860186611f32565b6101608681015292509050611d4961018085018383611fa0565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612217577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151610180815181865261215c8287018261140a565b915050888201516121778a8701826001600160a01b03169052565b50878201516001600160a01b03908116868a015260608084015163ffffffff16908701526080808401519087015260a0808401519087015260c0808401519087015260e08084015167ffffffffffffffff9081169188019190915261010080850151909116908701526101208084015190870152610140808401519091169086015261016091820151151591909401529386019390860190600101612117565b509098975050505050505050565b6000602080838503121561223857600080fd5b825167ffffffffffffffff81111561224f57600080fd5b8301601f8101851361226057600080fd5b805161226e6116a98261163e565b81815260069190911b8201830190838101908783111561228d57600080fd5b928401925b828410156122e357604084890312156122ab5760008081fd5b6122b36111d1565b84516122be81611297565b8152848601516122cd81611297565b8187015282526040939093019290840190612292565b979650505050505050565b80356122f981611297565b6001600160a01b03908116835260208201359061231582611297565b908116602084015260408201359061232c82611297565b908116604084015260608201359061234382611297565b908116606084015260808201359061235a82611297565b908116608084015260a08201359061237182611297565b80821660a085015250505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126123b457600080fd5b830160208101925035905067ffffffffffffffff8111156123d457600080fd5b803603821315611f9957600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6060815261241f60608201856122ee565b600061242d60c086016116e0565b6101206124418185018363ffffffff169052565b61244d60e088016116e0565b91506101406124638186018463ffffffff169052565b61016092506101008801358386015261247e8289018961237f565b9250610260610180818189015261249a6102c0890186856123e3565b94506124a8848c018c61237f565b945092506101a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089870301818a01526124e38686866123e3565b95506124f0878d0161170a565b96506101c0945061250c858a018867ffffffffffffffff169052565b612517828d016116e0565b96506101e0935061252f848a018863ffffffff169052565b6102009650808c0135878a01525050610220838b0135818901526102409350828b013584890152612561868c0161170a565b67ffffffffffffffff811689840152955061257d818c0161170a565b955050505061259961028086018467ffffffffffffffff169052565b6125a4818901611346565b9250506125b66102a085018315159052565b6001600160a01b038616602085015291506125ce9050565b6001600160a01b0383166040830152610549565b60006101e082840312156125f557600080fd5b6125fd611242565b61260683611d6b565b815261261460208401611d6b565b602082015261262560408401611d6b565b604082015261263660608401611d6b565b606082015261264760808401611d6b565b608082015261265860a08401611d6b565b60a082015261266960c08401611d6b565b60c082015261267a60e08401611d6b565b60e082015261010061268d818501611d6b565b9082015261012061269f848201611d6b565b908201526101406126b1848201611d6b565b908201526101606126c3848201611d6b565b908201526101806126d5848201611d6b565b908201526101a06126e7848201611d6b565b908201526101c0611ec3848201611d6b565b60006020828403121561270b57600080fd5b815161084881611338565b610100810161275d82866001600160a01b03808251168352602082015160208401526040820151604084015260608201516060840152806080830151166080840152505050565b83151560a083015282516001600160a01b0390811660c084015260208401511660e0830152610549565b6020808252825182820181905260009190848201906040850190845b818110156127e6576127d383855180516001600160a01b0316825260208082015190830152604090810151910152565b92840192606092909201916001016127a3565b50909695505050505050565b600060a0828403121561280457600080fd5b60405160a0810181811067ffffffffffffffff82111715612827576128276111a2565b604052825161283581611297565b8152602083015161284581611297565b6020820152604083015161285881611297565b6040820152606083015161286b81611297565b6060820152608083015161287e81611297565b60808201529392505050565b6020808252825182820181905260009190848201906040850190845b818110156127e6576128d683855180516001600160a01b0316825260208082015190830152604090810151910152565b92840192606092909201916001016128a6565b60c0810161292f82856001600160a01b03808251168352602082015160208401526040820151604084015260608201516060840152806080830151166080840152505050565b82151560a08301529392505050565b600082516129508184602087016113da565b919091019291505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x0e801d84fa97b50751dbf25036d067dcf18858bf": { + "balance": "0x0", + "code": "0x608060405234801561000f575f80fd5b506004361061019a575f3560e01c806379ba5097116100e8578063dad544e011610093578063f2fde38b1161006e578063f2fde38b1461038e578063f8c8765e146103a1578063fa14fe6d146103b4578063fc619e41146103d4575f80fd5b8063dad544e014610359578063e30c397814610361578063eca919df14610369575f80fd5b8063a526d83b116100c3578063a526d83b1461032b578063ba58e82a1461033e578063bc347f4714610351575f80fd5b806379ba5097146102fc57806388da3bb7146103045780638da5cb5b14610323575f80fd5b80633e47158c116101485780635c975abb116101235780635c975abb146102d957806371404156146102e1578063715018a6146102f4575f80fd5b80633e47158c1461027257806354387ad71461027a57806354fd4d5014610290575f80fd5b80632ce53247116101785780632ce532471461020c57806333d7e2bd1461022157806338d38c9714610241575f80fd5b80630665f04b1461019e5780630c68ba21146101bc5780631b076a4c146101df575b5f80fd5b6101a66103e7565b6040516101b391906117f4565b60405180910390f35b6101cf6101ca36600461186e565b610417565b60405190151581526020016101b3565b6101e7610472565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b3565b61021f61021a36600461186e565b610503565b005b6002546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000011681526020016101b3565b6101e76105e9565b6102826107ef565b6040519081526020016101b3565b6102cc6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b39190611889565b6101cf610819565b61021f6102ef36600461186e565b6108aa565b61021f61092a565b61021f61093d565b5f546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b6101e76109b5565b61021f61033936600461186e565b6109be565b61021f61034c366004611921565b610b32565b61021f610c2e565b6101e7610d55565b6101e7610da6565b6001546101cf9074010000000000000000000000000000000000000000900460ff1681565b61021f61039c36600461186e565b610de7565b61021f6103af366004611988565b610e59565b6001546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b61021f6103e23660046119e1565b611169565b60606104127f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f00611274565b905090565b5f61046c827f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f005b9073ffffffffffffffffffffffffffffffffffffffff165f9081526001919091016020526040902054151590565b92915050565b600154604080517fd80a4c2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163d80a4c289160048083019260209291908290030181865afa1580156104df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104129190611a29565b61050b611287565b73ffffffffffffffffffffffffffffffffffffffff8116610575576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917fc7bef7b97a10ef514a01fa4d5552f5c57e72a37aa901f567bb49bbf9ea449f9c9190a35050565b5f806106137fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561063657919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026106799190611a71565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906106d3906060015b604051602081830303815290604052805190602001205490565b1461070a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f9061072b906060016106b9565b905073ffffffffffffffffffffffffffffffffffffffff8116156107bd578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610792573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b69190611a29565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104127f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f006112df565b600254604080517f5c975abb00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104129190611a88565b6108b2611287565b7f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f006108dd81836112e8565b6108e5575050565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52905f90a2505b50565b610932611287565b61093b5f611309565b565b3380610947610da6565b73ffffffffffffffffffffffffffffffffffffffff16146109ac576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161056c565b61092781611309565b5f610412611359565b6109c6611287565b73ffffffffffffffffffffffffffffffffffffffff8116610a13576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a1b6109b5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a865750610a57610da6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610abd576040517f3af3c41c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f00610ae88183611381565b15610b2e5760405173ffffffffffffffffffffffffffffffffffffffff8316907f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969905f90a25b5050565b610b3a610819565b15610b71576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546040517f7f82ea6c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691637f82ea6c91610bd1918891889188918891905f90600401611b23565b5f604051808303815f87803b158015610be8575f80fd5b505af1158015610bfa573d5f803e3d5ffd5b50506040513392507f665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c91505f90a250505050565b610c58337f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f0061043e565b158015610c985750610c686109b5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610cd1576040517fd53780c400000000000000000000000000000000000000000000000000000000815233600482015260240161056c565b6001805460ff7401000000000000000000000000000000000000000080830482161581027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9093169290921792839055604051919092049091161515907fb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad3905f90a2565b5f610d5e6105e9565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104df573d5f803e3d5ffd5b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b610def611287565b610e19817f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f0061043e565b15610e50576040517f3af3c41c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610927816113a2565b7f000000000000000000000000000000000000000000000000000000000000000160ff165f610e86611459565b805490915068010000000000000000900460ff1680610eb35750805467ffffffffffffffff808416911610155b15610eea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001667ffffffffffffffff83161768010000000000000000178155610f2f611481565b610f3883611502565b73ffffffffffffffffffffffffffffffffffffffff8516610f9d576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260240161056c565b73ffffffffffffffffffffffffffffffffffffffff8416611002576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161056c565b73ffffffffffffffffffffffffffffffffffffffff8616611067576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260240161056c565b600180545f805473ffffffffffffffffffffffffffffffffffffffff8981167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556002805489841692169190911790557fffffffffffffffffffffff000000000000000000000000000000000000000000909116908816177401000000000000000000000000000000000000000017905580547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611171610819565b156111a8576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546040517f55ddfa0600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116916355ddfa0691611205918691869189915f90600401611b75565b602060405180830381865afa158015611220573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112449190611a88565b5060405183907fee0d07d204d979d28885955e59a46f754c4db7378b7df1a95123525aac6e3f80905f90a2505050565b60605f61128083611513565b9392505050565b336112906109b5565b73ffffffffffffffffffffffffffffffffffffffff161461093b576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161056c565b5f61046c825490565b5f6112808373ffffffffffffffffffffffffffffffffffffffff841661156c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155610b2e8261164f565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610dca565b5f6112808373ffffffffffffffffffffffffffffffffffffffff84166116e4565b6113aa611287565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556114136109b5565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061046c565b3361148a6105e9565b73ffffffffffffffffffffffffffffffffffffffff16141580156114cb5750336114b2610d55565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561093b576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61150a611730565b6109278161176e565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561156057602002820191905f5260205f20905b81548152602001906001019080831161154c575b50505050509050919050565b5f8181526001830160205260408120548015611646575f61158e600183611bb8565b85549091505f906115a190600190611bb8565b9050808214611600575f865f0182815481106115bf576115bf611bcb565b905f5260205f200154905080875f0184815481106115df576115df611bcb565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061161157611611611bf8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061046c565b5f91505061046c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f81815260018301602052604081205461172957508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561046c565b505f61046c565b61173861177f565b61093b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611776611730565b6109278161179d565b5f611788611459565b5468010000000000000000900460ff16919050565b6117a5611730565b73ffffffffffffffffffffffffffffffffffffffff81166109ac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f600482015260240161056c565b602080825282518282018190525f9190848201906040850190845b8181101561184157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161180f565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610927575f80fd5b5f6020828403121561187e575f80fd5b81356112808161184d565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8083601f8401126118ec575f80fd5b50813567ffffffffffffffff811115611903575f80fd5b60208301915083602082850101111561191a575f80fd5b9250929050565b5f805f8060408587031215611934575f80fd5b843567ffffffffffffffff8082111561194b575f80fd5b611957888389016118dc565b9096509450602087013591508082111561196f575f80fd5b5061197c878288016118dc565b95989497509550505050565b5f805f806080858703121561199b575f80fd5b84356119a68161184d565b935060208501356119b68161184d565b925060408501356119c68161184d565b915060608501356119d68161184d565b939692955090935050565b5f805f604084860312156119f3575f80fd5b83359250602084013567ffffffffffffffff811115611a10575f80fd5b611a1c868287016118dc565b9497909650939450505050565b5f60208284031215611a39575f80fd5b81516112808161184d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761046c5761046c611a44565b5f60208284031215611a98575f80fd5b81518015158114611280575f80fd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60028110610927577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b608081525f611b3660808301888a611aa7565b8281036020840152611b49818789611aa7565b915050611b5584611aee565b836040830152611b6483611aee565b826060830152979650505050505050565b608081525f611b88608083018789611aa7565b9050846020830152611b9984611aee565b836040830152611ba883611aee565b8260608301529695505050505050565b8181038181111561046c5761046c611a44565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016": { + "balance": "0x0", + "code": "0x60806040523480156200001157600080fd5b5060043610620000935760003560e01c8063c4d66de81162000062578063c4d66de81462000175578063ce5ac90f146200018e578063e78cea9214620001a5578063ee9a31a214620001c657600080fd5b8063316b3739146200009857806354fd4d5014620000fb578063896f93d114620001475780638cf0629c146200015e575b600080fd5b620000d1620000a936600462000636565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001386040518060400160405280600681526020017f312e31302e32000000000000000000000000000000000000000000000000000081525081565b604051620000f29190620006c9565b620000d162000158366004620007c0565b620001e5565b620000d16200016f3660046200083d565b620001fc565b6200018c6200018636600462000636565b6200041b565b005b620000d16200019f366004620007c0565b620005ed565b600154620000d19073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16620000d1565b6000620001f4848484620005ed565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8516620002a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b600085858585604051602001620002c29493929190620008d4565b604051602081830303815290604052805190602001209050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16888888886040516200031290620005fe565b620003229594939291906200092e565b8190604051809103906000f590508015801562000343573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff81811660008181526002602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016948d1694851790555193945090927fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf9190a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054610100900460ff16158080156200043c5750600054600160ff909116105b80620004585750303b15801562000458575060005460ff166001145b620004e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200029e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200054557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015620005e957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000620001f48484846012620001fc565b61253a806200099483390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200063157600080fd5b919050565b6000602082840312156200064957600080fd5b62000654826200060c565b9392505050565b6000815180845260005b81811015620006835760208185018101518683018201520162000665565b8181111562000696576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200065460208301846200065b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200071f57600080fd5b813567ffffffffffffffff808211156200073d576200073d620006de565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715620007865762000786620006de565b81604052838152866020858801011115620007a057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215620007d657600080fd5b620007e1846200060c565b9250602084013567ffffffffffffffff80821115620007ff57600080fd5b6200080d878388016200070d565b935060408601359150808211156200082457600080fd5b5062000833868287016200070d565b9150509250925092565b600080600080608085870312156200085457600080fd5b6200085f856200060c565b9350602085013567ffffffffffffffff808211156200087d57600080fd5b6200088b888389016200070d565b94506040870135915080821115620008a257600080fd5b50620008b1878288016200070d565b925050606085013560ff81168114620008c957600080fd5b939692955090935050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006200090560808301866200065b565b82810360408401526200091981866200065b565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526200096960a08301866200065b565b82810360608401526200097d81866200065b565b91505060ff83166080830152969550505050505056fe6101a06040523480156200001257600080fd5b506040516200253a3803806200253a833981016040819052620000359162000215565b6040805180820190915260018152603160f81b6020820152839081908185600362000061838262000350565b50600462000070828262000350565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052505050506001600160a01b0394851661014052509390921661016052505060ff16610180526200041c565b80516001600160a01b03811681146200014357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017057600080fd5b81516001600160401b03808211156200018d576200018d62000148565b604051601f8301601f19908116603f01168101908282118183101715620001b857620001b862000148565b81604052838152602092508683858801011115620001d557600080fd5b600091505b83821015620001f95785820183015181830184015290820190620001da565b838211156200020b5760008385830101525b9695505050505050565b600080600080600060a086880312156200022e57600080fd5b62000239866200012b565b945062000249602087016200012b565b60408701519094506001600160401b03808211156200026757600080fd5b6200027589838a016200015e565b945060608801519150808211156200028c57600080fd5b506200029b888289016200015e565b925050608086015160ff81168114620002b357600080fd5b809150509295509295909350565b600181811c90821680620002d657607f821691505b602082108103620002f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034b57600081815260208120601f850160051c81016020861015620003265750805b601f850160051c820191505b81811015620003475782815560010162000332565b5050505b505050565b81516001600160401b038111156200036c576200036c62000148565b62000384816200037d8454620002c1565b84620002fd565b602080601f831160018114620003bc5760008415620003a35750858301515b600019600386901b1c1916600185901b17855562000347565b600085815260208120601f198616915b82811015620003ed57888601518255948401946001909101908401620003cc565b50858210156200040c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051610140516101605161018051612091620004a960003960006102a6015260008181610401015281816104760152818161080a0152610a6d0152600081816101f6015261042701526000611557015260006115a601526000611581015260006114da015260006115040152600061152e01526120916000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636afdd850116100f9578063ae1f6aaf11610097578063d6c0b2c411610071578063d6c0b2c414610425578063dd62ed3e1461045e578063e78cea92146103ff578063ee9a31a21461047157600080fd5b8063ae1f6aaf146103ff578063c01e1bd614610425578063d505accf1461044b57600080fd5b806395d89b41116100d357806395d89b41146103be5780639dc29fac146103c6578063a457c2d7146103d9578063a9059cbb146103ec57600080fd5b80636afdd8501461036057806370a08231146103755780637ecebe00146103ab57600080fd5b8063313ce5671161016657806340c10f191161014057806340c10f19146102eb57806354fd4d50146102fe57806358cf96721461033a5780636a30b2531461034d57600080fd5b8063313ce5671461029f5780633644e515146102d057806339509351146102d857600080fd5b8063095ea7b3116101a2578063095ea7b31461025257806318160ddd1461026557806323b872dd146102775780632e0f98ad1461028a57600080fd5b806301ffc9a7146101c9578063033964be146101f157806306fdde031461023d575b600080fd5b6101dc6101d7366004611c0e565b610498565b60405190151581526020015b60405180910390f35b6102187f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610245610589565b6040516101e89190611c50565b6101dc610260366004611cec565b61061b565b6002545b6040519081526020016101e8565b6101dc610285366004611d16565b610635565b61029d610298366004611d9e565b610659565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e8565b6102696107c1565b6101dc6102e6366004611cec565b6107d0565b61029d6102f9366004611cec565b6107f2565b6102456040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b61029d610348366004611cec565b610915565b61029d61035b366004611e0a565b61098b565b6e22d473030f116ddee9f6b43ac78ba3610218565b610269610383366004611e82565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102696103b9366004611e82565b610a1b565b610245610a46565b61029d6103d4366004611cec565b610a55565b6101dc6103e7366004611cec565b610b6c565b6101dc6103fa366004611cec565b610c19565b7f0000000000000000000000000000000000000000000000000000000000000000610218565b7f0000000000000000000000000000000000000000000000000000000000000000610218565b61029d610459366004611e9d565b610c27565b61026961046c366004611f10565b610de6565b6102187f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061055157507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061058057507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461059890611f43565b80601f01602080910402602001604051908101604052809291908181526020018280546105c490611f43565b80156106115780601f106105e657610100808354040283529160200191610611565b820191906000526020600020905b8154815290600101906020018083116105f457829003601f168201915b5050505050905090565b600033610629818585610e87565b60019150505b92915050565b60003361064385828561103b565b61064e8585856110ed565b506001949350505050565b33156106c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f6e6c7920564d2063616e2063616c6c0000000000000000000000000000000060448201526064015b60405180910390fd5b828114610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f526563697069656e747320616e6420616d6f756e7473206d757374206265207460448201527f68652073616d65206c656e6774682e000000000000000000000000000000000060648201526084016106bd565b60005b838110156107ba576107a885858381811061077557610775611f90565b905060200201602081019061078a9190611e82565b84848481811061079c5761079c611f90565b905060200201356113a0565b806107b281611fee565b915050610758565b5050505050565b60006107cb6114c0565b905090565b6000336106298185856107e38383610de6565b6107ed9190612026565b610e87565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106bd565b6108c182826113a0565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161090991815260200190565b60405180910390a25050565b331561097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f6e6c7920564d2063616e2063616c6c0000000000000000000000000000000060448201526064016106bd565b61098782826115f4565b5050565b33156109f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f6e6c7920564d2063616e2063616c6c0000000000000000000000000000000060448201526064016106bd565b6109fd88856113a0565b610a0787846113a0565b610a1185826113a0565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205461062f565b60606004805461059890611f43565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106bd565b610b2482826115f4565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161090991815260200190565b60003381610b7a8286610de6565b905083811015610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106bd565b61064e8286868403610e87565b6000336106298185856110ed565b83421115610c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106bd565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610cc08c6117d9565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610d288261180e565b90506000610d3882878787611877565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106bd565b610dda8a8a8a610e87565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffdd2b8cfcf0ee922116094bc538745d73ffffffffffffffffffffffffffffffffffffffff831601610e4c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61062f565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292905220545b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8216610fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006110478484610de6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110e757818110156110da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106bd565b6110e78484848403610e87565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8216611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156112e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822085850390559185168152908120805484929061132d908490612026565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161139391815260200190565b60405180910390a36110e7565b73ffffffffffffffffffffffffffffffffffffffff821661141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106bd565b806002600082825461142f9190612026565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611469908490612026565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561152657507f000000000000000000000000000000000000000000000000000000000000000046145b1561155057507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b73ffffffffffffffffffffffffffffffffffffffff8216611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061178990849061203e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161102e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b600061062f61181b6114c0565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006118888787878761189f565b91509150611895816119b7565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156118d657506000905060036119ae565b8460ff16601b141580156118ee57508460ff16601c14155b156118ff57506000905060046119ae565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611953573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166119a7576000600192509250506119ae565b9150600090505b94509492505050565b60008160048111156119cb576119cb612055565b036119d35750565b60018160048111156119e7576119e7612055565b03611a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106bd565b6002816004811115611a6257611a62612055565b03611ac9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106bd565b6003816004811115611add57611add612055565b03611b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b6004816004811115611b7e57611b7e612055565b03611c0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b50565b600060208284031215611c2057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e8057600080fd5b600060208083528351808285015260005b81811015611c7d57858101830151858201604001528201611c61565b81811115611c8f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ce757600080fd5b919050565b60008060408385031215611cff57600080fd5b611d0883611cc3565b946020939093013593505050565b600080600060608486031215611d2b57600080fd5b611d3484611cc3565b9250611d4260208501611cc3565b9150604084013590509250925092565b60008083601f840112611d6457600080fd5b50813567ffffffffffffffff811115611d7c57600080fd5b6020830191508360208260051b8501011115611d9757600080fd5b9250929050565b60008060008060408587031215611db457600080fd5b843567ffffffffffffffff80821115611dcc57600080fd5b611dd888838901611d52565b90965094506020870135915080821115611df157600080fd5b50611dfe87828801611d52565b95989497509550505050565b600080600080600080600080610100898b031215611e2757600080fd5b611e3089611cc3565b9750611e3e60208a01611cc3565b9650611e4c60408a01611cc3565b9550611e5a60608a01611cc3565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b600060208284031215611e9457600080fd5b610e8082611cc3565b600080600080600080600060e0888a031215611eb857600080fd5b611ec188611cc3565b9650611ecf60208901611cc3565b95506040880135945060608801359350608088013560ff81168114611ef357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611f2357600080fd5b611f2c83611cc3565b9150611f3a60208401611cc3565b90509250929050565b600181811c90821680611f5757607f821691505b602082108103611808577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361201f5761201f611fbf565b5060010190565b6000821982111561203957612039611fbf565b500190565b60008282101561205057612050611fbf565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x14dc79964da2c08b23698b3d3cc7ca32193d9955": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x15d34aaf54267db7d7c367839aaf71a00a2c6a65": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x1bb26b99a924018c063ae4be222997aadfdec0c3": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x00000000000000000000000058ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000004200000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000061525eaacddb97d9184afc205827e6a4fd0bf62a", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0x1da922d1972e12b3b224cc4d3afbefe4efb4b245": { + "balance": "0x0", + "code": "0xfe71006080604052348015600e575f80fd5b50604051611992380380611992833981016040819052602b91608d565b603233603e565b603981603e565b5060b8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215609c575f80fd5b81516001600160a01b038116811460b1575f80fd5b9392505050565b6118cd806100c55f395ff3fe608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": {} + }, + "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063f2fde38b1161005b578063f2fde38b146101b8578063f7d12760146101cb578063ffa1ad74146101d357600080fd5b80638da5cb5b14610180578063d798b1ac146101a8578063dc8452cd146101b057600080fd5b80635fd579af116100b25780635fd579af14610152578063715018a6146101655780637a1ac61e1461016d57600080fd5b80630457d6f2146100d9578063206a8300146100ee57806354fd4d5014610109575b600080fd5b6100ec6100e7366004610867565b6101db565b005b6100f66101ef565b6040519081526020015b60405180910390f35b6101456040518060400160405280600581526020017f312e312e3100000000000000000000000000000000000000000000000000000081525081565b60405161010091906108cd565b6100ec610160366004610867565b61021d565b6100ec61022e565b6100ec61017b366004610910565b610242565b60335460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b6100f66103f7565b6100f6610430565b6100ec6101c6366004610943565b610460565b6100f6610514565b6100f6600081565b6101e361053f565b6101ec816105c0565b50565b61021a60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace161095e565b81565b61022561053f565b6101ec8161065a565b61023661053f565b61024060006106b6565b565b600054610100900460ff16158080156102625750600054600160ff909116105b8061027c5750303b15801561027c575060005460ff166001145b61030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561036b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61037361072d565b61037c84610460565b610385836105c0565b61038e8261065a565b80156103f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061042b61042760017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b61095e565b5490565b905090565b600061042b61042760017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace161095e565b61046861053f565b73ffffffffffffffffffffffffffffffffffffffff811661050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b6101ec816106b6565b61021a60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b61095e565b60335473ffffffffffffffffffffffffffffffffffffffff163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6105f36105ee60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace161095e565b829055565b60008160405160200161060891815260200190565b60408051601f19818403018152919052905060005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161064e91906108cd565b60405180910390a35050565b6106886105ee60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b61095e565b60008160405160200161069d91815260200190565b60408051601f198184030181529190529050600161061d565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166107c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610304565b610240600054610100900460ff1661085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610304565b610240336106b6565b60006020828403121561087957600080fd5b5035919050565b6000815180845260005b818110156108a65760208185018101518683018201520161088a565b818111156108b8576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006108e06020830184610880565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461090b57600080fd5b919050565b60008060006060848603121561092557600080fd5b61092e846108e7565b95602085013595506040909401359392505050565b60006020828403121561095557600080fd5b6108e0826108e7565b600082821015610997577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3": { + "balance": "0x0", + "code": "0x6080604052600436106101d85760003560e01c80639d53a64811610102578063ddcd58de11610095578063ec5efcbc11610064578063ec5efcbc14610681578063f3f480d9146106a1578063faf37bc7146106d4578063fef2b4ed146106e757600080fd5b8063ddcd58de146105d4578063e03110e11461060c578063e159261114610641578063ea7139501461066157600080fd5b8063b5e7154c116100d1578063b5e7154c14610555578063d18534b51461056c578063da35c6641461058c578063dd24f9bf146105a157600080fd5b80639d53a6481461048e5780639d7e8769146104dd578063b2e67ba8146104fd578063b4801e611461053557600080fd5b806361238bde1161017a5780637ac54767116101495780637ac54767146103ca5780638542cf50146103ea578063882856ef146104355780638dc4be111461046e57600080fd5b806361238bde1461031e5780636551927b146103565780637051472e1461038e5780637917de1d146103aa57600080fd5b80633909af5c116101b65780633909af5c146102715780634d52b4c91461029357806352f0f3ad146102a857806354fd4d50146102c857600080fd5b8063013cf08b146101dd5780630359a5631461022e5780632055b36b1461025c575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612ca2565b610714565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561023a57600080fd5b5061024e610249366004612ce4565b610759565b604051908152602001610225565b34801561026857600080fd5b5061024e601081565b34801561027d57600080fd5b5061029161028c366004612eec565b610891565b005b34801561029f57600080fd5b5061024e610ae8565b3480156102b457600080fd5b5061024e6102c3366004612fd8565b610b03565b3480156102d457600080fd5b506103116040518060400160405280600581526020017f312e312e3400000000000000000000000000000000000000000000000000000081525081565b604051610225919061303f565b34801561032a57600080fd5b5061024e610339366004613090565b600160209081526000928352604080842090915290825290205481565b34801561036257600080fd5b5061024e610371366004612ce4565b601560209081526000928352604080842090915290825290205481565b34801561039a57600080fd5b5061024e6703782dace9d9000081565b3480156103b657600080fd5b506102916103c53660046130f4565b610bd9565b3480156103d657600080fd5b5061024e6103e5366004612ca2565b6110dc565b3480156103f657600080fd5b50610425610405366004613090565b600260209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610225565b34801561044157600080fd5b50610455610450366004613190565b6110f3565b60405167ffffffffffffffff9091168152602001610225565b34801561047a57600080fd5b506102916104893660046131c3565b61114d565b34801561049a57600080fd5b5061024e6104a9366004612ce4565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104e957600080fd5b506102916104f836600461320f565b611248565b34801561050957600080fd5b5061024e610518366004612ce4565b601760209081526000928352604080842090915290825290205481565b34801561054157600080fd5b5061024e610550366004613190565b6113ff565b34801561056157600080fd5b5061024e620186a081565b34801561057857600080fd5b50610291610587366004612eec565b611431565b34801561059857600080fd5b5060135461024e565b3480156105ad57600080fd5b507f000000000000000000000000000000000000000000000000000000000001ec3061024e565b3480156105e057600080fd5b5061024e6105ef366004612ce4565b601660209081526000928352604080842090915290825290205481565b34801561061857600080fd5b5061062c610627366004613090565b611840565b60408051928352602083019190915201610225565b34801561064d57600080fd5b5061029161065c3660046131c3565b611931565b34801561066d57600080fd5b5061029161067c36600461329b565b611a39565b34801561068d57600080fd5b5061029161069c36600461330a565b611b98565b3480156106ad57600080fd5b507f000000000000000000000000000000000000000000000000000000000001518061024e565b6102916106e2366004613392565b611d1e565b3480156106f357600080fd5b5061024e610702366004612ca2565b60006020819052908152604090205481565b6013818154811061072457600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061079c9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610889578160011660010361082f5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107fc576107fc6133ce565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610870565b8260038260108110610843576108436133ce565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806108818161342c565b9150506107a7565b505092915050565b600061089d8a8a610759565b90506108c086868360208b01356108bb6108b68d613464565b611fea565b61202a565b80156108de57506108de83838360208801356108bb6108b68a613464565b610914576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86604001358860405160200161092a9190613533565b6040516020818303038152906040528051906020012014610977576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161098d9190613571565b146109c4576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0c886109d28680613589565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208b92505050565b610a15886121e6565b836040013588604051602001610a2b9190613533565b6040516020818303038152906040528051906020012003610a78576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610adc8a8a33612800565b50505050505050505050565b6001610af660106002613710565b610b00919061371c565b81565b6000610b0f86866128c0565b9050610b1c836008613571565b82101580610b2a5750602083115b15610b61576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610bf257610beb868661296d565b9050610c2c565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610c5957505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610cda8260601c63ffffffff1690565b63ffffffff169050333214610d1b576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2b8260801c63ffffffff1690565b63ffffffff16600003610d6a576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d748260c01c90565b67ffffffffffffffff1615610db5576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610dee576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfb89898d88866129e6565b83516020850160888204881415608883061715610e20576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610ed0578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610ec5576001821615610ea55782818b0152610ec5565b8981015160009081526020938452604090209260019290921c9101610e88565b505050608801610e2d565b50505050600160106002610ee49190613710565b610eee919061371c565b811115610f27576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9c610f3a8360401c63ffffffff1690565b610f4a9063ffffffff168a613571565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b915084156110295777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610fd68260801c63ffffffff1690565b63ffffffff16610fec8360401c63ffffffff1690565b63ffffffff1614611029576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061104f90846010612c18565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106110ec57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061111b57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061116b5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061119857600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806112705763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112f2576309bde3396000526004601cfd5b602886106113085763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061142757600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156114a4576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ae8160c01c90565b67ffffffffffffffff166000036114f1576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000001518061151c8260c01c90565b6115309067ffffffffffffffff164261371c565b11611567576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115738b8b610759565b905061158c87878360208c01356108bb6108b68e613464565b80156115aa57506115aa84848360208901356108bb6108b68b613464565b6115e0576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016115f69190613533565b6040516020818303038152906040528051906020012014611643576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016116599190613571565b14158061168b575060016116738360601c63ffffffff1690565b61167d9190613733565b63ffffffff16856020013514155b156116c2576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d0896109d28780613589565b6116d9896121e6565b60006116e48a612b39565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0200000000000000000000000000000000000000000000000000000000000000179050600061173b8460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555061180d8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118318d8d81612800565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166118c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546118e5816008613571565b6118f0856020613571565b1061190e5783611901826008613571565b61190b919061371c565b91505b506000938452600160209081526040808620948652939052919092205492909150565b60443560008060088301861061194f5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60008060008060808860601b81528760c01b6014820152858782601c0137601c860181207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0600000000000000000000000000000000000000000000000000000000000000179350604088026260216001603f5a021015611ac35763dd629f866000526004601cfd5b6000808783601c018c5afa94503d6001019150600882018a10611aee5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e89017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208d8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209c83529b81528b8220929092559384528390529790912096909655505050505050565b6000611ba48686610759565b9050611bbd83838360208801356108bb6108b68a613464565b611bf3576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611c2f576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c37612c56565b611c45816109d28780613589565b611c4e816121e6565b846040013581604051602001611c649190613533565b6040516020818303038152906040528051906020012003611cb1576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611d15878733612800565b50505050505050565b6703782dace9d90000341015611d60576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d99576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611da4816008613758565b63ffffffff168263ffffffff1610611de8576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000001ec308163ffffffff161015611e48576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152601560209081526040808320868452909152902054611e738160801c63ffffffff1690565b63ffffffff1615611eb0576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608082901b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff60a085901b167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff83161717336000818152601560209081526040808320898452825280832094909455835180850185528381528082018981526013805460018101825590855291517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090600290930292830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015591815260168252828120968152959052909320349055505050565b600081600001518260200151836040015160405160200161200d93929190613780565b604051602081830303815290604052805190602001209050919050565b60008160005b601081101561207e578060051b880135600186831c16600181146120635760008481526020839052604090209350612074565b600082815260208590526040902093505b5050600101612030565b5090931495945050505050565b608881511461209957600080fd5b602081016020830161211a565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050612114816120ff868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b612126600083836120a6565b612132600183836120a6565b61213e600283836120a6565b61214a600383836120a6565b612156600483836120a6565b612162600583836120a6565b61216e600683836120a6565b61217a600783836120a6565b612186600883836120a6565b612192600983836120a6565b61219e600a83836120a6565b6121aa600b83836120a6565b6121b6600c83836120a6565b6121c2600d83836120a6565b6121ce600e83836120a6565b6121da600f83836120a6565b612114601083836120a6565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e001604051602081830303815290604052905060208201602082016126e0565b600583901b8101518518604085900381901c90851b1867ffffffffffffffff8116600584901b8301525b505050505050565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6123cb8660011b67ffffffffffffffff1690565b18188584603f1c6123e68660011b67ffffffffffffffff1690565b18188584603f1c6124018660011b67ffffffffffffffff1690565b181895508483603f1c61241e8560011b67ffffffffffffffff1690565b181894508387603f1c61243b8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935087925061247b81602c60066001876122dc565b61248b87601460096006876122dc565b61249b86603d60166009876122dc565b6124ab876027600e6016876122dc565b6124bb8260126014600e876122dc565b6124cb86603e60026014876122dc565b6124db86602b600c6002876122dc565b6124eb856019600d600c876122dc565b6124fb8760086013600d876122dc565b61250b85603860176013876122dc565b61251b826029600f6017876122dc565b61252b87601b6004600f876122dc565b61253b87600e60186004876122dc565b61254b81600260156018876122dc565b61255b85603760086015876122dc565b61256b81602d60106008876122dc565b61257b82602460056010876122dc565b61258b85601c60036005876122dc565b61259b85601560126003876122dc565b6125ab86600f60116012876122dc565b6125bb81600a600b6011876122dc565b506125cc8560066007600b866122dc565b6125dc816003600a6007866122dc565b5067ffffffffffffffff8216610140820152612306565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611d15565b61267a6000826125f3565b6126856005826125f3565b612690600a826125f3565b61269b600f826125f3565b6126a66014826125f3565b50565b6126b28161230e565b6126bb8161266f565b600383901b820151815160c09190911c9061211490821867ffffffffffffffff168352565b6126ec600082846126a9565b6126f8600182846126a9565b612704600282846126a9565b612710600382846126a9565b61271c600482846126a9565b612728600582846126a9565b612734600682846126a9565b612740600782846126a9565b61274c600882846126a9565b612758600982846126a9565b612764600a82846126a9565b612770600b82846126a9565b61277c600c82846126a9565b612788600d82846126a9565b612794600e82846126a9565b6127a0600f82846126a9565b6127ac601082846126a9565b6127b8601182846126a9565b6127c4601282846126a9565b6127d0601382846126a9565b6127dc601482846126a9565b6127e8601582846126a9565b6127f4601682846126a9565b612114601782846126a9565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d8060008114612879576040519150601f19603f3d011682016040523d82523d6000602084013e61287e565b606091505b50509050806128b9576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612966818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60606040519050816020820181810182868337608883068080156129b65760888290038501848101848103803687375060806001820353506001845160001a17845386526129cd565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006129f88260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a168360801c63ffffffff1690565b63ffffffff1690506000612a308460401c63ffffffff1690565b63ffffffff169050600883108015612a46575080155b15612a7a5760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612b2f565b60088310158015612a98575080612a9260088561371c565b93508310155b8015612aac5750612aa98782613571565b83105b15612b2f576000612abd828561371c565b905087612acb826020613571565b10158015612ad7575085155b15612b0e576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612bbc565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612b6a8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612b978360101b67ffffffffffffffff1690565b1617905060008160201c612bb58360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612bd490612b40565b612b40565b6040820151612be290612b40565b60401b17612bfa612bcf60018460059190911b015190565b825160809190911b90612c0c90612b40565b60c01b17179392505050565b8260108101928215612c46579160200282015b82811115612c46578251825591602001919060010190612c2b565b50612c52929150612c6e565b5090565b6040518060200160405280612c69612c83565b905290565b5b80821115612c525760008155600101612c6f565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612cb457600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612cdf57600080fd5b919050565b60008060408385031215612cf757600080fd5b612d0083612cbb565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612d6157612d61612d0e565b60405290565b6040516060810167ffffffffffffffff81118282101715612d6157612d61612d0e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612dd157612dd1612d0e565b604052919050565b803567ffffffffffffffff81168114612cdf57600080fd5b6000610320808385031215612e0557600080fd5b604051602080820182811067ffffffffffffffff82111715612e2957612e29612d0e565b806040525081935085601f860112612e4057600080fd5b612e48612d3d565b928501928087851115612e5a57600080fd5b865b85811015612e7a57612e6d81612dd9565b8352918301918301612e5c565b509092525091949350505050565b600060608284031215612e9a57600080fd5b50919050565b60008083601f840112612eb257600080fd5b50813567ffffffffffffffff811115612eca57600080fd5b6020830191508360208260051b8501011115612ee557600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f0b57600080fd5b612f148a612cbb565b985060208a01359750612f2a8b60408c01612df1565b96506103608a013567ffffffffffffffff80821115612f4857600080fd5b612f548d838e01612e88565b97506103808c0135915080821115612f6b57600080fd5b612f778d838e01612ea0565b90975095506103a08c0135915080821115612f9157600080fd5b612f9d8d838e01612e88565b94506103c08c0135915080821115612fb457600080fd5b50612fc18c828d01612ea0565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612ff057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561302e578181015183820152602001613016565b838111156121145750506000910152565b602081526000825180602084015261305e816040850160208701613013565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156130a357600080fd5b50508035926020909101359150565b60008083601f8401126130c457600080fd5b50813567ffffffffffffffff8111156130dc57600080fd5b602083019150836020828501011115612ee557600080fd5b600080600080600080600060a0888a03121561310f57600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561313557600080fd5b6131418b838c016130b2565b909750955060608a013591508082111561315a57600080fd5b506131678a828b01612ea0565b9094509250506080880135801515811461318057600080fd5b8091505092959891949750929550565b6000806000606084860312156131a557600080fd5b6131ae84612cbb565b95602085013595506040909401359392505050565b6000806000604084860312156131d857600080fd5b83359250602084013567ffffffffffffffff8111156131f657600080fd5b613202868287016130b2565b9497909650939450505050565b600080600080600080600060a0888a03121561322a57600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561325057600080fd5b61325c8b838c016130b2565b909750955060608a013591508082111561327557600080fd5b506132828a828b016130b2565b989b979a50959894979596608090950135949350505050565b6000806000806000608086880312156132b357600080fd5b853594506132c360208701612cbb565b93506132d160408701612dd9565b9250606086013567ffffffffffffffff8111156132ed57600080fd5b6132f9888289016130b2565b969995985093965092949392505050565b60008060008060006080868803121561332257600080fd5b61332b86612cbb565b945060208601359350604086013567ffffffffffffffff8082111561334f57600080fd5b61335b89838a01612e88565b9450606088013591508082111561337157600080fd5b506132f988828901612ea0565b803563ffffffff81168114612cdf57600080fd5b6000806000606084860312156133a757600080fd5b833592506133b76020850161337e565b91506133c56040850161337e565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345d5761345d6133fd565b5060010190565b60006060823603121561347657600080fd5b61347e612d67565b823567ffffffffffffffff8082111561349657600080fd5b9084019036601f8301126134a957600080fd5b81356020828211156134bd576134bd612d0e565b6134ed817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612d8a565b9250818352368183860101111561350357600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561356857825167ffffffffffffffff1682526020928301929091019060010161353f565b50505092915050565b60008219821115613584576135846133fd565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135be57600080fd5b83018035915067ffffffffffffffff8211156135d957600080fd5b602001915036819003821315612ee557600080fd5b600181815b8085111561364757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561362d5761362d6133fd565b8085161561363a57918102915b93841c93908002906135f3565b509250929050565b60008261365e5750600161370a565b8161366b5750600061370a565b8160018114613681576002811461368b576136a7565b600191505061370a565b60ff84111561369c5761369c6133fd565b50506001821b61370a565b5060208310610133831016604e8410600b84101617156136ca575081810a61370a565b6136d483836135ee565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613706576137066133fd565b0290505b92915050565b6000612966838361364f565b60008282101561372e5761372e6133fd565b500390565b600063ffffffff83811690831681811015613750576137506133fd565b039392505050565b600063ffffffff808316818516808303821115613777576137776133fd565b01949350505050565b60008451613792818460208901613013565b9190910192835250602082015260400191905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0xe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0xffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0xcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0xf9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0xf8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c", + "0x0000000000000000000000000000000000000000000000000000000000000010": "0xc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb", + "0x0000000000000000000000000000000000000000000000000000000000000011": "0x5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0xda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2" + } + }, + "0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x2476c911e6d4d9411e677d8faf15a64ac1fdeee8": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a6ed563e11610076578063bd02d0f51161005b578063bd02d0f51461018e578063ca446dd9146101b8578063e2a4853a1461011557600080fd5b8063a6ed563e1461018e578063abfdcced146101aa57600080fd5b80634e91db08116100a75780634e91db081461011557806354fd4d50146101275780637ae1cfca1461017057600080fd5b80630528afe2146100c357806321f8a721146100d8575b600080fd5b6100d66100d1366004610239565b6101c6565b005b6100eb6100e63660046102ae565b610229565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d66101233660046102c7565b9055565b6101636040518060400160405280600581526020017f312e322e3200000000000000000000000000000000000000000000000000000081525081565b60405161010c91906102e9565b61017e6100e63660046102ae565b604051901515815260200161010c565b61019c6100e63660046102ae565b60405190815260200161010c565b6100d661012336600461035c565b6100d6610123366004610391565b8060005b81811015610223576102118484838181106101e7576101e76103cf565b90506040020160000135858584818110610203576102036103cf565b905060400201602001359055565b8061021b816103fe565b9150506101ca565b50505050565b6000610233825490565b92915050565b6000806020838503121561024c57600080fd5b823567ffffffffffffffff8082111561026457600080fd5b818501915085601f83011261027857600080fd5b81358181111561028757600080fd5b8660208260061b850101111561029c57600080fd5b60209290920196919550909350505050565b6000602082840312156102c057600080fd5b5035919050565b600080604083850312156102da57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015610316578581018301518582016040015282016102fa565b81811115610328576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000806040838503121561036f57600080fd5b823591506020830135801515811461038657600080fd5b809150509250929050565b600080604083850312156103a457600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811461038657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610456577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x2ff5aa92912979720b554d1483dcfa76099740c2": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000058ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000004200000000000000000000000000000000000014", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000074f1ac50eb0be98853805d381c884f5f9abdecf9", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998": { + "balance": "0x0", + "code": "0x60806040526004361061019a5760003560e01c806370a08231116100e1578063a9059cbb1161008a578063d0e30db011610064578063d0e30db0146101a9578063dad544e014610585578063dd62ed3e1461059a578063f3fef3a3146105ed576101a9565b8063a9059cbb146104f1578063c4d66de814610511578063cd47bde114610531576101a9565b806395d89b41116100bb57806395d89b411461046b578063977a5ec5146104b1578063a7e21e80146104d1576101a9565b806370a08231146103f357806379502c55146104365780637eee288d1461044b576101a9565b8063313ce567116101435780633e47158c1161011d5780633e47158c1461036257806354fd4d50146103775780636a42b8f8146103c0576101a9565b8063313ce567146102b657806333d7e2bd146102dd57806338d38c971461032f576101a9565b806318160ddd1161017457806318160ddd1461025957806323b872dd146102765780632e1a7d4d14610296576101a9565b806306fdde03146101b1578063095ea7b3146102095780630ca3568214610239576101a9565b366101a9576101a761060d565b005b6101a761060d565b3480156101bd57600080fd5b5060408051808201909152600d81527f577261707065642045746865720000000000000000000000000000000000000060208201525b60405161020091906114c9565b60405180910390f35b34801561021557600080fd5b5061022961022436600461155e565b610668565b6040519015158152602001610200565b34801561024557600080fd5b506101a761025436600461158a565b6106e1565b34801561026557600080fd5b50475b604051908152602001610200565b34801561028257600080fd5b506102296102913660046115a3565b61084d565b3480156102a257600080fd5b506101a76102b136600461158a565b610a20565b3480156102c257600080fd5b506102cb601281565b60405160ff9091168152602001610200565b3480156102e957600080fd5b5060045461030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610200565b34801561033b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000016102cb565b34801561036e57600080fd5b5061030a610a2d565b34801561038357600080fd5b506101f36040518060400160405280600581526020017f312e352e3000000000000000000000000000000000000000000000000000000081525081565b3480156103cc57600080fd5b507f0000000000000000000000000000000000000000000000000000000000049d40610268565b3480156103ff57600080fd5b5061026861040e3660046115e4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561044257600080fd5b5061030a610c38565b34801561045757600080fd5b506101a761046636600461155e565b610cd0565b34801561047757600080fd5b5060408051808201909152600481527f574554480000000000000000000000000000000000000000000000000000000060208201526101f3565b3480156104bd57600080fd5b506101a76104cc36600461155e565b610d24565b3480156104dd57600080fd5b506101a76104ec3660046115e4565b610e33565b3480156104fd57600080fd5b5061022961050c36600461155e565b610e63565b34801561051d57600080fd5b506101a761052c3660046115e4565b610e77565b34801561053d57600080fd5b5061057061054c366004611601565b60036020908152600092835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610200565b34801561059157600080fd5b5061030a61101e565b3480156105a657600080fd5b506102686105b5366004611601565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b3480156105f957600080fd5b506101a761060836600461155e565b611072565b336000908152600160205260408120805434929061062c908490611669565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106d09086815260200190565b60405180910390a350600192915050565b6106e961101e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f44656c61796564574554483a206e6f74206f776e65720000000000000000000060448201526064015b60405180910390fd5b60004782106107915747610793565b815b604051909150600090339083908381818185875af1925050503d80600081146107d8576040519150601f19603f3d011682016040523d82523d6000602084013e6107dd565b606091505b5050905080610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f44656c61796564574554483a207265636f766572206661696c656400000000006044820152606401610779565b505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205482111561087f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660008181526002602090815260408083203380855292529091205491148015906108e057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b1561093857828110156108f257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915281208054859290610932908490611681565b90915550505b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160205260408120805485929061096d908490611681565b909155505073ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040812080548592906109a7908490611669565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a0d91815260200190565b60405180910390a3506001949350505050565b610a2a3382611072565b50565b600080610a587fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610a7b57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610abe9190611698565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610b19906060015b604051602081830303815290604052805190602001205490565b14610b50576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610b7290606001610aff565b905073ffffffffffffffffffffffffffffffffffffffff811615610c06578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bff91906116d5565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb91906116d5565b905090565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120426001820155805490918391839190610d1a908490611669565b9091555050505050565b610d2c61101e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f44656c61796564574554483a206e6f74206f776e6572000000000000000000006044820152606401610779565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260408083203380855290835292819020859055518481529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a361084882338361084d565b610a2a816104cc8373ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6000610e7033848461084d565b9392505050565b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015610eb7575060005460ff8083169116105b610f43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610779565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610f7c6113a0565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000611028610a2d565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b60048054604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692635c975abb9282820192602092908290030181865afa1580156110df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110391906116f2565b1561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f44656c61796564574554483a20636f6e747261637420697320706175736564006044820152606401610779565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020805482111561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f44656c61796564574554483a20696e73756666696369656e7420756e6c6f636b60448201527f6564207769746864726177616c000000000000000000000000000000000000006064820152608401610779565b60008160010154116112be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f44656c61796564574554483a207769746864726177616c206e6f7420756e6c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152608401610779565b427f0000000000000000000000000000000000000000000000000000000000049d4082600101546112ef9190611669565b111561137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44656c61796564574554483a207769746864726177616c2064656c6179206e6f60448201527f74206d65740000000000000000000000000000000000000000000000000000006064820152608401610779565b818160000160008282546113919190611681565b90915550610848905082611423565b336113a9610a2d565b73ffffffffffffffffffffffffffffffffffffffff16141580156113ea5750336113d161101e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611421576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3360009081526001602052604090205481111561143f57600080fd5b336000908152600160205260408120805483929061145e908490611681565b9091555050604051339082156108fc029083906000818181858888f19350505050158015611490573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600060208083528351808285015260005b818110156114f6578581018301518582016040015282016114da565b81811115611508576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a2a57600080fd5b6000806040838503121561157157600080fd5b823561157c8161153c565b946020939093013593505050565b60006020828403121561159c57600080fd5b5035919050565b6000806000606084860312156115b857600080fd5b83356115c38161153c565b925060208401356115d38161153c565b929592945050506040919091013590565b6000602082840312156115f657600080fd5b8135610e708161153c565b6000806040838503121561161457600080fd5b823561161f8161153c565b9150602083013561162f8161153c565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561167c5761167c61163a565b500190565b6000828210156116935761169361163a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116d0576116d061163a565b500290565b6000602082840312156116e757600080fd5b8151610e708161153c565b60006020828403121561170457600080fd5b81518015158114610e7057600080fdfea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x3caaed2ed7cd3e53d4d7b5d4bac03bfeb8f972a2": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5", + "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e": "0x000000000000000000000000b686f13aff1e427a1f993f29ab0f2e7383729fe0" + } + }, + "0x477a27590e2f76836b8f50a23f7ba2edd640209f": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000066": "0x010000000000000000000000000000000000000000000000000c3c9d00000558", + "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", + "0x0000000000000000000000000000000000000000000000000000000000000068": "0x00000000000000000000000000000000000c3c9d000005580000000003938700", + "0x0000000000000000000000000000000000000000000000000000000000000069": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", + "0x000000000000000000000000000000000000000000000000000000000000006b": "0x000000000000000000000000000000000000000000000000000000000153c16e", + "0x000000000000000000000000000000000000000000000000000000000000006c": "0x000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000083a2df4b23236dccc59a67d289cd5163190213ea", + "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636": "0x00000000000000000000000058ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82", + "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7": "0x0000000000000000000000002ff5aa92912979720b554d1483dcfa76099740c2", + "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac": "0x000000000000000000000000e2daae86373cd936d1477a186a8304d86c96ae0e", + "0x51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd58ff": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x58e88e949bd180ff86d6c072735c3d8d5a05a543c16130176ec0bc0adf3fd806": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc597": "0x0000000000000000000000000075b931d030ae1bd5243b4111d6e1595917e0b2", + "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376": "0x0000000000000000000000001bb26b99a924018c063ae4be222997aadfdec0c3", + "0x99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff42": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c": "0x0000000000000000000000000b6872da7070dc6237f3be0685cf32032638ba40", + "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f": "0x0000000000000000000000000000000000000000000000000000000000000025", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0x4826533b4897376654bb4d4ad88b7fafd0c98528": { + "balance": "0x0", + "code": "0x60806040526004361061005d575f3560e01c80635c60da1b116100425780635c60da1b146100bc5780638f283970146100f5578063f851a440146101145761006c565b80633659cfe6146100745780634f1ef286146100935761006c565b3661006c5761006a610128565b005b61006a610128565b34801561007f575f80fd5b5061006a61008e3660046106c8565b610218565b6100a66100a13660046106e1565b61028a565b6040516100b3919061075d565b60405180910390f35b3480156100c7575f80fd5b506100d0610409565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b3565b348015610100575f80fd5b5061006a61010f3660046106c8565b61049f565b34801561011f575f80fd5b506100d0610506565b5f6101517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166101fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b365f80375f80365f845af43d5f803e80610213573d5ffd5b503d5ff35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610271575033155b156102825761027f81610591565b50565b61027f610128565b60606102b47fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102eb575033155b156103fa576102f984610591565b5f808573ffffffffffffffffffffffffffffffffffffffff1685856040516103229291906107b0565b5f60405180830381855af49150503d805f811461035a576040519150601f19603f3d011682016040523d82523d5f602084013e61035f565b606091505b5091509150816103f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f2565b91506104029050565b610402610128565b9392505050565b5f6104327fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610469575033155b1561049457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61049c610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104f8575033155b156102825761027f816105f9565b5f61052f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610566575033155b1561049457507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050565b5f6106227fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c3575f80fd5b919050565b5f602082840312156106d8575f80fd5b610402826106a0565b5f805f604084860312156106f3575f80fd5b6106fc846106a0565b9250602084013567ffffffffffffffff80821115610718575f80fd5b818601915086601f83011261072b575f80fd5b813581811115610739575f80fd5b87602082850101111561074a575f80fd5b6020830194508093505050509250925092565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b818382375f910190815291905056fea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000195401dc811bb5740090279ba06cfa8fcf6113778", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", + "0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x00000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x00000000000000000000000070e0ba845a1a0f2da3359c97e0285013525ffc49", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0x58396a89db8e32179b2042a50f1bc66766fa4848": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80635a4dab331161005b5780635a4dab33146100fd57806378ecabce14610124578063b51f9c2b14610147578063b6a4cd211461019e57600080fd5b80631d8a4e921461008d57806330e9012c146100a8578063318b1b80146100bd57806358084273146100e8575b600080fd5b6100956101b1565b6040519081526020015b60405180910390f35b6100b061023a565b60405161009f919061241a565b6100d06100cb36600461257d565b61034e565b6040516001600160a01b03909116815260200161009f565b6100fb6100f6366004612596565b6103c9565b005b6100d07f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61013761013236600461257d565b61172e565b604051901515815260200161009f565b61014f6117d9565b60405161009f919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6100fb6101ac3660046125ee565b611886565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610235919061260b565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023591906126af565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103bd90612807565b60601c95945050505050565b60006103d9610140830183612857565b60008181106103ea576103ea6128c5565b61040092602060609092020190810191506125ee565b6001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046191906128f4565b905060005b610474610140840184612857565b905081101561073e57816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df91906128f4565b6001600160a01b03166104f6610140850185612857565b83818110610506576105066128c5565b61051c92602060609092020190810191506125ee565b6001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906128f4565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105de91906128f4565b6001600160a01b03161461061e576040517f513c07ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064d61062f610140850185612857565b6000818110610640576106406128c5565b9050606002016020013590565b61066e61065e610140860186612857565b84818110610640576106406128c5565b146106a5576040517fa9ef3a7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d46106b6610140850185612857565b60008181106106c7576106c76128c5565b9050606002016040013590565b6106f56106e5610140860186612857565b848181106106c7576106c76128c5565b1461072c576040517fa9ef3a7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061073681612940565b915050610466565b50600061075261062f610140850185612857565b03610789576040517fefc878f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610799610140840184612857565b905067ffffffffffffffff8111156107b3576107b3612624565b6040519080825280602002602001820160405280156107dc578160200160208202803683370190505b50905060005b6107f0610140850185612857565b90508110156108ca57610807610140850185612857565b82818110610817576108176128c5565b61082d92602060609092020190810191506125ee565b6001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088e91906128f4565b8282815181106108a0576108a06128c5565b6001600160a01b0390921660209283029190910190910152806108c281612940565b9150506107e2565b5060005b8151811015610a2957816000815181106108ea576108ea6128c5565b60200260200101516001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095391906128f4565b6001600160a01b031682828151811061096e5761096e6128c5565b60200260200101516001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906128f4565b6001600160a01b031614610a17576040517f8db2d5e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610a2181612940565b9150506108ce565b506000826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e91906128f4565b90506000610b0f4285610ad4610aa86101408a018a612857565b6000818110610ab957610ab96128c5565b610acf92602060609092020190810191506125ee565b6118dd565b6040518060400160405280601281526020017f4554484c6f636b626f782d496e7465726f70000000000000000000000000000081525061190b565b905082610c0e8583610b1f611969565b60a0015187600081518110610b3657610b366128c5565b60200260200101516001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f91906128f4565b85604051602401610bb192919061295a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f946d920400000000000000000000000000000000000000000000000000000000179052611a59565b506000610c624286610c27610aa86101408b018b612857565b6040518060400160405280601a81526020017f4469737075746547616d65466163746f72792d496e7465726f7000000000000081525061190b565b9050610ce98582610c71611969565b61014001516040516001600160a01b03881660248201526044015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052611a59565b6000610d3c4287610d01610aa86101408c018c612857565b6040518060400160405280601b81526020017f416e63686f72537461746552656769737472792d496e7465726f70000000000081525061190b565b90506000610d4d60208901896129c3565b15610d5a57506004610d5e565b5060055b610e868783610d6b611969565b610160015189600081518110610d8357610d836128c5565b60200260200101516001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec91906128f4565b604080516001600160a01b039283166024820152918916604483015260208e013560648301528d0135608482015263ffffffff861660a482015260c40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47a222c500000000000000000000000000000000000000000000000000000000179052611a59565b60005b865181101561116b576000878281518110610ea657610ea66128c5565b60200260200101516001600160a01b031663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906128f4565b6040517f5ec15d890000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015291925090871690635ec15d8990602401600060405180830381600087803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b50506040517f438ab5ac0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301528416925063438ab5ac9150602401600060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b50505050600088838151811061100f5761100f6128c5565b60200260200101516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107891906128f4565b9050611085816000611ad9565b611090816004611ad9565b61109b816001611ad9565b6110a6816005611ad9565b6110b1816008611ad9565b6110bc816009611ad9565b8883815181106110ce576110ce6128c5565b60209081029190910101516040517f2152f2be0000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152878116602483015290911690632152f2be90604401600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b505050505050808061116390612940565b915050610e89565b5060006111bf4289611184610aa86101408e018e612857565b6040518060400160405280602081526020017f44656c61796564574554482d496e7465726f702d5065726d697373696f6e656481525061190b565b905061126a88826111ce611969565b61018001518a6000815181106111e6576111e66128c5565b60200260200101516001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124f91906128f4565b6040516001600160a01b039091166024820152604401610c8c565b60006113176040518060e0016040528061128e8d80610140019061062f9190612857565b815260200161129b611969565b6101a001516001600160a01b03168152602001866001600160a01b03168152602001846001600160a01b03168152602001600081526020018c60600160000160208101906112e991906125ee565b6001600160a01b0316815260200161130760a08e0160808f016125ee565b6001600160a01b03169052611b6a565b9050846001600160a01b031663b1070957600561133261023a565b6102200151846040518463ffffffff1660e01b815260040161135693929190612a3c565b600060405180830381600087803b15801561137057600080fd5b505af1158015611384573d6000803e3d6000fd5b50506040517f1e3342400000000000000000000000000000000000000000000000000000000081526005600482015260e08d013560248201526001600160a01b0388169250631e3342409150604401600060405180830381600087803b1580156113ed57600080fd5b505af1158015611401573d6000803e3d6000fd5b506114179450505060208b0191508a90506129c3565b156117245760006114524289611434610aa86101408e018e612857565b604051806060016040528060228152602001612d4c6022913961190b565b905061146188826111ce611969565b60006114ce6040518060e001604052806114858d80610140019061062f9190612857565b8152602001611492611969565b6101a001516001600160a01b0390811682528781166020830152851660408201526000606082018190526080820181905260a090910152611b6a565b9050846001600160a01b031663b107095760046114e961023a565b6102000151846040518463ffffffff1660e01b815260040161150d93929190612a3c565b600060405180830381600087803b15801561152757600080fd5b505af115801561153b573d6000803e3d6000fd5b50506040517f1e33424000000000000000000000000000000000000000000000000000000000815260048082015260e08d013560248201526001600160a01b0388169250631e3342409150604401600060405180830381600087803b1580156115a357600080fd5b505af11580156115b7573d6000803e3d6000fd5b5050505060006115d18b8061014001906106b69190612857565b90508015611720576116316040518060e001604052808381526020016115f5611969565b6101a001516001600160a01b0390811682528881166020830152861660408201526000606082018190526080820181905260a090910152611b6a565b9150856001600160a01b031663b1070957600961164c61023a565b6102000151856040518463ffffffff1660e01b815260040161167093929190612a3c565b600060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b50506040517f1e3342400000000000000000000000000000000000000000000000000000000081526009600482015260e08e013560248201526001600160a01b0389169250631e3342409150604401600060405180830381600087803b15801561170757600080fd5b505af115801561171b573d6000803e3d6000fd5b505050505b5050505b5050505050505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d39190612a73565b92915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102359190612a90565b806001600160a01b03163b6000036118da576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b604080516001600160a01b0383166020820152606091015b6040516020818303038152906040529050919050565b600080611919868585611ca1565b905061195f611926611cd7565b60200151828760405160200161194b91906001600160a01b0391909116815260200190565b604051602081830303815290604052611d60565b9695505050505050565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa48486001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa15801561032a573d6000803e3d6000fd5b611a6282611886565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d90611aab90869086908690600401612b4f565b600060405180830381600087803b158015611ac557600080fd5b505af1158015611724573d6000803e3d6000fd5b6040517fb107095700000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526000602482018190526060604483015260648201526001600160a01b0383169063b107095790608401600060405180830381600087803b158015611b4e57600080fd5b505af1158015611b62573d6000803e3d6000fd5b505050505050565b60a08101516060906001600160a01b0316158015611b93575060c08201516001600160a01b0316155b15611c0a5781516020808401516040808601516060870151608088015192516118f596959293919201948552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602087015292841b83166034860152921b166048830152605c820152607c0190565b8151602080840151604080860151606080880151608089015160a08a015160c08b01518651988901999099527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000096841b87169588019590955292821b85166054870152811b84166068860152607c85019190915290811b8216609c8401529290921b90911660b082015260c4016118f5565b919050565b6000838383604051602001611cb893929190612b7b565b6040516020818303038152906040528051906020012090509392505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa48486001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611862573d6000803e3d6000fd5b600080611d91856001600160a01b0316803b806020016040519081016040528181526000908060200190933c611e9a565b805190915060ff1615611dd85780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff90911660048201526024016118d1565b60208101515115611e1b5780602001516040517f57a058350000000000000000000000000000000000000000000000000000000081526004016118d19190612ba6565b6000816040015184604051602001611e34929190612bb9565b6040516020818303038152906040529050848151602083016000f592506001600160a01b038316611e91576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b611ec16040518060600160405280600060ff16815260200160608152602001606081525090565b600282511080611f2b575081600081518110611edf57611edf6128c5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b80611f90575081600181518110611f4457611f446128c5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15611fc7576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283600281518110611fde57611fde6128c5565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c905060008360028151811061200e5761200e6128c5565b60209101015160f81c60039081169150819003612057576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156121435760008260ff1667ffffffffffffffff81111561208057612080612624565b6040519080825280601f01601f1916602001820160405280156120aa576020820181803683370190505b50905060005b8360ff1681101561213557866120c7826003612be8565b815181106120d7576120d76128c5565b602001015160f81c60f81b8282815181106120f4576120f46128c5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061212d81612940565b9150506120b0565b5061213f81612359565b9150505b60008167ffffffffffffffff81111561215e5761215e612624565b6040519080825280601f01601f191660200182016040528015612188576020820181803683370190505b50905060ff83161561222d5760006121a1846003612c00565b60ff16905060005b8381101561222a57876121bc8284612be8565b815181106121cc576121cc6128c5565b602001015160f81c60f81b8382815181106121e9576121e96128c5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061222281612940565b9150506121a9565b50505b60008261223b856003612c00565b60ff166122489190612be8565b905060008188516122599190612c25565b905080600003612295576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff8111156122b0576122b0612624565b6040519080825280601f01601f1916602001820160405280156122da576020820181803683370190505b50905060008360208b0101602083018481868460045afa925050508061232c576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6000602082511115612397576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8351811015612413576123af816001612be8565b84516123bb9190612c25565b6123c6906008612c3c565b6123d1906002612d3f565b8482815181106123e3576123e36128c5565b01602001516123f5919060f81c612c3c565b6123ff9083612be8565b91508061240b81612940565b91505061239b565b5092915050565b81516001600160a01b031681526102408101602083015161244660208401826001600160a01b03169052565b50604083015161246160408401826001600160a01b03169052565b50606083015161247c60608401826001600160a01b03169052565b50608083015161249760808401826001600160a01b03169052565b5060a08301516124b260a08401826001600160a01b03169052565b5060c08301516124cd60c08401826001600160a01b03169052565b5060e08301516124e860e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102209384015116929091019190915290565b60006020828403121561258f57600080fd5b5035919050565b6000602082840312156125a857600080fd5b813567ffffffffffffffff8111156125bf57600080fd5b820161016081850312156125d257600080fd5b9392505050565b6001600160a01b03811681146118da57600080fd5b60006020828403121561260057600080fd5b81356125d2816125d9565b60006020828403121561261d57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610240810167ffffffffffffffff8111828210171561269e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b8051611c9c816125d9565b600061024082840312156126c257600080fd5b6126ca612653565b6126d3836126a4565b81526126e1602084016126a4565b60208201526126f2604084016126a4565b6040820152612703606084016126a4565b6060820152612714608084016126a4565b608082015261272560a084016126a4565b60a082015261273660c084016126a4565b60c082015261274760e084016126a4565b60e082015261010061275a8185016126a4565b9082015261012061276c8482016126a4565b9082015261014061277e8482016126a4565b908201526101606127908482016126a4565b908201526101806127a28482016126a4565b908201526101a06127b48482016126a4565b908201526101c06127c68482016126a4565b908201526101e06127d88482016126a4565b908201526102006127ea8482016126a4565b908201526102206127fc8482016126a4565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008082169350601483101561284f5780818460140360031b1b83161693505b505050919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261288c57600080fd5b83018035915067ffffffffffffffff8211156128a757600080fd5b60200191506060810236038213156128be57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561290657600080fd5b81516125d2816125d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000600019820361295357612953612911565b5060010190565b6000604082016001600160a01b0380861684526020604081860152828651808552606087019150828801945060005b818110156129a7578551851683529483019491830191600101612989565b509098975050505050505050565b80151581146118da57600080fd5b6000602082840312156129d557600080fd5b81356125d2816129b5565b60005b838110156129fb5781810151838201526020016129e3565b83811115612a0a576000848401525b50505050565b60008151808452612a288160208601602086016129e0565b601f01601f19169290920160200192915050565b63ffffffff841681526001600160a01b0383166020820152606060408201526000612a6a6060830184612a10565b95945050505050565b600060208284031215612a8557600080fd5b81516125d2816129b5565b600060a08284031215612aa257600080fd5b60405160a0810181811067ffffffffffffffff82111715612aec577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251612afa816125d9565b81526020830151612b0a816125d9565b60208201526040830151612b1d816125d9565b60408201526060830151612b30816125d9565b60608201526080830151612b43816125d9565b60808201529392505050565b60006001600160a01b03808616835280851660208401525060606040830152612a6a6060830184612a10565b838152606060208201526000612b946060830185612a10565b828103604084015261195f8185612a10565b6020815260006125d26020830184612a10565b60008351612bcb8184602088016129e0565b835190830190612bdf8183602088016129e0565b01949350505050565b60008219821115612bfb57612bfb612911565b500190565b600060ff821660ff84168060ff03821115612c1d57612c1d612911565b019392505050565b600082821015612c3757612c37612911565b500390565b6000816000190483118215151615612c5657612c56612911565b500290565b600181815b80851115612c96578160001904821115612c7c57612c7c612911565b80851615612c8957918102915b93841c9390800290612c60565b509250929050565b600082612cad575060016117d3565b81612cba575060006117d3565b8160018114612cd05760028114612cda57612cf6565b60019150506117d3565b60ff841115612ceb57612ceb612911565b50506001821b6117d3565b5060208310610133831016604e8410600b8410161715612d19575081810a6117d3565b612d238383612c5b565b8060001904821115612d3757612d37612911565b029392505050565b60006125d28383612c9e56fe44656c61796564574554482d496e7465726f702d5065726d697373696f6e6c657373a164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x58ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82": { + "balance": "0x0", + "code": "0x608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000030000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000000cc": "0x000000000000000000000000000000000000000000000000000000000000dead", + "0x00000000000000000000000000000000000000000000000000000000000000cf": "0x0000000000000000000000004200000000000000000000000000000000000007", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "0x000000000000000000000000e2daae86373cd936d1477a186a8304d86c96ae0e", + "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", + "0x22a50d7753da6d63509109c20d04bfc0cb620259b9f97342a05dc6215d8db877": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xb6b68c6a49af08c68434b9c8591d078d94046eeb9927fed40467a1f3675e51da": "0x0000000000000000000000003caaed2ed7cd3e53d4d7b5d4bac03bfeb8f972a2" + } + }, + "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000001f734b89bb1b422b9910118fb8d44c06e33d4dda", + "0x4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace0": "0x0000000000000000000000000000000000000009000000000000000000000000", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3", + "0xe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1a": "0x0000000000000000000000000000000000000009000000000000000000000000" + } + }, + "0x61525eaacddb97d9184afc205827e6a4fd0bf62a": { + "balance": "0x0", + "code": "0x6080604052600436106101a55760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610597578063c89701a2146105aa578063dad544e0146105d7578063e11013dd146105ec57600080fd5b8063927ede2d146105395780639a2ac6d514610564578063a9f9e6751461057757600080fd5b806387087623116100bb57806387087623146104d35780638f601f66146104f357806391c49bf81461048857600080fd5b80635c975abb146104635780637f46ddb214610488578063838b2520146104b357600080fd5b806338d38c971161014e578063485cc95511610128578063485cc955146103ad578063540abf73146103cd57806354fd4d50146103ed57806358a997f61461044357600080fd5b806338d38c971461032d5780633cb747bf1461036b5780633e47158c1461039857600080fd5b80631635f5fd1161017f5780631635f5fd146102ae57806333d7e2bd146102c157806335e80ab31461031857600080fd5b80630166a07a1461026857806309fc8843146102885780631532ec341461029b57600080fd5b36610263576101b26105ff565b610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610261333362030d406040518060200160405280600081525061063c565b005b600080fd5b34801561027457600080fd5b50610261610283366004612b73565b61064f565b610261610296366004612c24565b610a69565b6102616102a9366004612c77565b610b45565b6102616102bc366004612c77565b610b59565b3480156102cd57600080fd5b506034546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561032457600080fd5b506102ee611022565b34801561033957600080fd5b5060405160ff7f000000000000000000000000000000000000000000000000000000000000000316815260200161030f565b34801561037757600080fd5b506003546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a457600080fd5b506102ee6110bb565b3480156103b957600080fd5b506102616103c8366004612cea565b6112c6565b3480156103d957600080fd5b506102616103e8366004612d23565b61148c565b3480156103f957600080fd5b506104366040518060400160405280600581526020017f322e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161030f9190612e10565b34801561044f57600080fd5b5061026161045e366004612e23565b6114d1565b34801561046f57600080fd5b506104786115aa565b604051901515815260200161030f565b34801561049457600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102ee565b3480156104bf57600080fd5b506102616104ce366004612d23565b61163e565b3480156104df57600080fd5b506102616104ee366004612e23565b611683565b3480156104ff57600080fd5b5061052b61050e366004612cea565b600260209081526000928352604080842090915290825290205481565b60405190815260200161030f565b34801561054557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102ee565b610261610572366004612ea6565b61175c565b34801561058357600080fd5b50610261610592366004612b73565b61179e565b6102616105a5366004612c24565b6117ad565b3480156105b657600080fd5b506004546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105e357600080fd5b506102ee611883565b6102616105fa366004612ea6565b6118d7565b600032330361060e5750600190565b333b60170361063657604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b610649848434858561191a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610722575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190612f09565b73ffffffffffffffffffffffffffffffffffffffff16145b6107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161023a565b6107dc6115aa565b15610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161023a565b61084c87611ae4565b1561099a5761085b8787611b46565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161023a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561097d57600080fd5b505af1158015610991573d6000803e3d6000fd5b50505050610a1c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109d8908490612f55565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a1c908585611c66565b610a60878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3a92505050565b50505050505050565b610a716105ff565b610afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b610b403333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191a92505050565b505050565b610b528585858585610b59565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c2c575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c149190612f09565b73ffffffffffffffffffffffffffffffffffffffff16145b610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161023a565b610ce66115aa565b15610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161023a565b823414610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161023a565b3073ffffffffffffffffffffffffffffffffffffffff851603610e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161023a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161023a565b610f6e85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dc892505050565b6000610f8b855a8660405180602001604052806000815250611e3b565b90508061101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161023a565b505050505050565b603454604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190612f09565b905090565b6000806110e67fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561110957919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261114c9190612f6c565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906111a7906060015b604051602081830303815290604052805190602001205490565b146111de576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906112009060600161118d565b905073ffffffffffffffffffffffffffffffffffffffff811615611294578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d9190612f09565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff16158015611306575060005460ff8083169116105b611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161023a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556113cb611e53565b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905561142983734200000000000000000000000000000000000010611ed6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610a6087873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fc092505050565b6114d96105ff565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b61101a86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237992505050565b603454604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190612fa9565b610a6087873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237992505050565b61168b6105ff565b611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b61101a86863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fc092505050565b61064933858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061063c92505050565b610a608787878787878761064f565b6117b56105ff565b611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b610b4033338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061063c92505050565b600061188d6110bb565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611092573d6000803e3d6000fd5b6106493385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191a92505050565b8234146119a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161023a565b6119b585858584612388565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a18908b908b9086908a90602401612fcb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611aab92918890600401613014565b6000604051808303818588803b158015611ac457600080fd5b505af1158015611ad8573d6000803e3d6000fd5b50505050505050505050565b6000611b10827f1d1d8b63000000000000000000000000000000000000000000000000000000006123fb565b80611b405750611b40827fec4fc8e3000000000000000000000000000000000000000000000000000000006123fb565b92915050565b6000611b72837f1d1d8b63000000000000000000000000000000000000000000000000000000006123fb565b15611c1b578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be69190612f09565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611b40565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b409084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261241e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611db293929190613059565b60405180910390a461101a86868686868661252a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e27929190613097565b60405180910390a3610649848484846125b2565b6000806000835160208501868989f195945050505050565b33611e5c6110bb565b73ffffffffffffffffffffffffffffffffffffffff1614158015611e9d575033611e84611883565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611ed4576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600054610100900460ff16611f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161023a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b341561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161023a565b61205787611ae4565b156121a5576120668787611b46565b612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161023a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b50505050612239565b6121c773ffffffffffffffffffffffffffffffffffffffff881686308661261f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546122059084906130b0565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61224787878787878661267d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a00000000000000000000000000000000000000000000000000000000906122ab908b908d908c908c908c908b906024016130c8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261233e92918790600401613014565b600060405180830381600087803b15801561235857600080fd5b505af115801561236c573d6000803e3d6000fd5b5050505050505050505050565b610a6087878787878787611fc0565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516123e7929190613097565b60405180910390a36106498484848461270b565b60006124068361276a565b8015612417575061241783836127ce565b9392505050565b6000612480826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661289d9092919063ffffffff16565b805190915015610b40578080602001905181019061249e9190612fa9565b610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161023a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516125a293929190613059565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612611929190613097565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106499085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611cb8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516126f593929190613059565b60405180910390a461101a8686868686866128b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612611929190613097565b6000612796827f01ffc9a7000000000000000000000000000000000000000000000000000000006127ce565b8015611b4057506127c7827fffffffff000000000000000000000000000000000000000000000000000000006127ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612886575060208210155b80156128925750600081115b979650505050505050565b60606128ac848460008561292c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516125a293929190613059565b6060824710156129be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161023a565b73ffffffffffffffffffffffffffffffffffffffff85163b612a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161023a565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612a659190613123565b60006040518083038185875af1925050503d8060008114612aa2576040519150601f19603f3d011682016040523d82523d6000602084013e612aa7565b606091505b509150915061289282828660608315612ac1575081612417565b825115612ad15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023a9190612e10565b73ffffffffffffffffffffffffffffffffffffffff81168114612b2757600080fd5b50565b60008083601f840112612b3c57600080fd5b50813567ffffffffffffffff811115612b5457600080fd5b602083019150836020828501011115612b6c57600080fd5b9250929050565b600080600080600080600060c0888a031215612b8e57600080fd5b8735612b9981612b05565b96506020880135612ba981612b05565b95506040880135612bb981612b05565b94506060880135612bc981612b05565b93506080880135925060a088013567ffffffffffffffff811115612bec57600080fd5b612bf88a828b01612b2a565b989b979a50959850939692959293505050565b803563ffffffff81168114612c1f57600080fd5b919050565b600080600060408486031215612c3957600080fd5b612c4284612c0b565b9250602084013567ffffffffffffffff811115612c5e57600080fd5b612c6a86828701612b2a565b9497909650939450505050565b600080600080600060808688031215612c8f57600080fd5b8535612c9a81612b05565b94506020860135612caa81612b05565b935060408601359250606086013567ffffffffffffffff811115612ccd57600080fd5b612cd988828901612b2a565b969995985093965092949392505050565b60008060408385031215612cfd57600080fd5b8235612d0881612b05565b91506020830135612d1881612b05565b809150509250929050565b600080600080600080600060c0888a031215612d3e57600080fd5b8735612d4981612b05565b96506020880135612d5981612b05565b95506040880135612d6981612b05565b945060608801359350612d7e60808901612c0b565b925060a088013567ffffffffffffffff811115612bec57600080fd5b60005b83811015612db5578181015183820152602001612d9d565b838111156106495750506000910152565b60008151808452612dde816020860160208601612d9a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124176020830184612dc6565b60008060008060008060a08789031215612e3c57600080fd5b8635612e4781612b05565b95506020870135612e5781612b05565b945060408701359350612e6c60608801612c0b565b9250608087013567ffffffffffffffff811115612e8857600080fd5b612e9489828a01612b2a565b979a9699509497509295939492505050565b60008060008060608587031215612ebc57600080fd5b8435612ec781612b05565b9350612ed560208601612c0b565b9250604085013567ffffffffffffffff811115612ef157600080fd5b612efd87828801612b2a565b95989497509550505050565b600060208284031215612f1b57600080fd5b815161241781612b05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f6757612f67612f26565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612fa457612fa4612f26565b500290565b600060208284031215612fbb57600080fd5b8151801515811461241757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261300a6080830184612dc6565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130436060830185612dc6565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061308e6060830184612dc6565b95945050505050565b8281526040602082015260006128ac6040830184612dc6565b600082198211156130c3576130c3612f26565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261311760c0830184612dc6565b98975050505050505050565b60008251613135818460208701612d9a565b919091019291505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x6b35cca790320593ad27960764db1d53a099eebc": { + "balance": "0x0", + "code": "0x60806040526004361061034a5760003560e01c80636f034409116101bb578063c0d8bb74116100f7578063dabd396d11610095578063f8f43ff61161006f578063f8f43ff614610aee578063fa24f74314610b0e578063fa315aa914610b32578063fe2bbeb214610b6557600080fd5b8063dabd396d14610a58578063ec5e630814610a8b578063eff0f59214610abe57600080fd5b8063cf09e0d0116100d1578063cf09e0d0146109d5578063d5d44d80146109f6578063d6ae3cd514610a16578063d8cc1a3c14610a3857600080fd5b8063c0d8bb7414610914578063c395e1ca14610941578063c6f0308c1461096157600080fd5b80638b85902b11610164578063a445ece61161013e578063a445ece614610805578063bbdc02db146108a5578063bcef3b55146108d2578063bd8da956146108f457600080fd5b80638b85902b146107c15780638d450a95146107e357806399735e32146107c157600080fd5b80637b0f0adc116101955780637b0f0adc146107915780638129fc1c146107a45780638980e0cc146107ac57600080fd5b80636f0344091461075457806370872aa514610767578063786b844b1461077c57600080fd5b80633e3ac9121161028a5780635a5fa2d911610233578063609d33341161020d578063609d3334146106ca57806360e27464146106df5780636361506d146106ff5780636b6716c01461072157600080fd5b80635a5fa2d9146106655780635c0cba33146106855780635e234947146106aa57600080fd5b8063529d6a8c11610264578063529d6a8c146105b957806354fd4d50146105e657806357da950e1461063557600080fd5b80633e3ac912146105515780633fc8cef314610581578063472777c6146105a657600080fd5b806325fc2ace116102f757806330dbe570116102d157806330dbe570146104b8578063378dd48c146104f057806337b1b2291461050a5780633a7684631461052c57600080fd5b806325fc2ace146104645780632810e1d6146104835780632ad69aeb1461049857600080fd5b8063200d2ed211610328578063200d2ed2146103dc578063222abf451461040a578063250e69bd1461044a57600080fd5b8063019351301461034f57806303c2924d1461037157806319effeb414610391575b600080fd5b34801561035b57600080fd5b5061036f61036a36600461553f565b610b95565b005b34801561037d57600080fd5b5061036f61038c36600461559a565b610e54565b34801561039d57600080fd5b506000546103be9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103e857600080fd5b506000546103fd90600160801b900460ff1681565b6040516103d391906155f3565b34801561041657600080fd5b5061043a61042536600461561b565b600c6020526000908152604090205460ff1681565b60405190151581526020016103d3565b34801561045657600080fd5b50600a5461043a9060ff1681565b34801561047057600080fd5b506008545b6040519081526020016103d3565b34801561048f57600080fd5b506103fd6113dc565b3480156104a457600080fd5b506104756104b336600461559a565b6115b4565b3480156104c457600080fd5b506001546104d8906001600160a01b031681565b6040516001600160a01b0390911681526020016103d3565b3480156104fc57600080fd5b50600d546103fd9060ff1681565b34801561051657600080fd5b503660011981013560f01c90033560601c6104d8565b34801561053857600080fd5b503660011981013560f01c90036098013560601c6104d8565b34801561055d57600080fd5b5060005461043a907201000000000000000000000000000000000000900460ff1681565b34801561058d57600080fd5b503660011981013560f01c900360c0013560601c6104d8565b61036f6105b4366004615638565b6115ea565b3480156105c557600080fd5b506104756105d436600461561b565b60036020526000908152604090205481565b3480156105f257600080fd5b5060408051808201909152600581527f322e332e3000000000000000000000000000000000000000000000000000000060208201525b6040516103d391906156cf565b34801561064157600080fd5b50600854600954610650919082565b604080519283526020830191909152016103d3565b34801561067157600080fd5b506104756106803660046156e2565b6115fc565b34801561069157600080fd5b503660011981013560f01c900360ac013560601c6104d8565b3480156106b657600080fd5b506104756106c53660046156e2565b611636565b3480156106d657600080fd5b50610628611697565b3480156106eb57600080fd5b5061036f6106fa36600461561b565b6116a5565b34801561070b57600080fd5b503660011981013560f01c900360340135610475565b34801561072d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002a306103be565b61036f610762366004615709565b6119b6565b34801561077357600080fd5b50600954610475565b34801561078857600080fd5b5061036f612339565b61036f61079f366004615638565b612727565b61036f612734565b3480156107b857600080fd5b50600254610475565b3480156107cd57600080fd5b503660011981013560f01c900360580135610475565b3480156107ef57600080fd5b503660011981013560f01c900360780135610475565b34801561081157600080fd5b506108676108203660046156e2565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b031660608201526080016103d3565b3480156108b157600080fd5b506040513660011981013560f01c90036054013560e01c81526020016103d3565b3480156108de57600080fd5b503660011981013560f01c900360140135610475565b34801561090057600080fd5b506103be61090f3660046156e2565b612fcb565b34801561092057600080fd5b5061047561092f36600461561b565b600b6020526000908152604090205481565b34801561094d57600080fd5b5061047561095c36600461574a565b613165565b34801561096d57600080fd5b5061098161097c3660046156e2565b613326565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e0016103d3565b3480156109e157600080fd5b506000546103be9067ffffffffffffffff1681565b348015610a0257600080fd5b50610475610a1136600461561b565b61339a565b348015610a2257600080fd5b503660011981013560f01c900360d40135610475565b348015610a4457600080fd5b5061036f610a53366004615773565b6133f2565b348015610a6457600080fd5b507f0000000000000000000000000000000000000000000000000000000000049d406103be565b348015610a9757600080fd5b507f000000000000000000000000000000000000000000000000000000000000001e610475565b348015610aca57600080fd5b5061043a610ad93660046156e2565b60046020526000908152604090205460ff1681565b348015610afa57600080fd5b5061036f610b09366004615638565b613926565b348015610b1a57600080fd5b50610b23613ced565b6040516103d3939291906157ff565b348015610b3e57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000049610475565b348015610b7157600080fd5b5061043a610b803660046156e2565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610bb457610bb46155bc565b14610bd25760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c25576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c3e3660011981013560f01c90036014013590565b90565b610c55610c503686900386018661583a565b613d17565b14610c8c576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610ca19291906158ae565b604051809103902014610ce0576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d29610d2484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613d7392505050565b613de0565b90506000610d5082600881518110610d4357610d436158be565b6020026020010151613f96565b9050602081511115610d8e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605801358103610de5576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054600160801b900460ff166002811115610e7357610e736155bc565b14610e915760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610ea657610ea66158be565b906000526020600020906005020190506000610ec184612fcb565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d4081169082161015610f2a576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615610f73576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805480158015610f9057508515155b15610ff357835464010000000090046001600160a01b031660008115610fb65781610fc5565b60018601546001600160a01b03165b9050610fd1818761404a565b505050600094855250506006602052505060409020805460ff19166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b03166060830152611077576001600160801b036040820152600181526000869003611077578195505b600086826020015163ffffffff1661108f91906158ea565b905060008382116110a057816110a2565b835b602084015190915063ffffffff165b818110156111c25760008682815481106110cd576110cd6158be565b6000918252602080832090910154808352600690915260409091205490915060ff16611125576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061113a5761113a6158be565b60009182526020909120600590910201805490915064010000000090046001600160a01b03161580156111815750600481015460408701516001600160801b039182169116115b156111ad5760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b505080806111ba90615902565b9150506110b1565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909316929092179091558490036113d157606083015160008a8152600660205260409020805460ff191660011790558915801561130e57506000547201000000000000000000000000000000000000900460ff165b15611369576001546001600160a01b0316611329818a61404a565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556113cf565b6113966001600160a01b038216156113815781611390565b60018901546001600160a01b03165b8961404a565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b600080600054600160801b900460ff1660028111156113fd576113fd6155bc565b1461141b5760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661147f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b0316600260008154811061149e5761149e6158be565b600091825260209091206005909102015464010000000090046001600160a01b0316146114cc5760016114cf565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b836002811115611573576115736155bc565b021790556002811115611588576115886155bc565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b600560205281600052604060002081815481106115d057600080fd5b90600052602060002001600091509150505481565b905090565b6115f783838360016119b6565b505050565b6000818152600760209081526040808320600590925282208054825461162d90610100900463ffffffff168261591c565b95945050505050565b60003660011981013560f01c900360d401358214611680576040517f0da789df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003601401355b92915050565b60606115e56058602061408c565b6116ad612339565b60006002600d5460ff1660028111156116c8576116c86155bc565b036116ec57506001600160a01b0381166000908152600b602052604090205461175b565b6001600d5460ff166002811115611705576117056155bc565b0361172957506001600160a01b03811660009081526003602052604090205461175b565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff16611839576001600160a01b0382166000908152600c60205260409020805460ff191660011790556117b860c0600119369081013560f01c9003013560601c90565b6040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529190911690637eee288d90604401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b505050505050565b80600003611873576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600b6020908152604080832083905560039091528120553660011981013560f01c900360c0013560601c6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052919091169063f3fef3a390604401600060405180830381600087803b15801561191157600080fd5b505af1158015611925573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50509050806115f7576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054600160801b900460ff1660028111156119d5576119d56155bc565b146119f35760405163067fe19560e41b815260040160405180910390fd5b600060028481548110611a0857611a086158be565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514611acc576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000611b61826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611b9c5750611b997f000000000000000000000000000000000000000000000000000000000000001e60026158ea565b81145b8015611ba6575084155b15611bdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611c03575086155b15611c3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000049811115611c94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cbf7f000000000000000000000000000000000000000000000000000000000000001e60016158ea565b8103611cd157611cd1868885886140c0565b34611cdb83613165565b14611d12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d1d88612fcb565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d40811690821603611d85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611db260017f000000000000000000000000000000000000000000000000000000000000004961591c565b8303611ec8573660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c9190615933565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8d9190615950565b611ec1907f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff16615969565b9050611f5b565b611ef360017f000000000000000000000000000000000000000000000000000000000000001e61591c565b8303611f2e57611ec17f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615995565b507f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff165b611f8f817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff166159c5565b67ffffffffffffffff16611faa8367ffffffffffffffff1690565b67ffffffffffffffff161115611ff157611fee817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff166159c5565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff1615612066576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c8152602001908152602001600020600160028054905061225d919061591c565b81546001810183556000928352602080842090910191909155338252600b90526040812080543492906122919084906158ea565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b6002600d5460ff166002811115612352576123526155bc565b148061237457506001600d5460ff166002811115612372576123726155bc565b145b1561237b57565b6000600d5460ff166002811115612394576123946155bc565b146123cb576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243f91906159ee565b15612476576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff166000036124d2576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003660011981013560f01c900360ac013560601c6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039190911690630314d2b390602401602060405180830381865afa158015612546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256a91906159ee565b9050806125a3576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906317cf21a990602401600060405180830381600087803b15801561261257600080fd5b505af1925050508015612623575060015b5060003660011981013560f01c900360ac013560601c6040517f496b9c160000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03919091169063496b9c1690602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc91906159ee565b905080156126d657600d805460ff191660011790556126e4565b600d805460ff191660021790555b600d546040517f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f9161271b9160ff909116906155f3565b60405180910390a15050565b6115f783838360006119b6565b60005471010000000000000000000000000000000000900460ff1615612786576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61278e61424f565b36146127c6576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000803660011981013560f01c900360ac013560601c6001600160a01b031663d83ef2676040518163ffffffff1660e01b81526004016040805180830381865afa158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c9190615a0b565b909250905081612878576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915282815260200181905260088290556009819055803660011981013560f01c900360580135116128f3576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036014013560048201526024015b60405180910390fd5b67ffffffffffffffff3660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129709190615933565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d19190615950565b1115612a09576040517fb4e1243300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612a407f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615a2f565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab89190615933565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b199190615950565b67ffffffffffffffff16612b547f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff1690565b67ffffffffffffffff16612b6891906158ea565b90506000612b76838361425d565b905067ffffffffffffffff811115612bba576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff161115612c32576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e08101825263ffffffff808252600060208084018281523660011981013560f01c90038035606090811c8789018181526001600160801b0334818116948b0194855260149095013560808b01908152600160a08c0181815242841660c08e019081526002805493840181558c529c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590930292830180549a5191909d167fffffffffffffffff000000000000000000000000000000000000000000000000909a16999099176401000000006001600160a01b039a8b160217909b5592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0820180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001691851691909117905593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015595519651968116600160801b9790911696909602959095177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101558154710100000000000000000000000000000000007fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff909116178255918152600b909152918220805491929091612e739084906158ea565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ec557600080fd5b505af1158015612ed9573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550612f1c9150612fb59050565b63ffffffff163660011981013560f01c900360ac013560601c6001600160a01b0316633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f969190615a4e565b600a805460ff191663ffffffff92909216929092141790555050505050565b3660011981013560f01c90036054013560e01c90565b600080600054600160801b900460ff166002811115612fec57612fec6155bc565b1461300a5760405163067fe19560e41b815260040160405180910390fd5b60006002838154811061301f5761301f6158be565b600091825260208220600590910201805490925063ffffffff9081161461308557815460028054909163ffffffff1690811061305d5761305d6158be565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b60048201546000906130b090600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b6130c49067ffffffffffffffff164261591c565b6130da6130a3846001600160801b031660401c90565b67ffffffffffffffff166130ee91906158ea565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff161161313b578061162d565b7f0000000000000000000000000000000000000000000000000000000000049d4095945050505050565b6000806131e2836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000049811115613241576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a300600061325c8383615a8a565b9050670de0b6b3a76400006000613293827f0000000000000000000000000000000000000000000000000000000000000049615a2f565b905060006132b16132ac670de0b6b3a764000086615a2f565b614276565b905060006132bf84846144c8565b905060006132cd8383614517565b905060006132da82614545565b905060006132f9826132f4670de0b6b3a76400008f615a2f565b61472d565b905060006133078b83614517565b9050613313818d615a2f565b9f9e505050505050505050505050505050565b6002818154811061333657600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b60006002600d5460ff1660028111156133b5576133b56155bc565b036133d657506001600160a01b03166000908152600b602052604090205490565b506001600160a01b031660009081526003602052604090205490565b60008054600160801b900460ff166002811115613411576134116155bc565b1461342f5760405163067fe19560e41b815260040160405180910390fd5b600060028781548110613444576134446158be565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b905061349a7f000000000000000000000000000000000000000000000000000000000000004960016158ea565b613514826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461354e576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915613619576135a17f000000000000000000000000000000000000000000000000000000000000001e7f000000000000000000000000000000000000000000000000000000000000004961591c565b6001901b6135b7846001600160801b031661475e565b6001600160801b03166135ca9190615a9e565b156135fe576135f56135e660016001600160801b038716615ab2565b865463ffffffff1660006147e4565b6003015461360f565b3660011981013560f01c9003607801355b915084905061363a565b600385015491506136376135e66001600160801b0386166001615ad2565b90505b600882901b60088a8a6040516136519291906158ae565b6040518091039020901b14613692576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061369d8c6148ad565b905060006136ac836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036098013560601c9063e14ced3290613702908f908f908f908f908a90600401615b3d565b6020604051808303816000875af1158015613721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137459190615950565b6004850154911491506000906002906137ce906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613848896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6138529190615b77565b61385c9190615b9a565b60ff16159050811515810361389d576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b0316156138e7576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054600160801b900460ff166002811115613945576139456155bc565b146139635760405163067fe19560e41b815260040160405180910390fd5b600080600080613972866148dc565b9350935093509350600061398885858585614c35565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a009190615933565b905060018903613acd576001600160a01b0381166352f0f3ad8a84613a313660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615950565b506113d1565b60028903613aec576001600160a01b0381166352f0f3ad8a8489613a31565b60038903613b0b576001600160a01b0381166352f0f3ad8a8487613a31565b60048903613c40576000613b486001600160801b0385167f000000000000000000000000000000000000000000000000000000000000001e614cd4565b600954613b5591906158ea565b613b609060016158ea565b90503660011981013560f01c9003605801358110613b8d573660011981013560f01c900360580135613b8f565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015613c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c399190615950565b50506113d1565b60058903613cbb576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390523660011981013560f01c900360d4013560c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a401613a84565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003605481013560e01c90601401356060613d10611697565b9050909192565b60008160000151826020015183604001518460600151604051602001613d56949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003613dc2576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000613df085614d69565b919450925090506001816001811115613e0b57613e0b6155bc565b14613e42576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451613e4e83856158ea565b14613e85576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613e9c5790505093506000835b8651811015613f8a57600080613f0f6040518060400160405280858c60000151613ef3919061591c565b8152602001858c60200151613f0891906158ea565b9052614d69565b509150915060405180604001604052808383613f2b91906158ea565b8152602001848b60200151613f4091906158ea565b815250888581518110613f5557613f556158be565b6020908102919091010152613f6b6001856158ea565b9350613f7781836158ea565b613f8190846158ea565b92505050613ec9565b50845250919392505050565b60606000806000613fa685614d69565b919450925090506000816001811115613fc157613fc16155bc565b14613ff8576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61400282846158ea565b85511461403b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61162d85602001518484615207565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b03909316929091906140839084906158ea565b90915550505050565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60006140d66001600160801b0384166001615ad2565b905060006140e6828660016147e4565b9050600086901a83806141b0575061411f60027f000000000000000000000000000000000000000000000000000000000000001e615a9e565b60048301546002906141a1906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6141ab9190615b9a565b60ff16145b156142085760ff8116600114806141ca575060ff81166002145b614203576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016128ea565b614246565b60ff811615614246576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016128ea565b50505050505050565b60006115e560f460066158ea565b60008183101561426d578161426f565b825b9392505050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136142cc57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261450557637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156145355763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361457357919050565b680755bf798b4a1bf1e582126145915763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061426f670de0b6b3a76400008361474586614276565b61474f9190615bbc565b6147599190615c78565b614545565b6000806147d2837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826148245761481f6001600160801b0386167f000000000000000000000000000000000000000000000000000000000000001e61529b565b614836565b614836856001600160801b03166153da565b90506002848154811061484b5761484b6158be565b906000526020600020906005020191505b60048201546001600160801b038281169116146148a557815460028054909163ffffffff16908110614890576148906158be565b9060005260206000209060050201915061485c565b509392505050565b60008060008060006148be866148dc565b93509350935093506148d284848484614c35565b9695505050505050565b60008060008060008590506000600282815481106148fc576148fc6158be565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000001e906149b1906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116149eb576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000001e90614a90906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169250821115614b0557825463ffffffff16614acf7f000000000000000000000000000000000000000000000000000000000000001e60016158ea565b8303614ad9578391505b60028181548110614aec57614aec6158be565b90600052602060002090600502019350809450506149ef565b600481810154908401546001600160801b0391821691166000816001600160801b0316614b4a614b3e856001600160801b031660011c90565b6001600160801b031690565b6001600160801b03161490508015614be3576000614b70836001600160801b031661475e565b6001600160801b03161115614bc0576000614ba0614b9860016001600160801b038616615ab2565b8960016147e4565b6003810154600490910154909c506001600160801b03169a50614bc69050565b6008549a505b600386015460048701549099506001600160801b03169750614c27565b6000614bfc614b986001600160801b0385166001615ad2565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b03841615614c905760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012061162d565b8282604051602001614cb59291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614d48847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614dac576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614dd1576000600160009450945094505050615200565b60b78111614ee7576000614de660808361591c565b905080876000015111614e25576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614e9d57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614ed4576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250615200915050565b60bf8111615045576000614efc60b78361591c565b905080876000015111614f3b576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614f9d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614fe5576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614fef81846158ea565b895111615028576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6150338360016158ea565b97509550600094506152009350505050565b60f781116150aa57600061505a60c08361591c565b905080876000015111615099576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250615200915050565b60006150b760f78361591c565b9050808760000151116150f6576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003615158576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c603781116151a0576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6151aa81846158ea565b8951116151e3576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6151ee8360016158ea565b97509550600194506152009350505050565b9193909250565b60608167ffffffffffffffff81111561522257615222615824565b6040519080825280601f01601f19166020018201604052801561524c576020820181803683370190505b509050811561426f57600061526184866158ea565b90506020820160005b8481101561528257828101518282015260200161526a565b84811115615291576000858301525b5050509392505050565b600081615318846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161532e5763b34b5c226000526004601cfd5b615337836153da565b9050816153b4826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116116915761426f6153ca8360016158ea565b6001600160801b03831690615466565b60008119600183011681615455827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806154da847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261550857600080fd5b50813567ffffffffffffffff81111561552057600080fd5b60208301915083602082850101111561553857600080fd5b9250929050565b600080600083850360a081121561555557600080fd5b608081121561556357600080fd5b50839250608084013567ffffffffffffffff81111561558157600080fd5b61558d868287016154f6565b9497909650939450505050565b600080604083850312156155ad57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106155f057634e487b7160e01b600052602160045260246000fd5b50565b60208101615600836155d2565b91905290565b6001600160a01b03811681146155f057600080fd5b60006020828403121561562d57600080fd5b813561426f81615606565b60008060006060848603121561564d57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561568a5760208185018101518683018201520161566e565b8181111561569c576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061426f6020830184615664565b6000602082840312156156f457600080fd5b5035919050565b80151581146155f057600080fd5b6000806000806080858703121561571f57600080fd5b843593506020850135925060408501359150606085013561573f816156fb565b939692955090935050565b60006020828403121561575c57600080fd5b81356001600160801b038116811461426f57600080fd5b6000806000806000806080878903121561578c57600080fd5b86359550602087013561579e816156fb565b9450604087013567ffffffffffffffff808211156157bb57600080fd5b6157c78a838b016154f6565b909650945060608901359150808211156157e057600080fd5b506157ed89828a016154f6565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061162d6060830184615664565b634e487b7160e01b600052604160045260246000fd5b60006080828403121561584c57600080fd5b6040516080810181811067ffffffffffffffff8211171561587d57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156158fd576158fd6158d4565b500190565b60006000198203615915576159156158d4565b5060010190565b60008282101561592e5761592e6158d4565b500390565b60006020828403121561594557600080fd5b815161426f81615606565b60006020828403121561596257600080fd5b5051919050565b600067ffffffffffffffff80831681851680830382111561598c5761598c6158d4565b01949350505050565b600067ffffffffffffffff808316818516818304811182151516156159bc576159bc6158d4565b02949350505050565b600067ffffffffffffffff838116908316818110156159e6576159e66158d4565b039392505050565b600060208284031215615a0057600080fd5b815161426f816156fb565b60008060408385031215615a1e57600080fd5b505080516020909101519092909150565b6000816000190483118215151615615a4957615a496158d4565b500290565b600060208284031215615a6057600080fd5b815163ffffffff8116811461426f57600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615a9957615a99615a74565b500490565b600082615aad57615aad615a74565b500690565b60006001600160801b03838116908316818110156159e6576159e66158d4565b60006001600160801b0380831681851680830382111561598c5761598c6158d4565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615b51606083018789615af4565b8281036020840152615b64818688615af4565b9150508260408301529695505050505050565b600060ff821660ff841680821015615b9157615b916158d4565b90039392505050565b600060ff831680615bad57615bad615a74565b8060ff84160691505092915050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bfd57615bfd6158d4565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c3857615c386158d4565b60008712925087820587128484161615615c5457615c546158d4565b87850587128184161615615c6a57615c6a6158d4565b505050929093029392505050565b600082615c8757615c87615a74565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615cbd57615cbd6158d4565b50059056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x6b9e85984d5c58bb898d3e43a0ba4dee8d65b2ab": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f0001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000784d2f03593a42a6e4676a012762f18775ecbbe6", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5", + "0xb6f1374979fddd07a4d496dc3b0973244af6697958fc088175277086eb729144": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0x6d46535c721a7721e5975790aa97f793a438ed4c": { + "balance": "0x0", + "code": "0x60806040526004361061016a5760003560e01c80636d1d99fb116100cb57806396cd97201161007f578063c4d66de811610059578063c4d66de8146104dc578063dad544e0146104fc578063f2fde38b1461051157600080fd5b806396cd97201461043b578063b10709571461045b578063bb8aa1fc1461047b57600080fd5b806374cc86ac116100b057806374cc86ac146103dd57806382ecf2f6146103fd5780638da5cb5b1461041057600080fd5b80636d1d99fb14610395578063715018a6146103c857600080fd5b80633e47158c1161012257806354fd4d501161010757806354fd4d50146102bd5780635f0150cb146103135780636593dc6e1461036857600080fd5b80633e47158c146102895780634d1975b41461029e57600080fd5b80631e334240116101535780631e334240146101fe578063254bd6831461021e57806338d38c971461024b57600080fd5b806314f6b1a31461016f5780631b685b9e14610191575b600080fd5b34801561017b57600080fd5b5061018f61018a3660046116f0565b610531565b005b34801561019d57600080fd5b506101d46101ac366004611729565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561020a57600080fd5b5061018f610219366004611746565b6105bb565b34801561022a57600080fd5b5061023e610239366004611772565b610607565b6040516101f59190611821565b34801561025757600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000011681526020016101f5565b34801561029557600080fd5b506101d461084b565b3480156102aa57600080fd5b506068545b6040519081526020016101f5565b3480156102c957600080fd5b506103066040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f591906118de565b34801561031f57600080fd5b5061033361032e36600461193a565b610a56565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff9091166020830152016101f5565b34801561037457600080fd5b506102af610383366004611729565b60666020526000908152604090205481565b3480156103a157600080fd5b506102af6103b0366004611729565b63ffffffff1660009081526066602052604090205490565b3480156103d457600080fd5b5061018f610aa9565b3480156103e957600080fd5b506103066103f8366004611729565b610abd565b6101d461040b36600461193a565b610b57565b34801561041c57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101d4565b34801561044757600080fd5b506102af61045636600461193a565b610e62565b34801561046757600080fd5b5061018f610476366004611996565b610e9b565b34801561048757600080fd5b5061049b6104963660046119e3565b610f9b565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff16908201526060016101f5565b3480156104e857600080fd5b5061018f6104f73660046119fc565b611004565b34801561050857600080fd5b506101d461117c565b34801561051d57600080fd5b5061018f61052c3660046119fc565b6111f9565b6105396112b0565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b6105c36112b0565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b60685460609083101580610619575081155b610844575060408051600583901b8101602001909152825b8381116108425760006068828154811061064d5761064d611a19565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff89168303610813576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261072d9190810190611a77565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190611b42565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a516107e29190611b8a565b815181106107f2576107f2611a19565b60200260200101819052508888511061081057505050505050610842565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506106319050565b505b9392505050565b6000806108767fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561089957919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026108dc9190611ba1565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610937906060015b604051602081830303815290604052805190602001205490565b1461096e576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906109909060600161091d565b905073ffffffffffffffffffffffffffffffffffffffff811615610a24578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d9190611bde565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000610a6787878787610e62565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b610ab16112b0565b610abb6000611331565b565b60696020526000908152604090208054610ad690611bfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0290611bfb565b8015610b4f5780601f10610b2457610100808354040283529160200191610b4f565b820191906000526020600020905b815481529060010190602001808311610b3257829003601f168201915b505050505081565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610bc7576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b63ffffffff86166000908152606660205260409020543414610c15576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c22600143611b8a565b63ffffffff8816600090815260696020526040902080549140925090610c4790611bfb565b9050600003610cbe57610cb73387838888604051602001610c6c959493929190611c4e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff8416906113a8565b9250610cff565b610cfc3387838a8989606960008f63ffffffff1663ffffffff168152602001908152602001600020604051602001610c6c9796959493929190611c9b565b92505b8273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b50505050506000610d6e88888888610e62565b60008181526067602052604090205490915015610dba576040517f014f6fe500000000000000000000000000000000000000000000000000000000815260048101829052602401610bbe565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b600084848484604051602001610e7b9493929190611df9565b604051602081830303815290604052805190602001209050949350505050565b610ea36112b0565b63ffffffff8416600090815260656020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905560699091529020610f0b828483611e78565b5060405163ffffffff85169073ffffffffffffffffffffffffffffffffffffffff8516907fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de90600090a38363ffffffff167fa47fcdf075d680d3817bfca7973b373e1a5f6cfc3b444748299cc2b83d8348f98383604051610f8d929190611f93565b60405180910390a250505050565b600080600080600080610ff460688881548110610fba57610fba611a19565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9199909850909650945050505050565b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015611044575060005460ff8083169116105b6110d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bbe565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556111096113b6565b611111611437565b61111a82611331565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061118661084b565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190611bde565b905090565b6112016112b0565b73ffffffffffffffffffffffffffffffffffffffff81166112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bbe565b6112ad81611331565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbe565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610844600084846114d6565b336113bf61084b565b73ffffffffffffffffffffffffffffffffffffffff16141580156114005750336113e761117c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bbe565b610abb61161c565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf0975050866115a25763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff166116b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bbe565b610abb33611331565b63ffffffff811681146112ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146112ad57600080fd5b6000806040838503121561170357600080fd5b823561170e816116bc565b9150602083013561171e816116ce565b809150509250929050565b60006020828403121561173b57600080fd5b8135610844816116bc565b6000806040838503121561175957600080fd5b8235611764816116bc565b946020939093013593505050565b60008060006060848603121561178757600080fd5b8335611792816116bc565b95602085013595506040909401359392505050565b60005b838110156117c25781810151838201526020016117aa565b838111156117d1576000848401525b50505050565b600081518084526117ef8160208601602086016117a7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156118d0578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906118bc818601836117d7565b968901969450505090860190600101611848565b509098975050505050505050565b60208152600061084460208301846117d7565b60008083601f84011261190357600080fd5b50813567ffffffffffffffff81111561191b57600080fd5b60208301915083602082850101111561193357600080fd5b9250929050565b6000806000806060858703121561195057600080fd5b843561195b816116bc565b935060208501359250604085013567ffffffffffffffff81111561197e57600080fd5b61198a878288016118f1565b95989497509550505050565b600080600080606085870312156119ac57600080fd5b84356119b7816116bc565b935060208501356119c7816116ce565b9250604085013567ffffffffffffffff81111561197e57600080fd5b6000602082840312156119f557600080fd5b5035919050565b600060208284031215611a0e57600080fd5b8135610844816116ce565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611a8957600080fd5b815167ffffffffffffffff80821115611aa157600080fd5b818401915084601f830112611ab557600080fd5b815181811115611ac757611ac7611a48565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b0d57611b0d611a48565b81604052828152876020848701011115611b2657600080fd5b611b378360208301602088016117a7565b979650505050505050565b600060208284031215611b5457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611b9c57611b9c611b5b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611bd957611bd9611b5b565b500290565b600060208284031215611bf057600080fd5b8151610844816116ce565b600181811c90821680611c0f57607f821691505b602082108103611c48577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1681528660148201528560348201527fffffffff000000000000000000000000000000000000000000000000000000008560e01b166054820152600060588486828501378483018181016000815260008654611d1b81611bfb565b60018281168015611d335760018114611d6857611d9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841686528783151584028801019450611d9b565b8a60005260208060002060005b85811015611d905781548a82018c0152908401908201611d75565b505050878388010194505b50929f9e505050505050505050505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff85168152836020820152606060408201526000611e1f606083018486611db0565b9695505050505050565b601f821115611e7357600081815260208120601f850160051c81016020861015611e505750805b601f850160051c820191505b81811015611e6f57828155600101611e5c565b5050505b505050565b67ffffffffffffffff831115611e9057611e90611a48565b611ea483611e9e8354611bfb565b83611e29565b6000601f841160018114611ef65760008515611ec05750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611f8c565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015611f455786850135825560209485019460019092019101611f25565b5086821015611f80577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b602081526000611fa7602083018486611db0565b94935050505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x7096758bdd076a4cc42255c278f2cb216d6d8ce3": { + "balance": "0x0", + "code": "0xfe7100608060405234801561001057600080fd5b506040516105f03803806105f083398101604081905261002f91610088565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b03871617905590829052902061006a8282610203565b5050506102c2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b82516001600160a01b03811681146100b257600080fd5b602084810151919350906001600160401b03808211156100d157600080fd5b818601915086601f8301126100e557600080fd5b8151818111156100f7576100f7610072565b604051601f8201601f19908116603f0116810190838211818310171561011f5761011f610072565b81604052828152898684870101111561013757600080fd5b600093505b82841015610159578484018601518185018701529285019261013c565b8284111561016a5760008684830101525b8096505050505050509250929050565b600181811c9082168061018e57607f821691505b6020821081036101ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fe57600081815260208120601f850160051c810160208610156101db5750805b601f850160051c820191505b818110156101fa578281556001016101e7565b5050505b505050565b81516001600160401b0381111561021c5761021c610072565b6102308161022a845461017a565b846101b4565b602080601f831160018114610265576000841561024d5750858301515b600019600386901b1c1916600185901b1785556101fa565b600085815260208120601f198616915b8281101561029457888601518255948401946001909101908401610275565b50858210156102b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61031f806102d16000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x70997970c51812dc3a010c7d01b50e0d17dc79c8": { + "balance": "0x100000000000000000000000000000000000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x70e0ba845a1a0f2da3359c97e0285013525ffc49": { + "balance": "0x0", + "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906", + "0xd5083275ec75787421c0e342c563da1cfdf527bc4ff34722d89fbe983e1eca88": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0x74f1ac50eb0be98853805d381c884f5f9abdecf9": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80635c975abb11610097578063927ede2d11610066578063927ede2d1461029e578063aa557452146102bc578063c89701a2146102cf578063dad544e0146102ef57600080fd5b80635c975abb146102215780635d93a3fc14610239578063761f44931461026d5780637f46ddb21461028057600080fd5b80633cb747bf116100d35780633cb747bf1461019d5780633e47158c146101bd578063485cc955146101c557806354fd4d50146101d857600080fd5b806333d7e2bd1461010557806335e80ab31461014f5780633687011a1461015757806338d38c971461016c575b600080fd5b6033546101259073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101256102f7565b61016a6101653660046113be565b610390565b005b60405160ff7f0000000000000000000000000000000000000000000000000000000000000003168152602001610146565b6001546101259073ffffffffffffffffffffffffffffffffffffffff1681565b610125610441565b61016a6101d3366004611441565b61064c565b6102146040518060400160405280600581526020017f322e392e3000000000000000000000000000000000000000000000000000000081525081565b60405161014691906114e5565b610229610812565b6040519015158152602001610146565b6102296102473660046114ff565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61016a61027b366004611540565b6108a6565b60025473ffffffffffffffffffffffffffffffffffffffff16610125565b60015473ffffffffffffffffffffffffffffffffffffffff16610125565b61016a6102ca3660046115d8565b610d4d565b6002546101259073ffffffffffffffffffffffffffffffffffffffff1681565b610125610e09565b603354604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b919061164f565b905090565b610398610e5d565b610429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104398686333388888888610e9a565b505050505050565b60008061046c7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561048f57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026104d2919061166c565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061052d906060015b604051602081830303815290604052805190602001205490565b14610564576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061058690606001610513565b905073ffffffffffffffffffffffffffffffffffffffff81161561061a578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610613919061164f565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff1615801561068c575060005460ff8083169116105b610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610420565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556107516111ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556107af8373420000000000000000000000000000000000001461124d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b603354604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610882573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b91906116d0565b60015473ffffffffffffffffffffffffffffffffffffffff163314801561097b5750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561093f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610963919061164f565b73ffffffffffffffffffffffffffffffffffffffff16145b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f7468657220627269646765006064820152608401610420565b610a0f610812565b15610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a20706175736564000000000000000000006044820152606401610420565b3073ffffffffffffffffffffffffffffffffffffffff881603610b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c66000000000000000000000000000000000000000000006064820152608401610420565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff161515600114610bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c3120427269646765000000000000006064820152608401610420565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b158015610caa57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610d3c949392919061173b565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610df0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f742062652061646472657373283029000000000000000000000000000000006064820152608401610420565b610e008787338888888888610e9a565b50505050505050565b6000610e13610441565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610367573d6000803e3d6000fd5b6000323303610e6c5750600190565b333b601703610e9457604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b73ffffffffffffffffffffffffffffffffffffffff8716610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f7420626520616464726573732830290000000000000000000000000000006064820152608401610420565b600087898888888787604051602401610f5c979695949392919061177b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f761f44930000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603184528481208e8416825284528481208b82529093529183902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905591517f23b872dd000000000000000000000000000000000000000000000000000000008152918a166004830152306024830152604482018890529192506323b872dd90606401600060405180830381600087803b15801561109457600080fd5b505af11580156110a8573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b935061110b9290911690859089906004016117d8565b600060405180830381600087803b15801561112557600080fd5b505af1158015611139573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5898988886040516111b7949392919061173b565b60405180910390a4505050505050505050565b336111d3610441565b73ffffffffffffffffffffffffffffffffffffffff16141580156112145750336111fb610e09565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561124b576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600054610100900460ff166112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610420565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff8116811461135957600080fd5b50565b803563ffffffff8116811461137057600080fd5b919050565b60008083601f84011261138757600080fd5b50813567ffffffffffffffff81111561139f57600080fd5b6020830191508360208285010111156113b757600080fd5b9250929050565b60008060008060008060a087890312156113d757600080fd5b86356113e281611337565b955060208701356113f281611337565b9450604087013593506114076060880161135c565b9250608087013567ffffffffffffffff81111561142357600080fd5b61142f89828a01611375565b979a9699509497509295939492505050565b6000806040838503121561145457600080fd5b823561145f81611337565b9150602083013561146f81611337565b809150509250929050565b6000815180845260005b818110156114a057602081850181015186830182015201611484565b818111156114b2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006114f8602083018461147a565b9392505050565b60008060006060848603121561151457600080fd5b833561151f81611337565b9250602084013561152f81611337565b929592945050506040919091013590565b600080600080600080600060c0888a03121561155b57600080fd5b873561156681611337565b9650602088013561157681611337565b9550604088013561158681611337565b9450606088013561159681611337565b93506080880135925060a088013567ffffffffffffffff8111156115b957600080fd5b6115c58a828b01611375565b989b979a50959850939692959293505050565b600080600080600080600060c0888a0312156115f357600080fd5b87356115fe81611337565b9650602088013561160e81611337565b9550604088013561161e81611337565b9450606088013593506116336080890161135c565b925060a088013567ffffffffffffffff8111156115b957600080fd5b60006020828403121561166157600080fd5b81516114f881611337565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b6000602082840312156116e257600080fd5b815180151581146114f857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006117716060830184866116f2565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526117cb60c0830184866116f2565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611807606083018561147a565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x765c6637a370595845f637739279c353484a26a6": { + "balance": "0x0", + "code": "0xfe7100608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105ef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x784d2f03593a42a6e4676a012762f18775ecbbe6": { + "balance": "0x0", + "code": "0x6080604052600436106100f35760003560e01c8063438ab5ac1161008a5780638d445bd0116100595780638d445bd0146102e0578063946d920414610300578063b2db82f514610320578063dad544e01461034057600080fd5b8063438ab5ac1461023f57806354fd4d501461025f5780635c975abb146102ab5780635ec15d89146102c057600080fd5b806333d7e2bd116100c657806333d7e2bd1461017f57806335e80ab3146101d757806338d38c97146101ec5780633e47158c1461022a57600080fd5b80630fd11077146100f85780631ee116bf1461013d578063225ce1761461014757806330f9765d14610177575b600080fd5b34801561010457600080fd5b506101286101133660046110e0565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610145610355565b005b34801561015357600080fd5b506101286101623660046110e0565b60026020526000908152604090205460ff1681565b6101456103f1565b34801561018b57600080fd5b506000546101b29062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610134565b3480156101e357600080fd5b506101b2610482565b3480156101f857600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610134565b34801561023657600080fd5b506101b2610519565b34801561024b57600080fd5b5061014561025a3660046110e0565b610724565b34801561026b57600080fd5b50604080518082018252600581527f312e322e30000000000000000000000000000000000000000000000000000000602082015290516101349190611104565b3480156102b757600080fd5b506101286107ef565b3480156102cc57600080fd5b506101456102db3660046110e0565b610881565b3480156102ec57600080fd5b506101456102fb366004611177565b610909565b34801561030c57600080fd5b5061014561031b366004611190565b610b49565b34801561032c57600080fd5b5061014561033b3660046110e0565b610d46565b34801561034c57600080fd5b506101b2610d5a565b3360008181526001602052604090205460ff1661039e576040517f665a1d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f97efc519b9020a140ffe13878e03d340b976676090bc7fe3e33191192df7c72c346040516103e691815260200190565b60405180910390a250565b3360008181526002602052604090205460ff1661043a576040517f665a1d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fb58278ed56aa79ad2e243963b44b165a8f76d629f61c01dd3649d658e0eacca4346040516103e691815260200190565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611218565b905090565b6000806105447fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561056757919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026105aa9190611264565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610605906060015b604051602081830303815290604052805190602001205490565b1461063c576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061065e906060016105eb565b905073ffffffffffffffffffffffffffffffffffffffff8116156106f2578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106eb9190611218565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61072c610dae565b61073581610e06565b60004790508173ffffffffffffffffffffffffffffffffffffffff166330f9765d826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b50505050508173ffffffffffffffffffffffffffffffffffffffff167f87eb4064140fbec95a8de570e01b4c650c00ecd677560af9f298a975b636c22d826040516107e391815260200190565b60405180910390a25050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906112a1565b610889610dae565b61089281610e06565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f5d2682e700a2146c8e2381e0b407003576a54e96dd08f40f3ea0d2b8706db1069190a250565b6109116107ef565b15610948576040517f9e72994200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526001602052604090205460ff16610991576040517f665a1d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b478211156109cb576040517fe1ba922700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190611218565b73ffffffffffffffffffffffffffffffffffffffff1614610aa0576040517fd6cbd5f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16638b4c40b0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ae857600080fd5b505af1158015610afc573d6000803e3d6000fd5b50505050508073ffffffffffffffffffffffffffffffffffffffff167fe9512d49448b580f3d29031e9243ee81bc8789a93d6f04ec8f03b694d623637b836040516107e391815260200190565b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015610b89575060005460ff8083169116105b610c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610c52610ee0565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8716021781555b82811015610ce157610ccf848483818110610cb557610cb56112c3565b9050602002016020810190610cca91906110e0565b610f61565b80610cd9816112f2565b915050610c98565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b610d4e610dae565b610d5781610f61565b50565b6000610d64610519565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b33610db7610d5a565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8073ffffffffffffffffffffffffffffffffffffffff1663dad544e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611218565b73ffffffffffffffffffffffffffffffffffffffff16610e93610d5a565b73ffffffffffffffffffffffffffffffffffffffff1614610d57576040517f075c431400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33610ee9610519565b73ffffffffffffffffffffffffffffffffffffffff1614158015610f2a575033610f11610d5a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610e04576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f6a81610e06565b610f72610482565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff79190611218565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f84ab551500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517f90a7fac2e56aebe4889351fb04eda5efb28b19dedf288bdbfd3cfd817c79630f9190a250565b73ffffffffffffffffffffffffffffffffffffffff81168114610d5757600080fd5b6000602082840312156110f257600080fd5b81356110fd816110be565b9392505050565b600060208083528351808285015260005b8181101561113157858101830151858201604001528201611115565b81811115611143576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561118957600080fd5b5035919050565b6000806000604084860312156111a557600080fd5b83356111b0816110be565b9250602084013567ffffffffffffffff808211156111cd57600080fd5b818601915086601f8301126111e157600080fd5b8135818111156111f057600080fd5b8760208260051b850101111561120557600080fd5b6020830194508093505050509250925092565b60006020828403121561122a57600080fd5b81516110fd816110be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561129c5761129c611235565b500290565b6000602082840312156112b357600080fd5b815180151581146110fd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361132357611323611235565b506001019056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x7b57e3025d0c33ac2c0cc44ac915650895a619d3": { + "balance": "0x0", + "code": "0x6080604052600436106103605760003560e01c80636f034409116101c6578063c0d8bb74116100f7578063dabd396d11610095578063f8f43ff61161006f578063f8f43ff614610b3e578063fa24f74314610b5e578063fa315aa914610b82578063fe2bbeb214610bb557600080fd5b8063dabd396d14610aa8578063ec5e630814610adb578063eff0f59214610b0e57600080fd5b8063cf09e0d0116100d1578063cf09e0d014610a25578063d5d44d8014610a46578063d6ae3cd514610a66578063d8cc1a3c14610a8857600080fd5b8063c0d8bb7414610964578063c395e1ca14610991578063c6f0308c146109b157600080fd5b80638d450a9511610164578063a8e4fb901161013e578063a8e4fb90146108d0578063bbdc02db146108f5578063bcef3b5514610922578063bd8da9561461094457600080fd5b80638d450a951461080e57806399735e32146107ec578063a445ece61461083057600080fd5b80637b0f0adc116101a05780637b0f0adc146107bc5780638129fc1c146107cf5780638980e0cc146107d75780638b85902b146107ec57600080fd5b80636f0344091461077f57806370872aa514610792578063786b844b146107a757600080fd5b80633e3ac912116102a05780635a5fa2d91161023e578063609d333411610218578063609d3334146106f557806360e274641461070a5780636361506d1461072a5780636b6716c01461074c57600080fd5b80635a5fa2d9146106905780635c0cba33146106b05780635e234947146106d557600080fd5b8063529d6a8c1161027a578063529d6a8c146105cf578063534db0e2146105fc57806354fd4d501461061157806357da950e1461066057600080fd5b80633e3ac912146105675780633fc8cef314610597578063472777c6146105bc57600080fd5b806325fc2ace1161030d57806330dbe570116102e757806330dbe570146104ce578063378dd48c1461050657806337b1b229146105205780633a7684631461054257600080fd5b806325fc2ace1461047a5780632810e1d6146104995780632ad69aeb146104ae57600080fd5b8063200d2ed21161033e578063200d2ed2146103f2578063222abf4514610420578063250e69bd1461046057600080fd5b8063019351301461036557806303c2924d1461038757806319effeb4146103a7575b600080fd5b34801561037157600080fd5b5061038561038036600461571f565b610be5565b005b34801561039357600080fd5b506103856103a236600461577a565b610ea4565b3480156103b357600080fd5b506000546103d49068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103fe57600080fd5b5060005461041390600160801b900460ff1681565b6040516103e991906157d3565b34801561042c57600080fd5b5061045061043b3660046157fb565b600c6020526000908152604090205460ff1681565b60405190151581526020016103e9565b34801561046c57600080fd5b50600a546104509060ff1681565b34801561048657600080fd5b506008545b6040519081526020016103e9565b3480156104a557600080fd5b5061041361142c565b3480156104ba57600080fd5b5061048b6104c936600461577a565b611604565b3480156104da57600080fd5b506001546104ee906001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b34801561051257600080fd5b50600d546104139060ff1681565b34801561052c57600080fd5b503660011981013560f01c90033560601c6104ee565b34801561054e57600080fd5b503660011981013560f01c90036098013560601c6104ee565b34801561057357600080fd5b50600054610450907201000000000000000000000000000000000000900460ff1681565b3480156105a357600080fd5b503660011981013560f01c900360c0013560601c6104ee565b6103856105ca366004615818565b61163a565b3480156105db57600080fd5b5061048b6105ea3660046157fb565b60036020526000908152604090205481565b34801561060857600080fd5b506104ee61164c565b34801561061d57600080fd5b5060408051808201909152600581527f322e332e3000000000000000000000000000000000000000000000000000000060208201525b6040516103e991906158af565b34801561066c57600080fd5b5060085460095461067b919082565b604080519283526020830191909152016103e9565b34801561069c57600080fd5b5061048b6106ab3660046158c2565b611671565b3480156106bc57600080fd5b503660011981013560f01c900360ac013560601c6104ee565b3480156106e157600080fd5b5061048b6106f03660046158c2565b6116ab565b34801561070157600080fd5b5061065361170c565b34801561071657600080fd5b506103856107253660046157fb565b61171a565b34801561073657600080fd5b503660011981013560f01c90036034013561048b565b34801561075857600080fd5b507f0000000000000000000000000000000000000000000000000000000000002a306103d4565b61038561078d3660046158e9565b611a2b565b34801561079e57600080fd5b5060095461048b565b3480156107b357600080fd5b50610385611aab565b6103856107ca366004615818565b611e99565b610385611ea6565b3480156107e357600080fd5b5060025461048b565b3480156107f857600080fd5b503660011981013560f01c90036058013561048b565b34801561081a57600080fd5b503660011981013560f01c90036078013561048b565b34801561083c57600080fd5b5061089261084b3660046158c2565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b031660608201526080016103e9565b3480156108dc57600080fd5b503660011981013560f01c900360f4013560601c6104ee565b34801561090157600080fd5b506040513660011981013560f01c90036054013560e01c81526020016103e9565b34801561092e57600080fd5b503660011981013560f01c90036014013561048b565b34801561095057600080fd5b506103d461095f3660046158c2565b611f11565b34801561097057600080fd5b5061048b61097f3660046157fb565b600b6020526000908152604090205481565b34801561099d57600080fd5b5061048b6109ac36600461592a565b6120ab565b3480156109bd57600080fd5b506109d16109cc3660046158c2565b61226c565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e0016103e9565b348015610a3157600080fd5b506000546103d49067ffffffffffffffff1681565b348015610a5257600080fd5b5061048b610a613660046157fb565b6122e0565b348015610a7257600080fd5b503660011981013560f01c900360d4013561048b565b348015610a9457600080fd5b50610385610aa3366004615953565b612338565b348015610ab457600080fd5b507f0000000000000000000000000000000000000000000000000000000000049d406103d4565b348015610ae757600080fd5b507f000000000000000000000000000000000000000000000000000000000000001e61048b565b348015610b1a57600080fd5b50610450610b293660046158c2565b60046020526000908152604090205460ff1681565b348015610b4a57600080fd5b50610385610b59366004615818565b6123b4565b348015610b6a57600080fd5b50610b7361277b565b6040516103e9939291906159df565b348015610b8e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000004961048b565b348015610bc157600080fd5b50610450610bd03660046158c2565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610c0457610c0461579c565b14610c225760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c75576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8e3660011981013560f01c90036014013590565b90565b610ca5610ca036869003860186615a1a565b6127a5565b14610cdc576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cf1929190615a8e565b604051809103902014610d30576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d79610d7484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061280192505050565b61286e565b90506000610da082600881518110610d9357610d93615a9e565b6020026020010151612a24565b9050602081511115610dde576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605801358103610e35576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054600160801b900460ff166002811115610ec357610ec361579c565b14610ee15760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610ef657610ef6615a9e565b906000526020600020906005020190506000610f1184611f11565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d4081169082161015610f7a576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615610fc3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805480158015610fe057508515155b1561104357835464010000000090046001600160a01b0316600081156110065781611015565b60018601546001600160a01b03165b90506110218187612ad8565b505050600094855250506006602052505060409020805460ff19166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b031660608301526110c7576001600160801b0360408201526001815260008690036110c7578195505b600086826020015163ffffffff166110df9190615aca565b905060008382116110f057816110f2565b835b602084015190915063ffffffff165b8181101561121257600086828154811061111d5761111d615a9e565b6000918252602080832090910154808352600690915260409091205490915060ff16611175576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061118a5761118a615a9e565b60009182526020909120600590910201805490915064010000000090046001600160a01b03161580156111d15750600481015460408701516001600160801b039182169116115b156111fd5760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b5050808061120a90615ae2565b915050611101565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039093169290921790915584900361142157606083015160008a8152600660205260409020805460ff191660011790558915801561135e57506000547201000000000000000000000000000000000000900460ff165b156113b9576001546001600160a01b0316611379818a612ad8565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617885561141f565b6113e66001600160a01b038216156113d157816113e0565b60018901546001600160a01b03165b89612ad8565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b600080600054600160801b900460ff16600281111561144d5761144d61579c565b1461146b5760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166114cf576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b031660026000815481106114ee576114ee615a9e565b600091825260209091206005909102015464010000000090046001600160a01b03161461151c57600161151f565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b8360028111156115c3576115c361579c565b0217905560028111156115d8576115d861579c565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b6005602052816000526040600020818154811061162057600080fd5b90600052602060002001600091509150505481565b905090565b6116478383836001611a2b565b505050565b600061163561165d60f46014615aca565b3660011981013560f01c9003013560601c90565b600081815260076020908152604080832060059092528220805482546116a290610100900463ffffffff1682615afc565b95945050505050565b60003660011981013560f01c900360d4013582146116f5576040517f0da789df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003601401355b92915050565b606061163560586020612b1a565b611722611aab565b60006002600d5460ff16600281111561173d5761173d61579c565b0361176157506001600160a01b0381166000908152600b60205260409020546117d0565b6001600d5460ff16600281111561177a5761177a61579c565b0361179e57506001600160a01b0381166000908152600360205260409020546117d0565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff166118ae576001600160a01b0382166000908152600c60205260409020805460ff1916600117905561182d60c0600119369081013560f01c9003013560601c90565b6040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529190911690637eee288d90604401600060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050505050565b806000036118e8576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600b6020908152604080832083905560039091528120553660011981013560f01c900360c0013560601c6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052919091169063f3fef3a390604401600060405180830381600087803b15801561198657600080fd5b505af115801561199a573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146119eb576040519150601f19603f3d011682016040523d82523d6000602084013e6119f0565b606091505b5050905080611647576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360f4013560601c331480611a635750611a4e61164c565b6001600160a01b0316336001600160a01b0316145b611a99576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa584848484612b4e565b50505050565b6002600d5460ff166002811115611ac457611ac461579c565b1480611ae657506001600d5460ff166002811115611ae457611ae461579c565b145b15611aed57565b6000600d5460ff166002811115611b0657611b0661579c565b14611b3d576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb19190615b13565b15611be8576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff16600003611c44576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003660011981013560f01c900360ac013560601c6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039190911690630314d2b390602401602060405180830381865afa158015611cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdc9190615b13565b905080611d15576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906317cf21a990602401600060405180830381600087803b158015611d8457600080fd5b505af1925050508015611d95575060015b5060003660011981013560f01c900360ac013560601c6040517f496b9c160000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03919091169063496b9c1690602401602060405180830381865afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e9190615b13565b90508015611e4857600d805460ff19166001179055611e56565b600d805460ff191660021790555b600d546040517f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f91611e8d9160ff909116906157d3565b60405180910390a15050565b6116478383836000611a2b565b611eae6134d1565b3660011981013560f01c900360f4013560601c3214611ef9576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3660011981013560f01c90036054013560e01c90565b600080600054600160801b900460ff166002811115611f3257611f3261579c565b14611f505760405163067fe19560e41b815260040160405180910390fd5b600060028381548110611f6557611f65615a9e565b600091825260208220600590910201805490925063ffffffff90811614611fcb57815460028054909163ffffffff16908110611fa357611fa3615a9e565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b6004820154600090611ff690600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b61200a9067ffffffffffffffff1642615afc565b612020611fe9846001600160801b031660401c90565b67ffffffffffffffff166120349190615aca565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff161161208157806116a2565b7f0000000000000000000000000000000000000000000000000000000000049d4095945050505050565b600080612128836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000049811115612187576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a30060006121a28383615b46565b9050670de0b6b3a764000060006121d9827f0000000000000000000000000000000000000000000000000000000000000049615b5a565b905060006121f76121f2670de0b6b3a764000086615b5a565b613d52565b905060006122058484613fa4565b905060006122138383613ff3565b9050600061222082614021565b9050600061223f8261223a670de0b6b3a76400008f615b5a565b614209565b9050600061224d8b83613ff3565b9050612259818d615b5a565b9f9e505050505050505050505050505050565b6002818154811061227c57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b60006002600d5460ff1660028111156122fb576122fb61579c565b0361231c57506001600160a01b03166000908152600b602052604090205490565b506001600160a01b031660009081526003602052604090205490565b3660011981013560f01c900360f4013560601c331480612370575061235b61164c565b6001600160a01b0316336001600160a01b0316145b6123a6576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118a6868686868686614241565b60008054600160801b900460ff1660028111156123d3576123d361579c565b146123f15760405163067fe19560e41b815260040160405180910390fd5b60008060008061240086614775565b9350935093509350600061241685858585614ace565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248e9190615b79565b90506001890361255b576001600160a01b0381166352f0f3ad8a846124bf3660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125559190615b96565b50611421565b6002890361257a576001600160a01b0381166352f0f3ad8a84896124bf565b60038903612599576001600160a01b0381166352f0f3ad8a84876124bf565b600489036126ce5760006125d66001600160801b0385167f000000000000000000000000000000000000000000000000000000000000001e614b6d565b6009546125e39190615aca565b6125ee906001615aca565b90503660011981013560f01c900360580135811061261b573660011981013560f01c90036058013561261d565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af11580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c79190615b96565b5050611421565b60058903612749576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390523660011981013560f01c900360d4013560c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a401612512565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003605481013560e01c9060140135606061279e61170c565b9050909192565b600081600001518260200151836040015184606001516040516020016127e4949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612850576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061287e85614c02565b9194509250905060018160018111156128995761289961579c565b146128d0576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516128dc8385615aca565b14612913576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161292a5790505093506000835b8651811015612a185760008061299d6040518060400160405280858c600001516129819190615afc565b8152602001858c602001516129969190615aca565b9052614c02565b5091509150604051806040016040528083836129b99190615aca565b8152602001848b602001516129ce9190615aca565b8152508885815181106129e3576129e3615a9e565b60209081029190910101526129f9600185615aca565b9350612a058183615aca565b612a0f9084615aca565b92505050612957565b50845250919392505050565b60606000806000612a3485614c02565b919450925090506000816001811115612a4f57612a4f61579c565b14612a86576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a908284615aca565b855114612ac9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a2856020015184846150a0565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b0390931692909190612b11908490615aca565b90915550505050565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054600160801b900460ff166002811115612b6d57612b6d61579c565b14612b8b5760405163067fe19560e41b815260040160405180910390fd5b600060028481548110612ba057612ba0615a9e565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514612c64576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000612cf9826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612d345750612d317f000000000000000000000000000000000000000000000000000000000000001e6002615aca565b81145b8015612d3e575084155b15612d75576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d9b575086155b15612dd2576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000049811115612e2c576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e577f000000000000000000000000000000000000000000000000000000000000001e6001615aca565b8103612e6957612e6986888588615134565b34612e73836120ab565b14612eaa576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612eb588611f11565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d40811690821603612f1d576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612f4a60017f0000000000000000000000000000000000000000000000000000000000000049615afc565b8303613060573660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc49190615b79565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190615b96565b613059907f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff16615baf565b90506130f3565b61308b60017f000000000000000000000000000000000000000000000000000000000000001e615afc565b83036130c6576130597f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615bdb565b507f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff165b613127817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff16615c0b565b67ffffffffffffffff166131428367ffffffffffffffff1690565b67ffffffffffffffff16111561318957613186817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff16615c0b565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff16156131fe576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c815260200190815260200160002060016002805490506133f59190615afc565b81546001810183556000928352602080842090910191909155338252600b9052604081208054349290613429908490615aca565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561347b57600080fd5b505af115801561348f573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b60005471010000000000000000000000000000000000900460ff1615613523576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61352b6152c3565b3614613563576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000803660011981013560f01c900360ac013560601c6001600160a01b031663d83ef2676040518163ffffffff1660e01b81526004016040805180830381865afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190615c34565b909250905081613615576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915282815260200181905260088290556009819055803660011981013560f01c90036058013511613690576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036014013560048201526024015b60405180910390fd5b67ffffffffffffffff3660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370d9190615b79565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e9190615b96565b11156137a6576040517fb4e1243300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137dd7f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615b5a565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138559190615b79565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b69190615b96565b67ffffffffffffffff166138f17f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff1690565b67ffffffffffffffff166139059190615aca565b9050600061391383836152d8565b905067ffffffffffffffff811115613957576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff1611156139cf576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e08101825263ffffffff808252600060208084018281523660011981013560f01c90038035606090811c8789018181526001600160801b0334818116948b0194855260149095013560808b01908152600160a08c0181815242841660c08e019081526002805493840181558c529c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590930292830180549a5191909d167fffffffffffffffff000000000000000000000000000000000000000000000000909a16999099176401000000006001600160a01b039a8b160217909b5592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0820180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001691851691909117905593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015595519651968116600160801b9790911696909602959095177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101558154710100000000000000000000000000000000007fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff909116178255918152600b909152918220805491929091613c10908490615aca565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c6257600080fd5b505af1158015613c76573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550613cb99150611efb9050565b63ffffffff163660011981013560f01c900360ac013560601c6001600160a01b0316633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d339190615c58565b600a805460ff191663ffffffff92909216929092141790555050505050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613da857631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613fe157637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156140115763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361404f57919050565b680755bf798b4a1bf1e5821261406d5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061423a670de0b6b3a76400008361422186613d52565b61422b9190615c7e565b6142359190615d3a565b614021565b9392505050565b60008054600160801b900460ff1660028111156142605761426061579c565b1461427e5760405163067fe19560e41b815260040160405180910390fd5b60006002878154811061429357614293615a9e565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b90506142e97f00000000000000000000000000000000000000000000000000000000000000496001615aca565b614363826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461439d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915614468576143f07f000000000000000000000000000000000000000000000000000000000000001e7f0000000000000000000000000000000000000000000000000000000000000049615afc565b6001901b614406846001600160801b03166152ef565b6001600160801b03166144199190615d84565b1561444d5761444461443560016001600160801b038716615d98565b865463ffffffff166000615375565b6003015461445e565b3660011981013560f01c9003607801355b9150849050614489565b600385015491506144866144356001600160801b0386166001615db8565b90505b600882901b60088a8a6040516144a0929190615a8e565b6040518091039020901b146144e1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006144ec8c61543e565b905060006144fb836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036098013560601c9063e14ced3290614551908f908f908f908f908a90600401615e23565b6020604051808303816000875af1158015614570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145949190615b96565b60048501549114915060009060029061461d906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614697896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6146a19190615e5d565b6146ab9190615e80565b60ff1615905081151581036146ec576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b031615614736576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061479557614795615a9e565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000001e9061484a906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614884576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000001e90614929906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16925082111561499e57825463ffffffff166149687f000000000000000000000000000000000000000000000000000000000000001e6001615aca565b8303614972578391505b6002818154811061498557614985615a9e565b9060005260206000209060050201935080945050614888565b600481810154908401546001600160801b0391821691166000816001600160801b03166149e36149d7856001600160801b031660011c90565b6001600160801b031690565b6001600160801b03161490508015614a7c576000614a09836001600160801b03166152ef565b6001600160801b03161115614a59576000614a39614a3160016001600160801b038616615d98565b896001615375565b6003810154600490910154909c506001600160801b03169a50614a5f9050565b6008549a505b600386015460048701549099506001600160801b03169750614ac0565b6000614a95614a316001600160801b0385166001615db8565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b03841615614b295760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a001604051602081830303815290604052805190602001206116a2565b8282604051602001614b4e9291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614be1847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614c45576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614c6a576000600160009450945094505050615099565b60b78111614d80576000614c7f608083615afc565b905080876000015111614cbe576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614d3657507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614d6d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250615099915050565b60bf8111614ede576000614d9560b783615afc565b905080876000015111614dd4576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614e36576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e7e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e888184615aca565b895111614ec1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614ecc836001615aca565b97509550600094506150999350505050565b60f78111614f43576000614ef360c083615afc565b905080876000015111614f32576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250615099915050565b6000614f5060f783615afc565b905080876000015111614f8f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ff1576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111615039576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6150438184615aca565b89511161507c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b615087836001615aca565b97509550600194506150999350505050565b9193909250565b60608167ffffffffffffffff8111156150bb576150bb615a04565b6040519080825280601f01601f1916602001820160405280156150e5576020820181803683370190505b509050811561423a5760006150fa8486615aca565b90506020820160005b8481101561511b578281015182820152602001615103565b8481111561512a576000858301525b5050509392505050565b600061514a6001600160801b0384166001615db8565b9050600061515a82866001615375565b9050600086901a8380615224575061519360027f000000000000000000000000000000000000000000000000000000000000001e615d84565b6004830154600290615215906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61521f9190615e80565b60ff16145b1561527c5760ff81166001148061523e575060ff81166002145b615277576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613687565b6152ba565b60ff8116156152ba576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613687565b50505050505050565b60006152cd61546d565b611635906006615aca565b6000818310156152e8578161423a565b5090919050565b600080615363837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826153b5576153b06001600160801b0386167f000000000000000000000000000000000000000000000000000000000000001e61547b565b6153c7565b6153c7856001600160801b03166155ba565b9050600284815481106153dc576153dc615a9e565b906000526020600020906005020191505b60048201546001600160801b0382811691161461543657815460028054909163ffffffff1690811061542157615421615a9e565b906000526020600020906005020191506153ed565b509392505050565b600080600080600061544f86614775565b935093509350935061546384848484614ace565b9695505050505050565b600061163560f46028615aca565b6000816154f8846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161550e5763b34b5c226000526004601cfd5b615517836155ba565b905081615594826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116117065761423a6155aa836001615aca565b6001600160801b03831690615646565b60008119600183011681615635827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806156ba847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126156e857600080fd5b50813567ffffffffffffffff81111561570057600080fd5b60208301915083602082850101111561571857600080fd5b9250929050565b600080600083850360a081121561573557600080fd5b608081121561574357600080fd5b50839250608084013567ffffffffffffffff81111561576157600080fd5b61576d868287016156d6565b9497909650939450505050565b6000806040838503121561578d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106157d057634e487b7160e01b600052602160045260246000fd5b50565b602081016157e0836157b2565b91905290565b6001600160a01b03811681146157d057600080fd5b60006020828403121561580d57600080fd5b813561423a816157e6565b60008060006060848603121561582d57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561586a5760208185018101518683018201520161584e565b8181111561587c576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061423a6020830184615844565b6000602082840312156158d457600080fd5b5035919050565b80151581146157d057600080fd5b600080600080608085870312156158ff57600080fd5b843593506020850135925060408501359150606085013561591f816158db565b939692955090935050565b60006020828403121561593c57600080fd5b81356001600160801b038116811461423a57600080fd5b6000806000806000806080878903121561596c57600080fd5b86359550602087013561597e816158db565b9450604087013567ffffffffffffffff8082111561599b57600080fd5b6159a78a838b016156d6565b909650945060608901359150808211156159c057600080fd5b506159cd89828a016156d6565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006116a26060830184615844565b634e487b7160e01b600052604160045260246000fd5b600060808284031215615a2c57600080fd5b6040516080810181811067ffffffffffffffff82111715615a5d57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115615add57615add615ab4565b500190565b60006000198203615af557615af5615ab4565b5060010190565b600082821015615b0e57615b0e615ab4565b500390565b600060208284031215615b2557600080fd5b815161423a816158db565b634e487b7160e01b600052601260045260246000fd5b600082615b5557615b55615b30565b500490565b6000816000190483118215151615615b7457615b74615ab4565b500290565b600060208284031215615b8b57600080fd5b815161423a816157e6565b600060208284031215615ba857600080fd5b5051919050565b600067ffffffffffffffff808316818516808303821115615bd257615bd2615ab4565b01949350505050565b600067ffffffffffffffff80831681851681830481118215151615615c0257615c02615ab4565b02949350505050565b600067ffffffffffffffff83811690831681811015615c2c57615c2c615ab4565b039392505050565b60008060408385031215615c4757600080fd5b505080516020909101519092909150565b600060208284031215615c6a57600080fd5b815163ffffffff8116811461423a57600080fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615ab4565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615ab4565b60008712925087820587128484161615615d1657615d16615ab4565b87850587128184161615615d2c57615d2c615ab4565b505050929093029392505050565b600082615d4957615d49615b30565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615d7f57615d7f615ab4565b500590565b600082615d9357615d93615b30565b500690565b60006001600160801b0383811690831681811015615c2c57615c2c615ab4565b60006001600160801b03808316818516808303821115615bd257615bd2615ab4565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615e37606083018789615dda565b8281036020840152615e4a818688615dda565b9150508260408301529695505050505050565b600060ff821660ff841680821015615e7757615e77615ab4565b90039392505050565b600060ff831680615e9357615e93615b30565b8060ff8416069150509291505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x83a2df4b23236dccc59a67d289cd5163190213ea": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106103d05760003560e01c80638da5cb5b116101ff578063d220a9e01161011a578063f2c4bc9e116100ad578063f8c68de01161007c578063f8c68de014610a1a578063fd32aa0f14610a22578063fe3d571014610a2a578063ffa1ad7414610a6357600080fd5b8063f2c4bc9e146109d7578063f2fde38b146109ea578063f45e65d8146109fd578063f68016b714610a0657600080fd5b8063e0e2016d116100e9578063e0e2016d1461099e578063e81b2c6d146109a6578063ec707517146109af578063f2b4e617146109cf57600080fd5b8063d220a9e014610975578063d6ae3cd514610985578063dac6e63a1461098e578063dad544e01461099657600080fd5b8063b40a817c11610192578063c4e8ddfa11610161578063c4e8ddfa1461080e578063c9b26f6114610816578063c9ff2d1614610829578063cc731b021461084157600080fd5b8063b40a817c146107c4578063bc49ce5f146107d7578063bfb14fb7146107df578063c0fd4b41146107fb57600080fd5b80639fabcc84116101ce5780639fabcc8414610706578063a39fac121461070e578063a62611a214610790578063a7119869146107bc57600080fd5b80638da5cb5b146106c55780638ed95502146106e3578063935f029e146106eb5780639b7d7f0a146106fe57600080fd5b80632efe2c63116102ef5780634d5d9a2a116102825780635d73369c116102515780635d73369c1461069a578063715018a6146106a25780637616f0e8146106aa5780637e54b8ad146106bd57600080fd5b80634d5d9a2a146105f85780634f16540b1461062957806354fd4d50146106505780635c975abb1461069257600080fd5b8063452a9320116102be578063452a9320146105bd57806347af267b146105c557806348cd4cb1146105e85780634add321d146105f057600080fd5b80632efe2c631461055c57806335e80ab31461056457806338d38c97146105845780633e47158c146105b557600080fd5b806318d1391811610367578063213268491161033657806321326849146104cf578063215b7a1c1461052e57806321d7fde5146105365780632b598b8a1461054957600080fd5b806318d139181461049957806319f5cea8146104ac5780631fd19ee1146104b457806320f06fdc146104bc57600080fd5b80630ae14b1b116103a35780630ae14b1b1461043a5780630c18c16214610459578063155b6c6f1461046257806316d3bc7f1461047557600080fd5b806306c92657146103d5578063078f29cf146103f05780630a2ca2a91461041d5780630a49cb0314610432575b600080fd5b6103dd610a6b565b6040519081526020015b60405180910390f35b6103f8610a99565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103e7565b61043061042b366004612c64565b610ad2565b005b6103f8610afc565b631dcd65005b60405167ffffffffffffffff90911681526020016103e7565b6103dd60655481565b610430610470366004612cb4565b610b2c565b606a54610440906c01000000000000000000000000900467ffffffffffffffff1681565b6104306104a7366004612c64565b610b42565b6103dd610b53565b6103f8610b7e565b6104306104ca366004612ce7565b610ba8565b7f435553544f4d5f4741535f544f4b454e00000000000000000000000000000000600052606d6020527f3ec9a18bd22a834e2a13465cc2aa2a9aebb161ffdebf39cdb0028dbb1b5394b45460ff165b60405190151581526020016103e7565b6103f8610bb9565b610430610544366004612d0b565b610be9565b610430610557366004612e59565b610bfb565b6103dd610fce565b606c546103f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000031681526020016103e7565b6103f8610ff9565b6103f8611204565b61051e6105d3366004612fc9565b606d6020526000908152604090205460ff1681565b6103dd611298565b6104406112c8565b606a546106149068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103e7565b6103dd7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b60408051808201909152600681527f332e31342e30000000000000000000000000000000000000000000000000000060208201525b6040516103e7919061305c565b61051e6112ee565b6103dd6114fb565b610430611526565b6104306106b836600461306f565b61153a565b6103dd61154b565b60335473ffffffffffffffffffffffffffffffffffffffff166103f8565b6103f8611576565b6104306106f936600461308a565b6115a6565b6103f86115b8565b6106856115e8565b610716611682565b6040516103e79190600060e08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401528060a08501511660a08401528060c08501511660c08401525092915050565b606c546104409074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103f86117bd565b6104306107d236600461306f565b6117ed565b6103dd6117fe565b6068546106149068010000000000000000900463ffffffff1681565b610430610809366004612d0b565b611829565b6103f861183b565b610430610824366004612fc9565b61186b565b606a5461061490640100000000900463ffffffff1681565b6109056040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103e79190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546106149063ffffffff1681565b6103dd606b5481565b6103f861187c565b6103f86118ac565b6103dd611900565b6103dd60675481565b606854610614906c01000000000000000000000000900463ffffffff1681565b6103f861192b565b6104306109e53660046130ba565b6119a7565b6104306109f8366004612c64565b611bb8565b6103dd60665481565b6068546104409067ffffffffffffffff1681565b6103dd611c6c565b6103dd611c97565b606a54610a509074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016103e7565b6103dd600081565b610a9660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d613119565b81565b6000610acd610ac960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377613119565b5490565b905090565b610ada611cc6565b610af973ffffffffffffffffffffffffffffffffffffffff8216611d47565b50565b6000610acd610ac960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad613119565b610b34611cc6565b610b3e8282611da8565b5050565b610b4a611cc6565b610af981611eb8565b610a9660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8613119565b6000610acd7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610bb0611cc6565b610af981611f3c565b6000610acd610ac960017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd5900613119565b610bf1611cc6565b610b3e8282611fa9565b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff16158015610c3b575060005460ff8083169116105b610ccc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d056120ae565b610d0d61212f565b610d168c611bb8565b610d1f89611d47565b610d298b8b611fa9565b610d32886121ce565b610d5b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610d8e610d8960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598613119565b869055565b610dc2610dbc60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637613119565b85519055565b610df9610df060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8613119565b60208601519055565b610e30610e2760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377613119565b60408601519055565b610e67610e5e60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad613119565b60608601519055565b610e9e610e9560017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d613119565b60808601519055565b610ed5610ecc60017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd5900613119565b60a08601519055565b610f0c610f0360017f99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff43613119565b60c08601519055565b610f14612324565b610f1d8661238c565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b610a9660017f99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff43613119565b6000806110247fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561104757919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261108a9190613130565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906110e5906060015b604051602081830303815290604052805190602001205490565b1461111c576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061113e906060016110cb565b905073ffffffffffffffffffffffffffffffffffffffff8116156111d2578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb919061316d565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd919061316d565b6000610acd610ac960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b606954600090610acd9063ffffffff6a010000000000000000000082048116911661318a565b7f4554485f4c4f434b424f580000000000000000000000000000000000000000006000908152606d6020527f58e88e949bd180ff86d6c072735c3d8d5a05a543c16130176ec0bc0adf3fd80654819060ff166113515761134c610afc565b6113c7565b611359610afc565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c7919061316d565b606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015291925073ffffffffffffffffffffffffffffffffffffffff1690632e48152c90602401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b91906131b6565b806114f55750606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690632e48152c90602401602060405180830381865afa1580156114d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f591906131b6565b91505090565b610a9660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637613119565b61152e611cc6565b6115386000612800565b565b611542611cc6565b610af981612877565b610a9660017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd5900613119565b6000610acd610ac960017f99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff43613119565b6115ae611cc6565b610b3e82826128ea565b6000610acd610ac960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d613119565b60606115f2611576565b73ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa15801561163c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610acd91908101906131d3565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052806116ce6117bd565b73ffffffffffffffffffffffffffffffffffffffff1681526020016116f161183b565b73ffffffffffffffffffffffffffffffffffffffff168152602001611714610a99565b73ffffffffffffffffffffffffffffffffffffffff168152602001611737610afc565b73ffffffffffffffffffffffffffffffffffffffff16815260200161175a6115b8565b73ffffffffffffffffffffffffffffffffffffffff16815260200161177d610bb9565b73ffffffffffffffffffffffffffffffffffffffff1681526020016117a0611576565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610acd610ac960017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637613119565b6117f5611cc6565b610af9816121ce565b610a9660017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598613119565b611831611cc6565b610b3e82826129c0565b6000610acd610ac960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8613119565b611873611cc6565b610af981611d47565b6000610acd610ac960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598613119565b60006118b6610ff9565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611274573d6000803e3d6000fd5b610a9660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b600080611936610afc565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f5919061316d565b6119af6120ae565b6000828152606d602052604090205460ff161515811515036119fd576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4554485f4c4f434b424f580000000000000000000000000000000000000000008203611b4e576000828152606d602052604090205460ff168015611a40575080155b8015611ad857506000611a51610afc565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abf919061316d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611b0f576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b176112ee565b15611b4e576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152606d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091559051909184917fb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c9190a35050565b611bc0611cc6565b73ffffffffffffffffffffffffffffffffffffffff8116611c63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cc3565b610af981612800565b610a9660017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377613119565b610a9660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad613119565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cc3565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611d9c919061305c565b60405180910390a35050565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611eab919061305c565b60405180910390a3505050565b611ee17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003611d6b565b606a80547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040805160208082019390935281518082039093018352810190526007611d6b565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611e7a565b336120b7610ff9565b73ffffffffffffffffffffffffffffffffffffffff16141580156120f85750336120df6118ac565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611538576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166121c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610cc3565b611538612b92565b6121d66112c8565b67ffffffffffffffff168167ffffffffffffffff161015612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610cc3565b631dcd650067ffffffffffffffff821611156122cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f20686967686044820152606401610cc3565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611d6b565b612352610ac960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b6000036115385761153861238760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff16111561243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610cc3565b6001816040015160ff16116124d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610cc3565b6068546080820151825167ffffffffffffffff909216916124f4919061329e565b63ffffffff161115612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610cc3565b6000816020015160ff16116125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610cc3565b8051602082015163ffffffff82169160ff909116906126199082906132bd565b6126239190613307565b63ffffffff16146126b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610cc3565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040805160208082019390935281518082039093018352810190526006611d6b565b7fff0000000000000000000000000000000000000000000000000000000000000081161561299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610cc3565b606582905560668190556040805160208101849052908101829052600090606001612077565b60018263ffffffff161015612a57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d203100000000000000000000000000000000000000000000000000006064820152608401610cc3565b60018163ffffffff161015612aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d20310000000000000000000000000000000000000000000000000000006064820152608401610cc3565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009093169186169190911791909117909155604051600091612b5b91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611e7a565b600054610100900460ff16612c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610cc3565b61153833612800565b73ffffffffffffffffffffffffffffffffffffffff81168114610af957600080fd5b8035612c5f81612c32565b919050565b600060208284031215612c7657600080fd5b8135612c8181612c32565b9392505050565b803563ffffffff81168114612c5f57600080fd5b803567ffffffffffffffff81168114612c5f57600080fd5b60008060408385031215612cc757600080fd5b612cd083612c88565b9150612cde60208401612c9c565b90509250929050565b600060208284031215612cf957600080fd5b813561ffff81168114612c8157600080fd5b60008060408385031215612d1e57600080fd5b612d2783612c88565b9150612cde60208401612c88565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612d8757612d87612d35565b60405290565b803560ff81168114612c5f57600080fd5b600060e08284031215612db057600080fd5b60405160e0810181811067ffffffffffffffff82111715612dd357612dd3612d35565b6040529050808235612de481612c32565b81526020830135612df481612c32565b60208201526040830135612e0781612c32565b60408201526060830135612e1a81612c32565b6060820152612e2b60808401612c54565b6080820152612e3c60a08401612c54565b60a0820152612e4d60c08401612c54565b60c08201525092915050565b60008060008060008060008060008060008b8d036102c0811215612e7c57600080fd5b8c35612e8781612c32565b9b50612e9560208e01612c88565b9a50612ea360408e01612c88565b995060608d01359850612eb860808e01612c9c565b975060a08d0135612ec881612c32565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612efa57600080fd5b50612f03612d64565b612f0f60c08e01612c88565b8152612f1d60e08e01612d8d565b6020820152612f2f6101008e01612d8d565b6040820152612f416101208e01612c88565b6060820152612f536101408e01612c88565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612f7c57600080fd5b60a08201529450612f906101808d01612c54565b9350612fa08d6101a08e01612d9e565b92506102808c01359150612fb76102a08d01612c54565b90509295989b509295989b9093969950565b600060208284031215612fdb57600080fd5b5035919050565b60005b83811015612ffd578181015183820152602001612fe5565b8381111561300c576000848401525b50505050565b6000815180845261302a816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612c816020830184613012565b60006020828403121561308157600080fd5b612c8182612c9c565b6000806040838503121561309d57600080fd5b50508035926020909101359150565b8015158114610af957600080fd5b600080604083850312156130cd57600080fd5b8235915060208301356130df816130ac565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561312b5761312b6130ea565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613168576131686130ea565b500290565b60006020828403121561317f57600080fd5b8151612c8181612c32565b600067ffffffffffffffff8083168185168083038211156131ad576131ad6130ea565b01949350505050565b6000602082840312156131c857600080fd5b8151612c81816130ac565b6000602082840312156131e557600080fd5b815167ffffffffffffffff808211156131fd57600080fd5b818401915084601f83011261321157600080fd5b81518181111561322357613223612d35565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561326957613269612d35565b8160405282815287602084870101111561328257600080fd5b613293836020830160208801612fe2565b979650505050505050565b600063ffffffff8083168185168083038211156131ad576131ad6130ea565b600063ffffffff808416806132fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561332a5761332a6130ea565b0294935050505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + }, + "0x877d4a7c4b8d2d49f1b8b814ae08cae354a672eb": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000006d46535c721a7721e5975790aa97f793a438ed4c", + "0x4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e": "0x0000000000000000000000007b57e3025d0c33ac2c0cc44ac915650895a619d3", + "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7c": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c", + "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7d": "0x969e7a548b4e1ea6f44b101535318a7d1a469f8ac3237117312fcd40bbfe8a4f", + "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7e": "0xe93b1c74a2e0d78ffff5f6fef1779e1faa40d4382c1b47b5204d105200000000", + "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7f": "0x0000000000000000000000000000000000000000000000000153c16e70997970", + "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa80": "0xc51812dc3a010c7d01b50e0d17dc79c8f39fd6e51aad88f6f4ce6ab8827279cf", + "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa81": "0xffb9226600000000000000000000000000000000000000000000000000000000", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5", + "0xc073f36c05b6a60b24c30a48974b549770d8fa354751fb3170c9dfd8ca536add": "0x0000000000000000000000000000000000000000000000000000000000000149" + } + }, + "0x89dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635958a19311610104578063952b2797116100a2578063e0a840eb11610071578063e0a840eb146104d5578063ee658e45146104f5578063f2b4e61714610508578063fdbb3dcf1461052857600080fd5b8063952b27971461048f578063d5a3e12e146104bd578063d83ef267146104c5578063dad544e0146104cd57600080fd5b80636c4f4467116100de5780636c4f44671461042e5780637258a807146104415780637d6be8dc146104695780637fc485041461047c57600080fd5b80635958a193146103d55780635c975abb146103e8578063664ed830146103f057600080fd5b80633c9f397c1161017157806345884d321161014b57806345884d321461034357806347a222c514610366578063496b9c161461037957806354fd4d501461038c57600080fd5b80633c9f397c146102e15780633e47158c146103065780634086d1831461030e57600080fd5b806333d7e2bd116101ad57806333d7e2bd1461022457806334a346ea1461026f57806335e80ab3146102a857806338d38c97146102b057600080fd5b80630314d2b3146101d457806304e50fed146101fc57806317cf21a91461020f575b600080fd5b6101e76101e23660046117c8565b61053b565b60405190151581526020015b60405180910390f35b6101e761020a3660046117c8565b61061b565b61022261021d3660046117c8565b610692565b005b60005461024a9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e761027d3660046117c8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205460ff1690565b61024a6107f7565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000011681526020016101f3565b6006546102f19063ffffffff1681565b60405163ffffffff90911681526020016101f3565b61024a61088e565b60065461032a90640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f3565b6101e76103513660046117c8565b60056020526000908152604090205460ff1681565b61022261037436600461187c565b610a99565b6101e76103873660046117c8565b610d15565b6103c86040518060400160405280600581526020017f332e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f391906119ad565b6101e76103e33660046117c8565b610d8d565b6101e7610e10565b6040805180820182526000808252602091820152815180830183526003548082526004549183019182528351908152905191810191909152016101f3565b6101e761043c3660046117c8565b610ea2565b61045461044f3660046119c0565b610f72565b604080519283526020830191909152016101f3565b6102226104773660046117c8565b610f86565b61022261048a3660046119c0565b611005565b6040517f000000000000000000000000000000000000000000000000000000000000000681526020016101f3565b610222611076565b6104546110f6565b61024a611255565b60025461024a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101e76105033660046117c8565b6112a9565b60015461024a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101e76105363660046117c8565b6114b6565b6000610546826114b6565b61055257506000919050565b7f00000000000000000000000000000000000000000000000000000000000000066105f28373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e591906119fa565b67ffffffffffffffff1690565b6106069067ffffffffffffffff1642611a44565b1161061357506000919050565b506001919050565b60008173ffffffffffffffffffffffffffffffffffffffff1663250e69bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068c9190611a5b565b92915050565b8061069c81610ea2565b6106d2576040517f47ad367a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106dc6110f6565b915050808273ffffffffffffffffffffffffffffffffffffffff166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074f9190611a7d565b11610786576040517f47ad367a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f474f180d74ea8751955ee261c93ff8270411b180408d1014c49f552c92a4d11e90600090a2505050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108899190611a96565b905090565b6000806108b97fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156108dc57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261091f9190611ab3565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061097a906060015b604051602081830303815290604052805190602001205490565b146109b1576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906109d390606001610960565b905073ffffffffffffffffffffffffffffffffffffffff811615610a67578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a609190611a96565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015610ad9575060005460ff8083169116105b610b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610ba261162b565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff88811691909102919091178255600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691871691909117905583516003556020840151600455600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff85161790819055640100000000900467ffffffffffffffff169003610cb057600680547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff166401000000004267ffffffffffffffff16021790555b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000610d20826112a9565b610d2c57506000919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604090205460ff1615610d6257506000919050565b610d6b82610d8d565b15610d7857506000919050565b610d80610e10565b1561061357506000919050565b6000600660049054906101000a900467ffffffffffffffff1667ffffffffffffffff16610dfe8373ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c1573d6000803e3d6000fd5b67ffffffffffffffff16111592915050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108899190611a5b565b6000610ead82610d15565b610eb957506000919050565b610ec28261061b565b610ece57506000919050565b610ed78261053b565b610ee357506000919050565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f549190611b1f565b6002811115610f6557610f65611af0565b1461061357506000919050565b600080610f7d6110f6565b91509150915091565b610f8e6116ae565b73ffffffffffffffffffffffffffffffffffffffff811660008181526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b61100d6116ae565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff83169081179091556040519081527fcee0703b5e4bad4efededab85c9fd1aec17dee7c5f6c584330e0509b677745a29060200160405180910390a150565b61107e6116ae565b600680547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff166401000000004267ffffffffffffffff811691909102919091179091556040519081527f6e5b1ba771e8e484f741ed085f039ff4e5c6e882eaf68f550fb390922d0ae4a79060200160405180910390a1565b600254600090819073ffffffffffffffffffffffffffffffffffffffff166111245750506003546004549091565b600254604080517fbcef3b5500000000000000000000000000000000000000000000000000000000815290516111bc9273ffffffffffffffffffffffffffffffffffffffff169163bcef3b559160048083019260209291908290030181865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b99190611a7d565b90565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d9190611a7d565b915091509091565b600061125f61088e565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610865573d6000803e3d6000fd5b6000806000808473ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113409190810190611b40565b6001546040517f5f0150cb000000000000000000000000000000000000000000000000000000008152939650919450925060009173ffffffffffffffffffffffffffffffffffffffff90911690635f0150cb906113a590879087908790600401611c11565b6040805180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e59190611c3f565b50905060008673ffffffffffffffffffffffffffffffffffffffff16635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114599190611a96565b90508673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156114ab575073ffffffffffffffffffffffffffffffffffffffff811630145b979650505050505050565b60006115068273ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c1573d6000803e3d6000fd5b67ffffffffffffffff161580159061068c575060028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158a9190611b1f565b600281111561159b5761159b611af0565b148061068c575060018273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116139190611b1f565b600281111561162457611624611af0565b1492915050565b3361163461088e565b73ffffffffffffffffffffffffffffffffffffffff161415801561167557503361165c611255565b73ffffffffffffffffffffffffffffffffffffffff1614155b156116ac576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f9190611a96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f2e5321ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146117c557600080fd5b50565b6000602082840312156117da57600080fd5b81356117e5816117a3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611862576118626117ec565b604052919050565b63ffffffff811681146117c557600080fd5b60008060008084860360a081121561189357600080fd5b853561189e816117a3565b945060208601356118ae816117a3565b935060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0820112156118e057600080fd5b506040516040810181811067ffffffffffffffff82111715611904576119046117ec565b6040908152860135815260608601356020820152915060808501356119288161186a565b939692955090935050565b60005b8381101561194e578181015183820152602001611936565b8381111561195d576000848401525b50505050565b6000815180845261197b816020860160208601611933565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117e56020830184611963565b6000602082840312156119d257600080fd5b81356117e58161186a565b805167ffffffffffffffff811681146119f557600080fd5b919050565b600060208284031215611a0c57600080fd5b6117e5826119dd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611a5657611a56611a15565b500390565b600060208284031215611a6d57600080fd5b815180151581146117e557600080fd5b600060208284031215611a8f57600080fd5b5051919050565b600060208284031215611aa857600080fd5b81516117e5816117a3565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611aeb57611aeb611a15565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611b3157600080fd5b8151600381106117e557600080fd5b600080600060608486031215611b5557600080fd5b8351611b608161186a565b60208501516040860151919450925067ffffffffffffffff80821115611b8557600080fd5b818601915086601f830112611b9957600080fd5b815181811115611bab57611bab6117ec565b611bdc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161181b565b9150808252876020828501011115611bf357600080fd5b611c04816020840160208601611933565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000611c366060830184611963565b95945050505050565b60008060408385031215611c5257600080fd5b8251611c5d816117a3565b9150611c6b602084016119dd565b9050925092905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0x8e01a1674ca756b57c4719563437d25e2eac7ffd": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80637d8bd0d8116100ee578063bb98b3f411610097578063dea2198411610071578063dea21984146103ae578063e303272c146103c1578063e3fef4a8146103d4578063f3edcbe1146103e757600080fd5b8063bb98b3f414610375578063bc3f6fd414610388578063c34e047a1461039b57600080fd5b8063a38d5595116100c8578063a38d559514610316578063a4dec37a14610329578063ad7e7e401461033c57600080fd5b80637d8bd0d8146102dd5780638970ac44146102f057806398ccec3e1461030357600080fd5b806354fd4d5011610150578063718394181161012a57806371839418146102ae57806374459cf3146102b75780637b491a98146102ca57600080fd5b806354fd4d501461024c57806358256afb146102885780636c0e21701461029b57600080fd5b806335e80ab31161018157806335e80ab31461021357806341fe538514610226578063534db0e21461023957600080fd5b80630e9d5cb9146101a85780631d8a4e92146101d15780632aecd35c146101e8575b600080fd5b6101bb6101b6366004614888565b6103fa565b6040516101c891906148ff565b60405180910390f35b6101da60125481565b6040519081526020016101c8565b600d546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020016101c8565b6000546101fb906001600160a01b031681565b6101bb610234366004614932565b61047b565b6002546101fb906001600160a01b031681565b6101bb6040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b600a546101fb906001600160a01b031681565b6006546101fb906001600160a01b031681565b6101da60035481565b600e546101fb906001600160a01b031681565b6007546101fb906001600160a01b031681565b6004546101fb906001600160a01b031681565b6101bb6102fe3660046149ed565b6104f8565b6011546101fb906001600160a01b031681565b6005546101fb906001600160a01b031681565b6001546101fb906001600160a01b031681565b60408051808201909152600581527f312e312e3400000000000000000000000000000000000000000000000000000060208201526101bb565b600c546101fb906001600160a01b031681565b6008546101fb906001600160a01b031681565b600b546101fb906001600160a01b031681565b6010546101fb906001600160a01b031681565b600f546101fb906001600160a01b031681565b6009546101fb906001600160a01b031681565b6101bb6103f5366004614a2c565b6107a5565b6040805160a0808201835260008083526020808401829052838501829052606084810183905260809485018390528551938401865288516001600160a01b039081168552828a015192850192909252838601839052948801518386015287850151169282019290925290506104708185856104f8565b9150505b9392505050565b6040805160a0808201835260008083526020808401829052838501829052606084810183905260809485018390528551938401865287516001600160a01b0390811685528289015192850192909252838601839052948701518386015286850151169282019290925290506104f081846107a5565b949350505050565b60606000604051806020016040528060008152509050600085600001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105769190614a59565b9050610581826107da565b915061058e8282866108aa565b915061059f82876000015183610977565b91506105b08287600001518361103c565b91506105c1828760000151836115f0565b91506105d282876000015183611b9a565b91506105e382876000015183611e99565b91506105f482876000015183612443565b915061060682876000015183876128ec565b915061062782876000015188602001518960600151858b608001518a612b39565b915061067b828760000151600089602001518a60600151868a6040518060400160405280600481526020017f504c444700000000000000000000000000000000000000000000000000000000815250612d3d565b91506106cf828760000151600889604001518a60600151868a6040518060400160405280600481526020017f434b444700000000000000000000000000000000000000000000000000000000815250612d3d565b91506106e082876000015183612e47565b915060006106ed85613263565b805190915083901561072c57835115610729578184604051602001610713929190614a76565b604051602081830303815290604052905061072c565b50805b6000845111801561073b575086155b1561079a57806040516020016107519190614ace565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610791916004016148ff565b60405180910390fd5b979650505050505050565b60606104748383604051806040016040528060006001600160a01b0316815260200160006001600160a01b03168152506104f8565b600080546040517f2e48152c00000000000000000000000000000000000000000000000000000000815260048101929092526060916108a4916001600160a01b031690632e48152c90602401602060405180830381865afa158015610843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108679190614b39565b156040518060400160405280600981526020017f5350524346472d3130000000000000000000000000000000000000000000000081525084613300565b92915050565b606060006108b78361334c565b905061096e816001600160a01b0316856001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190614a59565b6001600160a01b0316146040518060400160405280600981526020017f50524f5859412d3130000000000000000000000000000000000000000000000081525087613300565b95945050505050565b60606109ef6109b361098885613375565b60085461099d906001600160a01b0316613375565b8051602091820120825192909101919091201490565b6040518060400160405280600981526020017f535953434f4e2d3130000000000000000000000000000000000000000000000081525086613300565b9350610aad631dcd650067ffffffffffffffff16846001600160a01b031663f68016b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190614b6c565b67ffffffffffffffff1611156040518060400160405280600981526020017f535953434f4e2d3230000000000000000000000000000000000000000000000081525086613300565b9350610b54836001600160a01b031663f45e65d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b149190614b89565b600014156040518060400160405280600981526020017f535953434f4e2d3330000000000000000000000000000000000000000000000081525086613300565b600854909450610bb7906001600160a01b0316610b7184866133dd565b6001600160a01b0316146040518060400160405280600981526020017f535953434f4e2d3430000000000000000000000000000000000000000000000081525086613300565b93506000836001600160a01b031663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190614bcc565b9050610c6f816000015163ffffffff166301312d00146040518060400160405280600981526020017f535953434f4e2d3530000000000000000000000000000000000000000000000081525087613300565b9450610cbb816020015160ff16600a146040518060400160405280600981526020017f535953434f4e2d3630000000000000000000000000000000000000000000000081525087613300565b9450610d07816040015160ff166008146040518060400160405280600981526020017f535953434f4e2d3730000000000000000000000000000000000000000000000081525087613300565b9450610d58816080015163ffffffff16620f4240146040518060400160405280600981526020017f535953434f4e2d3830000000000000000000000000000000000000000000000081525087613300565b9450610daa816060015163ffffffff16633b9aca00146040518060400160405280600981526020017f535953434f4e2d3930000000000000000000000000000000000000000000000081525087613300565b9450610e166fffffffffffffffffffffffffffffffff80168260a001516fffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f535953434f4e2d3130300000000000000000000000000000000000000000000081525087613300565b9450610ec2846001600160a01b0316634d5d9a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190614c82565b63ffffffff166000146040518060400160405280600a81526020017f535953434f4e2d3131300000000000000000000000000000000000000000000081525087613300565b9450610f72846001600160a01b03166316d3bc7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f299190614b6c565b67ffffffffffffffff166000146040518060400160405280600a81526020017f535953434f4e2d3132300000000000000000000000000000000000000000000081525087613300565b945061096e60008054906101000a90046001600160a01b03166001600160a01b0316856001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff69190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f535953434f4e2d3133300000000000000000000000000000000000000000000081525087613300565b60606000836001600160a01b031663a71198696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614a59565b90506111046110c86110b383613375565b600a5461099d906001600160a01b0316613375565b6040518060400160405280600881526020017f4c3178444d2d313000000000000000000000000000000000000000000000000081525087613300565b600a54909550611167906001600160a01b031661112185846133dd565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d323000000000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190614a59565b90506112987342000000000000000000000000000000000000076001600160a01b0316836001600160a01b0316639fce812c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112529190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d333000000000000000000000000000000000000000000000000081525088613300565b95506113637342000000000000000000000000000000000000076001600160a01b0316836001600160a01b031663db505d806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d343000000000000000000000000000000000000000000000000081525088613300565b955061141a816001600160a01b0316836001600160a01b0316630ff754ea6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d49190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d353000000000000000000000000000000000000000000000000081525088613300565b95506114d1816001600160a01b0316836001600160a01b0316636425666b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148b9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d363000000000000000000000000000000000000000000000000081525088613300565b9550611588856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d373000000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b03166115a084613464565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d383000000000000000000000000000000000000000000000000081525088613300565b9695505050505050565b60606000836001600160a01b031663078f29cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190614a59565b90506116b861167c61166783613375565b600b5461099d906001600160a01b0316613375565b6040518060400160405280600781526020017f4c3153422d31300000000000000000000000000000000000000000000000000081525087613300565b600b5490955061171b906001600160a01b03166116d585846133dd565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d32300000000000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b031663a71198696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190614a59565b9050611838816001600160a01b0316836001600160a01b031663927ede2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d33300000000000000000000000000000000000000000000000000081525088613300565b95506118ef816001600160a01b0316836001600160a01b0316633cb747bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a99190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d34300000000000000000000000000000000000000000000000000081525088613300565b95506119ba7342000000000000000000000000000000000000106001600160a01b0316836001600160a01b0316637f46ddb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119749190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d35300000000000000000000000000000000000000000000000000081525088613300565b9550611a857342000000000000000000000000000000000000106001600160a01b0316836001600160a01b031663c89701a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f9190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d36300000000000000000000000000000000000000000000000000081525088613300565b9550611b3c856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af69190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d37300000000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b0316611b5484613464565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d38300000000000000000000000000000000000000000000000000081525088613300565b60606000836001600160a01b0316639b7d7f0a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c009190614a59565b9050611c62611c26611c1183613375565b60095461099d906001600160a01b0316613375565b6040518060400160405280600a81526020017f4d4552433230462d31300000000000000000000000000000000000000000000081525087613300565b600954909550611cc5906001600160a01b0316611c7f85846133dd565b6001600160a01b0316146040518060400160405280600a81526020017f4d4552433230462d32300000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b031663078f29cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b9190614a59565b9050611de2816001600160a01b0316836001600160a01b031663ee9a31a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9c9190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f4d4552433230462d33300000000000000000000000000000000000000000000081525088613300565b95506115e6816001600160a01b0316836001600160a01b031663e78cea926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e539190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f4d4552433230462d34300000000000000000000000000000000000000000000081525088613300565b60606000836001600160a01b031663c4e8ddfa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eff9190614a59565b9050611f61611f25611f1083613375565b60045461099d906001600160a01b0316613375565b6040518060400160405280600881526020017f4c373231422d313000000000000000000000000000000000000000000000000081525087613300565b600454909550611fc4906001600160a01b0316611f7e85846133dd565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d323000000000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b031663a71198696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614a59565b90506120f57342000000000000000000000000000000000000146001600160a01b0316836001600160a01b0316637f46ddb26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d333000000000000000000000000000000000000000000000000081525088613300565b95506121c07342000000000000000000000000000000000000146001600160a01b0316836001600160a01b031663c89701a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217a9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d343000000000000000000000000000000000000000000000000081525088613300565b9550612277816001600160a01b0316836001600160a01b031663927ede2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561220d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122319190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d353000000000000000000000000000000000000000000000000081525088613300565b955061232e816001600160a01b0316836001600160a01b0316633cb747bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d363000000000000000000000000000000000000000000000000081525088613300565b95506123e5856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561237b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239f9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d373000000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b03166123fd84613464565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d383000000000000000000000000000000000000000000000000081525088613300565b60606000836001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a99190614a59565b90506124bb601254600160001b6134c8565b156125bf576125556125196124cf83613375565b6006546124e4906001600160a01b0316613375565b6040516020016124f49190614c9d565b6040516020818303038152906040528051602091820120825192909101919091201490565b6040518060400160405280600981526020017f504f5254414c2d3130000000000000000000000000000000000000000000000081525087613300565b6006549095506125b8906001600160a01b031661257285846133dd565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3230000000000000000000000000000000000000000000000081525087613300565b9450612603565b6125e36125196125ce83613375565b60055461099d906001600160a01b0316613375565b600554909550612600906001600160a01b031661257285846133dd565b94505b6000846001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015612643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126679190614a59565b905061271e816001600160a01b0316836001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190614a59565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3330000000000000000000000000000000000000000000000081525088613300565b95506127d5856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f9190614a59565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3430000000000000000000000000000000000000000000000081525088613300565b955061288e61dead6001600160a01b0316836001600160a01b0316639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128489190614a59565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3830000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b03166128a684613464565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3930000000000000000000000000000000000000000000000081525088613300565b606060006128f98361334c565b90506000856001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561293b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295f9190614a59565b90506129c161298561297083613375565b600c5461099d906001600160a01b0316613375565b6040518060400160405280600581526020017f44462d313000000000000000000000000000000000000000000000000000000081525089613300565b600c54909750612a24906001600160a01b03166129de87846133dd565b6001600160a01b0316146040518060400160405280600581526020017f44462d323000000000000000000000000000000000000000000000000000000081525089613300565b9650612adb826001600160a01b0316826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a959190614a59565b6001600160a01b0316146040518060400160405280600581526020017f44462d333000000000000000000000000000000000000000000000000000000081525089613300565b965061079a856001600160a01b0316612af383613464565b6001600160a01b0316146040518060400160405280600581526020017f44462d343000000000000000000000000000000000000000000000000000000081525089613300565b604080518082018252600481527f504444470000000000000000000000000000000000000000000000000000000060208083019190915282516101c081018452600080825291810182905292830181905260608084018290526080840182905260a0840182905260c0840182905260e08401829052610100840182905261012084018290526101408401829052610160840182905261018084018290526101a084018290529260019291612bef8c858d866134dc565b909d5090925090508015612c09578b94505050505061079a565b612c696040518061012001604052808e81526020018d6001600160a01b031681526020018481526020018c81526020018b81526020018a6001600160a01b031681526020018663ffffffff16815260200188815260200185815250613770565b9b506000612c7687613afe565b9050612cd1816001600160a01b03168461018001516001600160a01b0316146040518060400160405280600881526020017f504444472d3133300000000000000000000000000000000000000000000000008152508f613300565b9c50612d2c886001600160a01b0316846101a001516001600160a01b0316146040518060400160405280600881526020017f504444472d3134300000000000000000000000000000000000000000000000008152508f613300565b9d9c50505050505050505050505050565b604080516101c08101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082018390526101408201839052610160820183905261018082018390526101a0820183905291612dbb8b8a8c876134dc565b909c5090925090508015612dd3578a92505050612e3b565b612e336040518061012001604052808d81526020018c6001600160a01b031681526020018481526020018a8152602001898152602001886001600160a01b031681526020018b63ffffffff16815260200187815260200186815250613770565b9a508a925050505b98975050505050505050565b60606000836001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ead9190614a59565b90506000816001600160a01b031663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f139190614a59565b6040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201529091506001600160a01b038616906347af267b90602401602060405180830381865afa158015612f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb79190614b39565b612fc5578592505050610474565b613025612fe9612fd483613375565b60075461099d906001600160a01b0316613375565b6040518060400160405280600a81526020017f4c4f434b424f582d31300000000000000000000000000000000000000000000081525088613300565b600754909650613088906001600160a01b031661304286846133dd565b6001600160a01b0316146040518060400160405280600a81526020017f4c4f434b424f582d32300000000000000000000000000000000000000000000081525088613300565b95506130e6846001600160a01b03166130a083613464565b6001600160a01b0316146040518060400160405280600a81526020017f4c4f434b424f582d33300000000000000000000000000000000000000000000081525088613300565b955061319d856001600160a01b0316826001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131579190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f4c4f434b424f582d34300000000000000000000000000000000000000000000081525088613300565b6040517f0fd110770000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529197506115e691831690630fd1107790602401602060405180830381865afa158015613203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132279190614b39565b6040518060400160405280600a81526020017f4c4f434b424f582d35300000000000000000000000000000000000000000000081525088613300565b805160609081906001600160a01b03161561329b57806040516020016132899190614cb9565b60405160208183030381529060405290505b60208301516001600160a01b0316156108a4578051156132d857806040516020016132c69190614cfa565b60405160208183030381529060405290505b806040516020016132e99190614d3b565b604051602081830303815290604052905092915050565b6060831561330f575080610474565b815160000361332057829150613345565b8183604051602001613333929190614a76565b60405160208183030381529060405291505b5092915050565b80516000906001600160a01b03161561336457505190565b50506001546001600160a01b031690565b6060816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa1580156133b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108a49190810190614df0565b6040517f204e1c7a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000919084169063204e1c7a90602401602060405180830381865afa158015613440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104749190614a59565b6000816001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190614a59565b600081158015906104745750509081161490565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810182905290859080600163ffffffff881663ffffffff161490506000866001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190614a59565b6040517f1b685b9e00000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201529091506000906001600160a01b03831690631b685b9e90602401602060405180830381865afa15801561362f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136539190614a59565b90506001600160a01b03811661369c5761368e6000886040516020016136799190614e39565b60405160208183030381529060405287613300565b945060019350505050613766565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201526000906001600160a01b038416906374cc86ac90602401600060405180830381865afa158015613702573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261372a9190810190614df0565b9050600061373a8783878c613b2d565b9097509050801561375357600195505050505050613766565b61375e83838d613bb5565b975050505050505b9450945094915050565b805161010082015160408084015161012081015182517fd83ef267000000000000000000000000000000000000000000000000000000008152835192936000936001600160a01b039093169263d83ef2679260048082019392918290030181865afa1580156137e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138079190614e7a565b509050600085602001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561384e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138729190614a59565b90506138d96138c86138878560000151613375565b60c089015163ffffffff166001146138b3576010546138ae906001600160a01b0316613375565b61099d565b60115461099d906001600160a01b0316613375565b856040516020016136799190614e9e565b94506139068660c0015163ffffffff168460a0015163ffffffff1614856040516020016136799190614edf565b945061392786606001518460e0015114856040516020016136799190614f20565b9450613949866080015184610160015114856040516020016136799190614f61565b94506139678360c00151600014856040516020016136799190614fa2565b9450613990836080015167ffffffffffffffff16612a3014856040516020016136799190614fe3565b94506139ae8360400151601e14856040516020016136799190615024565b94506139cc8360200151604914856040516020016136799190615065565b94506139f6836060015167ffffffffffffffff1662049d40148560405160200161367991906150a6565b9450613a136000801b8314158560405160200161367991906150e7565b9450613a348587602001518561014001518960a001518a60e0015189613eea565b9450613a51858760200151838661012001518a60a0015189614164565b9450613a638584610100015186614399565b600f546101008501519196506001600160a01b03908116911603613af557613af2858461010001516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aec9190614a59565b866144ae565b94505b50505050919050565b60208101516000906001600160a01b031615613b1c57506020015190565b50506002546001600160a01b031690565b6060600082604051602001613b429190615128565b60405160208183030381529060405292508315613b9f576000613b66865160a41490565b9050613b928185604051602001613b7d9190614e39565b60405160208183030381529060405289613300565b9650869250159050613bac565b6000613b668651607c1490565b94509492505050565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810182905290613c2f84614625565b9050604051806101c00160405280866001600160a01b03168152602001866001600160a01b031663fa315aa96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cae9190614b89565b8152602001866001600160a01b031663ec5e63086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d159190614b89565b8152602001866001600160a01b031663dabd396d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7c9190614b6c565b67ffffffffffffffff168152602001866001600160a01b0316636b6716c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ded9190614b6c565b67ffffffffffffffff1681526020018463ffffffff168152602001866001600160a01b03166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6a9190614b89565b81526020018260000151815260200182602001516001600160a01b0316815260200182604001516001600160a01b0316815260200182606001516001600160a01b03168152602001826080015181526020018260c001516001600160a01b031681526020018260a001516001600160a01b03168152509150509392505050565b606081604051602001613efd9190615169565b6040516020818303038152906040529150613f43613f32613f1d87613375565b600e5461099d906001600160a01b0316613375565b83604051602001613b7d9190614e39565b600e54909750613f7b906001600160a01b0316613f6086886133dd565b6001600160a01b03161483604051602001613b7d9190614e9e565b96506000613f888461334c565b9050614029816001600160a01b0316876001600160a01b031663dad544e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff99190614a59565b6001600160a01b031614846040516020016140149190614edf565b6040516020818303038152906040528a613300565b97506140a5600354876001600160a01b0316636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561406f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140939190614b89565b14846040516020016140149190614f20565b9750614131876001600160a01b0316876001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141169190614a59565b6001600160a01b0316148460405160200161401491906151aa565b9750612e3b856001600160a01b031661414988613464565b6001600160a01b031614846040516020016140149190614f61565b60608160405160200161417791906151eb565b60405160208183030381529060405291506141ac613f3261419786613375565b600d5461099d906001600160a01b0316613375565b600d549097506141c9906001600160a01b0316613f6085876133dd565b9650614255856001600160a01b0316856001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015614216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423a9190614a59565b6001600160a01b03161483604051602001613b7d9190614edf565b96506142e1866001600160a01b0316856001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c69190614a59565b6001600160a01b03161483604051602001613b7d9190614f20565b9650614314836001600160a01b03166142f986613464565b6001600160a01b03161483604051602001613b7d91906151aa565b965061079a6000856001600160a01b0316634086d1836040518163ffffffff1660e01b8152600401602060405180830381865afa158015614359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437d9190614b6c565b67ffffffffffffffff161183604051602001613b7d9190614f61565b6060816040516020016143ac919061522c565b60408051601f1981840301815290829052600f549093506143fc916001600160a01b03868116921691909114906143e7908590602001614e39565b60405160208183030381529060405286613300565b935061443361442261440d85613375565b600f5461099d906001600160a01b0316613375565b836040516020016143e79190614e9e565b93506104f0836001600160a01b0316631219a4e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015614476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061449a9190614b89565b600814836040516020016143e79190614edf565b6060816040516020016144c1919061526d565b604051602081830303815290604052915061452b61451a6144e185613375565b60408051808201909152600581527f312e312e34000000000000000000000000000000000000000000000000000000602082015261099d565b836040516020016143e79190614e39565b93506145a8836001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561456e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145929190614b89565b6201518014836040516020016143e79190614e9e565b93506104f0836001600160a01b031663dd24f9bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460f9190614b89565b6201ec3014836040516020016143e79190614edf565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152815160a481148015906146725750607c8114155b156146a9576040517fbff6e41600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151604084015160548501516068860151607c870151606093841c9392831c929190911c906000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c880161470f575050609c88015160b0890151606091821c911c5b6040805160e0810182529788526001600160a01b0396871660208901529486169487019490945291841660608601526080850152821660a08401521660c08201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461479b57600080fd5b50565b6000608082840312156147b057600080fd5b6040516080810181811067ffffffffffffffff821117156147d3576147d3614757565b60405290508082356147e481614786565b808252506020830135602082015260408301356040820152606083013561480a81614786565b6060919091015292915050565b801515811461479b57600080fd5b60006040828403121561483757600080fd5b6040516040810181811067ffffffffffffffff8211171561485a5761485a614757565b604052905080823561486b81614786565b8152602083013561487b81614786565b6020919091015292915050565b600080600060e0848603121561489d57600080fd5b6148a7858561479e565b925060808401356148b781614817565b91506148c68560a08601614825565b90509250925092565b60005b838110156148ea5781810151838201526020016148d2565b838111156148f9576000848401525b50505050565b602081526000825180602084015261491e8160408501602087016148cf565b601f01601f19169190910160400192915050565b60008060a0838503121561494557600080fd5b61494f848461479e565b9150608083013561495f81614817565b809150509250929050565b600060a0828403121561497c57600080fd5b60405160a0810181811067ffffffffffffffff8211171561499f5761499f614757565b60405290508082356149b081614786565b8082525060208301356020820152604083013560408201526060830135606082015260808301356149e081614786565b6080919091015292915050565b60008060006101008486031215614a0357600080fd5b614a0d858561496a565b925060a0840135614a1d81614817565b91506148c68560c08601614825565b60008060c08385031215614a3f57600080fd5b614a49848461496a565b915060a083013561495f81614817565b600060208284031215614a6b57600080fd5b815161047481614786565b60008351614a888184602088016148cf565b7f2c000000000000000000000000000000000000000000000000000000000000009083019081528351614ac28160018401602088016148cf565b01600101949350505050565b7f4f50436f6e7472616374734d616e616765725374616e6461726456616c69646181527f746f723a20000000000000000000000000000000000000000000000000000000602082015260008251614b2c8160258501602087016148cf565b9190910160250192915050565b600060208284031215614b4b57600080fd5b815161047481614817565b67ffffffffffffffff8116811461479b57600080fd5b600060208284031215614b7e57600080fd5b815161047481614b56565b600060208284031215614b9b57600080fd5b5051919050565b805163ffffffff81168114614bb657600080fd5b919050565b805160ff81168114614bb657600080fd5b600060c08284031215614bde57600080fd5b60405160c0810181811067ffffffffffffffff82111715614c0157614c01614757565b604052614c0d83614ba2565b8152614c1b60208401614bbb565b6020820152614c2c60408401614bbb565b6040820152614c3d60608401614ba2565b6060820152614c4e60808401614ba2565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114614c7657600080fd5b60a08201529392505050565b600060208284031215614c9457600080fd5b61047482614ba2565b60008251614caf8184602087016148cf565b9190910192915050565b60008251614ccb8184602087016148cf565b7f4f56455252494445532d4c3150414f4d554c5449534947000000000000000000920191825250601701919050565b60008251614d0c8184602087016148cf565b7f2c00000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b60008251614d4d8184602087016148cf565b7f4f56455252494445532d4348414c4c454e474552000000000000000000000000920191825250601401919050565b600067ffffffffffffffff80841115614d9757614d97614757565b604051601f8501601f19908116603f01168101908282118183101715614dbf57614dbf614757565b81604052809350858152868686011115614dd857600080fd5b614de68660208301876148cf565b5050509392505050565b600060208284031215614e0257600080fd5b815167ffffffffffffffff811115614e1957600080fd5b8201601f81018413614e2a57600080fd5b6104f084825160208401614d7c565b60008251614e4b8184602087016148cf565b7f2d31300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008060408385031215614e8d57600080fd5b505080516020909101519092909150565b60008251614eb08184602087016148cf565b7f2d32300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614ef18184602087016148cf565b7f2d33300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614f328184602087016148cf565b7f2d34300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614f738184602087016148cf565b7f2d36300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614fb48184602087016148cf565b7f2d37300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614ff58184602087016148cf565b7f2d38300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b600082516150368184602087016148cf565b7f2d39300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b600082516150778184602087016148cf565b7f2d31303000000000000000000000000000000000000000000000000000000000920191825250600401919050565b600082516150b88184602087016148cf565b7f2d31313000000000000000000000000000000000000000000000000000000000920191825250600401919050565b600082516150f98184602087016148cf565b7f2d31323000000000000000000000000000000000000000000000000000000000920191825250600401919050565b6000825161513a8184602087016148cf565b7f2d47415247530000000000000000000000000000000000000000000000000000920191825250600601919050565b6000825161517b8184602087016148cf565b7f2d44574554480000000000000000000000000000000000000000000000000000920191825250600601919050565b600082516151bc8184602087016148cf565b7f2d35300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b600082516151fd8184602087016148cf565b7f2d414e43484f5250000000000000000000000000000000000000000000000000920191825250600801919050565b6000825161523e8184602087016148cf565b7f2d564d0000000000000000000000000000000000000000000000000000000000920191825250600301919050565b6000825161527f8184602087016148cf565b7f2d50494d474f000000000000000000000000000000000000000000000000000092019182525060060191905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000049d40", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x00000000000000000000000074f1ac50eb0be98853805d381c884f5f9abdecf9", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000cdb7a450076dc6c607b60c6956bace4cca77c12f", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000a63f352da318a6f0767a703da6b91ea8e9177f02", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000784d2f03593a42a6e4676a012762f18775ecbbe6", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x00000000000000000000000083a2df4b23236dccc59a67d289cd5163190213ea", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000b686f13aff1e427a1f993f29ab0f2e7383729fe0", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x00000000000000000000000061525eaacddb97d9184afc205827e6a4fd0bf62a", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000006d46535c721a7721e5975790aa97f793a438ed4c", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x00000000000000000000000089dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x00000000000000000000000033dadc2d1aa9bb613a7ae6b28425ea00d44c6998", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x000000000000000000000000969e7a548b4e1ea6f44b101535318a7d1a469f8a", + "0x0000000000000000000000000000000000000000000000000000000000000010": "0x0000000000000000000000006b35cca790320593ad27960764db1d53a099eebc", + "0x0000000000000000000000000000000000000000000000000000000000000011": "0x0000000000000000000000007b57e3025d0c33ac2c0cc44ac915650895a619d3", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0x90f79bf6eb2c4f870365e785982e1f101e93b906": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x95401dc811bb5740090279ba06cfa8fcf6113778": { + "balance": "0x0", + "code": "0x608060405234801561000f575f80fd5b5060043610610163575f3560e01c80639f3eb672116100c7578063ce3fe7ee1161007d578063d80a4c2811610063578063d80a4c281461030f578063dac79fc814610317578063ed0fb60314610288575f80fd5b8063ce3fe7ee146102d8578063d522f60a14610301575f80fd5b8063bc3a0911116100ad578063bc3a0911146102d8578063cd8f6997146102e9578063cda752ff146102fb575f80fd5b80639f3eb672146102c3578063a628a19e146102d8575f80fd5b80636d8f5aa91161011c5780637f82ea6c116101025780637f82ea6c1461027557806380710c80146102885780639143e764146102af575f80fd5b80636d8f5aa91461024c5780637e41f57c1461025f575f80fd5b8063330282f51161014c578063330282f51461018f57806336adf1c91461021157806355ddfa0614610239575f80fd5b80630f1f0f8614610167578063213b26581461017c575b5f80fd5b61017a610175366004610ee1565b505050565b005b61017a61018a366004610f41565b61032a565b61017a61019d366004610f78565b5f805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61022461021f366004610f9a565b61042b565b60405190151581526020015b60405180910390f35b610224610247366004611043565b6104f7565b61022461025a36600461111a565b6106b0565b61022461026d366004611146565b5f9392505050565b61017a6102833660046111a8565b610715565b5f5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610230565b61017a6102bd366004611237565b50505050565b6102246102d1366004611287565b5f92915050565b61017a6102e6366004610f78565b50565b61017a6102f7366004611327565b5050565b3061028a565b61017a61017536600461136b565b61028a61086d565b61017a6103253660046113b0565b61089b565b801561039e575073ffffffffffffffffffffffffffffffffffffffff165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4d6f636b457370726573736f54454556657269666965723a20756e726567697360448201527f746572696e67206e6f7420737570706f7274656400000000000000000000000060648201526084015b60405180910390fd5b6002545f90819060ff1661043f5730610458565b5f5473ffffffffffffffffffffffffffffffffffffffff165b6040517f6d8f5aa900000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff821690636d8f5aa9906104af908890879060040161145b565b602060405180830381865afa1580156104ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ee91906114ba565b95945050505050565b5f600183600181111561050c5761050c61142e565b14610543576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517ff2069c4294e295535d771d7fbbd52e3db330ca380d24e42af36427513a27649b60208201529081018590525f906060016040516020818303038152906040528051906020012090505f61059a82610951565b90505f6105a782896109be565b6002549091505f9060ff166105bc57306105d5565b5f5473ffffffffffffffffffffffffffffffffffffffff165b6040517f6d8f5aa900000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff821690636d8f5aa99061062c9085908a9060040161145b565b602060405180830381865afa158015610647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066b91906114ba565b6106a1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600198975050505050505050565b5f60015f8360018111156106c6576106c661142e565b60018111156106d7576106d761142e565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff8716825290925290205460ff16905092915050565b60018260018111156107295761072961142e565b146107b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4d6f636b457370726573736f54454556657269666965723a206f6e6c79204e4960448201527f54524f20737570706f72746564000000000000000000000000000000000000006064820152608401610422565b60148510610865575f6107cc601482888a6114d5565b6107d5916114fc565b60601c90506001805f8460018111156107f0576107f061142e565b60018111156108015761080161142e565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9590951681529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b505050505050565b6002545f9060ff161561089657505f5473ffffffffffffffffffffffffffffffffffffffff1690565b503090565b6014841061094a575f6108b160148287896114d5565b6108ba916114fc565b60601c90506001805f8460018111156108d5576108d561142e565b60018111156108e6576108e661142e565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9590951681529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b5050505050565b5f6109b861095d6109e0565b836040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101839052604281018290525f9060620160405160208183030381529060405280519060200120905092915050565b92915050565b5f805f6109cb8585610b13565b915091506109d881610b55565b509392505050565b5f3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816148015610a4557507f0000000000000000000000000000000000000000000000000000000000aa36a746145b15610a6f57507fd1df8b540861317511bce8fcb1e687b8725da2fe56deb4c0d7c808a6d632dbd790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f2c8dbda6d933995d68811718a8f9faa29e7d3c5748bc811a2277ec9bc9dcf624828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b5f808251604103610b47576020830151604084015160608501515f1a610b3b87828585610da8565b94509450505050610b4e565b505f905060025b9250929050565b5f816004811115610b6857610b6861142e565b03610b705750565b6001816004811115610b8457610b8461142e565b03610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610422565b6002816004811115610bff57610bff61142e565b03610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610422565b6003816004811115610c7a57610c7a61142e565b03610d07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610422565b6004816004811115610d1b57610d1b61142e565b036102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610422565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610ddd57505f90506003610eaf565b8460ff16601b14158015610df557508460ff16601c14155b15610e0557505f90506004610eaf565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610e56573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610ea9575f60019250925050610eaf565b91505f90505b94509492505050565b80151581146102e6575f80fd5b600281106102e6575f80fd5b8035610edc81610ec5565b919050565b5f805f60608486031215610ef3575f80fd5b833592506020840135610f0581610eb8565b91506040840135610f1581610ec5565b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146102e6575f80fd5b5f8060408385031215610f52575f80fd5b8235610f5d81610f20565b91506020830135610f6d81610eb8565b809150509250929050565b5f60208284031215610f88575f80fd5b8135610f9381610f20565b9392505050565b5f805f60608486031215610fac575f80fd5b8335610fb781610f20565b92506020840135610f0581610ec5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561103b5761103b610fc7565b604052919050565b5f805f8060808587031215611056575f80fd5b843567ffffffffffffffff8082111561106d575f80fd5b818701915087601f830112611080575f80fd5b813560208282111561109457611094610fc7565b6110c4817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601610ff4565b925081835289818386010111156110d9575f80fd5b81818501828501375f8183850101528297508089013596505050505061110160408601610ed1565b915061110f60608601610ed1565b905092959194509250565b5f806040838503121561112b575f80fd5b823561113681610f20565b91506020830135610f6d81610ec5565b5f805f60608486031215611158575f80fd5b833592506020840135610f0581610ec5565b5f8083601f84011261117a575f80fd5b50813567ffffffffffffffff811115611191575f80fd5b602083019150836020828501011115610b4e575f80fd5b5f805f805f80608087890312156111bd575f80fd5b863567ffffffffffffffff808211156111d4575f80fd5b6111e08a838b0161116a565b909850965060208901359150808211156111f8575f80fd5b5061120589828a0161116a565b909550935050604087013561121981610ec5565b9150606087013561122981610ec5565b809150509295509295509295565b5f805f806080858703121561124a575f80fd5b84359350602085013561125c81610eb8565b9250604085013561126c81610ec5565b9150606085013561127c81610ec5565b939692955090935050565b5f8060408385031215611298575f80fd5b823591506020830135610f6d81610ec5565b5f82601f8301126112b9575f80fd5b8135602067ffffffffffffffff8211156112d5576112d5610fc7565b8160051b6112e4828201610ff4565b92835284810182019282810190878511156112fd575f80fd5b83870192505b8483101561131c57823582529183019190830190611303565b979650505050505050565b5f8060408385031215611338575f80fd5b823567ffffffffffffffff81111561134e575f80fd5b61135a858286016112aa565b9250506020830135610f6d81610ec5565b5f805f6060848603121561137d575f80fd5b833567ffffffffffffffff811115611393575f80fd5b61139f868287016112aa565b9350506020840135610f0581610ec5565b5f805f805f606086880312156113c4575f80fd5b853567ffffffffffffffff808211156113db575f80fd5b6113e789838a0161116a565b909750955060208801359150808211156113ff575f80fd5b5061140c8882890161116a565b909450925050604086013561142081610ec5565b809150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8316815260408101600283106114ad577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f602082840312156114ca575f80fd5b8151610f9381610eb8565b5f80858511156114e3575f80fd5b838611156114ef575f80fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000813581811691601485101561153c5780818660140360031b1b83161692505b50509291505056fea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0x969e7a548b4e1ea6f44b101535318a7d1a469f8a": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631219a4e41461005157806354fd4d50146100865780637dc0d1d0146100cf578063e14ced3214610113575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000085b6040519081526020015b60405180910390f35b6100c26040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161007d9190615144565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001fb8cdfc6831fc866ed9c51af8817da5c287add316815260200161007d565b6100736101213660046151f9565b60006101308686868686610143565b905061013a61066b565b95945050505050565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101c36150da565b6000608083146101d257600080fd5b61026082146101e057600080fd5b604051610760146101f057600080fd5b608489146101fd57600080fd5b610164871461020b57600080fd5b508735608052602088013560a052604088013560c090811c81526048890135811c60e052605089013560f890811c6101005260518a0135821c6101205260598a0135821c6101405260618a0135811c6101605260628a0135811c61018081905260638b0135831c6101a052606b8b0135831c6101c05260738b013590911c6101e05260748a01356102005260948a01356102205260b48a013590911c610240526102b4816107b5565b826101000151156102d1576102c76107f9565b935050505061013a565b7fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58361018001511480156103085750826101600151155b8061034457507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5836101a0015114801561034457508261016001515b156103d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4d49505336343a206163746976652074687265616420737461636b206973206560448201527f6d7074790000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101208301805160010167ffffffffffffffff1690526103f482610919565b6103fe8383610a3d565b8160400151156104195761041183610ae1565b6102c76107f9565b620186a067ffffffffffffffff1683610140015167ffffffffffffffff161061044f576104468383610b6c565b506102c76107f9565b6101408301805160010167ffffffffffffffff16905260006102ae905060008060006104848660600151886000015186610d4a565b9250925092508163ffffffff1660001480156104a657508063ffffffff16600c145b156104c2576104b489610dd0565b97505050505050505061013a565b63ffffffff8216603014806104dd575063ffffffff82166038145b156104ee576104b487878585611f95565b63ffffffff821660341480610509575063ffffffff8216603c145b1561051a576104b487878585611f95565b60006105a4876040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b6040805160e080820183528382528a015160208201528a5191810191909152610a2e606082015263ffffffff808716608083015285811660a0830152841660c08201529091506000806105f68361224a565b918d52855167ffffffffffffffff9081166060808f01919091526020880151821660808f01526040880151821660a08f01528701511660c08d01529250905061063d6127ff565b811561064d5761064d8b826128bc565b6106556107f9565b9b50505050505050505050505095945050505050565b604080516101e0808201835260008083526020830181905292820183905260608201839052608080830184905260a0830184905260c0830184905260e08301849052610100830184905261012083018490526101408301849052610160830184905261018083018490526101a083018490526101c0909201839052519091906106f957816101800151610700565b816101a001515b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581036107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4d49505336343a20706f73742d7374617465206163746976652074687265616460448201527f20737461636b20697320656d707479000000000000000000000000000000000060648201526084016103cc565b5050565b60018163ffffffff1611156107f6576040517f0136cc7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60408051608051815260a051602082015260d8519181019190915260f851604882015261011f5160508201526101385160518201526101585160598201526101605161017f5160618301526101805161019f5160628401526101b85160638401526101d851606b8401526101ff5160738401526102005160748401526102205160948401526102585160b4840152600060bc8085018281529194929361026093929183a06000935084600181146108b357600394506108db565b8180156108cb57600181146108d457600295506108d9565b600095506108d9565b600195505b505b505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b179150610915816107b5565b5090565b3661092861012a61016461529c565b8110156109b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d49505336343a20696e73756666696369656e742063616c6c6461746120666f60448201527f7220746872656164207769746e6573730000000000000000000000000000000060648201526084016103cc565b6101643560c090811c835261016c3560f890811c602085015261016d35901c604084015261016e35811c606084015261017635811c608084015261017e35811c60a084015261018635811c9083015260e082015161018e9060005b6020811015610a3657823560c01c8252600890920191602090910190600101610a12565b5050505050565b6000610a50610a4a6128f4565b836129a7565b90506000836101600151610a6957836101800151610a70565b836101a001515b9050818114610adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d49505336343a20696e76616c696420746872656164207769746e657373000060448201526064016103cc565b50505050565b80610160015115610aff57610af46128f4565b6101a0820152610b0e565b610b076128f4565b6101808201525b6000816101600151610b2557816101800151610b2c565b816101a001515b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58103610b6057610160820180511590525b50600061014090910152565b600082610160015115610c30577fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5836101a0015103610c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d49505336343a20656d7074792072696768742074687265616420737461636b60448201526064016103cc565b610c0f6128f4565b6101a0840152610180830151610c2590836129a7565b610180840152610ce3565b7fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb583610180015103610cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d49505336343a20656d707479206c6566742074687265616420737461636b0060448201526064016103cc565b610cc66128f4565b6101808401526101a0830151610cdc90836129a7565b6101a08401525b6000836101600151610cfa57836101800151610d01565b836101a001515b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58103610d395761016084018051159052600191505b506000610140909301929092525090565b600080806003861615610d89576040517f3f8200bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610da08667fffffffffffffff88916876129e9565b9050610db0878260046000612a3b565b9350601a8463ffffffff16901c925083603f169150505b93509350939050565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101829052610e506150da565b608091506102609050600080600080610e6c8560e00151612a8b565b935093509350935060008061139163ffffffff168667ffffffffffffffff1603610eb857610e9f85858a60600151612aa7565b67ffffffffffffffff1660608b01529092509050611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6c67ffffffffffffffff871601610ef757654000000000009150611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec4167ffffffffffffffff87160161114e5762050f0067ffffffffffffffff861614610f61576001610100890152600260e0890152610f536107f9565b9a9950505050505050505050565b50506101c08601516000610f736150da565b6101c089015167ffffffffffffffff9081168252600060208301819052604083018190526080808b018051841660608601525160040183169084015260a0808b015183169084015260c0808b0151909216918301919091525b6020811015611022578860e001518160208110610feb57610feb6152b4565b60200201518260e001518260208110611006576110066152b4565b67ffffffffffffffff9092166020929092020152600101610fcc565b5060e0818101805167ffffffffffffffff8881166103a09092019190915281516000604091820181905292519093018290526101c08c018051600101821690528251608080820185528382526020808301859052828601859052606092830185905285518083018752838f015185168152918e015184169082015260a08d015183169481019490945260c08c0151909116908301529060e0808b015167ffffffffffffffff80881660408301528087169190920152602082018051808316845260040190911690529050805167ffffffffffffffff9081166060808c01919091526020830151821660808c01526040830151821660a08c01528201511660c08a015261112c6127ff565b6111368a83612b59565b61113e6107f9565b9c9b505050505050505050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebab67ffffffffffffffff8716016111a057600161010089015260ff851660e08901526111986127ff565b610f536107f9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7867ffffffffffffffff87160161127a57604080516101208101825267ffffffffffffffff8781168252868116602080840191909152868216838501528b01516060830152918a0151909116608082015260a081018b90527f0000000000000000000000001fb8cdfc6831fc866ed9c51af8817da5c287add373ffffffffffffffffffffffffffffffffffffffff1660c0820152610a2e60e0820152885161010082015261126e8982612b9f565b9093509150611e8f9050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7767ffffffffffffffff871601611322576040805160e08101825267ffffffffffffffff8781168252868116602080840191909152868216838501528b01516060830152918a01519091166080820152610a2e60a0820152885160c082015261130281612be5565b67ffffffffffffffff1660408d015260208c01529093509150611e8f9050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3267ffffffffffffffff8716016113675761135d8585612d77565b9092509050611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebc667ffffffffffffffff8716016113a357505084516000611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3e67ffffffffffffffff87160161140c576001604088015260ff851660208801526113ed88612efe565b1561140457600161010089015260ff851660e08901525b6111986127ff565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebb667ffffffffffffffff87160161152d5767fffffffffffffffc85167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8067ffffffffffffffff8616016114cd57600061148482612f81565b90508463ffffffff808316908216146114ab57600b945067ffffffffffffffff93506114c6565b6114b58b8b61300b565b9d9c50505050505050505050505050565b5050611527565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f67ffffffffffffffff86160161151757611508898961300b565b9b9a5050505050505050505050565b6016925067ffffffffffffffff91505b50611e8f565b67ffffffffffffffff861661139f1480611552575067ffffffffffffffff86166113aa145b1561156157610f53888861300b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7667ffffffffffffffff8716016115a557506009905067ffffffffffffffff611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9a67ffffffffffffffff8716016117435767ffffffffffffffff851615806115f7575067ffffffffffffffff85166001145b156117305750600090508080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff8816016116575750506101208801516298968067ffffffffffffffff9091168181049190066064025b895167fffffffffffffff88716906116729082610a2e613121565b6116a8576040517f8e77b2b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b581610a2e8561312e565b8b526116c18b826128bc565b8a516116d390600883016111ae613121565b611709576040517f834c4cd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611719600882016111ae8461312e565b8b526117288b600883016128bc565b505050611e8f565b506016905067ffffffffffffffff611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5267ffffffffffffffff87160161177f57506000905080611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb3f67ffffffffffffffff8716016117c7576117bb8886866131fd565b8a529092509050611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6d67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6e67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebb467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5d67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6a67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebf767ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6b67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb4f67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7567ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6867ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7367ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb8167ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec2167ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb7767ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6967ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5b67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5967ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeba867ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb6867ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3b67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1267ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5e67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9767ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeba067ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9f67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9c67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1967ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7067ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5c67ffffffffffffffff871601611e2d5760808416600003611e2457506016905067ffffffffffffffff611e8f565b60649150611e8f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d49505336343a20756e696d706c656d656e7465642073797363616c6c00000060448201526064016103cc565b6000611f19886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b60e0808a015167ffffffffffffffff80871660408301528086169190920152602082018051808316845260040190911690529050805167ffffffffffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c0890152611f8d6127ff565b6115086107f9565b60e08301516000908190601f601586901c1660208110611fb757611fb76152b4565b60200201519050601f601085901c166000611fd18661338a565b830190506001600463ffffffff871660341480611ff4575063ffffffff8716603c145b1561200157506002905060085b885160009063ffffffff891660301480612021575063ffffffff89166034145b1561205b576120338c868560016133a1565b60ff851660808e015267ffffffffffffffff80871660a08f0152821660c08e0152915061215e565b63ffffffff891660381480612076575063ffffffff8916603c145b1561212c578360ff168c6080015160ff161480156120ab57508067ffffffffffffffff168c60c0015167ffffffffffffffff16145b80156120ce57508467ffffffffffffffff168c60a0015167ffffffffffffffff16145b1561212357600060808d0181905260a08d0181905260c08d015260008b60e001518763ffffffff1660208110612106576121066152b4565b602002015190506121198d8786846133e1565b600192505061215e565b6000915061215e565b6040517fecf79d0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121e88c6040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b9050612202818d60e001518963ffffffff1686600161343b565b805167ffffffffffffffff9081166060808f01919091526020830151821660808f01526040830151821660a08f01528201511660c08d01526122426127ff565b6114b56107f9565b604081015160a0820151600090819063ffffffff166002148061227757508360a0015163ffffffff166003145b156122db57608084015160009060021b630ffffffc1661229c63f0000000602061351f565b866000015160200151161790506122d5858660a0015163ffffffff166002146122c657601f6122c9565b60005b63ffffffff1683613599565b506127f8565b60808401516020808601516000928392601f601083901c8116939260151c16908110612309576123096152b4565b6020020151925060008190508760a0015163ffffffff166027148061233857508760a0015163ffffffff16601a145b8061234d57508760a0015163ffffffff16601b145b156123815787602001518267ffffffffffffffff1660208110612372576123726152b4565b602002015192508190506124be565b60a088015163ffffffff1615806123a257508760a0015163ffffffff16601c145b156123e15787602001518267ffffffffffffffff16602081106123c7576123c76152b4565b60200201516080890151909350600b1c601f1690506124be565b60208860a0015163ffffffff161015612455578760a0015163ffffffff16600c148061241757508760a0015163ffffffff16600d145b8061242c57508760a0015163ffffffff16600e145b1561244157608088015161ffff1692506124be565b61244e886080015161338a565b92506124be565b60288860a0015163ffffffff1610158061247957508760a0015163ffffffff166022145b8061248e57508760a0015163ffffffff166026145b156124be5787602001518267ffffffffffffffff16602081106124b3576124b36152b4565b602002015192508190505b60048860a0015163ffffffff16101580156124e3575060088860a0015163ffffffff16105b806124f857508760a0015163ffffffff166001145b156125245761251b886000015189602001518a60a001518b608001518689613683565b505050506127f8565b600067ffffffffffffffff9050600060208a60a0015163ffffffff16101580612557575060a08a015163ffffffff16601a145b8061256c575060a08a015163ffffffff16601b145b156125d45761257e8a6080015161338a565b86019550600067fffffffffffffff8871690506125a48b60400151828d606001516129e9565b915060288b60a0015163ffffffff16106125d2578a60a0015163ffffffff166037146125d257809250600093505b505b60006040518060c001604052808c6080015163ffffffff1681526020018c60a0015163ffffffff1681526020018c60c0015163ffffffff1681526020018867ffffffffffffffff1681526020018767ffffffffffffffff1681526020018367ffffffffffffffff168152509050600067ffffffffffffffff612655836138f6565b60a08e01519116915060209063ffffffff1615801561267f575060088d60c0015163ffffffff1610155b801561269e57508067ffffffffffffffff168d60c0015163ffffffff16105b156127ae578c60c0015163ffffffff16600814806126c657508c60c0015163ffffffff166009145b156126fe576126f08d8e60c0015163ffffffff166008146126e757876126ea565b60005b8b613599565b5050505050505050506127f8565b8c60c0015163ffffffff16600a0361272f578c5160208e01516126f09190888c67ffffffffffffffff8d161561343b565b8c60c0015163ffffffff16600b03612761578c5160208e01516126f09190888c67ffffffffffffffff8d16151561343b565b60108d60c0015163ffffffff161015801561278f57508067ffffffffffffffff168d60c0015163ffffffff16105b156127ae576126f08d600001518e602001518f60c001518c8c8b614570565b67ffffffffffffffff858116146127d8576127ce858e606001518461312e565b9b5060019a508499505b6127ee8d600001518e602001518885600161343b565b5050505050505050505b9193909250565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526128806150da565b50608090506102606000612895610a4a6128f4565b9050826101600151156128af576101a08301819052505050565b6101808301819052505050565b60a082015167fffffffffffffff81667ffffffffffffffff8216036107b15760006080830181905260a0830181905260c08301525050565b61028e353661290661012a6020615312565b6129189063ffffffff1661016461529c565b811015610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d49505336343a20696e73756666696369656e742063616c6c6461746120666f60448201527f7220746872656164207769746e6573730000000000000000000000000000000060648201526084016103cc565b6000806129b383614b4a565b60408051602081018790529081018290529091506060016040516020818303038152906040528051906020012091505092915050565b6000806129f7858585614bd3565b909250905080612a33576040517f8e77b2b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600080600080612a4b8887614cab565b925092509250828267ffffffffffffffff168867ffffffffffffffff16901c1693508415612a8057612a7d848261351f565b93505b505050949350505050565b6040810151608082015160a083015160c08401515b9193509193565b6000808284610fff811615612ac157610fff811661100003015b8667ffffffffffffffff16600003612b4b57849350908101906560000000000067ffffffffffffffff83161180612b0b57508467ffffffffffffffff168267ffffffffffffffff16105b80612b2957508567ffffffffffffffff168167ffffffffffffffff16105b15612b4657506016925067ffffffffffffffff9150839050610dc7565b612b4f565b8693505b5093509350939050565b81610160015115612b7e57612b73826101a00151826129a7565b6101a0830152610b60565b612b8d826101800151826129a7565b61018083015250600061014090910152565b600080600080612bae85614d2f565b918b5267ffffffffffffffff90921660408b0152929650909450925090508115612bdc57612bdc86826128bc565b50509250929050565b6060810151608082015182516000928392909167ffffffffffffffff1660011480612c1b5750845167ffffffffffffffff166002145b80612c315750845167ffffffffffffffff166004145b15612c425784604001519350612aa0565b845167ffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa01612d1c576000612c978660c0015167fffffffffffffff88860200151168860a001516129e9565b60608701516020880151604089015192935090916007821660080381811015612cbe578091505b67ffffffffffffffff821660408b018190529850600880830294851b600190951b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192909103029390931c9290921617925060009150612aa09050565b845167ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01612d6257600b935067ffffffffffffffff9250612aa0565b60099567ffffffffffffffff95509193509150565b60008067ffffffffffffffff8316600103612e375767ffffffffffffffff84161580612dad575067ffffffffffffffff84166001145b80612dc2575067ffffffffffffffff84166002145b80612dd7575067ffffffffffffffff84166005145b80612dec575067ffffffffffffffff84166003145b80612e01575067ffffffffffffffff84166006145b80612e16575067ffffffffffffffff84166004145b15612e245760009150612ef7565b506009905067ffffffffffffffff612ef7565b8267ffffffffffffffff16600303612ee85767ffffffffffffffff84161580612e6a575067ffffffffffffffff84166005145b80612e7f575067ffffffffffffffff84166003145b15612e8d5760009150612ef7565b67ffffffffffffffff841660011480612eb0575067ffffffffffffffff84166002145b80612ec5575067ffffffffffffffff84166006145b80612eda575067ffffffffffffffff84166004145b15612e245760019150612ef7565b506016905067ffffffffffffffff5b9250929050565b600080826101600151612f1657826101a00151612f1d565b8261018001515b905060007fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5612f4a6128f4565b1490507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb582148015612f795750805b949350505050565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290525060806000612f7982856004846133a1565b6000808080613098856040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b60e08087015167ffffffffffffffff80871660408301528086169190920152602082018051808316845260040190911690529050805167ffffffffffffffff9081166060808801919091526020830151821660808801526040830151821660a08801528201511660c086015261310e8686610b6c565b506131176107f9565b9695505050505050565b600061013a848484614bd3565b60006131398361500d565b600784161561316d576040517fe6c4247b000000000000000000000000000000000000000000000000000000008152600481fd5b6020830192601f851660180360031b83811b913567ffffffffffffffff90911b191617600585901c603b60005b818110156131f15760208701963583821c60011680156131c157600181146131d6576131e7565b600086815260208390526040902095506131e7565b600082815260208790526040902095505b505060010161319a565b50919695505050505050565b6000808067fffffffffffffff885168161323061321e61012a61016461529c565b61322990602061529c565b6107800190565b90506000613243896000015184846129e9565b905060006132b38a610120015160008082679e3779b97f4a7c15019050601e8167ffffffffffffffff16901c811867bf58476d1ce4e5b9029050601b8167ffffffffffffffff16901c81186794d049bb133111eb029050601f8167ffffffffffffffff16901c8118915050919050565b905060006132c1858b61533a565b905060006132d082600861533a565b90508967ffffffffffffffff80821690831610156132eb5750805b600060016132fa836008615363565b67ffffffffffffffff166001901b6133129190615393565b905061331f82600861533a565b61332a906008615363565b67ffffffffffffffff91821691161b613344846008615363565b67ffffffffffffffff91821691161c801986168582161761336689898361312e565b99506133728f8a6128bc565b50909d60009d50979b50969950505050505050505050565b600061339b61ffff8316601061351f565b92915050565b600067fffffffffffffff88416816133c061321e61012a61016461529c565b905060006133d3886000015184846129e9565b9050612a7d87828888612a3b565b67fffffffffffffff8831660006133ff61321e61012a61016461529c565b90506000613412876000015184846129e9565b90506000613422878388886150a2565b905061342f84848361312e565b90975250505050505050565b60208367ffffffffffffffff16106134af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d49505336343a2076616c69642072656769737465720000000000000000000060448201526064016103cc565b67ffffffffffffffff8316158015906134c55750805b156134fc5781848467ffffffffffffffff16602081106134e7576134e76152b4565b67ffffffffffffffff90921660209290920201525b5050505060208101805167ffffffffffffffff8082169093526004019091169052565b6000600167ffffffffffffffff8481167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85810183169190911c83161515926040869003831681901b820192861692831b921b018261357f576000613581565b815b90861667ffffffffffffffff16179250505092915050565b8251805160209091015167ffffffffffffffff9081166004909201161461361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d49505336343a206a756d7020696e2064656c617920736c6f7400000000000060448201526064016103cc565b8251805160208083015167ffffffffffffffff908116909352855184841691015290831615610adb578060080184602001518467ffffffffffffffff1660208110613669576136696152b4565b67ffffffffffffffff909216602092909202015250505050565b6000866000015160040167ffffffffffffffff16876020015167ffffffffffffffff161461370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d49505336343a206272616e636820696e2064656c617920736c6f740000000060448201526064016103cc565b8463ffffffff166004148061372857508463ffffffff166005145b156137b3576000868467ffffffffffffffff166020811061374b5761374b6152b4565b602002015190508067ffffffffffffffff168367ffffffffffffffff1614801561377b57508563ffffffff166004145b806137ab57508067ffffffffffffffff168367ffffffffffffffff16141580156137ab57508563ffffffff166005145b91505061388d565b8463ffffffff166006036137d05760008260070b1315905061388d565b8463ffffffff166007036137ec5760008260070b13905061388d565b8463ffffffff1660010361388d57601f601085901c1660008190036138155760008360070b1291505b8063ffffffff1660100361384357875160080167ffffffffffffffff166103e08801526000600784900b1291505b8063ffffffff1660010361385c5760008360070b121591505b8063ffffffff1660110361388b57875160080167ffffffffffffffff166103e08801526000600784900b121591505b505b8651602088015167ffffffffffffffff16885281156138d65760026138b761ffff8716601061351f565b67ffffffffffffffff90811690911b82016004011660208901526138ec565b60208801805160040167ffffffffffffffff1690525b5050505050505050565b8051602082015160408301516060840151608085015160a0860151600095949392919063ffffffff85161580613944575060088563ffffffff16101580156139445750600f8563ffffffff16105b8061395557508463ffffffff166018145b8061396657508463ffffffff166019145b1561409a5784600881146139b957600981146139c257600a81146139cb57600b81146139d457600c81146139dd57600d81146139e657600e81146139ef57601881146139f85760198114613a0157613a06565b60209450613a06565b60219450613a06565b602a9450613a06565b602b9450613a06565b60249450613a06565b60259450613a06565b60269450613a06565b602c9450613a06565b602d94505b508363ffffffff16600003613a4757601f600687901c16613a3a67ffffffffffffffff8416821b63ffffffff16602061351f565b9998505050505050505050565b8363ffffffff16600203613a7b57613a6f63ffffffff8316601f600689901c161c602061351f565b98975050505050505050565b8363ffffffff16600303613aaa57601f600687901c16613a3a63ffffffff848116831c9060208490031661351f565b8363ffffffff16600403613ad957601f8316613a3a67ffffffffffffffff8416821b63ffffffff16602061351f565b8363ffffffff16600603613afd57613a6f63ffffffff8316601f85161c602061351f565b8363ffffffff16600703613b2557601f8316613a3a63ffffffff8416821c602083900361351f565b8363ffffffff16600803613b3f5750909695505050505050565b8363ffffffff16600903613b595750909695505050505050565b8363ffffffff16600a03613b735750909695505050505050565b8363ffffffff16600b03613b8d5750909695505050505050565b8363ffffffff16600c03613ba75750909695505050505050565b8363ffffffff16600f03613bc15750909695505050505050565b8363ffffffff16601003613bdb5750909695505050505050565b8363ffffffff16601103613bf55750909695505050505050565b8363ffffffff16601203613c0f5750909695505050505050565b8363ffffffff16601303613c295750909695505050505050565b8363ffffffff16601403613c4257509695505050505050565b8363ffffffff16601603613c5b57509695505050505050565b8363ffffffff16601703613c7457509695505050505050565b8363ffffffff16601803613c8e5750909695505050505050565b8363ffffffff16601903613ca85750909695505050505050565b8363ffffffff16601a03613cc25750909695505050505050565b8363ffffffff16601b03613cdc5750909695505050505050565b8363ffffffff16601c03613cf65750909695505050505050565b8363ffffffff16601d03613d105750909695505050505050565b8363ffffffff16601e03613d2a5750909695505050505050565b8363ffffffff16601f03613d445750909695505050505050565b8363ffffffff16602003613d6557613a6f82840163ffffffff16602061351f565b8363ffffffff16602103613d8657613a6f82840163ffffffff16602061351f565b8363ffffffff16602203613da757613a6f82840363ffffffff16602061351f565b8363ffffffff16602303613dc857613a6f82840363ffffffff16602061351f565b8363ffffffff16602403613de157501695945050505050565b8363ffffffff16602503613dfa57501795945050505050565b8363ffffffff16602603613e1357501895945050505050565b8363ffffffff16602703613e2d5750171995945050505050565b8363ffffffff16602a03613e61578160070b8360070b12613e4f576000613e52565b60015b60ff1698975050505050505050565b8363ffffffff16602b03613e91578167ffffffffffffffff168367ffffffffffffffff1610613e4f576000613e52565b8363ffffffff16602c03613eaa57500195945050505050565b8363ffffffff16602d03613ec357500195945050505050565b8363ffffffff16602e03613edd5750900395945050505050565b8363ffffffff16602f03613ef75750900395945050505050565b8363ffffffff16603803613f26575067ffffffffffffffff1660069490941c601f169390931b95945050505050565b8363ffffffff16603a03613f55575067ffffffffffffffff1660069490941c601f169390931c95945050505050565b8363ffffffff16603b03613f7d575060070b60069490941c601f169390931d95945050505050565b8363ffffffff16603c03613fbc5760068663ffffffff16901c601f1660200163ffffffff168267ffffffffffffffff16901b9650505050505050919050565b8363ffffffff16603e03613ffb5760068663ffffffff16901c601f1660200163ffffffff168267ffffffffffffffff16901c9650505050505050919050565b8363ffffffff16603f036140335760068663ffffffff16901c601f1660200163ffffffff168260070b901d9650505050505050919050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4d49505336343a20696e76616c696420696e737472756374696f6e000000000060448201526064016103cc565b614033565b8463ffffffff16601c0361418f578363ffffffff166002036140c957613a6f82840263ffffffff16602061351f565b8363ffffffff16602014806140e457508363ffffffff166021145b15614133578363ffffffff166020036140fb579119915b60005b6380000000841615614121576801fffffffffffffffe600194851b1693016140fe565b63ffffffff1698975050505050505050565b8363ffffffff166024148061414e57508363ffffffff166025145b15614095578363ffffffff16602403614165579119915b60005b678000000000000000841615614121576801fffffffffffffffe600194851b169301614168565b8463ffffffff16600f036141b657613a6f60108367ffffffffffffffff16901b602061351f565b8463ffffffff166020036141d157613a6f8382600180612a3b565b8463ffffffff166021036141ed57613a6f838260026001612a3b565b8463ffffffff1660220361423e57600061420b848360046000612a3b565b905063ffffffff80821660086003871602821690811b919081901b8116906115089082198716811690841617602061351f565b8463ffffffff1660230361425a57613a6f838260046001612a3b565b8463ffffffff1660240361427657613a6f838260016000612a3b565b8463ffffffff1660250361429257613a6f838260026000612a3b565b8463ffffffff1660260361430f5760006142b0848360046000612a3b565b905063ffffffff80821660038681166008810260180367ffffffffffffffff1692831c939283901c928319881685171691036142f15761113e81602061351f565b67ffffffff00000000959095169094179a9950505050505050505050565b8463ffffffff1660280361432a57613a6f83826001856150a2565b8463ffffffff1660290361434557613a6f83826002856150a2565b8463ffffffff16602a036143985763ffffffff601860039490941b93841681811c67ffffffffffffffff9081166020968716909603811695861b199390931693909116901c1690911b1795945050505050565b8463ffffffff16602b036143b357613a6f83826004856150a2565b8463ffffffff16602e036144135760006143d1848360046000612a3b565b905067ffffffffffffffff838116600860038716026018039182161b9063ffffffff90811681901b8116908119841681169083161761113e87866004846150a2565b8463ffffffff16601a036144475767ffffffffffffffff90811660039390931b60381692831b921b19161795945050505050565b8463ffffffff16601b0361448a5767ffffffffffffffff90811660039390931b60389081169081900382169390931c60089390930181161b161795945050505050565b8463ffffffff166027036144c65767ffffffffffffffff908116602060039490941b8416909303169190911c63ffffffff169695505050505050565b8463ffffffff16602c036144ff5767ffffffffffffffff91821660039390931b60381692831c9190921c19919091161795945050505050565b8463ffffffff16602d0361453e5767ffffffffffffffff603860039490941b8416909303831683811b19919091169190921690911b1795945050505050565b8463ffffffff1660370361455757979650505050505050565b8463ffffffff16603f0361403357509695505050505050565b60008463ffffffff1660100361458b57506060860151614ae2565b8463ffffffff166011036145ae5767ffffffffffffffff84166060880152614ae2565b8463ffffffff166012036145c757506040860151614ae2565b8463ffffffff166013036145ea5767ffffffffffffffff84166040880152614ae2565b8463ffffffff166018036146535760008360030b8560030b02905061461e60208267ffffffffffffffff16901c602061351f565b67ffffffffffffffff16606089015261463e63ffffffff8216602061351f565b67ffffffffffffffff16604089015250614ae2565b8463ffffffff1660190361468d5760008363ffffffff168563ffffffff1602905061461e60208267ffffffffffffffff16901c602061351f565b8463ffffffff16601a0361477b578263ffffffff1660000361470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b6147318360030b8560030b81614723576147236152e3565b0763ffffffff16602061351f565b67ffffffffffffffff166060880152614767600384810b9086900b81614759576147596152e3565b0563ffffffff16602061351f565b67ffffffffffffffff166040880152614ae2565b8463ffffffff16601b0361485d578263ffffffff166000036147f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b6148258363ffffffff168563ffffffff1681614817576148176152e3565b0663ffffffff16602061351f565b67ffffffffffffffff16606088015261476763ffffffff8085169086168161484f5761484f6152e3565b0463ffffffff16602061351f565b8463ffffffff16601403614881575067ffffffffffffffff8216603f84161b614ae2565b8463ffffffff166016036148a5575067ffffffffffffffff8216603f84161c614ae2565b8463ffffffff166017036148c35750600782900b603f84161d614ae2565b8463ffffffff16601c036149005767ffffffffffffffff600785810b9085900b02600f81900b604090811d831660608b0152911690880152614ae2565b8463ffffffff16601d036149355767ffffffffffffffff84811681851602604081811c831660608b0152911690880152614ae2565b8463ffffffff16601e03614a07578267ffffffffffffffff166000036149b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b8260070b8460070b816149cc576149cc6152e3565b0767ffffffffffffffff166060880152600783810b9085900b816149f2576149f26152e3565b0567ffffffffffffffff166040880152614ae2565b8463ffffffff16601f03614ae2578267ffffffffffffffff16600003614a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b8267ffffffffffffffff168467ffffffffffffffff1681614aac57614aac6152e3565b0667ffffffffffffffff908116606089015283811690851681614ad157614ad16152e3565b0467ffffffffffffffff1660408801525b67ffffffffffffffff821615614b245780868367ffffffffffffffff1660208110614b0f57614b0f6152b4565b67ffffffffffffffff90921660209290920201525b50505060208401805167ffffffffffffffff808216909652600401909416909352505050565b60405160188201518152603f8201516008820152605f82015160098201526078820151600a8201526098820151601282015260b8820151601a82015260d8820151602282015260e0820151600091602a8101835b6020811015614bc25760188401518252602090930192600890910190600101614b9e565b506000815281900390209392505050565b600080614bdf8361500d565b6007841615614c13576040517fe6c4247b000000000000000000000000000000000000000000000000000000008152600481fd5b602083019235600585901c81603b60005b81811015614c7b5760208801973584821c6001168015614c4b5760018114614c6057614c71565b60008581526020839052604090209450614c71565b600082815260208690526040902094505b5050600101614c24565b505087149250508115614ca257601f851660180360031b81901c67ffffffffffffffff1692505b50935093915050565b600080806807fffffffffffffff8600385901b1681614ccb82604061533a565b67ffffffffffffffff9081161c90506000614ce760018861533a565b19881660071690506000614cfc88600861533a565b905088821660006003614d0f838561533a565b959c67ffffffffffffffff909616901b9a50949850929650505050505050565b610100810151608082015182516000928392918390819067ffffffffffffffff161561500457865167ffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb01614f7057600067fffffffffffffff888602001511690506000614db0896101000151838b60e001516129e9565b60608a015190915060001a600103614e3257614e2c89606001518a60a0015160408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b60608a01525b6000808a60c0015173ffffffffffffffffffffffffffffffffffffffff1663e03110e18c606001518d608001516040518363ffffffff1660e01b8152600401614e8f92919091825267ffffffffffffffff16602082015260400190565b6040805180830381865afa158015614eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ecf91906153aa565b60208d015160408e01519294509092509060078216600881900384811015614ef5578094505b5083821015614f02578193505b8460088502610100031c9450846008828660080303021b9450600180600883600803021b036001806008878560080303021b03915081198116905085811988161796505050614f56868e60e001518761312e565b929b50505096890196955060019450919250615004915050565b865167ffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01614fae5786604001519550615004565b865167ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01614ff457600b955067ffffffffffffffff9450615004565b6009955067ffffffffffffffff94505b91939550919395565b3661078082018110156107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4d49505336344d656d6f72793a20636865636b2074686174207468657265206960448201527f7320656e6f7567682063616c6c6461746100000000000000000000000000000060648201526084016103cc565b60008060006150b18786614cab565b5067ffffffffffffffff868316811691811691821b9216901b1987161792505050949350505050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260e08101615120615125565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b8181101561517157858101830151858201604001528201615155565b81811115615183576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f8401126151c957600080fd5b50813567ffffffffffffffff8111156151e157600080fd5b602083019150836020828501011115612ef757600080fd5b60008060008060006060868803121561521157600080fd5b853567ffffffffffffffff8082111561522957600080fd5b61523589838a016151b7565b9097509550602088013591508082111561524e57600080fd5b5061525b888289016151b7565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156152af576152af61526d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600063ffffffff8083168185168083038211156153315761533161526d565b01949350505050565b600067ffffffffffffffff8381169083168181101561535b5761535b61526d565b039392505050565b600067ffffffffffffffff8083168185168183048111821515161561538a5761538a61526d565b02949350505050565b6000828210156153a5576153a561526d565b500390565b600080604083850312156153bd57600080fd5b50508051602090910151909290915056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0x976ea74026e726554db657fa54763abd0c3a0aa9": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0x998abeb3e57409262ae5b751f60747921b33613e": { + "balance": "0x0", + "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906" + } + }, + "0x9ede005fcc899c226098654926398a9e0b3345df": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c806378ecabce1161005057806378ecabce1461022a578063b51f9c2b1461024d578063debc60071461032d57600080fd5b80631d8a4e921461006c57806330e9012c146100a6575b600080fd5b6100937f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61021d6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081019190915250604080516102408101825260055473ffffffffffffffffffffffffffffffffffffffff9081168252600654811660208301526007548116928201929092526008548216606082015260095482166080820152600a54821660a0820152600b54821660c0820152600c54821660e0820152600d548216610100820152600e548216610120820152600f5482166101408201526010548216610160820152601154821661018082015260125482166101a082015260135482166101c082015260145482166101e0820152601554821661020082015260165490911661022082015290565b60405161009d9190610385565b61023d61023836600461055d565b61033a565b604051901515815260200161009d565b6102d16040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260005473ffffffffffffffffffffffffffffffffffffffff90811682526001548116602083015260025481169282019290925260035482166060820152600454909116608082015290565b60405161009d9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b63beefcafe3b151561023d565b60006103667f00000000000000000000000000000000000000000000000000000000000000008361036c565b92915050565b6000811580159061037e575081828416145b9392505050565b815173ffffffffffffffffffffffffffffffffffffffff168152610240810160208301516103cb602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516103f3604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015161041b606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151610443608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015161046b60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161049360c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e08301516104bb60e084018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff90811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102209384015116929091019190915290565b60006020828403121561056f57600080fd5b503591905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000765c6637a370595845f637739279c353484a26a6", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000a643ea8ee60d92f615ec70af0248c449bbcecf4d", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000001da922d1972e12b3b224cc4d3afbefe4efb4b245", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000a5d36deaf2267b267278a4a1458defe0d65620eb", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000007096758bdd076a4cc42255c278f2cb216d6d8ce3", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000b08cc720f511062537ca78bdb0ae691f04f5a957", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000001f734b89bb1b422b9910118fb8d44c06e33d4dda", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x00000000000000000000000074f1ac50eb0be98853805d381c884f5f9abdecf9", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000cdb7a450076dc6c607b60c6956bace4cca77c12f", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000a63f352da318a6f0767a703da6b91ea8e9177f02", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000784d2f03593a42a6e4676a012762f18775ecbbe6", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x00000000000000000000000083a2df4b23236dccc59a67d289cd5163190213ea", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x000000000000000000000000149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x000000000000000000000000b686f13aff1e427a1f993f29ab0f2e7383729fe0", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x00000000000000000000000061525eaacddb97d9184afc205827e6a4fd0bf62a", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000006d46535c721a7721e5975790aa97f793a438ed4c", + "0x0000000000000000000000000000000000000000000000000000000000000010": "0x00000000000000000000000089dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61", + "0x0000000000000000000000000000000000000000000000000000000000000011": "0x00000000000000000000000033dadc2d1aa9bb613a7ae6b28425ea00d44c6998", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0x000000000000000000000000969e7a548b4e1ea6f44b101535318a7d1a469f8a", + "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000006b35cca790320593ad27960764db1d53a099eebc", + "0x0000000000000000000000000000000000000000000000000000000000000014": "0x0000000000000000000000007b57e3025d0c33ac2c0cc44ac915650895a619d3", + "0x0000000000000000000000000000000000000000000000000000000000000015": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000016": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { + "balance": "0x21e19e0c9bab2400000", + "code": "0x", + "nonce": 0, + "storage": {} + }, + "0xa5d36deaf2267b267278a4a1458defe0d65620eb": { + "balance": "0x0", + "code": "0xfe7100608060405234801561001057600080fd5b50604051610a44380380610a4483398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109a88061009c6000396000f3fe60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0xa63f352da318a6f0767a703da6b91ea8e9177f02": { + "balance": "0x0", + "code": "0x6080604052600436106102385760003560e01c80638c3152e911610138578063bb2c727e116100b0578063cff0ab961161007f578063dad544e011610064578063dad544e01461082a578063e9e05c421461083f578063f2b4e6171461085257600080fd5b8063cff0ab9614610757578063d325d3bf146107f857600080fd5b8063bb2c727e14610648578063bda204bb146106ef578063bf653a5c14610704578063c0c53b8b1461073757600080fd5b80639bf62d8211610107578063a35d99df116100ec578063a35d99df146105db578063a3860f48146105fb578063b682c4441461061b57600080fd5b80639bf62d821461057e578063a14238e7146105ab57600080fd5b80638c3152e9146105095780638c90dd6514610529578063952b27971461054957806399a88ec41461055e57600080fd5b806345884d32116101cb57806354fd4d501161019a5780635c975abb1161017f5780635c975abb146104d457806371c1566e146104e95780638b4c40b01461025d57600080fd5b806354fd4d501461045b5780635c0cba33146104a757600080fd5b806345884d32146103a25780634870496f146103d25780634fd0434c146103f2578063513747ab1461042057600080fd5b80633c9f397c116102075780633c9f397c1461032e5780633e47158c1461035857806343ca1c501461036d578063452a93201461038d57600080fd5b80632152f2be1461026457806333d7e2bd1461028457806335e80ab3146102db57806338d38c97146102f057600080fd5b3661025f5761025d3334620186a0600060405180602001604052806000815250610867565b005b600080fd5b34801561027057600080fd5b5061025d61027f366004614f47565b610ab3565b34801561029057600080fd5b506037546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102e757600080fd5b506102b1610bf9565b3480156102fc57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000041681526020016102d2565b34801561033a57600080fd5b50610343610c92565b60405163ffffffff90911681526020016102d2565b34801561036457600080fd5b506102b1610d26565b34801561037957600080fd5b5061025d610388366004615187565b610f31565b34801561039957600080fd5b506102b1611272565b3480156103ae57600080fd5b506103c26103bd3660046151ce565b6112e2565b60405190151581526020016102d2565b3480156103de57600080fd5b5061025d6103ed36600461524f565b61137d565b3480156103fe57600080fd5b506104076114ad565b60405167ffffffffffffffff90911681526020016102d2565b34801561042c57600080fd5b5061044d61043b3660046152d5565b6000908152603c602052604090205490565b6040519081526020016102d2565b34801561046757600080fd5b50604080518082018252600d81527f352e322e302b696e7465726f7000000000000000000000000000000000000000602082015290516102d29190615364565b3480156104b357600080fd5b50603e546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e057600080fd5b506103c2611541565b3480156104f557600080fd5b5061025d610504366004615377565b6115d5565b34801561051557600080fd5b5061025d61052436600461539c565b6118d9565b34801561053557600080fd5b5061025d6105443660046153d9565b6118e6565b34801561055557600080fd5b5061044d61196a565b34801561056a57600080fd5b5061025d610579366004614f47565b6119fe565b34801561058a57600080fd5b506032546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105b757600080fd5b506103c26105c63660046152d5565b60336020526000908152604090205460ff1681565b3480156105e757600080fd5b506104076105f63660046154b9565b611bc0565b34801561060757600080fd5b506102b16106163660046154d6565b611bd9565b34801561062757600080fd5b50603f546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b34801561065457600080fd5b506106ba610663366004615377565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff9091166020830152016102d2565b3480156106fb57600080fd5b5061025d611c1e565b34801561071057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000c61044d565b34801561074357600080fd5b5061025d6107523660046154f8565b611d00565b34801561076357600080fd5b506001546107bf906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016102d2565b34801561080457600080fd5b50603f546103c29074010000000000000000000000000000000000000000900460ff1681565b34801561083657600080fd5b506102b1611efd565b61025d61084d366004615551565b610867565b34801561085e57600080fd5b506102b1611f51565b8260005a905034156108f757603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ee116bf346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b50505050505b838015610919575073ffffffffffffffffffffffffffffffffffffffff871615155b15610950576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61095a8351611bc0565b67ffffffffffffffff168567ffffffffffffffff1610156109a7576040517f70c8bdbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156109e5576040517f5aa3bac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336109ee611fc1565b610a0b575033731111000000000000000000000000000000001111015b60003488888888604051602001610a269594939291906155d0565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610a969190615364565b60405180910390a45050610aaa8282611fff565b50505050505050565b610abb6122d6565b610ac3612315565b603e5473ffffffffffffffffffffffffffffffffffffffff808316911603610b17576040517f785df91100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603f8054603e805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093557fffffffffffffffffffffff0000000000000000000000000000000000000000008416878216908117740100000000000000000000000000000000000000001790955560408051948216808652602086019690965291169083018190526060830191909152907f9e5368471a58d81987e5dc7d6374dd5ed5e756cc95a79ff726903423bce0060d906080015b60405180910390a150505050565b603754604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190615635565b905090565b603e54604080517f3c9f397c000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633c9f397c9160048083019260209291908290030181865afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190615664565b600080610d517fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610d7457919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610db791906156b0565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610e12906060015b604051602081830303815290604052805190602001205490565b14610e49576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610e6b90606001610df8565b905073ffffffffffffffffffffffffffffffffffffffff811615610eff578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190615635565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f396122d6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f8c576040517fdfeaaeb800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f99826040015161236b565b15610fd0576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fdb836123ae565b9050610fe781836115d5565b600081815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556060830151156110b857603f5460608401516040517f8d445bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691638d445bd0916110859160040190815260200190565b600060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050505b8260200151603260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061111b8460400151856080015186606001518760a001516123fb565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061118090841515815260200190565b60405180910390a28015801561119a575060008460600151115b1561122757603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ee116bf85606001516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561120d57600080fd5b505af1158015611221573d6000803e3d6000fd5b50505050505b801580156112355750326001145b1561126c576040517fab58103600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b603754604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015610c69573d6000803e3d6000fd5b603e546040517f45884d3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009216906345884d3290602401602060405180830381865afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137791906156ed565b92915050565b6113856122d6565b603f5474010000000000000000000000000000000000000000900460ff16156113da576040517f5e74b54200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113e4611f51565b73ffffffffffffffffffffffffffffffffffffffff1663bb8aa1fc866040518263ffffffff1660e01b815260040161141e91815260200190565b606060405180830381865afa15801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f919061570a565b6040805160608082018352600080835260208301529181019190915290935091506114879050565b610aaa878360008461149e368b90038b018b61574c565b6114a8898b6157d6565b612459565b603e54604080517f4086d183000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634086d1839160048083019260209291908290030181865afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d919061584f565b603754604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d91906156ed565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152868552603390935292205490919060ff1615611684576040517f730a107400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816020015167ffffffffffffffff166000036116cc576040517fcca6afda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174b8173ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e919061584f565b67ffffffffffffffff1690565b67ffffffffffffffff16826020015167ffffffffffffffff161161179b576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000c826020015167ffffffffffffffff16426117d6919061586c565b1161180d576040517fd9bc01be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f6c4f446700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690636c4f446790602401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a191906156ed565b61126c576040517f332a57f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118e38133610f31565b50565b6118ee6122d6565b603f5474010000000000000000000000000000000000000000900460ff16611942576040517f5e74b54200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aaa87878761195188615883565b6119603689900389018961574c565b6114a887896157d6565b603e54604080517f952b2797000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163952b27979160048083019260209291908290030181865afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d919061598d565b7f0000000000000000000000000000000000000000000000000000000000000004600054610100900460ff16158015611a3e575060005460ff8083169116105b611acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611b08612cb4565b603e805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603f805492851692909116919091179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6000611bcd8260286159a6565b611377906152086159d6565b603c6020528160005260406000208181548110611bf557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b611c26612315565b603f54604080517f1ee116bf0000000000000000000000000000000000000000000000000000000081529051479273ffffffffffffffffffffffffffffffffffffffff1691631ee116bf91849160048082019260009290919082900301818588803b158015611c9457600080fd5b505af1158015611ca8573d6000803e3d6000fd5b5050603f5460405185815273ffffffffffffffffffffffffffffffffffffffff90911693507fd893f630c6867fa43689da9ae949ebf04cac24aad3b45c759d442ed3c32e3a379250602001905060405180910390a250565b7f0000000000000000000000000000000000000000000000000000000000000004600054610100900460ff16158015611d40575060005460ff8083169116105b611dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401611ac6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e05612cb4565b6037805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603e8054868416908316179055603f8054858416921691909117905560325416611e9a57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611ea2612d35565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610beb565b6000611f07610d26565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c69573d6000803e3d6000fd5b603e54604080517ff2b4e617000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f2b4e6179160048083019260209291908290030181865afa158015610c69573d6000803e3d6000fd5b6000323303611fd05750600190565b333b601703611ff857604051602081016040526020600082333c5160e81c62ef010014905090565b5060005b90565b600154600090612035907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361586c565b90506000612041612e48565b90506000816020015160ff16826000015163ffffffff166120629190615a31565b9050821561219957600154600090612099908390700100000000000000000000000000000000900467ffffffffffffffff16615a99565b90506000836040015160ff16836120b09190615b0d565b6001546120d09084906fffffffffffffffffffffffffffffffff16615b0d565b6120da9190615a31565b60015490915060009061212b906121049084906fffffffffffffffffffffffffffffffff16615bc9565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612f0e565b9050600186111561215a5761215761210482876040015160ff1660018a612152919061586c565b612f2d565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906121cc908490700100000000000000000000000000000000900467ffffffffffffffff166159d6565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612259576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612285906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166156b0565b9050600061229748633b9aca00612f82565b6122a19083615c3d565b905060005a6122b0908861586c565b9050808211156122cc576122cc6122c7828461586c565b612f99565b5050505050505050565b6122de611541565b156118d7576040517fb9c3c2ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361231e611efd565b73ffffffffffffffffffffffffffffffffffffffff16146118d7576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff8216301480611377575050603f5473ffffffffffffffffffffffffffffffffffffffff90811691161490565b80516020808301516040808501516060860151608087015160a088015193516000976123de979096959101615c51565b604051602081830303815290604052805190602001209050919050565b600080600061240b866000612fc7565b905080612441576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b612466866040015161236b565b1561249d576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f496b9c1600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529091169063496b9c1690602401602060405180830381865afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906156ed565b612567576040517ff395240e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f04e50fed00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906304e50fed90602401602060405180830381865afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb91906156ed565b612631576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a29190615cd7565b60028111156126b3576126b3615ca8565b036126ea576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127388573ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171a573d6000803e3d6000fd5b67ffffffffffffffff16421161277a576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603f5474010000000000000000000000000000000000000000900460ff16156129c4576127a683612fe5565b6128188673ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffc919061598d565b1461284f576040517f2b1a9a6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826040015151841061288d576040517f32dc285c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000836040015185815181106128a5576128a5615cf8565b60200260200101519050603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d6ae3cd56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561291c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612940919061598d565b815114612979576040517f7cc2f31b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61298283612ffe565b8160200151146129be576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50612a52565b6129cd82612ffe565b612a1b8673ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b14612a52576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612a5d876123ae565b90506000816000604051602001612a7e929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250612b299101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282018252600183527f0100000000000000000000000000000000000000000000000000000000000000602084015290870151909190869061303d565b1515600003612b64576040517f2e57ef3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808a16825267ffffffffffffffff42811660208085019182526000888152603982528681203380835290835287822096518754945190951674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009094169486169490941792909217909455868152603c845284812080546001810182559082528482200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091558b840151928c01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a35050505050505050565b33612cbd610d26565b73ffffffffffffffffffffffffffffffffffffffff1614158015612cfe575033612ce5611efd565b73ffffffffffffffffffffffffffffffffffffffff1614155b156118d7576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16612dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401611ac6565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036118d75760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603754604080517fcc731b02000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cc731b029160048083019260c09291908290030181865afa158015612eea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113779190615d3d565b6000612f23612f1d8585613061565b83613071565b90505b9392505050565b6000670de0b6b3a7640000612f6e612f458583615a31565b612f5790670de0b6b3a7640000615a99565b612f6985670de0b6b3a7640000615b0d565b613080565b612f789086615b0d565b612f239190615a31565b600081831015612f925781612f26565b5090919050565b6000805a90505b825a612fac908361586c565b1015612fc257612fbb82615df9565b9150612fa0565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000612ff0826130b1565b805190602001209050919050565b600081600001518260200151836040015184606001516040516020016123de949392919093845260208401929092526040830152606082015260800190565b60008061304986613267565b905061305781868686613299565b9695505050505050565b600081831215612f925781612f26565b6000818312612f925781612f26565b6000612f26670de0b6b3a764000083613098866132c9565b6130a29190615b0d565b6130ac9190615a31565b61350d565b80516060907fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000014613130576040517fc06b523800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81604001515160000361316f576040517f9103e7cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000151836020015160c01b6040516020016131de9291907fff000000000000000000000000000000000000000000000000000000000000009290921682527fffffffffffffffff00000000000000000000000000000000000000000000000016600182015260090190565b604051602081830303815290604052905060005b8360400151518110156132605760008460400151828151811061321757613217615cf8565b60209081029190910181015180518183015160405192945061323b93879301615e31565b604051602081830303815290604052925050808061325890615df9565b9150506131f2565b5092915050565b6060818051906020012060405160200161328391815260200190565b6040516020818303038152906040529050919050565b60006132c0846132aa87868661374c565b8051602091820120825192909101919091201490565b95945050505050565b6000808213613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611ac6565b60006060613341846141ca565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361353e57506000919050565b680755bf798b4a1bf1e582126135b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401611ac6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606060008451116137b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401611ac6565b60006137c4846142a0565b905060006137d18661438c565b90506000846040516020016137e891815260200190565b60405160208183030381529060405290506000805b845181101561414157600085828151811061381a5761381a615cf8565b6020026020010151905084518311156138b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401611ac6565b8260000361396e5780518051602091820120604051613903926138dd92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401611ac6565b613ac5565b805151602011613a245780518051602091820120604051613998926138dd92910190815260200190565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401611ac6565b805184516020808701919091208251919092012014613ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401611ac6565b613ad160106001615e58565b81602001515103613cad5784518303613c4557613b0b8160200151601081518110613afe57613afe615cf8565b60200260200101516143ef565b96506000875111613b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401611ac6565b60018651613bac919061586c565b8214613c3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401611ac6565b505050505050612f26565b6000858481518110613c5957613c59615cf8565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110613c8457613c84615cf8565b60200260200101519050613c97816144a3565b9550613ca4600186615e58565b9450505061412e565b6002816020015151036140a6576000613cc5826144c8565b9050600081600081518110613cdc57613cdc615cf8565b016020015160f81c90506000613cf3600283615e70565b613cfe906002615e92565b90506000613d0f848360ff166144ec565b90506000613d1d8a896144ec565b90506000613d2b8383614522565b905080835114613dbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401611ac6565b60ff851660021480613dd2575060ff85166003145b15613fc15780825114613e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401611ac6565b613e818760200151600181518110613afe57613afe615cf8565b9c5060008d5111613f14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401611ac6565b60018c51613f22919061586c565b8814613fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401611ac6565b505050505050505050505050612f26565b60ff85161580613fd4575060ff85166001145b15614013576140008760200151600181518110613ff357613ff3615cf8565b60200260200101516144a3565b995061400c818a615e58565b985061409b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401611ac6565b50505050505061412e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401611ac6565b508061413981615df9565b9150506137fd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401611ac6565b6000808211614235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611ac6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b80516060908067ffffffffffffffff8111156142be576142be614f80565b60405190808252806020026020018201604052801561430357816020015b60408051808201909152606080825260208201528152602001906001900390816142dc5790505b50915060005b8181101561438557604051806040016040528085838151811061432e5761432e615cf8565b6020026020010151815260200161435d86848151811061435057614350615cf8565b60200260200101516145cf565b81525083828151811061437257614372615cf8565b6020908102919091010152600101614309565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156143e4578060011b82018184015160001a8060041c8253600f8116600183015350506001016143b6565b509295945050505050565b606060008060006143ff856145e2565b91945092509050600081600181111561441a5761441a615ca8565b14614451576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61445b8284615e58565b855114614494576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132c085602001518484614a80565b606060208260000151106144bf576144ba826143ef565b611377565b61137782614b14565b60606113776144e78360200151600081518110613afe57613afe615cf8565b61438c565b60608251821061450b5750604080516020810190915260008152611377565b612f26838384865161451d919061586c565b614b2a565b6000808251845110614535578251614538565b83515b90505b80821080156145bf575082828151811061455757614557615cf8565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061459657614596615cf8565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156132605781600101915061453b565b60606113776145dd83614d02565b614d6f565b60008060008360000151600003614625576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f811161464a576000600160009450945094505050614a79565b60b7811161476057600061465f60808361586c565b90508087600001511161469e576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214801561471657507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b1561474d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614a79915050565b60bf81116148be57600061477560b78361586c565b9050808760000151116147b4576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614816576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c6037811161485e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148688184615e58565b8951116148a1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148ac836001615e58565b9750955060009450614a799350505050565b60f781116149235760006148d360c08361586c565b905080876000015111614912576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614a79915050565b600061493060f78361586c565b90508087600001511161496f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036149d1576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614a19576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a238184615e58565b895111614a5c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a67836001615e58565b9750955060019450614a799350505050565b9193909250565b60608167ffffffffffffffff811115614a9b57614a9b614f80565b6040519080825280601f01601f191660200182016040528015614ac5576020820181803683370190505b5090508115612f26576000614ada8486615e58565b90506020820160005b84811015614afb578281015182820152602001614ae3565b84811115614b0a576000858301525b5050509392505050565b6060611377826020015160008460000151614a80565b60608182601f011015614b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611ac6565b828284011015614c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611ac6565b81830184511015614c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401611ac6565b606082158015614c915760405191506000825260208201604052614cf9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614cca578051835260209283019201614cb2565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201528151600003614d51576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000614d7f856145e2565b919450925090506001816001811115614d9a57614d9a615ca8565b14614dd1576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451614ddd8385615e58565b14614e14576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614e2b5790505093506000835b8651811015614f1957600080614e9e6040518060400160405280858c60000151614e82919061586c565b8152602001858c60200151614e979190615e58565b90526145e2565b509150915060405180604001604052808383614eba9190615e58565b8152602001848b60200151614ecf9190615e58565b815250888581518110614ee457614ee4615cf8565b6020908102919091010152614efa600185615e58565b9350614f068183615e58565b614f109084615e58565b92505050614e58565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118e357600080fd5b60008060408385031215614f5a57600080fd5b8235614f6581614f25565b91506020830135614f7581614f25565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715614fd257614fd2614f80565b60405290565b6040805190810167ffffffffffffffff81118282101715614fd257614fd2614f80565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561504257615042614f80565b604052919050565b600082601f83011261505b57600080fd5b813567ffffffffffffffff81111561507557615075614f80565b6150a660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614ffb565b8181528460208386010111156150bb57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156150ea57600080fd5b60405160c0810167ffffffffffffffff828210818311171561510e5761510e614f80565b81604052829350843583526020850135915061512982614f25565b8160208401526040850135915061513f82614f25565b816040840152606085013560608401526080850135608084015260a085013591508082111561516d57600080fd5b5061517a8582860161504a565b60a0830152505092915050565b6000806040838503121561519a57600080fd5b823567ffffffffffffffff8111156151b157600080fd5b6151bd858286016150d8565b9250506020830135614f7581614f25565b6000602082840312156151e057600080fd5b8135612f2681614f25565b6000608082840312156151fd57600080fd5b50919050565b60008083601f84011261521557600080fd5b50813567ffffffffffffffff81111561522d57600080fd5b6020830191508360208260051b850101111561524857600080fd5b9250929050565b600080600080600060e0868803121561526757600080fd5b853567ffffffffffffffff8082111561527f57600080fd5b61528b89838a016150d8565b9650602088013595506152a18960408a016151eb565b945060c08801359150808211156152b757600080fd5b506152c488828901615203565b969995985093965092949392505050565b6000602082840312156152e757600080fd5b5035919050565b60005b838110156153095781810151838201526020016152f1565b8381111561126c5750506000910152565b600081518084526153328160208601602086016152ee565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612f26602083018461531a565b6000806040838503121561538a57600080fd5b823591506020830135614f7581614f25565b6000602082840312156153ae57600080fd5b813567ffffffffffffffff8111156153c557600080fd5b6153d1848285016150d8565b949350505050565b6000806000806000806000610120888a0312156153f557600080fd5b873567ffffffffffffffff8082111561540d57600080fd5b6154198b838c016150d8565b985060208a0135915061542b82614f25565b909650604089013595506060890135908082111561544857600080fd5b908901906060828c03121561545c57600080fd5b81955061546c8b60808c016151eb565b94506101008a013591508082111561548357600080fd5b506154908a828b01615203565b989b979a50959850939692959293505050565b67ffffffffffffffff811681146118e357600080fd5b6000602082840312156154cb57600080fd5b8135612f26816154a3565b600080604083850312156154e957600080fd5b50508035926020909101359150565b60008060006060848603121561550d57600080fd5b833561551881614f25565b9250602084013561552881614f25565b9150604084013561553881614f25565b809150509250925092565b80151581146118e357600080fd5b600080600080600060a0868803121561556957600080fd5b853561557481614f25565b945060208601359350604086013561558b816154a3565b9250606086013561559b81615543565b9150608086013567ffffffffffffffff8111156155b757600080fd5b6155c38882890161504a565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516156248160498501602087016152ee565b919091016049019695505050505050565b60006020828403121561564757600080fd5b8151612f2681614f25565b63ffffffff811681146118e357600080fd5b60006020828403121561567657600080fd5b8151612f2681615652565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156e8576156e8615681565b500290565b6000602082840312156156ff57600080fd5b8151612f2681615543565b60008060006060848603121561571f57600080fd5b835161572a81615652565b602085015190935061573b816154a3565b604085015190925061553881614f25565b60006080828403121561575e57600080fd5b6040516080810181811067ffffffffffffffff8211171561578157615781614f80565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8211156157cc576157cc614f80565b5060051b60200190565b60006157e96157e4846157b2565b614ffb565b80848252602080830192508560051b85013681111561580757600080fd5b855b8181101561584357803567ffffffffffffffff8111156158295760008081fd5b61583536828a0161504a565b865250938201938201615809565b50919695505050505050565b60006020828403121561586157600080fd5b8151612f26816154a3565b60008282101561587e5761587e615681565b500390565b60006060823603121561589557600080fd5b61589d614faf565b82357fff00000000000000000000000000000000000000000000000000000000000000811681146158cd57600080fd5b81526020838101356158de816154a3565b8282015260408481013567ffffffffffffffff8111156158fd57600080fd5b850136601f82011261590e57600080fd5b803561591c6157e4826157b2565b81815260069190911b8201840190848101903683111561593b57600080fd5b928501925b8284101561597b578484360312156159585760008081fd5b615960614fd8565b84358152868501358782015282529284019290850190615940565b93860193909352509295945050505050565b60006020828403121561599f57600080fd5b5051919050565b600067ffffffffffffffff808316818516818304811182151516156159cd576159cd615681565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159f9576159f9615681565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a4057615a40615a02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615a9457615a94615681565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ad357615ad3615681565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b0757615b07615681565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615b4e57615b4e615681565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615b8957615b89615681565b60008712925087820587128484161615615ba557615ba5615681565b87850587128184161615615bbb57615bbb615681565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c0357615c03615681565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615c3757615c37615681565b50500190565b600082615c4c57615c4c615a02565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615c9c60c083018461531a565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215615ce957600080fd5b815160038110612f2657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160ff81168114615d3857600080fd5b919050565b600060c08284031215615d4f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615d7257615d72614f80565b6040528251615d8081615652565b8152615d8e60208401615d27565b6020820152615d9f60408401615d27565b60408201526060830151615db281615652565b60608201526080830151615dc581615652565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615ded57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e2a57615e2a615681565b5060010190565b60008451615e438184602089016152ee565b91909101928352506020820152604001919050565b60008219821115615e6b57615e6b615681565b500190565b600060ff831680615e8357615e83615a02565b8060ff84160691505092915050565b600060ff821660ff841680821015615eac57615eac615681565b9003939250505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0xa643ea8ee60d92f615ec70af0248c449bbcecf4d": { + "balance": "0x0", + "code": "0xfe7100608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + "nonce": 1, + "storage": {} + }, + "0xaa548131045b79c335d4bb08385fef4ceba3bfe5": { + "balance": "0x0", + "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000003caaed2ed7cd3e53d4d7b5d4bac03bfeb8f972a2", + "0x007c1e774adbfeea461900fcd0d82d3e599675052953d1417bb171f848e27e39": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0ef99612c462bb495b4411d3674b1f698304ca7516aedc1683e20e892828d9c7": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x637613909751abc06cdd57c1b755762ec54ec119c20f53ab22b52123fd454ca9": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x7ed7fbb20709b7a8ffaca6862a739af245e396bcb918400653ae07d7e7a014fc": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xb3ec867699d4910cedc72be977fe173764d77960fc5658b61602a10640e67ac4": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb6b68c6a49af08c68434b9c8591d078d94046eeb9927fed40467a1f3675e51da": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0xb6f1374979fddd07a4d496dc3b0973244af6697958fc088175277086eb729144": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xce7ae6e6c9d294d7b47d106b26c6f0ffdde2c4058c3e2a90e5f780808e40b7d8": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", + "0xd56869593aeb3c45a72416daf1abecd7ce6514592905411127d7b6940e71fd80": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xdf00cf1600477e15a1bd9d50ebf993c1c5096fd6f6e80b599a4a4ded1e89ec3a": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xf0711ff4d9637ca95a1e07fb0de6df4f307d815093330e21d66f72c2d1cfa9fe": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0xb08cc720f511062537ca78bdb0ae691f04f5a957": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806354fd4d501161009757806382005715116100665780638200571514610297578063c4d66de8146102aa578063dad544e0146102bd578063f125af6b146102c557600080fd5b806354fd4d501461021e57806357b001f9146102675780635c975abb1461027c57806376a67a511461028457600080fd5b806332dfadd9116100d357806332dfadd91461016357806338d38c971461019a5780633e47158c146101cb578063452a9320146101f857600080fd5b806304dbe3fe146100fa5780630e3b6d1f146101205780632e48152c14610140575b600080fd5b61010d610108366004610af3565b6102ce565b6040519081526020015b60405180910390f35b61010d61012e366004610af3565b60016020526000908152604090205481565b61015361014e366004610af3565b610318565b6040519015158152602001610117565b610153610171366004610af3565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020541590565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000002168152602001610117565b6101d3610364565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610117565b6000546101d39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b61025a6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101179190610b7b565b61027a610275366004610af3565b61056f565b005b6101536105d7565b61027a610292366004610af3565b6105e8565b61027a6102a5366004610af3565b6106c3565b61027a6102b8366004610af3565b610741565b6101d36108b1565b62784ce061010d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036103045750600092915050565b61031162784ce082610bbd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205480820361034e5750600092915050565b61035b62784ce082610bbd565b42109392505050565b60008061038f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156103b257919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026103f59190610bd5565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610450906060015b604051602081830303815290604052805190602001205490565b14610487576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906104a990606001610436565b905073ffffffffffffffffffffffffffffffffffffffff81161561053d578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190610c12565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610577610929565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260408083209290925590519182527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91015b60405180910390a150565b60006105e36000610318565b905090565b6105f0610929565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409020541561066a576040517fb7d8689400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902042905590519182527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891016105cc565b6106cb610929565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812054900361066a576040517f335b869500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610661565b7f0000000000000000000000000000000000000000000000000000000000000002600054610100900460ff16158015610781575060005460ff8083169116105b61080d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610661565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610846610982565b61084f82610a03565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60006108bb610364565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190610c12565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610980576040517fafbe9bc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3361098b610364565b73ffffffffffffffffffffffffffffffffffffffff16141580156109cc5750336109b36108b1565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610980576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8416021781556040805173ffffffffffffffffffffffffffffffffffffffff841660208201527f7b743789cff01dafdeae47739925425aab5dfd02d0c8229e4a508bcd2b9f42bb9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610ac391610b7b565b60405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff81168114610af057600080fd5b50565b600060208284031215610b0557600080fd5b813561031181610ace565b6000815180845260005b81811015610b3657602081850181015186830182015201610b1a565b81811115610b48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006103116020830184610b10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610bd057610bd0610b8e565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c0d57610c0d610b8e565b500290565b600060208284031215610c2457600080fd5b815161031181610ace56fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0": { + "balance": "0x0", + "code": "0x6080604052600436106101cd5760003560e01c80635c975abb116100f7578063b1b1b20911610095578063db505d8011610064578063db505d8014610556578063ddd5a40f14610583578063e46e245a14610599578063ecc70428146105ae57600080fd5b8063b1b1b209146104de578063b28ade251461050e578063d764ad0b1461052e578063dad544e01461054157600080fd5b806383a74074116100d157806383a740741461046c5780638cbeeef2146103835780639fce812c14610483578063a4e7f8bd146104ae57600080fd5b80635c975abb146104055780636425666b1461042a5780636e296e451461045757600080fd5b806338d38c971161016f578063485cc9551161013e578063485cc955146103635780634c1d6a691461038357806354fd4d50146103995780635644cfdf146103ef57600080fd5b806338d38c97146102d35780633dbb202b146103115780633e47158c146103265780633f827a5a1461033b57600080fd5b80632828d7e8116101ab5780632828d7e8146102665780632f7d39221461027b57806333d7e2bd1461029157806335e80ab3146102be57600080fd5b8063028f85f7146101d25780630c568498146102055780630ff754ea1461021a575b600080fd5b3480156101de57600080fd5b506101e7601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561021157600080fd5b506101e7603f81565b34801561022657600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b34801561027257600080fd5b506101e7604081565b34801561028757600080fd5b506101e761520881565b34801561029d57600080fd5b5060fe546102419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ca57600080fd5b50610241610613565b3480156102df57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000031681526020016101fc565b61032461031f366004611f13565b6106ac565b005b34801561033257600080fd5b5061024161093f565b34801561034757600080fd5b50610350600181565b60405161ffff90911681526020016101fc565b34801561036f57600080fd5b5061032461037e366004611f7a565b610b4a565b34801561038f57600080fd5b506101e7619c4081565b3480156103a557600080fd5b506103e26040518060400160405280600681526020017f322e31312e30000000000000000000000000000000000000000000000000000081525081565b6040516101fc919061201e565b3480156103fb57600080fd5b506101e761138881565b34801561041157600080fd5b5061041a610da4565b60405190151581526020016101fc565b34801561043657600080fd5b5060fc546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561046357600080fd5b50610241610e38565b34801561047857600080fd5b506101e762030d4081565b34801561048f57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610241565b3480156104ba57600080fd5b5061041a6104c9366004612031565b60ce6020526000908152604090205460ff1681565b3480156104ea57600080fd5b5061041a6104f9366004612031565b60cb6020526000908152604090205460ff1681565b34801561051a57600080fd5b506101e7610529366004612079565b610f1f565b61032461053c366004612159565b610fe0565b34801561054d57600080fd5b506102416118f5565b34801561056257600080fd5b5060cf546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058f57600080fd5b506101e761010481565b3480156105a557600080fd5b506101e7602881565b3480156105ba57600080fd5b5061060560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101fc565b60fe54604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015610683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a791906121df565b905090565b60cf54604080516020601f86018190048102820181019092528481526108149273ffffffffffffffffffffffffffffffffffffffff169161070a91908790879081908401838280828437600092019190915250879250610f1f915050565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061077660cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016107929796959493929190612245565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611949565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561089960cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516108ab9594939291906122a4565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008061096a7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561098d57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026109d09190612321565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610a2b906060015b604051602081830303815290604052805190602001205490565b14610a62576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610a8490606001610a11565b905073ffffffffffffffffffffffffffffffffffffffff811615610b18578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1191906121df565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000036000547501000000000000000000000000000000000000000000900460ff16158015610bb6575060005460ff8083167401000000000000000000000000000000000000000090920416105b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff84167401000000000000000000000000000000000000000002167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909116177501000000000000000000000000000000000000000000179055610ccf6119e2565b60fe805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805492851692909116919091179055610d41734200000000000000000000000000000000000007611a65565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60fe54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a7919061235e565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610c3e565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600080603f610f35604063ffffffff8616612380565b610f3f91906123b0565b611388619c40610f528162030d406123fe565b610f5c91906123fe565b610f6691906123fe565b610f7091906123fe565b9050600061010467ffffffffffffffff168551610f8d919061242a565b9050610fcb610f9d601083612380565b610fa790846123fe565b67ffffffffffffffff16610fbc602884612380565b67ffffffffffffffff16611ba1565b610fd7906152086123fe565b95945050505050565b610fe8610da4565b1561104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610c3e565b60f087901c6002811061110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610c3e565b8061ffff166000036111ff57600061115b878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611bba915050565b600081815260cb602052604090205490915060ff16156111fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610c3e565b505b6000611245898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bd992505050565b905061124f611bfc565b156112875785341461126357611263612442565b600081815260ce602052604090205460ff161561128257611282612442565b6113d9565b341561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610c3e565b600081815260ce602052604090205460ff166113d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610c3e565b6113e287611cd8565b15611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610c3e565b600081815260cb602052604090205460ff1615611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610c3e565b61155585611546611388619c406123fe565b67ffffffffffffffff16611d1e565b158061157b575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561169457600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610c3e565b50506118ec565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061172588619c405a6116e89190612471565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156117db57600082815260cb602052604090205460ff161561177857611778612442565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26118e8565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016118e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610c3e565b5050505b50505050505050565b60006118ff61093f565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610683573d6000803e3d6000fd5b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906119aa908890839089906000908990600401612488565b6000604051808303818588803b1580156119c357600080fd5b505af11580156119d7573d6000803e3d6000fd5b505050505050505050565b336119eb61093f565b73ffffffffffffffffffffffffffffffffffffffff1614158015611a2c575033611a136118f5565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611a63576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000547501000000000000000000000000000000000000000000900460ff16611b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c3e565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611b5a5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081831015611bb15781611bb3565b825b9392505050565b6000611bc885858585611d54565b805190602001209050949350505050565b6000611be9878787878787611ded565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156106a7575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbc91906121df565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611d18575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000806000835160208501868989f195945050505050565b606084848484604051602401611d6d94939291906124e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611e0a9695949392919061252a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611eae57600080fd5b50565b60008083601f840112611ec357600080fd5b50813567ffffffffffffffff811115611edb57600080fd5b602083019150836020828501011115611ef357600080fd5b9250929050565b803563ffffffff81168114611f0e57600080fd5b919050565b60008060008060608587031215611f2957600080fd5b8435611f3481611e8c565b9350602085013567ffffffffffffffff811115611f5057600080fd5b611f5c87828801611eb1565b9094509250611f6f905060408601611efa565b905092959194509250565b60008060408385031215611f8d57600080fd5b8235611f9881611e8c565b91506020830135611fa881611e8c565b809150509250929050565b6000815180845260005b81811015611fd957602081850181015186830182015201611fbd565b81811115611feb576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bb36020830184611fb3565b60006020828403121561204357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561208c57600080fd5b823567ffffffffffffffff808211156120a457600080fd5b818501915085601f8301126120b857600080fd5b8135818111156120ca576120ca61204a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121105761211061204a565b8160405282815288602084870101111561212957600080fd5b82602086016020830137600060208483010152809650505050505061215060208401611efa565b90509250929050565b600080600080600080600060c0888a03121561217457600080fd5b87359650602088013561218681611e8c565b9550604088013561219681611e8c565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156121c057600080fd5b6121cc8a828b01611eb1565b989b979a50959850939692959293505050565b6000602082840312156121f157600080fd5b8151611bb381611e8c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261229760c0830184866121fc565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006122d46080830186886121fc565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612359576123596122f2565b500290565b60006020828403121561237057600080fd5b81518015158114611bb357600080fd5b600067ffffffffffffffff808316818516818304811182151516156123a7576123a76122f2565b02949350505050565b600067ffffffffffffffff808416806123f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115612421576124216122f2565b01949350505050565b6000821982111561243d5761243d6122f2565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015612483576124836122f2565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a0608082015260006124d560a0830184611fb3565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526125196080830185611fb3565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261257560c0830184611fb3565b9897505050505050505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000ff0000000000000000000000000000000000000000" + } + }, + "0xbc941408d9bbe8da9c40129f12fb0caddc2fcda9": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c8063604aa62811610076578063b23cc0441161005b578063b23cc0441461016d578063b51f9c2b14610182578063b6a4cd21146101d957600080fd5b8063604aa6281461012a57806378ecabce1461014a57600080fd5b80631d8a4e92146100a857806330e9012c146100c3578063318b1b80146100d85780635a4dab3314610103575b600080fd5b6100b06101ec565b6040519081526020015b60405180910390f35b6100cb610275565b6040516100ba91906128b7565b6100eb6100e6366004612a1a565b610389565b6040516001600160a01b0390911681526020016100ba565b6100eb7f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61013d610138366004612c14565b610404565b6040516100ba9190612da9565b61015d610158366004612a1a565b610b7e565b60405190151581526020016100ba565b61018061017b366004612e05565b610c29565b005b61018a611356565b6040516100ba919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6101806101e7366004612ecc565b611403565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102709190612ee9565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102709190612f0d565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103f890613065565b60601c95945050505050565b60608151600003610441576040517fea11647200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000825167ffffffffffffffff81111561045d5761045d612a33565b6040519080825280602002602001820160405280156104a257816020015b604080518082019091526000808252602082015281526020019060019003908161047b5790505b50905060001960005b8451811015610b755760008582815181106104c8576104c86130b5565b6020026020010151905060006104e5826060015163ffffffff1690565b63ffffffff169050808412610526576040517fea11647200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809350600082602001516001600160a01b031663d6ae3cd56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105919190612ee9565b60408401519091506001600160a01b03166107865761063f8184602001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061091906130e4565b855161061b8661145a565b60405160200161062b9190613131565b604051602081830303815290604052611597565b868581518110610651576106516130b5565b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061078183602001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906130e4565b8786815181106106f0576106f06130b5565b6020026020010151600001516107046115f5565b610180015160208701516040516001600160a01b03909116602482015260440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de8000000000000000000000000000000000000000000000000000000001790526116e5565b6107b6565b826040015186858151811061079d5761079d6130b5565b60209081029190910101516001600160a01b0390911690525b60006107c5846020015161176f565b905060006107d78286606001516117d3565b90506107e68560600151611864565b806107f957506107f98560600151611897565b1561090a57600061080d86606001516118b0565b905060006108ba6040518060e0016040528061082a8a6080015190565b81526020018961014001516001600160a01b031681526020016108508a602001516119af565b6001600160a01b031681526020018c8b81518110610870576108706130b5565b6020026020010151600001516001600160a01b031681526020016108978a60600151611a50565b6108a157876108a4565b60005b8152600060208201819052604090910152611a7a565b90506108cc8488606001518484611bc2565b818a89815181106108df576108df6130b5565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250505050610a5d565b606085015163ffffffff166001148061092d5750606085015163ffffffff166005145b15610a2b57600061094186606001516118b0565b905060006108ba6040518060e0016040528061095e8a6080015190565b81526020018961014001516001600160a01b031681526020016109848a602001516119af565b6001600160a01b031681526020018c8b815181106109a4576109a46130b5565b602090810291909101810151516001600160a01b0316825201600163ffffffff166109d68b6060015163ffffffff1690565b63ffffffff16146109e85760006109ea565b875b81526020016109fe87878c60600151611c0b565b6001600160a01b03168152602001610a1b87878c60600151611d26565b6001600160a01b03169052611a7a565b6040517f5d02c1fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608501516101208601516040517f1e33424000000000000000000000000000000000000000000000000000000000815263ffffffff909216600483015260248201526001600160a01b03831690631e33424090604401600060405180830381600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b50505050846060015163ffffffff16837f4b8d2d3f00ea4ebab553d99606c8aea67fd4deb9ef0abee0e7c4b246c59a0e0f8a8981518110610b2557610b256130b5565b60200260200101516020015184604051610b559291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050508080610b6d906131a5565b9150506104ab565b50909392505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2391906131bf565b92915050565b60005b8151811015611352576000828281518110610c4957610c496130b5565b6020026020010151600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb691906130e4565b60408051600680825260e08201909252919250600091906020820160c080368337019050509050600081600081518110610cf257610cf26130b5565b602002602001019063ffffffff16908163ffffffff1681525050600181600181518110610d2157610d216130b5565b602002602001019063ffffffff16908163ffffffff1681525050600481600281518110610d5057610d506130b5565b602002602001019063ffffffff16908163ffffffff1681525050600581600381518110610d7f57610d7f6130b5565b602002602001019063ffffffff16908163ffffffff1681525050600881600481518110610dae57610dae6130b5565b602002602001019063ffffffff16908163ffffffff1681525050600981600581518110610ddd57610ddd6130b5565b602002602001019063ffffffff16908163ffffffff168152505060008060005b835181101561133a576000848281518110610e1a57610e1a6130b5565b602002602001015190506000610e3087836117d3565b90506001600160a01b038116610e47575050611328565b63ffffffff821660041480610e62575063ffffffff82166005145b80610e73575063ffffffff82166009145b15610e815760019350610e86565b600194505b848015610e905750835b15610ec7576040517f393f5fc900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600063ffffffff831660081480610ee4575063ffffffff83166009145b610f0b57898981518110610efa57610efa6130b5565b602002602001015160200151610f2a565b898981518110610f1d57610f1d6130b5565b6020026020010151604001515b905080610f63576040517fb30c83ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604051806101800160405280610f978d8d81518110610f8657610f866130b5565b602002602001015160000151611e14565b81526020018c8c81518110610fae57610fae6130b5565b6020026020010151600001516001600160a01b03168152602001610fd38b8688611e30565b6001600160a01b031681526020018563ffffffff168152602001838152602001846001600160a01b031663fa315aa96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190612ee9565b8152602001846001600160a01b031663ec5e63086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc9190612ee9565b8152602001846001600160a01b0316636b6716c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112391906131dc565b67ffffffffffffffff168152602001846001600160a01b031663dabd396d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906131dc565b67ffffffffffffffff1681526040517f6593dc6e00000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526020909101906001600160a01b038c1690636593dc6e90602401602060405180830381865afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190612ee9565b815260200161123d8b8688611f1e565b6001600160a01b0316815260200163ffffffff861660011480611266575063ffffffff86166005145b1515905260408051600180825281830190925291925060009190816020015b60408051610180810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201528252600019909201910181611285579050509050818160008151811061130d5761130d6130b5565b602002602001018190525061132181610404565b5050505050505b80611332816131a5565b915050610dfd565b5050505050808061134a906131a5565b915050610c2c565b5050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156113df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027091906131f9565b806001600160a01b03163b600003611457576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b60608160000361149d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156114c757806114b1816131a5565b91506114c09050600a836132c0565b91506114a1565b60008167ffffffffffffffff8111156114e2576114e2612a33565b6040519080825280601f01601f19166020018201604052801561150c576020820181803683370190505b5090505b841561158f576115216001836132d4565b915061152e600a866132eb565b6115399060306132ff565b60f81b81838151811061154e5761154e6130b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611588600a866132c0565b9450611510565b949350505050565b6000806115a586858561200c565b90506115eb6115b2612042565b6020015182876040516020016115d791906001600160a01b0391909116815260200190565b6040516020818303038152906040526120cb565b9695505050505050565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda96001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610365573d6000803e3d6000fd5b6116ee82611403565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d9061173790869086908690600401613343565b600060405180830381600087803b15801561175157600080fd5b505af1158015611765573d6000803e3d6000fd5b5050505050505050565b6000816001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2391906130e4565b6040517f1b685b9e00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526000906001600160a01b03841690631b685b9e90602401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d91906130e4565b9392505050565b600063ffffffff82161580610c23575060045b63ffffffff1661188a8363ffffffff1690565b63ffffffff161492915050565b600063ffffffff821660081480610c2357506009611877565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8316016118f2576118e76115f5565b610220015192915050565b60001963ffffffff831601611914576119096115f5565b6101e0015192915050565b63ffffffff82166004148061192f575063ffffffff82166009145b156119475761193c6115f5565b610200015192915050565b63ffffffff82161580611960575063ffffffff82166008145b156119785761196d6115f5565b6101c0015192915050565b6040517f45447e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000816001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1391906130e4565b6001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117af573d6000803e3d6000fd5b600063ffffffff821660041480611a6d575063ffffffff82166009145b80610c2357506005611877565b60a08101516060906001600160a01b0316158015611aa3575060c08201516001600160a01b0316155b15611b30578151602080840151604080860151606087015160808801519251611b1a96959293919201948552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602087015292841b83166034860152921b166048830152605c820152607c0190565b6040516020818303038152906040529050919050565b8151602080840151604080860151606080880151608089015160a08a015160c08b01518651988901999099527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000096841b87169588019590955292821b85166054870152811b84166068860152607c85019190915290811b8216609c8401529290921b90911660b082015260c401611b1a565b6040517fb10709570000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063b10709579061173790869086908690600401613378565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c9b91908101906133a6565b90508051600003611d1057836001600160a01b031663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0891906130e4565b91505061185d565b611d1981612205565b60a0015195945050505050565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611d8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611db691908101906133a6565b90508051600003611dff57836001600160a01b031663534db0e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b611e0881612205565b60c0015191505061185d565b604080516001600160a01b038316602082015260609101611b1a565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611e98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ec091908101906133a6565b90508051600003611f0957836001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b611f1281612205565b6060015191505061185d565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fae91908101906133a6565b90508051600003611ff757836001600160a01b0316633a7684636040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b61200081612205565b6020015191505061185d565b600083838360405160200161202393929190613414565b6040516020818303038152906040528051906020012090509392505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda96001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156113df573d6000803e3d6000fd5b6000806120fc856001600160a01b0316803b806020016040519081016040528181526000908060200190933c612337565b805190915060ff16156121435780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff909116600482015260240161144e565b602081015151156121865780602001516040517f57a0583500000000000000000000000000000000000000000000000000000000815260040161144e919061343f565b600081604001518460405160200161219f929190613452565b6040516020818303038152906040529050848151602083016000f592506001600160a01b0383166121fc576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152815160a481148015906122525750607c8114155b15612289576040517fbff6e41600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151604084015160548501516068860151607c870151606093841c9392831c929190911c906000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c88016122ef575050609c88015160b0890151606091821c911c5b6040805160e0810182529788526001600160a01b0396871660208901529486169487019490945291841660608601526080850152821660a08401521660c08201529392505050565b61235e6040518060600160405280600060ff16815260200160608152602001606081525090565b6002825110806123c857508160008151811061237c5761237c6130b5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b8061242d5750816001815181106123e1576123e16130b5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15612464576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028360028151811061247b5761247b6130b5565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c90506000836002815181106124ab576124ab6130b5565b60209101015160f81c600390811691508190036124f4576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156125e05760008260ff1667ffffffffffffffff81111561251d5761251d612a33565b6040519080825280601f01601f191660200182016040528015612547576020820181803683370190505b50905060005b8360ff168110156125d257866125648260036132ff565b81518110612574576125746130b5565b602001015160f81c60f81b828281518110612591576125916130b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806125ca816131a5565b91505061254d565b506125dc816127f6565b9150505b60008167ffffffffffffffff8111156125fb576125fb612a33565b6040519080825280601f01601f191660200182016040528015612625576020820181803683370190505b50905060ff8316156126ca57600061263e846003613481565b60ff16905060005b838110156126c7578761265982846132ff565b81518110612669576126696130b5565b602001015160f81c60f81b838281518110612686576126866130b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806126bf816131a5565b915050612646565b50505b6000826126d8856003613481565b60ff166126e591906132ff565b905060008188516126f691906132d4565b905080600003612732576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561274d5761274d612a33565b6040519080825280601f01601f191660200182016040528015612777576020820181803683370190505b50905060008360208b0101602083018481868460045afa92505050806127c9576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6000602082511115612834576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b83518110156128b05761284c8160016132ff565b845161285891906132d4565b6128639060086134a6565b61286e9060026135a9565b848281518110612880576128806130b5565b0160200151612892919060f81c6134a6565b61289c90836132ff565b9150806128a8816131a5565b915050612838565b5092915050565b81516001600160a01b03168152610240810160208301516128e360208401826001600160a01b03169052565b5060408301516128fe60408401826001600160a01b03169052565b50606083015161291960608401826001600160a01b03169052565b50608083015161293460808401826001600160a01b03169052565b5060a083015161294f60a08401826001600160a01b03169052565b5060c083015161296a60c08401826001600160a01b03169052565b5060e083015161298560e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102209384015116929091019190915290565b600060208284031215612a2c57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715612a8657612a86612a33565b60405290565b6040516060810167ffffffffffffffff81118282101715612a8657612a86612a33565b604051610240810167ffffffffffffffff81118282101715612a8657612a86612a33565b604051601f8201601f1916810167ffffffffffffffff81118282101715612afc57612afc612a33565b604052919050565b600067ffffffffffffffff821115612b1e57612b1e612a33565b5060051b60200190565b600067ffffffffffffffff821115612b4257612b42612a33565b50601f01601f191660200190565b600082601f830112612b6157600080fd5b8135612b74612b6f82612b28565b612ad3565b818152846020838601011115612b8957600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461145757600080fd5b80356119aa81612ba6565b803563ffffffff811681146119aa57600080fd5b67ffffffffffffffff8116811461145757600080fd5b80356119aa81612bda565b801515811461145757600080fd5b80356119aa81612bfb565b60006020808385031215612c2757600080fd5b823567ffffffffffffffff80821115612c3f57600080fd5b818501915085601f830112612c5357600080fd5b8135612c61612b6f82612b04565b81815260059190911b83018401908481019088831115612c8057600080fd5b8585015b83811015612d9c57803585811115612c9c5760008081fd5b8601610180818c03601f1901811315612cb55760008081fd5b612cbd612a62565b8983013588811115612ccf5760008081fd5b612cdd8e8c83870101612b50565b8252506040612ced818501612bbb565b8b8301526060612cfe818601612bbb565b8284015260809150612d11828601612bc6565b818401525060a0808501358284015260c0915081850135818401525060e080850135828401526101009150612d47828601612bf0565b90830152610120612d59858201612bf0565b828401526101409150818501358184015250610160612d79818601612bbb565b82840152612d88848601612c09565b908301525085525050918601918601612c84565b5098975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015612df857815180516001600160a01b0390811686529087015116868501529284019290850190600101612dc6565b5091979650505050505050565b60006020808385031215612e1857600080fd5b823567ffffffffffffffff811115612e2f57600080fd5b8301601f81018513612e4057600080fd5b8035612e4e612b6f82612b04565b81815260609182028301840191848201919088841115612e6d57600080fd5b938501935b83851015612ec05780858a031215612e8a5760008081fd5b612e92612a8c565b8535612e9d81612ba6565b815285870135878201526040808701359082015283529384019391850191612e72565b50979650505050505050565b600060208284031215612ede57600080fd5b813561185d81612ba6565b600060208284031215612efb57600080fd5b5051919050565b80516119aa81612ba6565b60006102408284031215612f2057600080fd5b612f28612aaf565b612f3183612f02565b8152612f3f60208401612f02565b6020820152612f5060408401612f02565b6040820152612f6160608401612f02565b6060820152612f7260808401612f02565b6080820152612f8360a08401612f02565b60a0820152612f9460c08401612f02565b60c0820152612fa560e08401612f02565b60e0820152610100612fb8818501612f02565b90820152610120612fca848201612f02565b90820152610140612fdc848201612f02565b90820152610160612fee848201612f02565b90820152610180613000848201612f02565b908201526101a0613012848201612f02565b908201526101c0613024848201612f02565b908201526101e0613036848201612f02565b90820152610200613048848201612f02565b9082015261022061305a848201612f02565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156130ad5780818460140360031b1b83161693505b505050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156130f657600080fd5b815161185d81612ba6565b60005b8381101561311c578181015183820152602001613104565b8381111561312b576000848401525b50505050565b7f44656c61796564574554482d000000000000000000000000000000000000000081526000825161316981600c850160208701613101565b91909101600c0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982036131b8576131b8613176565b5060010190565b6000602082840312156131d157600080fd5b815161185d81612bfb565b6000602082840312156131ee57600080fd5b815161185d81612bda565b600060a0828403121561320b57600080fd5b60405160a0810181811067ffffffffffffffff8211171561322e5761322e612a33565b604052825161323c81612ba6565b8152602083015161324c81612ba6565b6020820152604083015161325f81612ba6565b6040820152606083015161327281612ba6565b6060820152608083015161328581612ba6565b60808201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826132cf576132cf613291565b500490565b6000828210156132e6576132e6613176565b500390565b6000826132fa576132fa613291565b500690565b6000821982111561331257613312613176565b500190565b6000815180845261332f816020860160208601613101565b601f01601f19169290920160200192915050565b60006001600160a01b0380861683528085166020840152506060604083015261336f6060830184613317565b95945050505050565b63ffffffff841681526001600160a01b038316602082015260606040820152600061336f6060830184613317565b6000602082840312156133b857600080fd5b815167ffffffffffffffff8111156133cf57600080fd5b8201601f810184136133e057600080fd5b80516133ee612b6f82612b28565b81815285602083850101111561340357600080fd5b61336f826020830160208601613101565b83815260606020820152600061342d6060830185613317565b82810360408401526115eb8185613317565b60208152600061185d6020830184613317565b60008351613464818460208801613101565b835190830190613478818360208801613101565b01949350505050565b600060ff821660ff84168060ff0382111561349e5761349e613176565b019392505050565b60008160001904831182151516156134c0576134c0613176565b500290565b600181815b808511156135005781600019048211156134e6576134e6613176565b808516156134f357918102915b93841c93908002906134ca565b509250929050565b60008261351757506001610c23565b8161352457506000610c23565b816001811461353a576002811461354457613560565b6001915050610c23565b60ff84111561355557613555613176565b50506001821b610c23565b5060208310610133831016604e8410600b8410161715613583575081810a610c23565b61358d83836134c5565b80600019048211156135a1576135a1613176565b029392505050565b600061185d838361350856fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0xbf2528122b773d2d5539c2b0912e4710dc9b02db": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c806378ecabce1161005b57806378ecabce1461010f578063b51f9c2b14610132578063b6a4cd2114610189578063cefe12231461019e57600080fd5b80631d8a4e921461008d57806330e9012c146100a8578063318b1b80146100bd5780635a4dab33146100e8575b600080fd5b6100956101be565b6040519081526020015b60405180910390f35b6100b0610247565b60405161009f9190612988565b6100d06100cb366004612af0565b61035b565b6040516001600160a01b03909116815260200161009f565b6100d07f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61012261011d366004612af0565b6103d6565b604051901515815260200161009f565b61013a610481565b60405161009f919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61019c610197366004612b1e565b61052e565b005b6101b16101ac366004612b42565b610585565b60405161009f9190612bac565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190612ce9565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190612d8f565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103ca90612ee7565b60601c95945050505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190612f45565b92915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190612f62565b806001600160a01b03163b600003610582576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526106078461156e565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290529061068861195d565b905060006106946119e6565b8251909150610737906107236101008a01356106b46101408c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f416464726573734d616e6167657200000000000000000000000000000000000060208201529150611ad69050565b604080516000815260208101909152611b0c565b6001600160a01b0316602084015260408201516107f4906107d46101008a01356107656101408c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81527f50726f787941646d696e0000000000000000000000000000000000000000000060208201529150611ad69050565b60408051306020820152015b604051602081830303815290604052611b0c565b6001600160a01b0390811680855260208501516040517f0652b57a0000000000000000000000000000000000000000000000000000000081529216600483015290630652b57a90602401600060405180830381600087803b15801561085857600080fd5b505af115801561086c573d6000803e3d6000fd5b505050602084015184516108809250611c46565b825161090a906101008901359061089b6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f4c3145524337323142726964676500000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b0316604084015282516109a290610100890135906109336101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f4f7074696d69736d506f7274616c00000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b0316610100808501919091528351610a3c91890135906109cd6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81527f4554484c6f636b626f780000000000000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b031660e08401528251610ad49061010089013590610a656101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600c81527f53797374656d436f6e666967000000000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b031660608401528251610b6c9061010089013590610afd6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601c81527f4f7074696d69736d4d696e7461626c654552433230466163746f72790000000060208201529150611cbe9050565b6001600160a01b031660808401528251610c049061010089013590610b956101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527f4469737075746547616d65466163746f7279000000000000000000000000000060208201529150611cbe9050565b6001600160a01b03166101208401528251610c9d9061010089013590610c2e6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601381527f416e63686f72537461746552656769737472790000000000000000000000000060208201529150611cbe9050565b6001600160a01b0316610140808501919091526060830151610d5b91610d3f906101008b013590610cd0908c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601081527f4c315374616e646172644272696467650000000000000000000000000000000060208201529150611ad69050565b8551604080516001600160a01b039092166020830152016107e0565b6001600160a01b0390811660a0850181905284516040517f8d52d4a0000000000000000000000000000000000000000000000000000000008152921691638d52d4a091610dad9160019060040161305f565b600060405180830381600087803b158015610dc757600080fd5b505af1158015610ddb573d6000803e3d6000fd5b505060408051808201909152601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000060208201526080850151909250610eb99150610ea46101008b0135610e356101408d018d612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601681527f4c3143726f7373446f6d61696e4d657373656e6765720000000000000000000060208201529150611ad69050565b6020808801516040516107e09287910161310b565b6001600160a01b0390811660c0860181905285516040517f8d52d4a0000000000000000000000000000000000000000000000000000000008152921691638d52d4a091610f0b9160029060040161305f565b600060405180830381600087803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b5050855160c08701516040517f860f7cda0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063860f7cda9250610f8a91859060040161310b565b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b5050855161104692506101008b01359150610fd76101408c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f44656c61796564574554485065726d697373696f6e656447616d65000000000060208201529150611cbe9050565b6001600160a01b03166101a0850152606061106085611d08565b905061107a85600001518660400151856040015184611d90565b61108d6110868a6132a8565b868a611e1a565b90506110a7856000015186606001518560c0015184611d90565b6110b96102608a016102408b016133d8565b1561115e5760608501516040517ff2c4bc9e0000000000000000000000000000000000000000000000000000000081527f435553544f4d5f4741535f544f4b454e000000000000000000000000000000006004820152600160248201526001600160a01b039091169063f2c4bc9e90604401600060405180830381600087803b15801561114557600080fd5b505af1158015611159573d6000803e3d6000fd5b505050505b61116860016103d6565b1561120d5760608501516040517ff2c4bc9e0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f580000000000000000000000000000000000000000006004820152600160248201526001600160a01b039091169063f2c4bc9e90604401600060405180830381600087803b1580156111f457600080fd5b505af1158015611208573d6000803e3d6000fd5b505050505b61121760016103d6565b156112d6576112b68560608181015161014083015160e08401516040516001600160a01b039384166024820152918316604483015291909116606482015260840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905292915050565b90506112d18560000151866101000151856080015184611d90565b6112fa565b6112df85611e39565b90506112fa8560000151866101000151856060015184611d90565b6040805160018082528183019092526000916020808301908036833701905050905085610100015181600081518110611335576113356133f5565b60200260200101906001600160a01b031690816001600160a01b03168152505061135f8682611e67565b915061137986600001518760e001518660a0015185611d90565b61138286611ee0565b915061139c866000015187608001518660e0015185611d90565b6113a586611f5d565b91506113c086600001518760c0015186610100015185611d90565b6113c986611d08565b91506113e486600001518760a0015186610120015185611d90565b6113ed86611f8b565b91506114098660000151876101a0015186610180015185611d90565b61147860405130602482015260609060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052919050565b9150611494866000015187610120015186610140015185611d90565b61149f8a8588611fac565b6101208601516114bb906114b660208d018d612b1e565b611c46565b6114cd6114c78b6132a8565b87612086565b91506114e9866000015187610140015186610160015185611d90565b85516114fc906114b660208d018d612b1e565b876001600160a01b03168a61010001357fb40fb1137b92aa97efb20f29c17d36c5947aac681c3315ba854b0232f83495428860405160200161153e9190612bac565b60408051601f198184030181529082905261155891613424565b60405180910390a3509398975050505050505050565b6101008101351580611584575046816101000135145b156115bb576040517f7a47c9a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ca6020830183612b1e565b6001600160a01b03160361163a576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70436861696e50726f787941646d696e4f776e6572000000000000000000006044820152606401610579565b600061164c6040830160208401612b1e565b6001600160a01b0316036116bc576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f73797374656d436f6e6669674f776e65720000000000000000000000000000006044820152606401610579565b60006116ce6060830160408401612b1e565b6001600160a01b03160361173e576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f62617463686572000000000000000000000000000000000000000000000000006044820152606401610579565b60006117506080830160608401612b1e565b6001600160a01b0316036117c0576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e73616665426c6f636b5369676e65720000000000000000000000000000006044820152606401610579565b60006117d260a0830160808401612b1e565b6001600160a01b031603611842576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f70726f706f7365720000000000000000000000000000000000000000000000006044820152606401610579565b600061185460c0830160a08401612b1e565b6001600160a01b0316036118c4576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6368616c6c656e676572000000000000000000000000000000000000000000006044820152606401610579565b6118d2610120820182612ffa565b905060000361190d576040517f89e0acdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061191d610120830183612ffa565b61192691613437565b03610582576040517f89e0acdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561050a573d6000803e3d6000fd5b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610337573d6000803e3d6000fd5b6000838383604051602001611aed93929190613455565b6040516020818303038152906040528051906020012090509392505050565b600080611b3d856001600160a01b0316803b806020016040519081016040528181526000908060200190933c612146565b805190915060ff1615611b845780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610579565b60208101515115611bc75780602001516040517f57a058350000000000000000000000000000000000000000000000000000000081526004016105799190613424565b6000816040015184604051602001611be0929190613480565b6040516020818303038152906040529050848151602083016000f592506001600160a01b038316611c3d576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b6040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b158015611ca257600080fd5b505af1158015611cb6573d6000803e3d6000fd5b505050505050565b600080611ccc868585611ad6565b9050611cfe611cd961195d565b6020015182876040516020016107e091906001600160a01b0391909116815260200190565b9695505050505050565b60c08101516060828101516040516001600160a01b03938416602482015292166044830152906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905292915050565b611d998261052e565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d90611de2908690869086906004016134af565b600060405180830381600087803b158015611dfc57600080fd5b505af1158015611e10573d6000803e3d6000fd5b5050505050505050565b6060600080611e298686612605565b91509150611cfe868584846127c0565b6060818101516101408301516040516001600160a01b03928316602482015291166044820152606401611d32565b6060826060015182604051602401611e809291906134e4565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f946d920400000000000000000000000000000000000000000000000000000000179052905092915050565b60a08101516040516001600160a01b0390911660248201526060906044015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de80000000000000000000000000000000000000000000000000000000017905292915050565b6060818101516101008301516040516001600160a01b03928316602482015291166044820152606401611d32565b6060818101516040516001600160a01b039091166024820152604401611eff565b6101a08281015161014083015183830151600093870135929190610100880135611fdc60a08a0160808b01612b1e565b611fec60c08b0160a08c01612b1e565b6040805160208101989098527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b81169189019190915294861b8516605488015292851b84166068870152607c860191909152831b8216609c85015290911b1660b082015260c40160405160208183030381529060405290506120808261012001516001856101e001518461287e565b50505050565b6060600083608001518060200190518101906120a2919061353f565b60608401516101208501516040516001600160a01b039283166024820152911660448201528151606482015260208201516084820152600160a482015290915060c40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47a222c50000000000000000000000000000000000000000000000000000000017905291505092915050565b61216d6040518060600160405280600060ff16815260200160608152602001606081525090565b6002825110806121d757508160008151811061218b5761218b6133f5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b8061223c5750816001815181106121f0576121f06133f5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15612273576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028360028151811061228a5761228a6133f5565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c90506000836002815181106122ba576122ba6133f5565b60209101015160f81c60039081169150819003612303576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156123ef5760008260ff1667ffffffffffffffff81111561232c5761232c612d02565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060005b8360ff168110156123e157866123738260036135bd565b81518110612383576123836133f5565b602001015160f81c60f81b8282815181106123a0576123a06133f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806123d9816135d5565b91505061235c565b506123eb816128c7565b9150505b60008167ffffffffffffffff81111561240a5761240a612d02565b6040519080825280601f01601f191660200182016040528015612434576020820181803683370190505b50905060ff8316156124d957600061244d8460036135ef565b60ff16905060005b838110156124d6578761246882846135bd565b81518110612478576124786133f5565b602001015160f81c60f81b838281518110612495576124956133f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806124ce816135d5565b915050612455565b50505b6000826124e78560036135ef565b60ff166124f491906135bd565b905060008188516125059190613614565b905080600003612541576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561255c5761255c612d02565b6040519080825280601f01601f191660200182016040528015612586576020820181803683370190505b50905060008360208b0101602083018481868460045afa92505050806125d8576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6040805160c08082018352600080835260208084018290528385018290526060808501839052608080860184905260a0808701859052875160e081018952858152938401859052968301849052908201839052810182905293840181905290830152906126eb6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b91506040518060e001604052808460c001516001600160a01b0316815260200184604001516001600160a01b031681526020018460a001516001600160a01b031681526020018461010001516001600160a01b0316815260200184608001516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152509050612785816000015161052e565b612792816020015161052e565b61279f816040015161052e565b6127ac816060015161052e565b6127b9816080015161052e565b9250929050565b8351602080820151908601516040808801519084015160c08901516060958601518a8701516001600160a01b039093169289906127fc9061035b565b60608d015160405161281c9998979695949392918c918f9060240161362b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2b598b8a000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517fb10709570000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063b107095790611de290869086908690600401613774565b6000602082511115612905576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b83518110156129815761291d8160016135bd565b84516129299190613614565b6129349060086137a2565b61293f9060026138a5565b848281518110612951576129516133f5565b0160200151612963919060f81c6137a2565b61296d90836135bd565b915080612979816135d5565b915050612909565b5092915050565b81516001600160a01b03168152610240810160208301516129b460208401826001600160a01b03169052565b5060408301516129cf60408401826001600160a01b03169052565b5060608301516129ea60608401826001600160a01b03169052565b506080830151612a0560808401826001600160a01b03169052565b5060a0830151612a2060a08401826001600160a01b03169052565b5060c0830151612a3b60c08401826001600160a01b03169052565b5060e0830151612a5660e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102208085015191821681850152905b505092915050565b600060208284031215612b0257600080fd5b5035919050565b6001600160a01b038116811461058257600080fd5b600060208284031215612b3057600080fd5b8135612b3b81612b09565b9392505050565b600080600060608486031215612b5757600080fd5b833567ffffffffffffffff811115612b6e57600080fd5b84016102608187031215612b8157600080fd5b92506020840135612b9181612b09565b91506040840135612ba181612b09565b809150509250925092565b81516001600160a01b031681526101e081016020830151612bd860208401826001600160a01b03169052565b506040830151612bf360408401826001600160a01b03169052565b506060830151612c0e60608401826001600160a01b03169052565b506080830151612c2960808401826001600160a01b03169052565b5060a0830151612c4460a08401826001600160a01b03169052565b5060c0830151612c5f60c08401826001600160a01b03169052565b5060e0830151612c7a60e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501519182168185015290612ae8565b600060208284031215612cfb57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610240810167ffffffffffffffff81118282101715612d5557612d55612d02565b60405290565b6040516101c0810167ffffffffffffffff81118282101715612d5557612d55612d02565b8051612d8a81612b09565b919050565b60006102408284031215612da257600080fd5b612daa612d31565b612db383612d7f565b8152612dc160208401612d7f565b6020820152612dd260408401612d7f565b6040820152612de360608401612d7f565b6060820152612df460808401612d7f565b6080820152612e0560a08401612d7f565b60a0820152612e1660c08401612d7f565b60c0820152612e2760e08401612d7f565b60e0820152610100612e3a818501612d7f565b90820152610120612e4c848201612d7f565b90820152610140612e5e848201612d7f565b90820152610160612e70848201612d7f565b90820152610180612e82848201612d7f565b908201526101a0612e94848201612d7f565b908201526101c0612ea6848201612d7f565b908201526101e0612eb8848201612d7f565b90820152610200612eca848201612d7f565b90820152610220612edc848201612d7f565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000080821693506014831015612f2f5780818460140360031b1b83161693505b505050919050565b801515811461058257600080fd5b600060208284031215612f5757600080fd5b8151612b3b81612f37565b600060a08284031215612f7457600080fd5b60405160a0810181811067ffffffffffffffff82111715612f9757612f97612d02565b6040528251612fa581612b09565b81526020830151612fb581612b09565b60208201526040830151612fc881612b09565b60408201526060830151612fdb81612b09565b60608201526080830151612fee81612b09565b60808201529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261302f57600080fd5b83018035915067ffffffffffffffff82111561304a57600080fd5b6020019150368190038213156127b957600080fd5b6001600160a01b038316815260408101600383106130a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8260208301529392505050565b60005b838110156130ce5781810151838201526020016130b6565b838111156120805750506000910152565b600081518084526130f78160208601602086016130b3565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820152600061312d60408301846130df565b949350505050565b600060c0828403121561314757600080fd5b60405160c0810181811067ffffffffffffffff8211171561316a5761316a612d02565b604052905080823561317b81612b09565b8152602083013561318b81612b09565b6020820152604083013561319e81612b09565b604082015260608301356131b181612b09565b606082015260808301356131c481612b09565b608082015260a08301356131d781612b09565b60a0919091015292915050565b803563ffffffff81168114612d8a57600080fd5b600082601f83011261320957600080fd5b813567ffffffffffffffff8082111561322457613224612d02565b604051601f8301601f19908116603f0116810190828211818310171561324c5761324c612d02565b8160405283815286602085880101111561326557600080fd5b836020870160208301376000602085830101528094505050505092915050565b803567ffffffffffffffff81168114612d8a57600080fd5b8035612d8a81612f37565b600061026082360312156132bb57600080fd5b6132c3612d5b565b6132cd3684613135565b81526132db60c084016131e4565b60208201526132ec60e084016131e4565b60408201526101008084013560608301526101208085013567ffffffffffffffff8082111561331a57600080fd5b613326368389016131f8565b60808601526101409150818701358181111561334157600080fd5b61334d36828a016131f8565b60a08701525050610160613362818801613285565b60c08601526101806133758189016131e4565b60e08701526101a080890135868801526101c0890135858801526101e0890135848801526133a66102008a01613285565b838801526133b76102208a01613285565b828801526133c86102408a0161329d565b9087015250939695505050505050565b6000602082840312156133ea57600080fd5b8135612b3b81612f37565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602081526000612b3b60208301846130df565b8035602083101561047b57600019602084900360031b1b1692915050565b83815260606020820152600061346e60608301856130df565b8281036040840152611cfe81856130df565b600083516134928184602088016130b3565b8351908301906134a68183602088016130b3565b01949350505050565b60006001600160a01b038086168352808516602084015250606060408301526134db60608301846130df565b95945050505050565b6000604082016001600160a01b0380861684526020604081860152828651808552606087019150828801945060005b81811015613531578551851683529483019491830191600101613513565b509098975050505050505050565b60006040828403121561355157600080fd5b6040516040810181811067ffffffffffffffff8211171561357457613574612d02565b604052825181526020928301519281019290925250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156135d0576135d061358e565b500190565b600060001982036135e8576135e861358e565b5060010190565b600060ff821660ff84168060ff0382111561360c5761360c61358e565b019392505050565b6000828210156136265761362661358e565b500390565b60006102c0820190506001600160a01b03808e16835263ffffffff808e166020850152808d1660408501528b606085015267ffffffffffffffff8b166080850152818a1660a08501528089511660c085015260ff60208a01511660e085015260ff60408a0151166101008501528060608a0151166101208501528060808a01511661014085015250506fffffffffffffffffffffffffffffffff60a0880151166101608301526136e76101808301876001600160a01b03169052565b84516001600160a01b039081166101a0840152602086015181166101c0840152604086015181166101e0840152606086015181166102008401526080860151811661022084015260a0860151811661024084015260c086015116610260830152836102808301526137646102a08301846001600160a01b03169052565b9c9b505050505050505050505050565b63ffffffff841681526001600160a01b03831660208201526060604082015260006134db60608301846130df565b60008160001904831182151516156137bc576137bc61358e565b500290565b600181815b808511156137fc5781600019048211156137e2576137e261358e565b808516156137ef57918102915b93841c93908002906137c6565b509250929050565b6000826138135750600161047b565b816138205750600061047b565b816001811461383657600281146138405761385c565b600191505061047b565b60ff8411156138515761385161358e565b50506001821b61047b565b5060208310610133831016604e8410600b841016171561387f575081810a61047b565b61388983836137c1565b806000190482111561389d5761389d61358e565b029392505050565b6000612b3b838361380456fea164736f6c634300080f000a", + "nonce": 13, + "storage": {} + }, + "0xc3237117312fcd40bbfe8a4fe93b1c74a2e0d78f": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f0001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000877d4a7c4b8d2d49f1b8b814ae08cae354a672eb", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0xdead000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x00000000000000000000000000000000000000000000000069e5d9f300000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000089dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0xcdb7a450076dc6c607b60c6956bace4cca77c12f": { + "balance": "0x0", + "code": "0x6080604052600436106101d15760003560e01c806371c1566e116100f7578063a3860f4811610095578063cff0ab9611610064578063cff0ab9614610620578063dad544e0146106c1578063e9e05c42146106d6578063f2b4e617146106e957600080fd5b8063a3860f4814610520578063b682c44414610540578063bb2c727e14610560578063bf653a5c146105ed57600080fd5b8063952b2797116100d1578063952b27971461049b5780639bf62d82146104b0578063a14238e7146104d0578063a35d99df1461050057600080fd5b806371c1566e1461045b5780638b4c40b0146101f65780638c3152e91461047b57600080fd5b806345884d321161016f578063513747ab1161013e578063513747ab1461039f57806354fd4d50146103da5780635c0cba33146104265780635c975abb1461044657600080fd5b806345884d3214610301578063485cc955146103315780634870496f146103515780634fd0434c1461037157600080fd5b80633c9f397c116101ab5780633c9f397c1461028d5780633e47158c146102b757806343ca1c50146102cc578063452a9320146102ec57600080fd5b806333d7e2bd146101fd57806335e80ab31461023a57806338d38c971461024f57600080fd5b366101f8576101f63334620186a06000604051806020016040528060008152506106fe565b005b600080fd5b34801561020957600080fd5b5060375461021d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561024657600080fd5b5061021d61095b565b34801561025b57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000003168152602001610231565b34801561029957600080fd5b506102a26109e7565b60405163ffffffff9091168152602001610231565b3480156102c357600080fd5b5061021d610a6e565b3480156102d857600080fd5b506101f66102e736600461457d565b610c52565b3480156102f857600080fd5b5061021d610fa8565b34801561030d57600080fd5b5061032161031c3660046145cf565b61100b565b6040519015158152602001610231565b34801561033d57600080fd5b506101f661034c3660046145ec565b611099565b34801561035d57600080fd5b506101f661036c36600461461a565b611281565b34801561037d57600080fd5b50610386611943565b60405167ffffffffffffffff9091168152602001610231565b3480156103ab57600080fd5b506103cc6103ba3660046146f6565b6000908152603c602052604090205490565b604051908152602001610231565b3480156103e657600080fd5b50604080518082018252600581527f352e322e30000000000000000000000000000000000000000000000000000000602082015290516102319190614767565b34801561043257600080fd5b50603e5461021d906001600160a01b031681565b34801561045257600080fd5b506103216119ca565b34801561046757600080fd5b506101f661047636600461477a565b611a51565b34801561048757600080fd5b506101f661049636600461479f565b611cfd565b3480156104a757600080fd5b506103cc611d0a565b3480156104bc57600080fd5b5060325461021d906001600160a01b031681565b3480156104dc57600080fd5b506103216104eb3660046146f6565b60336020526000908152604090205460ff1681565b34801561050c57600080fd5b5061038661051b3660046147f2565b611d91565b34801561052c57600080fd5b5061021d61053b36600461480f565b611daa565b34801561054c57600080fd5b50603f5461021d906001600160a01b031681565b34801561056c57600080fd5b506105c561057b36600461477a565b60396020908152600092835260408084209091529082529020546001600160a01b0381169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b604080516001600160a01b03909316835267ffffffffffffffff909116602083015201610231565b3480156105f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000c6103cc565b34801561062c57600080fd5b50600154610688906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610231565b3480156106cd57600080fd5b5061021d611de2565b6101f66106e436600461483f565b6106fe565b3480156106f557600080fd5b5061021d611e29565b8260005a905061070c611e8c565b15610749573415610749576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610751611f0e565b156107c65734156107c657603f60009054906101000a90046001600160a01b03166001600160a01b0316631ee116bf346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156107ac57600080fd5b505af11580156107c0573d6000803e3d6000fd5b50505050505b8380156107db57506001600160a01b03871615155b15610812576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081c8351611d91565b67ffffffffffffffff168567ffffffffffffffff161015610869576040517f70c8bdbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156108a7576040517f5aa3bac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336108b0611fcd565b6108cd575033731111000000000000000000000000000000001111015b600034888888886040516020016108e89594939291906148be565b60405160208183030381529060405290506000896001600160a01b0316836001600160a01b03167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161093e9190614767565b60405180910390a45050610952828261200a565b50505050505050565b603754604080517f35e80ab300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916335e80ab39160048083019260209291908290030181865afa1580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614923565b905090565b603e54604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691633c9f397c9160048083019260209291908290030181865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614952565b600080610a997fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b90506001600160a01b03811615610aaf57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610af2919061499e565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610b4d906060015b604051602081830303815290604052805190602001205490565b14610b84576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610ba690606001610b33565b90506001600160a01b03811615610c2057806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190614923565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5a6122e1565b610c62611e8c565b15610ca357606082015115610ca3576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032546001600160a01b031661dead14610ce9576040517fdfeaaeb800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf68260400151612320565b15610d2d576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d3883612349565b9050610d448183611a51565b600081815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d83611f0e565b15610e1557606083015115610e1557603f5460608401516040517f8d445bd00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638d445bd091610de29160040190815260200190565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505b8260200151603260006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000610e5e8460400151856080015186606001518760a00151612396565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610ec390841515815260200190565b60405180910390a2610ed3611f0e565b15610f5d5780158015610eea575060008460600151115b15610f5d57603f60009054906101000a90046001600160a01b03166001600160a01b0316631ee116bf85606001516040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4357600080fd5b505af1158015610f57573d6000803e3d6000fd5b50505050505b80158015610f6b5750326001145b15610fa2576040517fab58103600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b603754604080517f452a932000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163452a93209160048083019260209291908290030181865afa1580156109be573d6000803e3d6000fd5b603e546040517f45884d320000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906345884d3290602401602060405180830381865afa15801561106f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109391906149bd565b92915050565b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff161580156110d9575060005460ff8083169116105b6111505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556111896123f4565b603780546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603e8054928516929091169190911790556111d961245b565b6032546001600160a01b031661121657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61121e61260e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6112896122e1565b6112968560400151612320565b156112cd576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d5611e8c565b1561131657606085015115611316576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611320611e29565b6001600160a01b031663bb8aa1fc866040518263ffffffff1660e01b815260040161134d91815260200190565b606060405180830381865afa15801561136a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138e91906149da565b603e546040517f496b9c160000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301529295509116925063496b9c169150602401602060405180830381865afa1580156113f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141991906149bd565b61144f576040517ff395240e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f04e50fed0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906304e50fed90602401602060405180830381865afa1580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d691906149bd565b61150c576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190614a56565b600281111561158157611581614a27565b036115b8576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61162a816001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d9190614a77565b67ffffffffffffffff1690565b67ffffffffffffffff16421161166c576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61168361167e36869003860186614a94565b612707565b6116eb826001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190614afa565b90565b14611722576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061172d87612349565b9050600081600060405160200161174e929190918252602082015260400190565b60408051601f19818403018152828252805160209182012090830181905292506117c5910160408051601f19818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906117bb8789614b13565b8960400135612746565b1515600003611800576040517f2e57ef3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b03808616825267ffffffffffffffff42811660208085019182526000888152603982528681203380835290835287822096518754945190951674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009094169486169490941792909217909455868152603c845284812080546001810182559082528482200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091558b840151928c01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a35050505050505050565b603e54604080517f4086d18300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634086d1839160048083019260209291908290030181865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614a77565b603754604080517f5c975abb00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635c975abb9160048083019260209291908290030181865afa158015611a2d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e291906149bd565b60008281526039602090815260408083206001600160a01b0385811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152868552603390935292205490919060ff1615611af3576040517f730a107400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816020015167ffffffffffffffff16600003611b3b576040517fcca6afda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7c816001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f9573d6000803e3d6000fd5b67ffffffffffffffff16826020015167ffffffffffffffff1611611bcc576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000c826020015167ffffffffffffffff1642611c079190614b97565b11611c3e576040517fd9bc01be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f6c4f44670000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690636c4f446790602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc591906149bd565b610fa2576040517f332a57f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611d078133610c52565b50565b603e54604080517f952b279700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163952b27979160048083019260209291908290030181865afa158015611d6d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614afa565b6000611d9e826028614bae565b61109390615208614bde565b603c6020528160005260406000208181548110611dc657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000611dec610a6e565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109be573d6000803e3d6000fd5b603e54604080517ff2b4e61700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f2b4e6179160048083019260209291908290030181865afa1580156109be573d6000803e3d6000fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f435553544f4d5f4741535f544f4b454e0000000000000000000000000000000060048201526000916001600160a01b0316906347af267b90602401602060405180830381865afa158015611a2d573d6000803e3d6000fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201526000916001600160a01b0316906347af267b90602401602060405180830381865afa158015611f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb491906149bd565b80156109e2575050603f546001600160a01b0316151590565b6000323303611fdc5750600190565b333b60170361200457604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b600154600090612040907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614b97565b9050600061204c61276a565b90506000816020015160ff16826000015163ffffffff1661206d9190614c39565b905082156121a4576001546000906120a4908390700100000000000000000000000000000000900467ffffffffffffffff16614c83565b90506000836040015160ff16836120bb9190614cf7565b6001546120db9084906fffffffffffffffffffffffffffffffff16614cf7565b6120e59190614c39565b6001549091506000906121369061210f9084906fffffffffffffffffffffffffffffffff16614db3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612823565b905060018611156121655761216261210f82876040015160ff1660018a61215d9190614b97565b612842565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906121d7908490700100000000000000000000000000000000900467ffffffffffffffff16614bde565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612264576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612290906fffffffffffffffffffffffffffffffff1667ffffffffffffffff881661499e565b905060006122a248633b9aca00612897565b6122ac9083614e27565b905060005a6122bb9088614b97565b9050808211156122d7576122d76122d28284614b97565b6128ae565b5050505050505050565b6122e96119ca565b15611cfb576040517fb9c3c2ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b038216301480611093575050603f546001600160a01b0390811691161490565b80516020808301516040808501516060860151608087015160a08801519351600097612379979096959101614e3b565b604051602081830303815290604052805190602001209050919050565b60008060006123a68660006128dc565b9050806123dc576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b336123fd610a6e565b6001600160a01b031614158015612424575033612418611de2565b6001600160a01b031614155b15611cfb576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201526001600160a01b03909116906347af267b90602401602060405180830381865afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250091906149bd565b80156125155750603f546001600160a01b0316155b806125d757506037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201526001600160a01b03909116906347af267b90602401602060405180830381865afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c091906149bd565b1580156125d75750603f546001600160a01b031615155b15611cfb576040517f9c46cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661268b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401611147565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611cfb5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60008160000151826020015183604001518460600151604051602001612379949392919093845260208401929092526040830152606082015260800190565b600080612752866128fa565b90506127608186868661292c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603754604080517fcc731b0200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc731b029160048083019260c09291908290030181865afa1580156127ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110939190614e9b565b6000612838612832858561295c565b8361296c565b90505b9392505050565b6000670de0b6b3a764000061288361285a8583614c39565b61286c90670de0b6b3a7640000614c83565b61287e85670de0b6b3a7640000614cf7565b61297b565b61288d9086614cf7565b6128389190614c39565b6000818310156128a7578161283b565b5090919050565b6000805a90505b825a6128c19083614b97565b10156128d7576128d082614f57565b91506128b5565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161291691815260200190565b6040516020818303038152906040529050919050565b60006129538461293d8786866129ac565b8051602091820120825192909101919091201490565b95945050505050565b6000818312156128a7578161283b565b60008183126128a7578161283b565b600061283b670de0b6b3a764000083612993866132be565b61299d9190614cf7565b6129a79190614c39565b6134e8565b606060008451116129ff5760405162461bcd60e51b815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401611147565b6000612a0a8461370d565b90506000612a17866137f9565b9050600084604051602001612a2e91815260200190565b60405160208183030381529060405290506000805b845181101561324f576000858281518110612a6057612a60614f71565b602002602001015190508451831115612ae15760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401611147565b82600003612b805780518051602091820120604051612b2f92612b0992910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612b7b5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401611147565b612ca3565b805151602011612c1c5780518051602091820120604051612baa92612b0992910190815260200190565b612b7b5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401611147565b805184516020808701919091208251919092012014612ca35760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401611147565b612caf60106001614fa0565b81602001515103612e575784518303612def57612ce98160200151601081518110612cdc57612cdc614f71565b602002602001015161385c565b96506000875111612d625760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401611147565b60018651612d709190614b97565b8214612de45760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401611147565b50505050505061283b565b6000858481518110612e0357612e03614f71565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612e2e57612e2e614f71565b60200260200101519050612e4181613910565b9550612e4e600186614fa0565b9450505061323c565b6002816020015151036131ce576000612e6f82613935565b9050600081600081518110612e8657612e86614f71565b016020015160f81c90506000612e9d600283614fb8565b612ea8906002614fda565b90506000612eb9848360ff16613959565b90506000612ec78a89613959565b90506000612ed5838361398f565b905080835114612f4d5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401611147565b60ff851660021480612f62575060ff85166003145b156131035780825114612fdd5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401611147565b612ff78760200151600181518110612cdc57612cdc614f71565b9c5060008d51116130705760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401611147565b60018c5161307e9190614b97565b88146130f25760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401611147565b50505050505050505050505061283b565b60ff85161580613116575060ff85166001145b1561315557613142876020015160018151811061313557613135614f71565b6020026020010151613910565b995061314e818a614fa0565b98506131c3565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401611147565b50505050505061323c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401611147565b508061324781614f57565b915050612a43565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401611147565b600080821361330f5760405162461bcd60e51b815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611147565b6000606061331c84613a43565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361351957506000919050565b680755bf798b4a1bf1e582126135715760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401611147565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561372b5761372b6143e9565b60405190808252806020026020018201604052801561377057816020015b60408051808201909152606080825260208201528152602001906001900390816137495790505b50915060005b818110156137f257604051806040016040528085838151811061379b5761379b614f71565b602002602001015181526020016137ca8684815181106137bd576137bd614f71565b6020026020010151613aff565b8152508382815181106137df576137df614f71565b6020908102919091010152600101613776565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613851578060011b82018184015160001a8060041c8253600f811660018301535050600101613823565b509295945050505050565b6060600080600061386c85613b12565b91945092509050600081600181111561388757613887614a27565b146138be576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138c88284614fa0565b855114613901576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61295385602001518484613fb0565b6060602082600001511061392c576139278261385c565b611093565b61109382614044565b60606110936139548360200151600081518110612cdc57612cdc614f71565b6137f9565b6060825182106139785750604080516020810190915260008152611093565b61283b838384865161398a9190614b97565b61405a565b60008082518451106139a25782516139a5565b83515b90505b8082108015613a2c57508282815181106139c4576139c4614f71565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613a0357613a03614f71565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613a3c578160010191506139a8565b5092915050565b6000808211613a945760405162461bcd60e51b815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611147565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060611093613b0d836141c6565b614233565b60008060008360000151600003613b55576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111613b7a576000600160009450945094505050613fa9565b60b78111613c90576000613b8f608083614b97565b905080876000015111613bce576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015613c4657507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15613c7d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250613fa9915050565b60bf8111613dee576000613ca560b783614b97565b905080876000015111613ce4576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613d46576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613d8e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d988184614fa0565b895111613dd1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ddc836001614fa0565b9750955060009450613fa99350505050565b60f78111613e53576000613e0360c083614b97565b905080876000015111613e42576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250613fa9915050565b6000613e6060f783614b97565b905080876000015111613e9f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613f01576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613f49576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f538184614fa0565b895111613f8c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f97836001614fa0565b9750955060019450613fa99350505050565b9193909250565b60608167ffffffffffffffff811115613fcb57613fcb6143e9565b6040519080825280601f01601f191660200182016040528015613ff5576020820181803683370190505b509050811561283b57600061400a8486614fa0565b90506020820160005b8481101561402b578281015182820152602001614013565b8481111561403a576000858301525b5050509392505050565b6060611093826020015160008460000151613fb0565b60608182601f0110156140af5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611147565b8282840110156141015760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611147565b818301845110156141545760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401611147565b60608215801561417357604051915060008252602082016040526141bd565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141ac578051835260209283019201614194565b5050858452601f01601f1916604052505b50949350505050565b60408051808201909152600080825260208201528151600003614215576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061424385613b12565b91945092509050600181600181111561425e5761425e614a27565b14614295576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516142a18385614fa0565b146142d8576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816142ef5790505093506000835b86518110156143dd576000806143626040518060400160405280858c600001516143469190614b97565b8152602001858c6020015161435b9190614fa0565b9052613b12565b50915091506040518060400160405280838361437e9190614fa0565b8152602001848b602001516143939190614fa0565b8152508885815181106143a8576143a8614f71565b60209081029190910101526143be600185614fa0565b93506143ca8183614fa0565b6143d49084614fa0565b9250505061431c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614441576144416143e9565b604052919050565b6001600160a01b0381168114611d0757600080fd5b600082601f83011261446f57600080fd5b813567ffffffffffffffff811115614489576144896143e9565b61449c6020601f19601f84011601614418565b8181528460208386010111156144b157600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156144e057600080fd5b60405160c0810167ffffffffffffffff8282108183111715614504576145046143e9565b81604052829350843583526020850135915061451f82614449565b8160208401526040850135915061453582614449565b816040840152606085013560608401526080850135608084015260a085013591508082111561456357600080fd5b506145708582860161445e565b60a0830152505092915050565b6000806040838503121561459057600080fd5b823567ffffffffffffffff8111156145a757600080fd5b6145b3858286016144ce565b92505060208301356145c481614449565b809150509250929050565b6000602082840312156145e157600080fd5b813561283b81614449565b600080604083850312156145ff57600080fd5b823561460a81614449565b915060208301356145c481614449565b600080600080600085870360e081121561463357600080fd5b863567ffffffffffffffff8082111561464b57600080fd5b6146578a838b016144ce565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561469057600080fd5b60408901955060c08901359250808311156146aa57600080fd5b828901925089601f8401126146be57600080fd5b82359150808211156146cf57600080fd5b508860208260051b84010111156146e557600080fd5b959894975092955050506020019190565b60006020828403121561470857600080fd5b5035919050565b60005b8381101561472a578181015183820152602001614712565b83811115610fa25750506000910152565b6000815180845261475381602086016020860161470f565b601f01601f19169290920160200192915050565b60208152600061283b602083018461473b565b6000806040838503121561478d57600080fd5b8235915060208301356145c481614449565b6000602082840312156147b157600080fd5b813567ffffffffffffffff8111156147c857600080fd5b6147d4848285016144ce565b949350505050565b67ffffffffffffffff81168114611d0757600080fd5b60006020828403121561480457600080fd5b813561283b816147dc565b6000806040838503121561482257600080fd5b50508035926020909101359150565b8015158114611d0757600080fd5b600080600080600060a0868803121561485757600080fd5b853561486281614449565b9450602086013593506040860135614879816147dc565b9250606086013561488981614831565b9150608086013567ffffffffffffffff8111156148a557600080fd5b6148b18882890161445e565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b60488201526000825161491281604985016020870161470f565b919091016049019695505050505050565b60006020828403121561493557600080fd5b815161283b81614449565b63ffffffff81168114611d0757600080fd5b60006020828403121561496457600080fd5b815161283b81614940565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160001904831182151516156149b8576149b861496f565b500290565b6000602082840312156149cf57600080fd5b815161283b81614831565b6000806000606084860312156149ef57600080fd5b83516149fa81614940565b6020850151909350614a0b816147dc565b6040850151909250614a1c81614449565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215614a6857600080fd5b81516003811061283b57600080fd5b600060208284031215614a8957600080fd5b815161283b816147dc565b600060808284031215614aa657600080fd5b6040516080810181811067ffffffffffffffff82111715614ac957614ac96143e9565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600060208284031215614b0c57600080fd5b5051919050565b600067ffffffffffffffff80841115614b2e57614b2e6143e9565b8360051b6020614b3f818301614418565b868152918501918181019036841115614b5757600080fd5b865b84811015614b8b57803586811115614b715760008081fd5b614b7d36828b0161445e565b845250918301918301614b59565b50979650505050505050565b600082821015614ba957614ba961496f565b500390565b600067ffffffffffffffff80831681851681830481118215151615614bd557614bd561496f565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c0157614c0161496f565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614c4857614c48614c0a565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615614c7e57614c7e61496f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614cbd57614cbd61496f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614cf157614cf161496f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614d3857614d3861496f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614d7357614d7361496f565b60008712925087820587128484161615614d8f57614d8f61496f565b87850587128184161615614da557614da561496f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614ded57614ded61496f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614e2157614e2161496f565b50500190565b600082614e3657614e36614c0a565b500490565b86815260006001600160a01b03808816602084015280871660408401525084606083015283608083015260c060a0830152614e7960c083018461473b565b98975050505050505050565b805160ff81168114614e9657600080fd5b919050565b600060c08284031215614ead57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ed057614ed06143e9565b6040528251614ede81614940565b8152614eec60208401614e85565b6020820152614efd60408401614e85565b60408201526060830151614f1081614940565b60608201526080830151614f2381614940565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114614f4b57600080fd5b60a08201529392505050565b60006000198203614f6a57614f6a61496f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115614fb357614fb361496f565b500190565b600060ff831680614fcb57614fcb614c0a565b8060ff84160691505092915050565b600060ff821660ff841680821015614ff457614ff461496f565b9003939250505056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "0xcddd9799b3dd219f4220f73495e89da1690f1828": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806378ecabce11610076578063b6a4cd211161005b578063b6a4cd21146101a4578063c993f27c146101b9578063cbeda5a7146101cc57600080fd5b806378ecabce1461012a578063b51f9c2b1461014d57600080fd5b80631d8a4e92146100a857806330e9012c146100c3578063318b1b80146100d85780635a4dab3314610103575b600080fd5b6100b06101df565b6040519081526020015b60405180910390f35b6100cb610268565b6040516100ba9190612b93565b6100eb6100e6366004612cf7565b61037c565b6040516001600160a01b0390911681526020016100ba565b6100eb7f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61013d610138366004612cf7565b6103f7565b60405190151581526020016100ba565b6101556104a2565b6040516100ba919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6101b76101b2366004612d25565b61054f565b005b6101b76101c7366004612d25565b6105a6565b6101b76101da366004612def565b610742565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561023f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102639190612ecc565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610358573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102639190612ef0565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103eb90613048565b60601c95945050505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049c9190613098565b92915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561052b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026391906130ba565b806001600160a01b03163b6000036105a3576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b610685816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261060f91908101906131d1565b610617610a2b565b600001516001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261068091908101906131d1565b610b1b565b156106bc576040517f1b44701300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106c6610a2b565b90506000826001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190613222565b905061073d81848460000151610b3e565b505050565b600061074c610a2b565b905060005b825181101561073d5761077c83828151811061076f5761076f61323f565b6020026020010151610bc8565b60008382815181106107905761079061323f565b6020026020010151600001516001600160a01b031663d6ae3cd56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190612ecc565b905060008483815181106108135761081361323f565b6020026020010151600001516001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190613222565b905061095a816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108eb91908101906131d1565b85600001516001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa15801561092d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261095591908101906131d1565b610bd3565b15610994576040517fccc6ea860000000000000000000000000000000000000000000000000000000081526004810184905260240161059a565b6109b8848685815181106109aa576109aa61323f565b602002602001015184610c4c565b306001600160a01b03168584815181106109d4576109d461323f565b6020026020010151600001516001600160a01b0316837f78bc67b9bf548ef6410becd31a3e10b9ea6c255974ef6b4530728b431df3003060405160405180910390a450508080610a239061329d565b915050610751565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f18286001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610358573d6000803e3d6000fd5b6000610b278383611493565b80610b375750610b3783836114df565b9392505050565b610b478161054f565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015282811660248301528416906399a88ec490604401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b50505050505050565b80516105a39061054f565b600080610bdf84611505565b90506000610bec84611505565b805183519192501180610c12575080518251148015610c12575080602001518260200151105b80610c43575080518251148015610c30575080602001518260200151145b8015610c43575080604001518260400151105b95945050505050565b600082600001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb49190613222565b9050610cc98184600001518660c00151610b3e565b600083600001516001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d319190613222565b9050610d3d60016103f7565b1561102a57610d5182828760800151610b3e565b6000816001600160a01b031663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db59190613222565b90506001600160a01b038116610f3f57610e128484610dd788600001516116d1565b6040518060400160405280600f81526020017f4554484c6f636b626f782d5531366100000000000000000000000000000000008152506116ff565b60408051600180825281830190925291925060009190602080830190803683370190505090508281600081518110610e4c57610e4c61323f565b60200260200101906001600160a01b031690816001600160a01b031681525050610eea84838960a00151896000015185604051602401610e8d9291906132b7565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f946d92040000000000000000000000000000000000000000000000000000000017905261175d565b826001600160a01b031663bda204bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b50505050505b6000826001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa39190613222565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528481166024830152919250908416906399a88ec490604401600060405180830381600087803b15801561100b57600080fd5b505af115801561101f573d6000803e3d6000fd5b505050505050611039565b61103982828760600151610b3e565b6110aa82826001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190613222565b876101600151610b3e565b61111e8285600001516001600160a01b0316639b7d7f0a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190613222565b8760e00151610b3e565b600084600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111869190613222565b90506111988382886101400151610b3e565b600085600001516001600160a01b031663a39fac126040518163ffffffff1660e01b815260040160e060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190613312565b9050611216848260000151896101000151610b3e565b61122a848260400151896101200151610b3e565b61123d8482602001518960400151610b3e565b50600061124b8260016117dd565b905061127187868361125f86866001611867565b61126b87876001611982565b8b611a70565b600061127e8360006117dd565b90506001600160a01b0381161561148957600087600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f79190613222565b905060008060001b61130a8a6020015190565b036113205761131b82846000611bdb565b611326565b88602001515b905061134e8a898361133a89886000611867565b6113468a896000611982565b600088611cee565b604089015115611486576113828a898b6040015161136e89886000611867565b61137a8a896000611982565b600888611cee565b6040517f6593dc6e000000000000000000000000000000000000000000000000000000008152600060048201819052906001600160a01b03841690636593dc6e90602401602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190612ecc565b6040517f1e33424000000000000000000000000000000000000000000000000000000000815260086004820152602481018290529091506001600160a01b03841690631e33424090604401600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050505b50505b5050505050505050565b60008061149f84611505565b905060006114ac84611505565b805183519192501480156114c7575080602001518260200151145b8015610c435750604090810151910151149392505050565b60006114eb8383611493565b158015610b3757506114fd8383610bd3565b159392505050565b61152960405180606001604052806000815260200160008152602001600081525090565b600061156a836040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250611da1565b90506003815110156115a8576040517f9eda858c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611603826002815181106115c0576115c061323f565b60200260200101516040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250611da1565b905060006116608260008151811061161d5761161d61323f565b60200260200101516040518060400160405280600181526020017f2b00000000000000000000000000000000000000000000000000000000000000815250611da1565b90506040518060600160405280611690856000815181106116835761168361323f565b6020026020010151611e4c565b81526020016116ab856001815181106116835761168361323f565b81526020016116c6836000815181106116835761168361323f565b905295945050505050565b604080516001600160a01b0383166020820152606091015b6040516020818303038152906040529050919050565b60008061170d868585611ec4565b905061175361171a611efa565b60200151828760405160200161173f91906001600160a01b0391909116815260200190565b604051602081830303815290604052611f83565b9695505050505050565b6117668261054f565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d906117af908690869086906004016133f6565b600060405180830381600087803b1580156117c957600080fd5b505af1158015611489573d6000803e3d6000fd5b6040517f1b685b9e00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526000906001600160a01b03841690631b685b9e90602401602060405180830381865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190613222565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa1580156118cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f791908101906131d1565b9050805160000361196c57836001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190613222565b915050610b37565b611975816120bd565b6060015195945050505050565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa1580156119ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a1291908101906131d1565b90508051600003611a5b57836001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b611a64816120bd565b60400151915050610b37565b600081600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad89190613222565b6020830151909150600090611afa57611af382876001611bdb565b9050611b01565b5060208201515b80611b38576040517fefc878f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000886101e0015190506000611bcc6040518060e00160405280611b598690565b81526020018c6101a001516001600160a01b03168152602001886001600160a01b03168152602001896001600160a01b031681526020018b8152602001611ba2878c60016121ef565b6001600160a01b03168152602001611bbc878c60016122dd565b6001600160a01b031690526123cb565b90506114868460018484612502565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611c43573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6b91908101906131d1565b90508051600003611cd857836001600160a01b0316638d450a956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190612ecc565b6000611ce3826120bd565b519250610b37915050565b84611d25576040517fefc878f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000876101c0015190506000611d886040518060e00160405280611d468a90565b81526101a08c01516001600160a01b039081166020830152888116604083015289166060820152608081018b9052600060a0820181905260c0909101526123cb565b9050611d9683858484612502565b505050505050505050565b60606000611daf848461254b565b9050601f1960208201600183510160051b81018651838201526001845101845260005b825160608452818114611e175760405182820380825286601f8201165b8b850181015183820152870180611def5750600082820160200152603f018616810160405284525b875160209490940193019050818310611dd257505050508091508251611e4557602081019150600281510382525b5092915050565b80516000907f1999999999999999999999999999999999999999999999999999999999999999825b600181019050603060ff82870151160382851185600a028281019650600983118188108317171586029550505050828110611e7457505080611ebe5763101827966000526004601cfd5b50919050565b6000838383604051602001611edb93929190613422565b6040516020818303038152906040528051906020012090509392505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f18286001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561052b573d6000803e3d6000fd5b600080611fb4856001600160a01b0316803b806020016040519081016040528181526000908060200190933c61261a565b805190915060ff1615611ffb5780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff909116600482015260240161059a565b6020810151511561203e5780602001516040517f57a0583500000000000000000000000000000000000000000000000000000000815260040161059a919061344d565b6000816040015184604051602001612057929190613460565b6040516020818303038152906040529050848151602083016000f592506001600160a01b0383166120b4576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152815160a4811480159061210a5750607c8114155b15612141576040517fbff6e41600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151604084015160548501516068860151607c870151606093841c9392831c929190911c906000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c88016121a7575050609c88015160b0890151606091821c911c5b6040805160e0810182529788526001600160a01b0396871660208901529486169487019490945291841660608601526080850152821660a08401521660c08201529392505050565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015612257573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261227f91908101906131d1565b905080516000036122c857836001600160a01b031663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b6122d1816120bd565b60a00151915050610b37565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015612345573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236d91908101906131d1565b905080516000036123b657836001600160a01b031663534db0e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b6123bf816120bd565b60c00151915050610b37565b60a08101516060906001600160a01b03161580156123f4575060c08201516001600160a01b0316155b1561246b5781516020808401516040808601516060870151608088015192516116e996959293919201948552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602087015292841b83166034860152921b166048830152605c820152607c0190565b8151602080840151604080860151606080880151608089015160a08a015160c08b01518651988901999099527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000096841b87169588019590955292821b85166054870152811b84166068860152607c85019190915290811b8216609c8401529290921b90911660b082015260c4016116e9565b919050565b6040517fb10709570000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063b1070957906117af9086908690869060040161348f565b60608251825181811161261257602085019450602084019350602060405101925084600182848801030160006020841061258457508286205b601f841660200360031b87515b8951818118831c6125e65783156125c45783878c20146125c45760018b019a50848b106125be57506125f5565b50612591565b858b0389529986019960209098019786156125e657848b106125be57506125f5565b5060018a019950838a10612591575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6126416040518060600160405280600060ff16815260200160608152602001606081525090565b6002825110806126ab57508160008151811061265f5761265f61323f565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b806127105750816001815181106126c4576126c461323f565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15612747576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028360028151811061275e5761275e61323f565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c905060008360028151811061278e5761278e61323f565b60209101015160f81c600390811691508190036127d7576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156128c35760008260ff1667ffffffffffffffff81111561280057612800612d42565b6040519080825280601f01601f19166020018201604052801561282a576020820181803683370190505b50905060005b8360ff168110156128b557866128478260036134bd565b815181106128575761285761323f565b602001015160f81c60f81b8282815181106128745761287461323f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806128ad8161329d565b915050612830565b506128bf81612ad9565b9150505b60008167ffffffffffffffff8111156128de576128de612d42565b6040519080825280601f01601f191660200182016040528015612908576020820181803683370190505b50905060ff8316156129ad5760006129218460036134d5565b60ff16905060005b838110156129aa578761293c82846134bd565b8151811061294c5761294c61323f565b602001015160f81c60f81b8382815181106129695761296961323f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806129a28161329d565b915050612929565b50505b6000826129bb8560036134d5565b60ff166129c891906134bd565b905060008188516129d991906134fa565b905080600003612a15576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115612a3057612a30612d42565b6040519080825280601f01601f191660200182016040528015612a5a576020820181803683370190505b50905060008360208b0101602083018481868460045afa9250505080612aac576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6000602082511115612b17576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8351811015611e4557612b2f8160016134bd565b8451612b3b91906134fa565b612b46906008613511565b612b51906002613614565b848281518110612b6357612b6361323f565b0160200151612b75919060f81c613511565b612b7f90836134bd565b915080612b8b8161329d565b915050612b1b565b81516001600160a01b0316815261024081016020830151612bbf60208401826001600160a01b03169052565b506040830151612bda60408401826001600160a01b03169052565b506060830151612bf560608401826001600160a01b03169052565b506080830151612c1060808401826001600160a01b03169052565b5060a0830151612c2b60a08401826001600160a01b03169052565b5060c0830151612c4660c08401826001600160a01b03169052565b5060e0830151612c6160e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e08085015182169084015261020080850151821690840152610220808501519182168185015290612612565b600060208284031215612d0957600080fd5b5035919050565b6001600160a01b03811681146105a357600080fd5b600060208284031215612d3757600080fd5b8135610b3781612d10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715612d9457612d94612d42565b60405290565b604051610240810167ffffffffffffffff81118282101715612d9457612d94612d42565b604051601f8201601f1916810167ffffffffffffffff81118282101715612de757612de7612d42565b604052919050565b60006020808385031215612e0257600080fd5b823567ffffffffffffffff80821115612e1a57600080fd5b818501915085601f830112612e2e57600080fd5b813581811115612e4057612e40612d42565b612e4e848260051b01612dbe565b81815284810192506060918202840185019188831115612e6d57600080fd5b938501935b82851015612ec05780858a031215612e8a5760008081fd5b612e92612d71565b8535612e9d81612d10565b815285870135878201526040808701359082015284529384019392850192612e72565b50979650505050505050565b600060208284031215612ede57600080fd5b5051919050565b80516124fd81612d10565b60006102408284031215612f0357600080fd5b612f0b612d9a565b612f1483612ee5565b8152612f2260208401612ee5565b6020820152612f3360408401612ee5565b6040820152612f4460608401612ee5565b6060820152612f5560808401612ee5565b6080820152612f6660a08401612ee5565b60a0820152612f7760c08401612ee5565b60c0820152612f8860e08401612ee5565b60e0820152610100612f9b818501612ee5565b90820152610120612fad848201612ee5565b90820152610140612fbf848201612ee5565b90820152610160612fd1848201612ee5565b90820152610180612fe3848201612ee5565b908201526101a0612ff5848201612ee5565b908201526101c0613007848201612ee5565b908201526101e0613019848201612ee5565b9082015261020061302b848201612ee5565b9082015261022061303d848201612ee5565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156130905780818460140360031b1b83161693505b505050919050565b6000602082840312156130aa57600080fd5b81518015158114610b3757600080fd5b600060a082840312156130cc57600080fd5b60405160a0810181811067ffffffffffffffff821117156130ef576130ef612d42565b60405282516130fd81612d10565b8152602083015161310d81612d10565b6020820152604083015161312081612d10565b6040820152606083015161313381612d10565b6060820152608083015161314681612d10565b60808201529392505050565b60005b8381101561316d578181015183820152602001613155565b8381111561317c576000848401525b50505050565b600067ffffffffffffffff83111561319c5761319c612d42565b6131af6020601f19601f86011601612dbe565b90508281528383830111156131c357600080fd5b610b37836020830184613152565b6000602082840312156131e357600080fd5b815167ffffffffffffffff8111156131fa57600080fd5b8201601f8101841361320b57600080fd5b61321a84825160208401613182565b949350505050565b60006020828403121561323457600080fd5b8151610b3781612d10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982036132b0576132b061326e565b5060010190565b6000604082016001600160a01b0380861684526020604081860152828651808552606087019150828801945060005b818110156133045785518516835294830194918301916001016132e6565b509098975050505050505050565b600060e0828403121561332457600080fd5b60405160e0810181811067ffffffffffffffff8211171561334757613347612d42565b604052825161335581612d10565b8152602083015161336581612d10565b6020820152604083015161337881612d10565b6040820152606083015161338b81612d10565b606082015261339c60808401612ee5565b60808201526133ad60a08401612ee5565b60a08201526133be60c08401612ee5565b60c08201529392505050565b600081518084526133e2816020860160208601613152565b601f01601f19169290920160200192915050565b60006001600160a01b03808616835280851660208401525060606040830152610c4360608301846133ca565b83815260606020820152600061343b60608301856133ca565b828103604084015261175381856133ca565b602081526000610b3760208301846133ca565b60008351613472818460208801613152565b835190830190613486818360208801613152565b01949350505050565b63ffffffff841681526001600160a01b0383166020820152606060408201526000610c4360608301846133ca565b600082198211156134d0576134d061326e565b500190565b600060ff821660ff84168060ff038211156134f2576134f261326e565b019392505050565b60008282101561350c5761350c61326e565b500390565b600081600019048311821515161561352b5761352b61326e565b500290565b600181815b8085111561356b5781600019048211156135515761355161326e565b8085161561355e57918102915b93841c9390800290613535565b509250929050565b6000826135825750600161049c565b8161358f5750600061049c565b81600181146135a557600281146135af576135cb565b600191505061049c565b60ff8411156135c0576135c061326e565b50506001821b61049c565b5060208310610133831016604e8410600b84101617156135ee575081810a61049c565b6135f88383613530565b806000190482111561360c5761360c61326e565b029392505050565b6000610b37838361357356fea164736f6c634300080f000a", + "nonce": 1, + "storage": {} + }, + "0xe2daae86373cd936d1477a186a8304d86c96ae0e": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000002500000000000000000000000000000000000000003b9aca00", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x000000000000000000000000000000000000000000000000000000000000dead", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x000000000000000000000000c3237117312fcd40bbfe8a4fe93b1c74a2e0d78f", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000cdb7a450076dc6c607b60c6956bace4cca77c12f", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0xf5059a5d33d5853360d16c683c16e67980206f36": { + "balance": "0x0", + "code": "0x608060405234801561000f575f80fd5b50600436106100b9575f3560e01c8063bd5e21c111610072578063cda752ff11610058578063cda752ff146101c8578063dac79fc814610206578063ed0fb60314610219575f80fd5b8063bd5e21c1146101a3578063cd8f6997146101b6575f80fd5b80636d8f5aa9116100a25780636d8f5aa9146101545780639f3eb6721461017c578063a628a19e14610192575f80fd5b80630f1f0f86146100bd578063213b2658146100d2575b5f80fd5b6100d06100cb36600461043e565b505050565b005b6100d06100e036600461049a565b73ffffffffffffffffffffffffffffffffffffffff919091165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6101676101623660046104cb565b61021f565b60405190151581526020015b60405180910390f35b61016761018a3660046104f3565b600192915050565b6100d06101a0366004610514565b50565b6100d06101b1366004610534565b6102d7565b6100d06101c436600461058a565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6100d06102143660046106b8565b610366565b5f6101e1565b5f7fffffffffffffffffffffffff1e92a3bf7f3f05292d10b14f839a898b5de8d8e473ffffffffffffffffffffffffffffffffffffffff84160161026457505f6102d1565b60015f83600181111561027957610279610733565b600181111561028a5761028a610733565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff8716825290925290205460ff16156102cd575060016102d1565b5060015b92915050565b8160015f8360018111156102ed576102ed610733565b60018111156102fe576102fe610733565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9790971681529590915290932080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092555050565b60148410610415575f61037c6014828789610760565b61038591610787565b60601c90506001805f8460018111156103a0576103a0610733565b60018111156103b1576103b1610733565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9590951681529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b5050505050565b8035801515811461042b575f80fd5b919050565b80356002811061042b575f80fd5b5f805f60608486031215610450575f80fd5b833592506104606020850161041c565b915061046e60408501610430565b90509250925092565b803573ffffffffffffffffffffffffffffffffffffffff8116811461042b575f80fd5b5f80604083850312156104ab575f80fd5b6104b483610477565b91506104c26020840161041c565b90509250929050565b5f80604083850312156104dc575f80fd5b6104e583610477565b91506104c260208401610430565b5f8060408385031215610504575f80fd5b823591506104c260208401610430565b5f60208284031215610524575f80fd5b61052d82610477565b9392505050565b5f805f60608486031215610546575f80fd5b61054f84610477565b92506104606020850161041c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561059b575f80fd5b823567ffffffffffffffff808211156105b2575f80fd5b818501915085601f8301126105c5575f80fd5b81356020828211156105d9576105d961055d565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110868211171561061c5761061c61055d565b604052928352818301935084810182019289841115610639575f80fd5b948201945b838610156106575785358552948201949382019361063e565b96506106669050878201610430565b9450505050509250929050565b5f8083601f840112610683575f80fd5b50813567ffffffffffffffff81111561069a575f80fd5b6020830191508360208285010111156106b1575f80fd5b9250929050565b5f805f805f606086880312156106cc575f80fd5b853567ffffffffffffffff808211156106e3575f80fd5b6106ef89838a01610673565b90975095506020880135915080821115610707575f80fd5b5061071488828901610673565b9094509250610727905060408701610430565b90509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f808585111561076e575f80fd5b8386111561077a575f80fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156107c75780818660140360031b1b83161692505b50509291505056fea164736f6c6343000819000a", + "nonce": 1, + "storage": {} + }, + "0xfff5f6fef1779e1faa40d4382c1b47b5204d1052": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000033dadc2d1aa9bb613a7ae6b28425ea00d44c6998", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" + } + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E": { + "balance": "0x56BC75E2D63100000" + } + }, + "config": { + "chainId": 11155111, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "shanghaiTime": 0, + "cancunTime": 0, + "pragueTime": 0, + "terminalTotalDifficulty": 0, + "terminalTotalDifficultyPassed": true, + "depositContractAddress": "0x0000000000000000000000000000000000000000", + "blobSchedule": { + "cancun": { + "target": 3, + "max": 6, + "baseFeeUpdateFraction": 3338477 + }, + "prague": { + "target": 6, + "max": 9, + "baseFeeUpdateFraction": 5007716 + } + } + }, + "nonce": "0x0", + "timestamp": "0x685c6a58", + "extraData": "0x", + "gasLimit": "0x2aea540", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x3b9aca00", + "excessBlobGas": null, + "blobGasUsed": null +} \ No newline at end of file diff --git a/espresso_e2e/nitro/nitro-config/nitro_config.json b/espresso_e2e/nitro/nitro-config/nitro_config.json index d9152b2..0ed3cc7 100644 --- a/espresso_e2e/nitro/nitro-config/nitro_config.json +++ b/espresso_e2e/nitro/nitro-config/nitro_config.json @@ -2,7 +2,7 @@ "ensure-rollup-deployment": false, "parent-chain": { "connection": { - "url": "ws://demo-l1-network:8546" + "url": "http://l1-geth:8545" } }, "chain": { @@ -63,7 +63,7 @@ }, "espresso": { "batch-poster": { - "hotshot-url": "http://espresso-dev-node:41000", + "hotshot-url": "http://espresso-dev-node:24000", "resubmit-espresso-tx-deadline": "2m", "tee-type": "SGX", "txns-monitoring-interval": "1s" diff --git a/espresso_e2e/op/deployment/l1-config/genesis.json b/espresso_e2e/op/deployment/l1-config/genesis.json index 1da03e5..edb5abc 100644 --- a/espresso_e2e/op/deployment/l1-config/genesis.json +++ b/espresso_e2e/op/deployment/l1-config/genesis.json @@ -794,4 +794,4 @@ "baseFeePerGas": "0x3b9aca00", "excessBlobGas": null, "blobGasUsed": null -} +} \ No newline at end of file diff --git a/go.mod b/go.mod index 8b8ff00..a7e2722 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.25.1 require ( github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 - github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b + github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f github.com/ethereum-optimism/optimism v1.16.7 github.com/ethereum/go-ethereum v1.17.1 github.com/spf13/pflag v1.0.6 diff --git a/go.sum b/go.sum index 28073ab..be99b09 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 h1:1hf/k2rGqIGEGQW8O3 github.com/EspressoSystems/espresso-network/sdks/go v0.3.4/go.mod h1:kaxR08mJb5Mijy7a2RhWCIWOevFI4PcXwDkzoEbsVTk= github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b h1:uwJlK4OxQRjUM67cULaaFo1BVZ+T9LEZu6Xu98EImps= github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f h1:JOHzrvN/fMGMBG1WB1C4zi3qKMMYQ2GHsO2MNgE14ek= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 03ab4ba..d8c29e0 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -3,8 +3,8 @@ package verifier import ( "bytes" "context" - "errors" "fmt" + "math/big" "sync" "sync/atomic" "time" @@ -17,12 +17,15 @@ import ( nitroStreamer "github.com/EspressoSystems/espresso-streamers/nitro" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rlp" ) type NitroEspressoBatchVerifierConfig struct { FeedURL string `json:"feed_url"` + FullNodeExecutionRPC string `json:"full_node_execution_rpc"` VerificationInterval time.Duration `json:"verification_interval"` QueryServiceURL string `json:"query_service_url"` Namespace uint64 `json:"namespace"` @@ -34,9 +37,12 @@ type NitroEspressoBatchVerifierConfig struct { // match what the Nitro Espresso streamer has buffered from HotShot. // It peeks the next message from the streamer, fetches the corresponding message // from the feed by sequence number, and compares them byte-for-byte via RLP encoding. +// When the feed has cleaned a message, it falls back to advancing on Nitro L2 finality, +// mirroring the OP stack pattern of max(espresso, l2_finalized). type NitroEspressoBatchVerifier struct { streamer nitroStreamer.EspressoStreamerInterface feedClient *feedclient.FeedClient + l2Client *ethclient.Client espressoStore *espressoStore.EspressoStore config *NitroEspressoBatchVerifierConfig logger log.Logger @@ -62,6 +68,12 @@ func NewNitroEspressoBatchVerifier( return nil } + l2Client, err := ethclient.DialContext(ctx, config.FullNodeExecutionRPC) + if err != nil { + logger.Crit("failed to dial Nitro L2 RPC", "url", config.FullNodeExecutionRPC, "error", err) + return nil + } + batcherAddrs := make([]common.Address, 0, len(config.ValidBatcherAddresses)) for _, addr := range config.ValidBatcherAddresses { batcherAddrs = append(batcherAddrs, common.HexToAddress(addr)) @@ -79,6 +91,7 @@ func NewNitroEspressoBatchVerifier( ec, batcherAddrs, time.Second, + 1, logger, ) @@ -87,6 +100,7 @@ func NewNitroEspressoBatchVerifier( return &NitroEspressoBatchVerifier{ streamer: streamer, feedClient: fc, + l2Client: l2Client, espressoStore: store, config: config, logger: logger, @@ -134,17 +148,42 @@ func (v *NitroEspressoBatchVerifier) run(ctx context.Context) { } } -func (v *NitroEspressoBatchVerifier) verifyAndAdvance(_ context.Context) { +func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { v.logger.Debug("Starting Nitro batch verification") + nitroFinalizedBlock, err := v.getNitroFinalizedL2Block(ctx) + if err != nil { + v.logger.Error("failed to fetch Nitro finalized L2 block", "error", err) + } + + // If the streamer is behind the store, reset it directly to the current position. + espressoState := v.espressoStore.GetState() + if msg := v.streamer.Peek(); msg != nil && msg.Pos <= espressoState.L2BlockNumber { + v.logger.Debug("streamer behind store, resetting", "seq_num", msg.Pos, "store_l2", espressoState.L2BlockNumber) + v.streamer.Reset(espressoState.L2BlockNumber, espressoState.FallbackHotshotHeight) + } + espressoMsg := v.streamer.Peek() if espressoMsg == nil { + if err == nil { + if syncErr := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); syncErr != nil { + v.logger.Error("failed to sync espresso state with Nitro finality", "error", syncErr) + } + } v.logger.Debug("no new messages to verify") return } feedMsg := v.feedClient.GetMessage(espressoMsg.Pos) if feedMsg == nil { + if err == nil && nitroFinalizedBlock >= espressoMsg.Pos { + v.logger.Info("feed missing message but L2 finalized, advancing on Nitro finality", + "seq_num", espressoMsg.Pos, + "nitro_finalized", nitroFinalizedBlock, + ) + v.advanceOnNitroFinality(espressoMsg, nitroFinalizedBlock) + return + } v.logger.Info("feed does not have message yet, will retry", "seq_num", espressoMsg.Pos) return } @@ -174,7 +213,91 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(_ context.Context) { ) } +func (v *NitroEspressoBatchVerifier) getNitroFinalizedL2Block(ctx context.Context) (uint64, error) { + header, err := v.l2Client.HeaderByNumber(ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) + if err != nil { + return 0, fmt.Errorf("failed to fetch Nitro finalized L2 block: %w", err) + } + if header == nil { + return 0, fmt.Errorf("Nitro finalized L2 block not found") + } + return header.Number.Uint64(), nil +} + +// syncEspressoStateWithNitroFinality advances the store to max(espresso, nitroFinalized) +// without advancing the streamer. Called when the streamer has no new messages. +func (v *NitroEspressoBatchVerifier) syncEspressoStateWithNitroFinality(nitroFinalizedBlock uint64) error { + espressoState := v.espressoStore.GetState() + blockNumberToStore := espressoState.L2BlockNumber + if nitroFinalizedBlock > blockNumberToStore { + v.logger.Error("Nitro finalized L2 block is ahead of Espresso finalized block", + "nitro_finalized", nitroFinalizedBlock, + "espresso_finalized", espressoState.L2BlockNumber, + ) + blockNumberToStore = nitroFinalizedBlock + } + hotshotFallback := v.streamer.GetCurrentEarliestHotShotBlockNumber(blockNumberToStore) + _, err := v.espressoStore.UpdateIfGreater(blockNumberToStore, hotshotFallback) + return err +} + +// advanceOnNitroFinality advances both the store and the streamer when the feed has +// cleaned the message but the L2 block is already finalized on L1. +func (v *NitroEspressoBatchVerifier) advanceOnNitroFinality(espressoMsg *nitroStreamer.MessageWithMetadataAndPos, nitroFinalizedBlock uint64) { + espressoState := v.espressoStore.GetState() + blockNumberToStore := espressoState.L2BlockNumber + if espressoMsg.Pos > blockNumberToStore { + blockNumberToStore = espressoMsg.Pos + } + if nitroFinalizedBlock > blockNumberToStore { + blockNumberToStore = nitroFinalizedBlock + } + + updated, err := v.espressoStore.UpdateIfGreater(blockNumberToStore, espressoMsg.HotshotHeight) + if err != nil { + v.logger.Error("failed to update espresso state on Nitro finality advance", "error", err) + return + } + if !updated { + v.logger.Warn("espresso state not updated on Nitro finality advance", "seq_num", espressoMsg.Pos) + } + + v.streamer.Advance() + v.logger.Info("Advanced on Nitro L2 finality (feed cleaned)", + "seq_num", espressoMsg.Pos, + "hotshot_height", espressoMsg.HotshotHeight, + "nitro_finalized", nitroFinalizedBlock, + ) +} + func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) error { + // If the Espresso message has no L2msg it is a delayed message — the payload + // lives in the L1 delayed inbox and is not included in the HotShot batch. + // In that case only compare the header and delayed message counter. + if len(espresso.Message.L2msg) == 0 { + eh, fh := espresso.Message.Header, feed.Message.Header + if espresso.DelayedMessagesRead != feed.DelayedMessagesRead || + eh.Kind != fh.Kind || + eh.Poster != fh.Poster || + eh.BlockNumber != fh.BlockNumber || + eh.Timestamp != fh.Timestamp { + return fmt.Errorf( + "delayed message header mismatch\n"+ + " delayed_messages_read: espresso=%d feed=%d\n"+ + " header.kind: espresso=%d feed=%d\n"+ + " header.poster: espresso=%s feed=%s\n"+ + " header.block_number: espresso=%d feed=%d\n"+ + " header.timestamp: espresso=%d feed=%d", + espresso.DelayedMessagesRead, feed.DelayedMessagesRead, + eh.Kind, fh.Kind, + eh.Poster, fh.Poster, + eh.BlockNumber, fh.BlockNumber, + eh.Timestamp, fh.Timestamp, + ) + } + return nil + } + espressoBytes, err := rlp.EncodeToBytes(espresso) if err != nil { return fmt.Errorf("failed to RLP-encode Espresso message: %w", err) @@ -184,7 +307,29 @@ func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) erro return fmt.Errorf("failed to RLP-encode feed message: %w", err) } if !bytes.Equal(espressoBytes, feedBytes) { - return errors.New("Espresso message does not match Nitro feed message") + espressoHeader := espresso.Message.Header + feedHeader := feed.Message.Header + return fmt.Errorf( + "Espresso message does not match Nitro feed message\n"+ + " delayed_messages_read: espresso=%d feed=%d\n"+ + " header.kind: espresso=%d feed=%d\n"+ + " header.poster: espresso=%s feed=%s\n"+ + " header.block_number: espresso=%d feed=%d\n"+ + " header.timestamp: espresso=%d feed=%d\n"+ + " header.request_id: espresso=%v feed=%v\n"+ + " header.l1_base_fee: espresso=%v feed=%v\n"+ + " l2msg (hex): espresso=%x feed=%x\n"+ + " rlp (hex): espresso=%x feed=%x", + espresso.DelayedMessagesRead, feed.DelayedMessagesRead, + espressoHeader.Kind, feedHeader.Kind, + espressoHeader.Poster, feedHeader.Poster, + espressoHeader.BlockNumber, feedHeader.BlockNumber, + espressoHeader.Timestamp, feedHeader.Timestamp, + espressoHeader.RequestId, feedHeader.RequestId, + espressoHeader.L1BaseFee, feedHeader.L1BaseFee, + espresso.Message.L2msg, feed.Message.L2msg, + espressoBytes, feedBytes, + ) } return nil } @@ -200,6 +345,7 @@ func (v *NitroEspressoBatchVerifier) Stop() { } v.runWg.Wait() v.streamer.StopAndWait() + v.l2Client.Close() v.logger.Info("Nitro verifier stopped") } @@ -213,6 +359,9 @@ func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error if config.FeedURL == "" { return fmt.Errorf("feed_url is required") } + if config.FullNodeExecutionRPC == "" { + return fmt.Errorf("full_node_execution_rpc is required") + } if config.QueryServiceURL == "" { return fmt.Errorf("query_service_url is required") } From 20aef146faba81110bd4acfd13c79e1763863e79 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 11 May 2026 17:39:55 -0400 Subject: [PATCH 05/21] cleanup --- espresso_e2e/mock-l1-beacon/main.go | 4 - espresso_e2e/nitro/.env | 9 +- espresso_e2e/nitro/docker-compose.reorg.yml | 207 ------------------ espresso_e2e/nitro/docker-compose.yml | 139 +++++++----- ...o_config.json => batch_poster_config.json} | 50 ++--- .../nitro/nitro-config/full_node_config.json | 65 ++++++ .../nitro/nitro-config/sequencer_config.json | 71 ++++++ go.mod | 2 +- go.sum | 2 + mock_light_client.go | 41 ---- verifier/nitro/feed_client/client.go | 19 ++ verifier/nitro/nitro_verifier.go | 131 +++++------ 12 files changed, 320 insertions(+), 420 deletions(-) delete mode 100644 espresso_e2e/nitro/docker-compose.reorg.yml rename espresso_e2e/nitro/nitro-config/{nitro_config.json => batch_poster_config.json} (72%) create mode 100644 espresso_e2e/nitro/nitro-config/full_node_config.json create mode 100644 espresso_e2e/nitro/nitro-config/sequencer_config.json delete mode 100644 mock_light_client.go diff --git a/espresso_e2e/mock-l1-beacon/main.go b/espresso_e2e/mock-l1-beacon/main.go index 2b1c4ea..2c8ccff 100644 --- a/espresso_e2e/mock-l1-beacon/main.go +++ b/espresso_e2e/mock-l1-beacon/main.go @@ -306,10 +306,6 @@ func (fb *FakeBeacon) recordBlock(block blockInfo) { fb.mu.Lock() defer fb.mu.Unlock() fb.history = append(fb.history, block) - // cap entries to 500 - if len(fb.history) > 500 { - fb.history = fb.history[len(fb.history)-500:] - } } func (fb *FakeBeacon) advance() error { diff --git a/espresso_e2e/nitro/.env b/espresso_e2e/nitro/.env index ba98cb0..cef6a20 100644 --- a/espresso_e2e/nitro/.env +++ b/espresso_e2e/nitro/.env @@ -1,6 +1,3 @@ -# Used by docker-compose.reorg.yml only. -# docker-compose.yml hardcodes all values directly. - ESPRESSO_DEV_NODE_L1_DEPLOYMENT=skip ESPRESSO_SEQUENCER_API_PORT=24000 ESPRESSO_DEV_NODE_PORT=24002 @@ -26,6 +23,10 @@ L1_ENGINE_PORT=8551 L1_BEACON_PORT=5052 L1_CHAIN_ID=11155111 -# Pre-funded in the OP genesis; used by rollup-creator as the deployer OPERATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 OPERATOR_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +BATCH_POSTER_PRIVATE_KEY=0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 +DEPLOYER_PRIVATE_KEY=0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff + +NITRO_IMAGE=ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:v3.9.8-espresso-v1.1.0 +ROLLUP_CREATOR_IMAGE=ghcr.io/espressosystems/timeboost/rollup-creator:v2.1.3-legacy \ No newline at end of file diff --git a/espresso_e2e/nitro/docker-compose.reorg.yml b/espresso_e2e/nitro/docker-compose.reorg.yml deleted file mode 100644 index 7a3dc4f..0000000 --- a/espresso_e2e/nitro/docker-compose.reorg.yml +++ /dev/null @@ -1,207 +0,0 @@ -services: - l1-data-init: - image: busybox - command: > - sh -c ' - mkdir -p /l1-config - mkdir -p /data/lighthouse-validator /data/lighthouse-beacon - chown -R ${U_ID:-1000}:${GID:-1000} /l1-config /data - ' - volumes: - - l1-config:/l1-config - - l1-data:/data - - l1-genesis: - platform: linux/amd64 - user: ${U_ID:-1000}:${GID:-1000} - restart: on-failure - depends_on: - l1-data-init: - condition: service_completed_successfully - image: ${L1_GETH_IMAGE} - environment: - - MODE=genesis - volumes: - - l1-config:/config - - l1-data:/data - - ./l1-config:/deployment/l1-config:ro - - l1-geth: - depends_on: - l1-genesis: - condition: service_completed_successfully - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:${L1_HTTP_PORT}"] - interval: 3s - timeout: 2s - retries: 40 - image: ${L1_GETH_IMAGE} - environment: - L1_HTTP_PORT: ${L1_HTTP_PORT} - L1_ENGINE_PORT: ${L1_ENGINE_PORT} - L1_CHAIN_ID: ${L1_CHAIN_ID} - volumes: - - l1-config:/config:ro - - l1-data:/data - ports: - - "${L1_HTTP_PORT}:${L1_HTTP_PORT}" - - "${L1_ENGINE_PORT}:${L1_ENGINE_PORT}" - - mock-l1-beacon: - build: - context: ../ - dockerfile: mock-l1-beacon/Dockerfile - depends_on: - l1-geth: - condition: service_healthy - volumes: - - l1-config:/config:ro - ports: - - "${L1_BEACON_PORT}:${L1_BEACON_PORT}" - command: - - --engine=http://l1-geth:${L1_ENGINE_PORT} - - --eth=http://l1-geth:${L1_HTTP_PORT} - - --jwt=/config/jwt.txt - - --block-time=1s - - --finalized-distance=20 - - --safe-distance=10 - - --addr=0.0.0.0:${L1_BEACON_PORT} - - l1-validator: - image: ${LIGHTHOUSE_IMAGE} - depends_on: - l1-genesis: - condition: service_completed_successfully - l1-geth: - condition: service_started - mock-l1-beacon: - condition: service_started - volumes: - - l1-data:/data - - l1-config:/config:ro - command: - - lighthouse - - validator_client - - --testnet-dir - - /config - - --beacon-nodes - - http://mock-l1-beacon:${L1_BEACON_PORT} - - --init-slashing-protection - - --datadir - - /data/lighthouse-validator - - --suggested-fee-recipient - - ${OPERATOR_ADDRESS} - - espresso-dev-node: - image: ${ESPRESSO_DEV_NODE_IMAGE} - depends_on: - l1-geth: - condition: service_healthy - ports: - - "${ESPRESSO_SEQUENCER_API_PORT}:${ESPRESSO_SEQUENCER_API_PORT}" - - "${ESPRESSO_DEV_NODE_PORT}:${ESPRESSO_DEV_NODE_PORT}" - - "${ESPRESSO_BUILDER_PORT}:${ESPRESSO_BUILDER_PORT}" - volumes: - - espresso-data:/data - env_file: - - ./.env - environment: - RUST_LOG: warn - ESPRESSO_DEV_NODE_L1_DEPLOYMENT: skip - RUST_BACKTRACE: 1 - ESPRESSO_SEQUENCER_STORAGE_PATH: /data/espresso - ESPRESSO_SEQUENCER_L1_PROVIDER: http://l1-geth:${L1_HTTP_PORT} - ESPRESSO_DEPLOYER_ACCOUNT_INDEX: 0 - ESPRESSO_DEV_NODE_EPOCH_HEIGHT: "4294967295" - ESPRESSO_SEQUENCER_ETH_MNEMONIC: "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" - - tx-generator: - image: ghcr.io/foundry-rs/foundry:v1.5.1 - depends_on: - nitro: - condition: service_healthy - entrypoint: ["sh", "-c"] - command: - - | - while true; do - cast send \ - --rpc-url http://nitro:8547 \ - --private-key 0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 \ - 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E \ - --value 0 2>&1 || true - sleep 2 - done - - rollup-creator: - image: ghcr.io/espressosystems/timeboost/rollup-creator:rpc - volumes: - - "config:/config" - - "./nitro-config:/nitro-config" - environment: - AUTHORIZE_VALIDATORS: 10 - CHAIN_DEPLOYMENT_INFO: "/config/deployment.json" - CHILD_CHAIN_CONFIG_PATH: "/nitro-config/l2_chain_config.json" - CHILD_CHAIN_INFO: "/config/deployed_chain_info.json" - CHILD_CHAIN_NAME: "arb-dev-test" - DEPLOYER_PRIVKEY: ${OPERATOR_PRIVATE_KEY} - MAX_DATA_SIZE: 117964 - OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E - PARENT_CHAIN_ID: ${L1_CHAIN_ID} - PARENT_CHAIN_RPC: http://l1-geth:${L1_HTTP_PORT} - SEQUENCER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E - WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a - command: ["create-rollup-testnode"] - depends_on: - l1-geth: - condition: service_healthy - - nitro: - image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:integration-v3.9.8 - entrypoint: /usr/local/bin/nitro - ports: - - "8547:8547" - - "8548:8548" - - "9642:9642" - volumes: - - "nitro:/home/user/.arbitrum/local/nitro" - - "l1keystore:/home/user/l1keystore" - - "config:/config" - - "./nitro-config:/nitro-config" - command: - - --conf.file=/nitro-config/nitro_config.json - - --parent-chain.connection.url=http://l1-geth:${L1_HTTP_PORT} - - --node.feed.output.enable - - --node.feed.output.port=9642 - - --http.api=net,web3,eth,txpool,debug,timeboost,auctioneer,batcher - - --node.seq-coordinator.my-url=http://nitro:8547 - - --graphql.enable - - --graphql.vhosts=* - - --graphql.corsdomain=* - depends_on: - rollup-creator: - condition: service_completed_successfully - healthcheck: - test: - [ - "CMD", - "curl", - "-s", - "-X", - "POST", - "--data", - '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}', - "-H", - "Content-Type: application/json", - "http://localhost:8547", - ] - interval: 5s - timeout: 3s - retries: 12 - -volumes: - l1-config: - l1-data: - config: - l1keystore: - espresso-data: - nitro: \ No newline at end of file diff --git a/espresso_e2e/nitro/docker-compose.yml b/espresso_e2e/nitro/docker-compose.yml index 8fc106a..e15784c 100644 --- a/espresso_e2e/nitro/docker-compose.yml +++ b/espresso_e2e/nitro/docker-compose.yml @@ -5,61 +5,44 @@ services: ports: - 8545:8545 - 8546:8546 + espresso-dev-node: - image: ghcr.io/espressosystems/espresso-sequencer/espresso-dev-node:release-20251120-lip2p-tcp-3855 - ports: - - "41000:41000" - - "41003:41003" - - "20000:20000" - environment: - - ESPRESSO_BUILDER_PORT=41003 - - ESPRESSO_DEPLOYER_ACCOUNT_INDEX=5 - - ESPRESSO_DEV_NODE_PORT=20000 - - ESPRESSO_SEQUENCER_API_PORT=41000 - - ESPRESSO_SEQUENCER_ETH_MNEMONIC=indoor dish desk flag debris potato excuse depart ticket judge file exit - - ESPRESSO_SEQUENCER_L1_PROVIDER=http://demo-l1-network:8545 - - ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS=25 - - ESPRESSO_DEV_NODE_EPOCH_HEIGHT=1000000 - - ESPRESSO_DEV_NODE_MAX_BLOCK_SIZE=10485760 - - ESPRESSO_SEQUENCER_STORAGE_PATH=/data/espresso - - RUST_LOG=WARN - - RUST_LOG_FORMAT - - ESPRESSO_DEV_NODE_VERSION=0.4 - volumes: - - espresso_storage:/data/espresso + image: ${ESPRESSO_DEV_NODE_IMAGE} depends_on: - demo-l1-network: + l1-geth: condition: service_healthy - healthcheck: - test: - [ - "CMD", - "curl", - "-s", - "-X", - "POST", - "--data", - '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}', - "-H", - "Content-Type: application/json", - "http://localhost:8545", - ] - interval: 5s - timeout: 3s - retries: 10 + ports: + - "${ESPRESSO_SEQUENCER_API_PORT}:${ESPRESSO_SEQUENCER_API_PORT}" + - "${ESPRESSO_DEV_NODE_PORT}:${ESPRESSO_DEV_NODE_PORT}" + - "${ESPRESSO_BUILDER_PORT}:${ESPRESSO_BUILDER_PORT}" + volumes: + - espresso-data:/data + env_file: + - ./.env + environment: + RUST_LOG: warn + ESPRESSO_DEV_NODE_L1_DEPLOYMENT: skip + RUST_BACKTRACE: 1 + ESPRESSO_SEQUENCER_STORAGE_PATH: /data/espresso + ESPRESSO_SEQUENCER_L1_PROVIDER: http://l1-geth:${L1_HTTP_PORT} + ESPRESSO_DEPLOYER_ACCOUNT_INDEX: 0 + ESPRESSO_DEV_NODE_EPOCH_HEIGHT: "4294967295" + ESPRESSO_SEQUENCER_ETH_MNEMONIC: "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" rollup-creator: - image: ghcr.io/espressosystems/timeboost/rollup-creator:rpc + image: ${ROLLUP_CREATOR_IMAGE} volumes: - "config:/config" - "./nitro-config:/nitro-config" + env_file: + - ./.env environment: AUTHORIZE_VALIDATORS: 10 CHAIN_DEPLOYMENT_INFO: "/config/deployment.json" CHILD_CHAIN_CONFIG_PATH: "/nitro-config/l2_chain_config.json" CHILD_CHAIN_INFO: "/config/deployed_chain_info.json" CHILD_CHAIN_NAME: "arb-dev-test" - DEPLOYER_PRIVKEY: 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff + DEPLOYER_PRIVKEY: ${DEPLOYER_PRIVATE_KEY} MAX_DATA_SIZE: 117964 OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E PARENT_CHAIN_ID: 1337 @@ -71,27 +54,26 @@ services: l1-geth: condition: service_healthy - nitro: - image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:integration-v3.9.8 + sequencer: + image: ${NITRO_IMAGE} entrypoint: /usr/local/bin/nitro ports: - "8547:8547" - "8548:8548" - "9642:9642" volumes: - - "nitro:/home/user/.arbitrum/local/nitro" + - "nitro-sequencer:/home/user/.arbitrum/local/nitro" - "l1keystore:/home/user/l1keystore" - "config:/config" - "./nitro-config:/nitro-config" command: - - --conf.file=/nitro-config/nitro_config.json - - --node.feed.output.enable - - --node.feed.output.port=9642 - - --http.api=net,web3,eth,txpool,debug,timeboost,auctioneer,batcher - - --node.seq-coordinator.my-url=http://nitro:8547 + - --conf.file=/nitro-config/sequencer_config.json + - --http.api=net,web3,eth,txpool,debug,timeboost,auctioneer - --graphql.enable - --graphql.vhosts=* - --graphql.corsdomain=* + env_file: + - ./.env depends_on: rollup-creator: condition: service_completed_successfully @@ -113,8 +95,63 @@ services: timeout: 3s retries: 12 + batch-poster: + image: ${NITRO_IMAGE} + entrypoint: /usr/local/bin/nitro + volumes: + - "nitro-batch-poster:/home/user/.arbitrum/local/nitro" + - "l1keystore:/home/user/l1keystore" + - "config:/config" + - "./nitro-config:/nitro-config" + command: + - --conf.file=/nitro-config/batch_poster_config.json + env_file: + - ./.env + depends_on: + sequencer: + condition: service_healthy + + full-node: + image: ${NITRO_IMAGE} + entrypoint: /usr/local/bin/nitro + ports: + - "8549:8547" + - "8550:8548" + - "9643:9642" + volumes: + - "nitro-full-node:/home/user/.arbitrum/local/nitro" + - "config:/config" + - "./nitro-config:/nitro-config" + command: + - --conf.file=/nitro-config/full_node_config.json + - --http.api=net,web3,eth,debug + env_file: + - ./.env + depends_on: + sequencer: + condition: service_healthy + + tx-generator: + image: ghcr.io/foundry-rs/foundry:v1.5.1 + depends_on: + sequencer: + condition: service_healthy + entrypoint: ["sh", "-c"] + command: + - | + while true; do + cast send \ + --rpc-url http://sequencer:8547 \ + --private-key ${BATCH_POSTER_PRIVATE_KEY} \ + 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E \ + --value 1 2>&1 || true + sleep 2 + done + volumes: config: l1keystore: - espresso_storage: - nitro: \ No newline at end of file + espresso-data: + nitro-sequencer: + nitro-batch-poster: + nitro-full-node: \ No newline at end of file diff --git a/espresso_e2e/nitro/nitro-config/nitro_config.json b/espresso_e2e/nitro/nitro-config/batch_poster_config.json similarity index 72% rename from espresso_e2e/nitro/nitro-config/nitro_config.json rename to espresso_e2e/nitro/nitro-config/batch_poster_config.json index 0ed3cc7..02350a6 100644 --- a/espresso_e2e/nitro/nitro-config/nitro_config.json +++ b/espresso_e2e/nitro/nitro-config/batch_poster_config.json @@ -27,13 +27,13 @@ "make-assertion-interval": "10s", "strategy": "MakeNodes" }, - "sequencer": true, + "sequencer": false, "dangerous": { "no-sequencer-coordinator": true, "disable-blob-reader": true }, "delayed-sequencer": { - "enable": true + "enable": false }, "seq-coordinator": { "enable": false, @@ -59,14 +59,21 @@ }, "wait-for-l1-finality": false }, - "poll-interval": "10s" + "poll-interval": "5s" }, "espresso": { "batch-poster": { "hotshot-url": "http://espresso-dev-node:24000", "resubmit-espresso-tx-deadline": "2m", - "tee-type": "SGX", - "txns-monitoring-interval": "1s" + "tee-type": "TESTS", + "txns-monitoring-interval": "1s", + "address-valid-ranges": [ + { + "address": "0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E", + "from": 0, + "to": 9234811370 + } + ] }, "streamer": { "txns-polling-interval": "1s" @@ -80,44 +87,19 @@ }, "feed": { "input": { - "url": [] + "url": ["ws://sequencer:9642"] }, "output": { - "enable": true, - "signed": false, - "addr": "0.0.0.0", - "port": 9642 + "enable": false } }, "data-availability": { - "enable": false, - "rpc-aggregator": { - "enable": false, - "assumed-honest": 1, - "backends": [ - { - "url": "http://das-committee-a:9876", - "pubkey": "" - }, - { - "url": "http://das-committee-b:9876", - "pubkey": "" - } - ] - }, - "rest-aggregator": { - "enable": true, - "urls": [ - "http://das-mirror:9877" - ] - }, - "parent-chain-node-url": "ws://geth:8546", - "sequencer-inbox-address": "0x6be3f7c539009f9b3ae2ce11e231bf064c081cd9" + "enable": false } }, "execution": { "sequencer": { - "enable": true + "enable": false }, "forwarding-target": "null" }, diff --git a/espresso_e2e/nitro/nitro-config/full_node_config.json b/espresso_e2e/nitro/nitro-config/full_node_config.json new file mode 100644 index 0000000..bfcf307 --- /dev/null +++ b/espresso_e2e/nitro/nitro-config/full_node_config.json @@ -0,0 +1,65 @@ +{ + "ensure-rollup-deployment": false, + "parent-chain": { + "connection": { + "url": "http://l1-geth:8545" + } + }, + "chain": { + "id": 412346, + "info-files": [ + "/config/deployed_chain_info.json" + ] + }, + "node": { + "staker": { + "enable": false + }, + "sequencer": false, + "dangerous": { + "no-sequencer-coordinator": true, + "disable-blob-reader": true + }, + "delayed-sequencer": { + "enable": false + }, + "seq-coordinator": { + "enable": false + }, + "batch-poster": { + "enable": false + }, + "feed": { + "input": { + "url": ["ws://sequencer:9642"] + }, + "output": { + "enable": true, + "signed": false, + "addr": "0.0.0.0", + "port": 9642 + } + }, + "data-availability": { + "enable": false + } + }, + "execution": { + "sequencer": { + "enable": false + }, + "forwarding-target": "http://sequencer:8547" + }, + "persistent": { + "chain": "local" + }, + "ws": { + "addr": "0.0.0.0" + }, + "http": { + "addr": "0.0.0.0", + "vhosts": "*", + "corsdomain": "*" + }, + "log-level": "INFO" +} \ No newline at end of file diff --git a/espresso_e2e/nitro/nitro-config/sequencer_config.json b/espresso_e2e/nitro/nitro-config/sequencer_config.json new file mode 100644 index 0000000..b34ecf1 --- /dev/null +++ b/espresso_e2e/nitro/nitro-config/sequencer_config.json @@ -0,0 +1,71 @@ +{ + "ensure-rollup-deployment": false, + "parent-chain": { + "connection": { + "url": "http://l1-geth:8545" + } + }, + "chain": { + "id": 412346, + "info-files": [ + "/config/deployed_chain_info.json" + ] + }, + "node": { + "staker": { + "enable": false + }, + "sequencer": true, + "dangerous": { + "no-sequencer-coordinator": true, + "disable-blob-reader": true + }, + "delayed-sequencer": { + "enable": true + }, + "seq-coordinator": { + "enable": false + }, + "batch-poster": { + "enable": false + }, + "block-validator": { + "validation-server": { + "url": "ws://validation_node:8549", + "jwtsecret": "/config/val_jwt.hex" + } + }, + "feed": { + "input": { + "url": [] + }, + "output": { + "enable": true, + "signed": false, + "addr": "0.0.0.0", + "port": 9642 + } + }, + "data-availability": { + "enable": false + } + }, + "execution": { + "sequencer": { + "enable": true + }, + "forwarding-target": "null" + }, + "persistent": { + "chain": "local" + }, + "ws": { + "addr": "0.0.0.0" + }, + "http": { + "addr": "0.0.0.0", + "vhosts": "*", + "corsdomain": "*" + }, + "log-level": "INFO" +} \ No newline at end of file diff --git a/go.mod b/go.mod index a7e2722..260a556 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.25.1 require ( github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 - github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f + github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f github.com/ethereum-optimism/optimism v1.16.7 github.com/ethereum/go-ethereum v1.17.1 github.com/spf13/pflag v1.0.6 diff --git a/go.sum b/go.sum index be99b09..80cee6c 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d9 github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f h1:JOHzrvN/fMGMBG1WB1C4zi3qKMMYQ2GHsO2MNgE14ek= github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f h1:fuzJCq1qEPErOMHJ87lgaOtEGiNZYydrncurWES3Y4o= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= diff --git a/mock_light_client.go b/mock_light_client.go deleted file mode 100644 index 1fb1edf..0000000 --- a/mock_light_client.go +++ /dev/null @@ -1,41 +0,0 @@ -package main - -import ( - "context" - "math/big" - - opStreamer "github.com/EspressoSystems/espresso-streamers/op" - "github.com/ethereum/go-ethereum/accounts/abi/bind" -) - -const finalizedBlocks = 500 - -// mockLightClient implements opStreamer.LightClientCallerInterface for dev/test -// environments where the real light client contract is not available. -// It tracks the live Espresso head and returns a height lagged by finalizedBlocks. -type mockLightClient struct { - client opStreamer.EspressoClient - last uint64 -} - -var _ opStreamer.LightClientCallerInterface = (*mockLightClient)(nil) - -func newMockLightClient(client opStreamer.EspressoClient) *mockLightClient { - return &mockLightClient{client: client} -} - -func (m *mockLightClient) FinalizedState(_ *bind.CallOpts) (opStreamer.FinalizedState, error) { - current, err := m.client.FetchLatestBlockHeight(context.Background()) - result := m.last - if err == nil { - m.last = 0 - if current > finalizedBlocks { - m.last = current - finalizedBlocks - } - } - return opStreamer.FinalizedState{ - BlockHeight: result, - ViewNum: 0, - BlockCommRoot: big.NewInt(0), - }, nil -} diff --git a/verifier/nitro/feed_client/client.go b/verifier/nitro/feed_client/client.go index c98bb03..a789062 100644 --- a/verifier/nitro/feed_client/client.go +++ b/verifier/nitro/feed_client/client.go @@ -59,6 +59,22 @@ func (fc *FeedClient) GetMessage(seqNum uint64) *BroadcastFeedMessage { return fc.messages[seqNum] } +func (fc *FeedClient) AdvanceTo(seqNum uint64) { + fc.mu.Lock() + defer fc.mu.Unlock() + for i := fc.nextSeqNum; i < seqNum; i++ { + delete(fc.messages, i) + } + fc.nextSeqNum = seqNum +} + +func (fc *FeedClient) Advance() { + fc.mu.Lock() + defer fc.mu.Unlock() + delete(fc.messages, fc.nextSeqNum) + fc.nextSeqNum += 1 +} + func (fc *FeedClient) Start(ctx context.Context) { go fc.readLoop(ctx) } @@ -131,6 +147,9 @@ func (fc *FeedClient) readMessages(ctx context.Context, conn *websocket.Conn) { if feedMsg == nil { continue } + if feedMsg.SequenceNumber < fc.nextSeqNum { + continue + } if fc.messages[feedMsg.SequenceNumber] != nil { fc.logger.Warn("received duplicate message", "seqNum", feedMsg.SequenceNumber) continue diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index d8c29e0..3e62f47 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -9,18 +9,19 @@ import ( "sync/atomic" "time" + feedConnector "proxy/verifier/nitro/feed_client" feedclient "proxy/verifier/nitro/feed_client" espressoStore "proxy/store" - espressoNetClient "github.com/EspressoSystems/espresso-network/sdks/go/client" + espressoClient "github.com/EspressoSystems/espresso-network/sdks/go/client" nitroStreamer "github.com/EspressoSystems/espresso-streamers/nitro" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" ) type NitroEspressoBatchVerifierConfig struct { @@ -62,8 +63,8 @@ func NewNitroEspressoBatchVerifier( return nil } - ec := espressoNetClient.NewClient(config.QueryServiceURL) - if ec == nil { + client := espressoClient.NewClient(config.QueryServiceURL) + if client == nil { logger.Crit("failed to create Espresso client") return nil } @@ -87,19 +88,19 @@ func NewNitroEspressoBatchVerifier( streamer := nitroStreamer.NewEspressoStreamer( config.Namespace, - startHotshotBlock, - ec, + espressoState.L2BlockNumber, + client, batcherAddrs, time.Second, - 1, + espressoState.FallbackHotshotHeight, logger, ) - fc := feedclient.NewFeedClient(config.FeedURL, 1, logger, nil, nil) + feed := feedConnector.NewFeedClient(config.FeedURL, espressoState.L2BlockNumber, logger, nil, nil) return &NitroEspressoBatchVerifier{ streamer: streamer, - feedClient: fc, + feedClient: feed, l2Client: l2Client, espressoStore: store, config: config, @@ -133,7 +134,7 @@ func (v *NitroEspressoBatchVerifier) run(ctx context.Context) { defer ticker.Stop() espressoState := v.espressoStore.GetState() - v.logger.Info("Starting Nitro verifier", + v.logger.Info("Starting Nitro Verifier", "start_block_number", espressoState.L2BlockNumber, "start_hotshot_height", espressoState.FallbackHotshotHeight, ) @@ -156,18 +157,11 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { v.logger.Error("failed to fetch Nitro finalized L2 block", "error", err) } - // If the streamer is behind the store, reset it directly to the current position. - espressoState := v.espressoStore.GetState() - if msg := v.streamer.Peek(); msg != nil && msg.Pos <= espressoState.L2BlockNumber { - v.logger.Debug("streamer behind store, resetting", "seq_num", msg.Pos, "store_l2", espressoState.L2BlockNumber) - v.streamer.Reset(espressoState.L2BlockNumber, espressoState.FallbackHotshotHeight) - } - espressoMsg := v.streamer.Peek() if espressoMsg == nil { if err == nil { - if syncErr := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); syncErr != nil { - v.logger.Error("failed to sync espresso state with Nitro finality", "error", syncErr) + if err := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); err != nil { + v.logger.Error("failed to sync espresso state with Nitro finality", "error", err) } } v.logger.Debug("no new messages to verify") @@ -176,21 +170,18 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { feedMsg := v.feedClient.GetMessage(espressoMsg.Pos) if feedMsg == nil { - if err == nil && nitroFinalizedBlock >= espressoMsg.Pos { - v.logger.Info("feed missing message but L2 finalized, advancing on Nitro finality", - "seq_num", espressoMsg.Pos, - "nitro_finalized", nitroFinalizedBlock, - ) - v.advanceOnNitroFinality(espressoMsg, nitroFinalizedBlock) - return + if err == nil { + if err := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); err != nil { + v.logger.Error("failed to sync espresso state with Nitro finality", "error", err) + } } - v.logger.Info("feed does not have message yet, will retry", "seq_num", espressoMsg.Pos) + v.logger.Debug("feed does not have message yet", "msg_pos", espressoMsg.Pos) return } if err := ensureMessagesMatch(&espressoMsg.MessageWithMeta, &feedMsg.Message); err != nil { - v.logger.Error("message mismatch between Espresso and Nitro feed", - "seq_num", espressoMsg.Pos, + v.logger.Error("message mismatch between espresso and nitro feed", + "msg_pos", espressoMsg.Pos, "error", err, ) return @@ -203,16 +194,26 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { } if !updated { v.logger.Warn("espresso state not updated — message position not greater than current", - "seq_num", espressoMsg.Pos) + "msg_pos", espressoMsg.Pos) } - v.streamer.Advance() - v.logger.Info("Successfully verified and advanced Nitro message", - "seq_num", espressoMsg.Pos, + v.advance() + v.logger.Info("successfully verified and advanced Nitro message", + "msg_pos", espressoMsg.Pos, "hotshot_height", espressoMsg.HotshotHeight, ) } +func (v *NitroEspressoBatchVerifier) advance() { + v.streamer.Advance() + v.feedClient.Advance() +} + +func (v *NitroEspressoBatchVerifier) advanceTo(pos uint64) { + v.streamer.AdvanceTo(pos) + v.feedClient.AdvanceTo(pos) +} + func (v *NitroEspressoBatchVerifier) getNitroFinalizedL2Block(ctx context.Context) (uint64, error) { header, err := v.l2Client.HeaderByNumber(ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) if err != nil { @@ -224,63 +225,38 @@ func (v *NitroEspressoBatchVerifier) getNitroFinalizedL2Block(ctx context.Contex return header.Number.Uint64(), nil } -// syncEspressoStateWithNitroFinality advances the store to max(espresso, nitroFinalized) -// without advancing the streamer. Called when the streamer has no new messages. func (v *NitroEspressoBatchVerifier) syncEspressoStateWithNitroFinality(nitroFinalizedBlock uint64) error { espressoState := v.espressoStore.GetState() blockNumberToStore := espressoState.L2BlockNumber if nitroFinalizedBlock > blockNumberToStore { - v.logger.Error("Nitro finalized L2 block is ahead of Espresso finalized block", + v.logger.Error("nitro finalized L2 block is ahead of Espresso finalized block", "nitro_finalized", nitroFinalizedBlock, "espresso_finalized", espressoState.L2BlockNumber, ) blockNumberToStore = nitroFinalizedBlock - } - hotshotFallback := v.streamer.GetCurrentEarliestHotShotBlockNumber(blockNumberToStore) - _, err := v.espressoStore.UpdateIfGreater(blockNumberToStore, hotshotFallback) - return err -} - -// advanceOnNitroFinality advances both the store and the streamer when the feed has -// cleaned the message but the L2 block is already finalized on L1. -func (v *NitroEspressoBatchVerifier) advanceOnNitroFinality(espressoMsg *nitroStreamer.MessageWithMetadataAndPos, nitroFinalizedBlock uint64) { - espressoState := v.espressoStore.GetState() - blockNumberToStore := espressoState.L2BlockNumber - if espressoMsg.Pos > blockNumberToStore { - blockNumberToStore = espressoMsg.Pos - } - if nitroFinalizedBlock > blockNumberToStore { - blockNumberToStore = nitroFinalizedBlock - } - - updated, err := v.espressoStore.UpdateIfGreater(blockNumberToStore, espressoMsg.HotshotHeight) - if err != nil { - v.logger.Error("failed to update espresso state on Nitro finality advance", "error", err) - return - } - if !updated { - v.logger.Warn("espresso state not updated on Nitro finality advance", "seq_num", espressoMsg.Pos) + hotshotFallback := v.streamer.GetCurrentEarliestHotShotBlockNumber(blockNumberToStore) + updated, err := v.espressoStore.UpdateIfGreater(blockNumberToStore, hotshotFallback) + if updated { + // We add 1 here because we are looking for the finalized + 1 on next `peek()` call + v.advanceTo(blockNumberToStore + 1) + } + return err } - v.streamer.Advance() - v.logger.Info("Advanced on Nitro L2 finality (feed cleaned)", - "seq_num", espressoMsg.Pos, - "hotshot_height", espressoMsg.HotshotHeight, - "nitro_finalized", nitroFinalizedBlock, - ) + return nil } func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) error { // If the Espresso message has no L2msg it is a delayed message — the payload - // lives in the L1 delayed inbox and is not included in the HotShot batch. + // lives in the L1 delayed inbox and is not included in the messages sent to hotshot. // In that case only compare the header and delayed message counter. if len(espresso.Message.L2msg) == 0 { - eh, fh := espresso.Message.Header, feed.Message.Header + espressoHeader, feedHeader := espresso.Message.Header, feed.Message.Header if espresso.DelayedMessagesRead != feed.DelayedMessagesRead || - eh.Kind != fh.Kind || - eh.Poster != fh.Poster || - eh.BlockNumber != fh.BlockNumber || - eh.Timestamp != fh.Timestamp { + espressoHeader.Kind != feedHeader.Kind || + espressoHeader.Poster != feedHeader.Poster || + espressoHeader.BlockNumber != feedHeader.BlockNumber || + espressoHeader.Timestamp != feedHeader.Timestamp { return fmt.Errorf( "delayed message header mismatch\n"+ " delayed_messages_read: espresso=%d feed=%d\n"+ @@ -289,10 +265,10 @@ func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) erro " header.block_number: espresso=%d feed=%d\n"+ " header.timestamp: espresso=%d feed=%d", espresso.DelayedMessagesRead, feed.DelayedMessagesRead, - eh.Kind, fh.Kind, - eh.Poster, fh.Poster, - eh.BlockNumber, fh.BlockNumber, - eh.Timestamp, fh.Timestamp, + espressoHeader.Kind, feedHeader.Kind, + espressoHeader.Poster, feedHeader.Poster, + espressoHeader.BlockNumber, feedHeader.BlockNumber, + espressoHeader.Timestamp, feedHeader.Timestamp, ) } return nil @@ -354,7 +330,6 @@ func (v *NitroEspressoBatchVerifier) GetCurrentEarliestHotShotBlock() uint64 { return v.streamer.GetCurrentEarliestHotShotBlockNumber(espressoState.L2BlockNumber) } -// ValidateNitroVerifierConfig checks required fields. func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error { if config.FeedURL == "" { return fmt.Errorf("feed_url is required") From 24822bb2a113b307cc6702d41a7bf11aa7624073 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 11 May 2026 17:48:18 -0400 Subject: [PATCH 06/21] cleanup --- config.go | 26 +++++++++++++------------- verifier/nitro/nitro_verifier.go | 19 +++++++------------ 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/config.go b/config.go index c03279f..536faa1 100644 --- a/config.go +++ b/config.go @@ -37,19 +37,19 @@ type NitroConfig struct { } type Config struct { - FullNodeExecutionRPC string `json:"full_node_execution_rpc"` - L1RPC string `json:"l1_rpc"` - ListenAddr string `json:"listen_addr"` - EspressoTag string `json:"espresso_tag"` - StoreFilePath string `json:"store_file_path"` - InitialHotshotHeight uint64 `json:"initial_hotshot_height"` - MaxBatchSize int `json:"max_batch_size"` - MaxRequestBodySize int `json:"max_request_body_size"` + FullNodeExecutionRPC string `json:"full_node_execution_rpc"` + L1RPC string `json:"l1_rpc"` + ListenAddr string `json:"listen_addr"` + EspressoTag string `json:"espresso_tag"` + StoreFilePath string `json:"store_file_path"` + InitialHotshotHeight uint64 `json:"initial_hotshot_height"` + MaxBatchSize int `json:"max_batch_size"` + MaxRequestBodySize int `json:"max_request_body_size"` OPConfig OPConfig `json:"op"` NitroConfig NitroConfig `json:"nitro"` - LogLevel string `json:"log_level"` - LogFormat string `json:"log_format"` - TrackBatchLatency bool `json:"track_batch_latency"` + LogLevel string `json:"log_level"` + LogFormat string `json:"log_format"` + TrackBatchLatency bool `json:"track_batch_latency"` } func defaultConfig() *Config { @@ -101,7 +101,7 @@ func parseConfig() *Config { pflag.IntVar(&cfg.MaxBatchSize, "max-batch-size", cfg.MaxBatchSize, "maximum number of requests in a JSON-RPC batch (0 = no limit)") pflag.IntVar(&cfg.MaxRequestBodySize, "max-request-body-size", cfg.MaxRequestBodySize, "maximum request body size in bytes (0 = no limit)") - pflag.BoolVar(&cfg.OPConfig.Enable, "op.enable", cfg.OPConfig.Enable, "enable OP verifier mode") + pflag.BoolVar(&cfg.OPConfig.Enable, "op.enable", cfg.OPConfig.Enable, "enable OP mode") pflag.StringVar(&cfg.OPConfig.FullNodeConsensusRPC, "op.full-node-consensus-rpc", cfg.OPConfig.FullNodeConsensusRPC, "OP full node consensus RPC URL") pflag.DurationVar(&cfg.OPConfig.VerificationInterval, "op.verification-interval", cfg.OPConfig.VerificationInterval, "OP verification interval") pflag.StringVar(&cfg.OPConfig.QueryServiceURL, "op.query-service-url", cfg.OPConfig.QueryServiceURL, "Espresso query service URL") @@ -109,7 +109,7 @@ func parseConfig() *Config { pflag.StringVar(&cfg.OPConfig.BatcherAddress, "op.batcher-address", cfg.OPConfig.BatcherAddress, "OP batcher address") pflag.StringVar(&cfg.OPConfig.BatchAuthenticatorAddress, "op.batch-authenticator-address", cfg.OPConfig.BatchAuthenticatorAddress, "Espresso batch authenticator contract address") - pflag.BoolVar(&cfg.NitroConfig.Enable, "nitro.enable", cfg.NitroConfig.Enable, "enable Nitro verifier mode") + pflag.BoolVar(&cfg.NitroConfig.Enable, "nitro.enable", cfg.NitroConfig.Enable, "enable Nitro mode") pflag.StringVar(&cfg.NitroConfig.FeedURL, "nitro.feed-url", cfg.NitroConfig.FeedURL, "Nitro sequencer feed WebSocket URL") pflag.DurationVar(&cfg.NitroConfig.VerificationInterval, "nitro.verification-interval", cfg.NitroConfig.VerificationInterval, "Nitro verification interval") pflag.StringVar(&cfg.NitroConfig.QueryServiceURL, "nitro.query-service-url", cfg.NitroConfig.QueryServiceURL, "Espresso query service URL for Nitro") diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 3e62f47..9f2b94b 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -39,7 +39,7 @@ type NitroEspressoBatchVerifierConfig struct { // It peeks the next message from the streamer, fetches the corresponding message // from the feed by sequence number, and compares them byte-for-byte via RLP encoding. // When the feed has cleaned a message, it falls back to advancing on Nitro L2 finality, -// mirroring the OP stack pattern of max(espresso, l2_finalized). +// So we take the max(espresso, nitro finalized). type NitroEspressoBatchVerifier struct { streamer nitroStreamer.EspressoStreamerInterface feedClient *feedclient.FeedClient @@ -152,7 +152,7 @@ func (v *NitroEspressoBatchVerifier) run(ctx context.Context) { func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { v.logger.Debug("Starting Nitro batch verification") - nitroFinalizedBlock, err := v.getNitroFinalizedL2Block(ctx) + nitroFinalizedBlock, err := v.getNitroFinalizedBlock(ctx) if err != nil { v.logger.Error("failed to fetch Nitro finalized L2 block", "error", err) } @@ -214,13 +214,13 @@ func (v *NitroEspressoBatchVerifier) advanceTo(pos uint64) { v.feedClient.AdvanceTo(pos) } -func (v *NitroEspressoBatchVerifier) getNitroFinalizedL2Block(ctx context.Context) (uint64, error) { +func (v *NitroEspressoBatchVerifier) getNitroFinalizedBlock(ctx context.Context) (uint64, error) { header, err := v.l2Client.HeaderByNumber(ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) if err != nil { - return 0, fmt.Errorf("failed to fetch Nitro finalized L2 block: %w", err) + return 0, fmt.Errorf("failed to fetch Nitro finalized block: %w", err) } if header == nil { - return 0, fmt.Errorf("Nitro finalized L2 block not found") + return 0, fmt.Errorf("nitro finalized block not found") } return header.Number.Uint64(), nil } @@ -229,7 +229,7 @@ func (v *NitroEspressoBatchVerifier) syncEspressoStateWithNitroFinality(nitroFin espressoState := v.espressoStore.GetState() blockNumberToStore := espressoState.L2BlockNumber if nitroFinalizedBlock > blockNumberToStore { - v.logger.Error("nitro finalized L2 block is ahead of Espresso finalized block", + v.logger.Error("nitro finalized block is ahead of Espresso finalized block", "nitro_finalized", nitroFinalizedBlock, "espresso_finalized", espressoState.L2BlockNumber, ) @@ -286,7 +286,7 @@ func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) erro espressoHeader := espresso.Message.Header feedHeader := feed.Message.Header return fmt.Errorf( - "Espresso message does not match Nitro feed message\n"+ + "espresso message does not match Nitro feed message\n"+ " delayed_messages_read: espresso=%d feed=%d\n"+ " header.kind: espresso=%d feed=%d\n"+ " header.poster: espresso=%s feed=%s\n"+ @@ -325,11 +325,6 @@ func (v *NitroEspressoBatchVerifier) Stop() { v.logger.Info("Nitro verifier stopped") } -func (v *NitroEspressoBatchVerifier) GetCurrentEarliestHotShotBlock() uint64 { - espressoState := v.espressoStore.GetState() - return v.streamer.GetCurrentEarliestHotShotBlockNumber(espressoState.L2BlockNumber) -} - func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error { if config.FeedURL == "" { return fmt.Errorf("feed_url is required") From 9b986e9a437206fe8f0c12bc3fbd930dad2e3b24 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 11 May 2026 17:51:58 -0400 Subject: [PATCH 07/21] lint --- verifier/nitro/nitro_verifier.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 9f2b94b..184a3a5 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -9,7 +9,6 @@ import ( "sync/atomic" "time" - feedConnector "proxy/verifier/nitro/feed_client" feedclient "proxy/verifier/nitro/feed_client" espressoStore "proxy/store" @@ -92,11 +91,11 @@ func NewNitroEspressoBatchVerifier( client, batcherAddrs, time.Second, - espressoState.FallbackHotshotHeight, + startHotshotBlock, logger, ) - feed := feedConnector.NewFeedClient(config.FeedURL, espressoState.L2BlockNumber, logger, nil, nil) + feed := feedclient.NewFeedClient(config.FeedURL, espressoState.L2BlockNumber, logger, nil, nil) return &NitroEspressoBatchVerifier{ streamer: streamer, @@ -341,5 +340,8 @@ func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error if len(config.ValidBatcherAddresses) == 0 { return fmt.Errorf("at least one valid_batcher_address is required") } + if config.VerificationInterval <= 0 { + return fmt.Errorf("verification_interval must be positive") + } return nil } From cd7379d75888a35e71b2b1ec79730c61e9794caf Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 11 May 2026 17:58:29 -0400 Subject: [PATCH 08/21] remove uneeded --- espresso_e2e/nitro/l1-config/genesis.json | 800 ---------------------- 1 file changed, 800 deletions(-) delete mode 100644 espresso_e2e/nitro/l1-config/genesis.json diff --git a/espresso_e2e/nitro/l1-config/genesis.json b/espresso_e2e/nitro/l1-config/genesis.json deleted file mode 100644 index c4031ee..0000000 --- a/espresso_e2e/nitro/l1-config/genesis.json +++ /dev/null @@ -1,800 +0,0 @@ -{ - "alloc": { - "0x0165878a594ca255338adfa4d48449f69242eb8f": { - "balance": "0x0", - "code": "0x6080604052600436106100aa575f3560e01c80638da5cb5b116100635780638da5cb5b1461019c5780638ed83271146101e2578063ad3cb1cc146101f6578063c4d66de814610233578063f2fde38b14610252578063f340fa0114610271576100c8565b80630d8e6e2c146100e157806327e235e3146101115780634f1ef2861461014a57806352d1902d1461015f578063645006ca14610173578063715018a614610188576100c8565b366100c85760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100ec575f5ffd5b5060408051600181525f60208201819052918101919091526060015b60405180910390f35b34801561011c575f5ffd5b5061013c61012b366004610a40565b60026020525f908152604090205481565b604051908152602001610108565b61015d610158366004610a6d565b610284565b005b34801561016a575f5ffd5b5061013c6102a3565b34801561017e575f5ffd5b5061013c60015481565b348015610193575f5ffd5b5061015d6102be565b3480156101a7575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610108565b3480156101ed575f5ffd5b5061013c5f5481565b348015610201575f5ffd5b50610226604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101089190610b31565b34801561023e575f5ffd5b5061015d61024d366004610a40565b6102df565b34801561025d575f5ffd5b5061015d61026c366004610a40565b61040b565b61015d61027f366004610a40565b61044d565b61028c610526565b610295826105cc565b61029f8282610613565b5050565b5f6102ac6106d4565b505f516020610bb35f395f51905f5290565b6102c661071d565b6040516317d5c96560e11b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103245750825b90505f8267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b61039f86610778565b6103a7610789565b670de0b6b3a76400005f5566038d7ea4c68000600155831561040357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61041361071d565b6001600160a01b03811661044157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61044a81610791565b50565b60015434101561047057604051636ba4a1c760e01b815260040160405180910390fd5b5f543411156104925760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b0381166104b957604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b0381165f90815260026020526040812080543492906104e0908490610b66565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f1614806105ac57507f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03166105a05f516020610bb35f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105ca5760405163703e46dd60e11b815260040160405180910390fd5b565b6105d461071d565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200160405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066d575060408051601f3d908101601f1916820190925261066a91810190610b85565b60015b61069557604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610438565b5f516020610bb35f395f51905f5281146106c557604051632a87526960e21b815260048101829052602401610438565b6106cf8383610801565b505050565b306001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16146105ca5760405163703e46dd60e11b815260040160405180910390fd5b3361074f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105ca5760405163118cdaa760e01b8152336004820152602401610438565b610780610856565b61044a8161089f565b6105ca610856565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61080a826108a7565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561084e576106cf828261090a565b61029f61097e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105ca57604051631afcd79f60e31b815260040160405180910390fd5b610413610856565b806001600160a01b03163b5f036108dc57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610438565b5f516020610bb35f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516109269190610b9c565b5f60405180830381855af49150503d805f811461095e576040519150601f19603f3d011682016040523d82523d5f602084013e610963565b606091505b509150915061097385838361099d565b925050505b92915050565b34156105ca5760405163b398979f60e01b815260040160405180910390fd5b6060826109b2576109ad826109fc565b6109f5565b81511580156109c957506001600160a01b0384163b155b156109f257604051639996b31560e01b81526001600160a01b0385166004820152602401610438565b50805b9392505050565b805115610a0c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a3b575f5ffd5b919050565b5f60208284031215610a50575f5ffd5b6109f582610a25565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610a7e575f5ffd5b610a8783610a25565b9150602083013567ffffffffffffffff811115610aa2575f5ffd5b8301601f81018513610ab2575f5ffd5b803567ffffffffffffffff811115610acc57610acc610a59565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610afb57610afb610a59565b604052818152828201602001871015610b12575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8082018082111561097857634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610b95575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" - } - }, - "0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6": { - "balance": "0x0", - "code": "0x6080604052600436106100fa575f3560e01c806370a08231116100925780639ab8367e116100625780639ab8367e146102d0578063a9059cbb146102ef578063ad3cb1cc1461030e578063dd62ed3e1461033e578063f2fde38b1461035d575f5ffd5b806370a0823114610222578063715018a6146102625780638da5cb5b1461027657806395d89b41146102bc575f5ffd5b806323b872dd116100cd57806323b872dd146101bf578063313ce567146101de5780634f1ef286146101f957806352d1902d1461020e575f5ffd5b806306fdde03146100fe578063095ea7b3146101285780630d8e6e2c1461015757806318160ddd14610182575b5f5ffd5b348015610109575f5ffd5b5061011261037c565b60405161011f9190610f2c565b60405180910390f35b348015610133575f5ffd5b50610147610142366004610f7c565b61043c565b604051901515815260200161011f565b348015610162575f5ffd5b5060408051600181525f602082018190529181019190915260600161011f565b34801561018d575f5ffd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b60405190815260200161011f565b3480156101ca575f5ffd5b506101476101d9366004610fa4565b610455565b3480156101e9575f5ffd5b506040516012815260200161011f565b61020c610207366004611069565b61047a565b005b348015610219575f5ffd5b506101b1610499565b34801561022d575f5ffd5b506101b161023c3660046110c7565b6001600160a01b03165f9081525f5160206114515f395f51905f52602052604090205490565b34801561026d575f5ffd5b5061020c6104b4565b348015610281575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161011f565b3480156102c7575f5ffd5b506101126104d5565b3480156102db575f5ffd5b5061020c6102ea3660046110fe565b610513565b3480156102fa575f5ffd5b50610147610309366004610f7c565b610659565b348015610319575f5ffd5b50610112604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610349575f5ffd5b506101b161035836600461118c565b610666565b348015610368575f5ffd5b5061020c6103773660046110c7565b6106af565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f5160206114515f395f51905f52916103ba906111bd565b80601f01602080910402602001604051908101604052809291908181526020018280546103e6906111bd565b80156104315780601f1061040857610100808354040283529160200191610431565b820191905f5260205f20905b81548152906001019060200180831161041457829003601f168201915b505050505091505090565b5f336104498185856106f1565b60019150505b92915050565b5f33610462858285610703565b61046d858585610766565b60019150505b9392505050565b6104826107c3565b61048b82610869565b6104958282610871565b5050565b5f6104a261092d565b505f5160206114715f395f51905f5290565b6104bc610976565b6040516317d5c96560e11b815260040160405180910390fd5b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f5160206114515f395f51905f52916103ba906111bd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156105585750825b90505f8267ffffffffffffffff1660011480156105745750303b155b905081158015610582575080155b156105a05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ca57845460ff60401b1916600160401b1785555b6105d487876109d1565b6105dd8a6109e3565b6105e56109f4565b6105f16012600a6112ec565b6105fb90896112fa565b975061060789896109fc565b831561064d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f33610449818585610766565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6106b7610976565b6001600160a01b0381166106e557604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106ee81610a30565b50565b6106fe8383836001610aa0565b505050565b5f61070e8484610666565b90505f198114610760578181101561075257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106dc565b61076084848484035f610aa0565b50505050565b6001600160a01b03831661078f57604051634b637e8f60e11b81525f60048201526024016106dc565b6001600160a01b0382166107b85760405163ec442f0560e01b81525f60048201526024016106dc565b6106fe838383610b84565b306001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616148061084957507f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031661083d5f5160206114715f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156108675760405163703e46dd60e11b815260040160405180910390fd5b565b6106ee610976565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108cb575060408051601f3d908101601f191682019092526108c891810190611311565b60015b6108f357604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106dc565b5f5160206114715f395f51905f52811461092357604051632a87526960e21b8152600481018290526024016106dc565b6106fe8383610cbd565b306001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146108675760405163703e46dd60e11b815260040160405180910390fd5b336109a87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108675760405163118cdaa760e01b81523360048201526024016106dc565b6109d9610d12565b6104958282610d5b565b6109eb610d12565b6106ee81610dab565b610867610d12565b6001600160a01b038216610a255760405163ec442f0560e01b81525f60048201526024016106dc565b6104955f8383610b84565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5160206114515f395f51905f526001600160a01b038516610ad75760405163e602df0560e01b81525f60048201526024016106dc565b6001600160a01b038416610b0057604051634a1406b160e11b81525f60048201526024016106dc565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610b7d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b7491815260200190565b60405180910390a35b5050505050565b5f5160206114515f395f51905f526001600160a01b038416610bbe5781816002015f828254610bb39190611328565b90915550610c2e9050565b6001600160a01b0384165f9081526020829052604090205482811015610c105760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106dc565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610c4c576002810180548390039055610c6a565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610caf91815260200190565b60405180910390a350505050565b610cc682610db3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610d0a576106fe8282610e16565b610495610e88565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661086757604051631afcd79f60e31b815260040160405180910390fd5b610d63610d12565b5f5160206114515f395f51905f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d9c848261137f565b5060048101610760838261137f565b6106b7610d12565b806001600160a01b03163b5f03610de857604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106dc565b5f5160206114715f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610e32919061143a565b5f60405180830381855af49150503d805f8114610e6a576040519150601f19603f3d011682016040523d82523d5f602084013e610e6f565b606091505b5091509150610e7f858383610ea7565b95945050505050565b34156108675760405163b398979f60e01b815260040160405180910390fd5b606082610ebc57610eb782610f03565b610473565b8151158015610ed357506001600160a01b0384163b155b15610efc57604051639996b31560e01b81526001600160a01b03851660048201526024016106dc565b5080610473565b805115610f135780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610f77575f5ffd5b919050565b5f5f60408385031215610f8d575f5ffd5b610f9683610f61565b946020939093013593505050565b5f5f5f60608486031215610fb6575f5ffd5b610fbf84610f61565b9250610fcd60208501610f61565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff84111561100c5761100c610fde565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561103b5761103b610fde565b604052838152905080828401851015611052575f5ffd5b838360208301375f60208583010152509392505050565b5f5f6040838503121561107a575f5ffd5b61108383610f61565b9150602083013567ffffffffffffffff81111561109e575f5ffd5b8301601f810185136110ae575f5ffd5b6110bd85823560208401610ff2565b9150509250929050565b5f602082840312156110d7575f5ffd5b61047382610f61565b5f82601f8301126110ef575f5ffd5b61047383833560208501610ff2565b5f5f5f5f5f60a08688031215611112575f5ffd5b61111b86610f61565b945061112960208701610f61565b935060408601359250606086013567ffffffffffffffff81111561114b575f5ffd5b611157888289016110e0565b925050608086013567ffffffffffffffff811115611173575f5ffd5b61117f888289016110e0565b9150509295509295909350565b5f5f6040838503121561119d575f5ffd5b6111a683610f61565b91506111b460208401610f61565b90509250929050565b600181811c908216806111d157607f821691505b6020821081036111ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561124457808504811115611228576112286111f5565b600184161561123657908102905b60019390931c92800261120d565b935093915050565b5f8261125a5750600161044f565b8161126657505f61044f565b816001811461127c5760028114611286576112a2565b600191505061044f565b60ff841115611297576112976111f5565b50506001821b61044f565b5060208310610133831016604e8410600b84101617156112c5575081810a61044f565b6112d15f198484611209565b805f19048211156112e4576112e46111f5565b029392505050565b5f61047360ff84168361124c565b808202811582820484141761044f5761044f6111f5565b5f60208284031215611321575f5ffd5b5051919050565b8082018082111561044f5761044f6111f5565b601f8211156106fe57805f5260205f20601f840160051c810160208510156113605750805b601f840160051c820191505b81811015610b7d575f815560010161136c565b815167ffffffffffffffff81111561139957611399610fde565b6113ad816113a784546111bd565b8461133b565b6020601f8211600181146113df575f83156113c85750848201515b5f19600385901b1c1916600184901b178455610b7d565b5f84815260208120601f198516915b8281101561140e57878501518255602094850194600190920191016113ee565b508482101561142b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82518060208501845e5f92019182525091905056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" - } - }, - "0x4e59b44847b379578588920ca78fbf26c0b4956c": { - "balance": "0x0", - "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", - "nonce": "1", - "storage": {} - }, - "0x5fbdb2315678afecb367f032d93f642f64180aa3": { - "balance": "0x0", - "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x685d256e9be7152506222a87b2d2d582926a289249af3bc94a19432f63c6720e": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xb689b7fb27041302cb3f75ab02fdfc43b274e2d4faa9d0959400e9b9af08e7ee": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - }, - "0x610178da211fef7d417bc0e6fed39f05609ad788": { - "balance": "0x0", - "code": "0x608060405260043610610161575f3560e01c80639b30a5e6116100cd578063b5700e6811610087578063c64814dd11610062578063c64814dd1461047c578063f2fde38b146104b2578063fa52c7d8146104d1578063fc0c546a14610514575f5ffd5b8063b5700e6814610413578063b5ecb34414610432578063be2030941461045d575f5ffd5b80639b30a5e6146102f35780639e9a8f3114610312578063a2d78dd514610327578063a3066aab14610379578063ad3cb1cc14610398578063b3e6ebd5146103d5575f5ffd5b80634f1ef2861161011e5780634f1ef2861461023557806352d1902d146102485780635544c2f11461025c5780636a911ccf1461027b578063715018a61461028f5780638da5cb5b146102a3575f5ffd5b8063026e402b146101655780630d8e6e2c1461018657806313b9057a146101b65780632140fecd146101d55780633e9df9b5146101f45780634d99dd1614610216575b5f5ffd5b348015610170575f5ffd5b5061018461017f366004612346565b610533565b005b348015610191575f5ffd5b5060408051600181525f60208201819052918101919091526060015b60405180910390f35b3480156101c1575f5ffd5b506101846101d036600461246c565b6106d6565b3480156101e0575f5ffd5b506101846101ef3660046124ca565b610869565b3480156101ff575f5ffd5b506102085f5481565b6040519081526020016101ad565b348015610221575f5ffd5b50610184610230366004612346565b61098a565b6101846102433660046124e3565b610b3c565b348015610253575f5ffd5b50610208610b5b565b348015610267575f5ffd5b50610184610276366004612588565b610b76565b348015610286575f5ffd5b50610184610c3f565b34801561029a575f5ffd5b50610184610ccd565b3480156102ae575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101ad565b3480156102fe575f5ffd5b5061020861030d3660046125cc565b610cee565b34801561031d575f5ffd5b5061020860085481565b348015610332575f5ffd5b506103646103413660046125e6565b600760209081525f92835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101ad565b348015610384575f5ffd5b506101846103933660046124ca565b610d48565b3480156103a3575f5ffd5b506103c8604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101ad9190612617565b3480156103e0575f5ffd5b506104036103ef36600461264c565b60046020525f908152604090205460ff1681565b60405190151581526020016101ad565b34801561041e575f5ffd5b506001546102db906001600160a01b031681565b34801561043d575f5ffd5b5061020861044c3660046124ca565b60056020525f908152604090205481565b348015610468575f5ffd5b50610184610477366004612663565b610e58565b348015610487575f5ffd5b506102086104963660046125e6565b600660209081525f928352604080842090915290825290205481565b3480156104bd575f5ffd5b506101846104cc3660046124ca565b610f84565b3480156104dc575f5ffd5b506105066104eb3660046124ca565b60036020525f90815260409020805460019091015460ff1682565b6040516101ad9291906126c1565b34801561051f575f5ffd5b506002546102db906001600160a01b031681565b61053c82610fc1565b335f82900361055e57604051631f2a200560e01b815260040160405180910390fd5b600254604051636eb1769f60e11b81526001600160a01b0383811660048301523060248301525f92169063dd62ed3e90604401602060405180830381865afa1580156105ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d091906126f1565b9050828110156106025760405163054365bb60e31b815260048101829052602481018490526044015b60405180910390fd5b60025461061a906001600160a01b0316833086611042565b6001600160a01b0384165f908152600360205260408120805485929061064190849061271c565b90915550506001600160a01b038085165f9081526006602090815260408083209386168352929052908120805485929061067c90849061271c565b92505081905550836001600160a01b0316826001600160a01b03167fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b856040516106c891815260200190565b60405180910390a350505050565b336106e0816110e6565b6106e984611133565b6106f28561116e565b604080516001600160a01b03831660208201525f910160405160208183030381529060405290506107248185886111aa565b6127108361ffff16111561074b5760405163dc81db8560e01b815260040160405180910390fd5b600160045f61075989610cee565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180604001604052805f8152602001600160028111156107a0576107a06126ad565b90526001600160a01b0383165f908152600360209081526040909120825181559082015160018083018054909160ff19909116908360028111156107e6576107e66126ad565b02179055505060408051885181526020808a01518183015289830151828401526060808b0151908301528851608083015288015160a082015261ffff861660c082015290516001600160a01b03851692507ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f9181900360e00190a2505050505050565b6001600160a01b0381165f9081526005602052604081205433918190036108a3576040516379298a5360e11b815260040160405180910390fd5b804210156108c457604051635a77435760e01b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209386168352929052908120549081900361090c57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038085165f90815260066020908152604080832087851684529091528120556002546109419116848361123f565b826001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658260405161097c91815260200190565b60405180910390a250505050565b61099382610fc1565b335f8290036109b557604051631f2a200560e01b815260040160405180910390fd5b6001600160a01b038084165f90815260076020908152604080832093851683529290522054156109f85760405163d423a4f160e01b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209385168352929052205482811015610a4157604051639266535160e01b8152600481018290526024016105f9565b6001600160a01b038085165f90815260066020908152604080832093861683529290529081208054859290610a7790849061272f565b92505081905550604051806040016040528084815260200160085442610a9d919061271c565b90526001600160a01b038086165f81815260076020908152604080832094881683529381528382208551815594810151600190950194909455908152600390925281208054859290610af090849061272f565b92505081905550836001600160a01b0316826001600160a01b03167f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c856040516106c891815260200190565b610b446112ce565b610b4d82611374565b610b57828261137c565b5050565b5f610b6461143d565b505f516020612a1c5f395f51905f5290565b33610b8081610fc1565b610b8983611133565b610b928461116e565b604080516001600160a01b03831660208201525f91016040516020818303038152906040529050610bc48184876111aa565b600160045f610bd288610cee565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550816001600160a01b03167f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d8686604051610c30929190612742565b60405180910390a25050505050565b33610c4981610fc1565b6001600160a01b0381165f908152600360205260409020600101805460ff19166002179055600854610c7b904261271c565b6001600160a01b0382165f8181526005602090815260408083209490945560039052828120819055915190917ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd1691a250565b610cd5611486565b6040516317d5c96560e11b815260040160405180910390fd5b5f815f0151826020015183604001518460600151604051602001610d2b949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f9081526007602090815260408083203380855292528220549091819003610d8d57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f90815260076020908152604080832093861683529290522060010154421015610dd557604051635a77435760e01b815260040160405180910390fd5b6001600160a01b038084165f9081526007602090815260408083208685168452909152812081815560010155600254610e109116838361123f565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610e4b91815260200190565b60405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610e9d5750825b90505f8267ffffffffffffffff166001148015610eb95750303b155b905081158015610ec7575080155b15610ee55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f0f57845460ff60401b1916600160401b1785555b610f18866114e1565b610f206114f2565b610f286114fa565b610f33898989611600565b8315610f7957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610f8c611486565b6001600160a01b038116610fb557604051631e4fbdf760e01b81525f60048201526024016105f9565b610fbe816116ab565b50565b6001600160a01b0381165f9081526003602052604081206001015460ff1690816002811115610ff257610ff26126ad565b036110105760405163508a793f60e01b815260040160405180910390fd5b6002816002811115611024576110246126ad565b03610b575760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af191505080601f3d1160015f51141615161561109b5750833b153d17155b806110df5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016105f9565b5050505050565b6001600160a01b0381165f9081526003602052604081206001015460ff166002811115611115576111156126ad565b14610fbe5760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152611150828261171b565b15610b57576040516306cf438f60e01b815260040160405180910390fd5b60045f61117a83610cee565b815260208101919091526040015f205460ff1615610fbe5760405162da8a5760e11b815260040160405180910390fd5b6111b38261173e565b5f6040518060600160405280602481526020016129d86024913990505f84826040516020016111e3929190612793565b60405160208183030381529060405290505f6111fe826117a5565b905061121b818561120e88611892565b611216611909565b6119d6565b6112375760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af191505080601f3d1160015f5114161516156112895750823b153d17155b806112c85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016105f9565b50505050565b306001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816148061135457507f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad7886001600160a01b03166113485f516020612a1c5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156113725760405163703e46dd60e11b815260040160405180910390fd5b565b610fbe611486565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d6575060408051601f3d908101601f191682019092526113d3918101906126f1565b60015b6113fe57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016105f9565b5f516020612a1c5f395f51905f52811461142e57604051632a87526960e21b8152600481018290526024016105f9565b6114388383611a85565b505050565b306001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816146113725760405163703e46dd60e11b815260040160405180910390fd5b336114b87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146113725760405163118cdaa760e01b81523360048201526024016105f9565b6114e9611ada565b610fbe81611b23565b611372611ada565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561153f5750825b90505f8267ffffffffffffffff16600114801561155b5750303b155b905081158015611569575080155b156115875760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156115b157845460ff60401b1916600160401b1785555b435f5583156110df57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0383166116275760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03821661164e5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b038086166001600160a01b03199283161790925560018054928516929091169190911790556202a300808210156116a35760405163b57e21df60e01b815260040160405180910390fd5b506008555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b805182515f91148015611735575081602001518360200151145b90505b92915050565b805160208201515f915f5160206129fc5f395f51905f5291159015161561176457505050565b8251602084015182600384858586098509088382830914838210848410161693505050816114385760405163279e345360e21b815260040160405180910390fd5b604080518082019091525f80825260208201525f6117c283611b2b565b90505f5160206129fc5f395f51905f5260035f82848509905082806117e9576117e96127af565b848209905082806117fc576117fc6127af565b82820890505f5f61180c83611d34565b925090505b80611875578480611824576118246127af565b6001870895508480611838576118386127af565b8687099250848061184b5761184b6127af565b8684099250848061185e5761185e6127af565b848408925061186c83611d34565b92509050611811565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f80825260208201528151602083015115901516156118b9575090565b6040518060400160405280835f015181526020015f5160206129fc5f395f51905f5284602001516118ea91906127c3565b611901905f5160206129fc5f395f51905f5261272f565b905292915050565b61193060405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f51915080611a795760405163c206334f60e01b815260040160405180910390fd5b50151595945050505050565b611a8e82611dfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611ad2576114388282611e5f565b610b57611ed1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661137257604051631afcd79f60e31b815260040160405180910390fd5b610f8c611ada565b5f5f611b3683611ef0565b805190915060308114611b4b57611b4b6127e2565b5f8167ffffffffffffffff811115611b6557611b6561236e565b6040519080825280601f01601f191660200182016040528015611b8f576020820181803683370190505b5090505f5b82811015611bfe57836001611ba9838661272f565b611bb3919061272f565b81518110611bc357611bc36127f6565b602001015160f81c60f81b828281518110611be057611be06127f6565b60200101906001600160f81b03191690815f1a905350600101611b94565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b82811015611c8e578381611c3a858861272f565b611c44919061271c565b81518110611c5457611c546127f6565b602001015160f81c60f81b60f81c828281518110611c7457611c746127f6565b60ff90921660209283029190910190910152600101611c26565b505f611c998261223c565b90506101005f5160206129fc5f395f51905f525f611cb7868961272f565b90505f5b81811015611d24575f886001611cd1848661272f565b611cdb919061272f565b81518110611ceb57611ceb6127f6565b016020015160f81c90508380611d0357611d036127af565b85870995508380611d1657611d166127af565b818708955050600101611cbb565b50929a9950505050505050505050565b5f5f5f5f5f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f5160206129fc5f395f51905f52905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f51925083611dc257604051630c9d3e9960e21b815260040160405180910390fd5b80600184901b1115611ddb57611dd8838261272f565b92505b8080611de957611de96127af565b8384099690961496919550909350505050565b806001600160a01b03163b5f03611e3157604051634c9c8ce360e01b81526001600160a01b03821660048201526024016105f9565b5f516020612a1c5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611e7b919061280a565b5f60405180830381855af49150503d805f8114611eb3576040519150601f19603f3d011682016040523d82523d5f602084013e611eb8565b606091505b5091509150611ec88583836122a3565b95945050505050565b34156113725760405163b398979f60e01b815260040160405180910390fd5b604080516030808252606082810190935290602090600160f91b905f90846020820181803683370190505090508086604051602001611f30929190612793565b6040516020818303038152906040529050808460f81b604051602001611f57929190612815565b604051602081830303815290604052905080604051602001611f79919061283f565b60408051601f1981840301815290829052915061010160f01b90611fa39083908390602001612857565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff8111156120135761201361236e565b6040519080825280601f01601f19166020018201604052801561203d576020820181803683370190505b5090505f8260405160200161205491815260200190565b60408051601f1981840301815291905290505f5b81518110156120be57818181518110612083576120836127f6565b602001015160f81c60f81b8382815181106120a0576120a06127f6565b60200101906001600160f81b03191690815f1a905350600101612068565b505f846040516020016120d391815260200190565b60408051601f19818403018152602083019091525f80835291985091505b89811015612165575f83828151811061210c5761210c6127f6565b602001015160f81c60f81b838381518110612129576121296127f6565b602001015160f81c60f81b189050888160405160200161214a92919061287b565b60408051601f198184030181529190529850506001016120f1565b5086888760405160200161217b9392919061289f565b604051602081830303815290604052965086805190602001209350836040516020016121a991815260200190565b60408051601f1981840301815291905291505f5b6121ca8a60ff8d1661272f565b81101561222b578281815181106121e3576121e36127f6565b01602001516001600160f81b031916846121fd838d61271c565b8151811061220d5761220d6127f6565b60200101906001600160f81b03191690815f1a9053506001016121bd565b50919b9a5050505050505050505050565b5f80805b835181101561229c5783818151811061225b5761225b6127f6565b602002602001015160ff1681600861227391906128d2565b61227e9060026129cc565b61228891906128d2565b612292908361271c565b9150600101612240565b5092915050565b6060826122b8576122b382612302565b6122fb565b81511580156122cf57506001600160a01b0384163b155b156122f857604051639996b31560e01b81526001600160a01b03851660048201526024016105f9565b50805b9392505050565b8051156123125780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114612341575f5ffd5b919050565b5f5f60408385031215612357575f5ffd5b6123608361232b565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156123a5576123a561236e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156123d4576123d461236e565b604052919050565b5f608082840312156123ec575f5ffd5b6040516080810167ffffffffffffffff8111828210171561240f5761240f61236e565b6040908152833582526020808501359083015283810135908201526060928301359281019290925250919050565b5f6040828403121561244d575f5ffd5b612455612382565b823581526020928301359281019290925250919050565b5f5f5f5f6101208587031215612480575f5ffd5b61248a86866123dc565b9350612499866080870161243d565b92506124a88660c0870161243d565b915061010085013561ffff811681146124bf575f5ffd5b939692955090935050565b5f602082840312156124da575f5ffd5b6117358261232b565b5f5f604083850312156124f4575f5ffd5b6124fd8361232b565b9150602083013567ffffffffffffffff811115612518575f5ffd5b8301601f81018513612528575f5ffd5b803567ffffffffffffffff8111156125425761254261236e565b612555601f8201601f19166020016123ab565b818152866020838501011115612569575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f610100848603121561259b575f5ffd5b6125a585856123dc565b92506125b4856080860161243d565b91506125c38560c0860161243d565b90509250925092565b5f608082840312156125dc575f5ffd5b61173583836123dc565b5f5f604083850312156125f7575f5ffd5b6126008361232b565b915061260e6020840161232b565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561265c575f5ffd5b5035919050565b5f5f5f5f60808587031215612676575f5ffd5b61267f8561232b565b935061268d6020860161232b565b9250604085013591506126a26060860161232b565b905092959194509250565b634e487b7160e01b5f52602160045260245ffd5b82815260408101600383106126e457634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f60208284031215612701575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561173857611738612708565b8181038181111561173857611738612708565b825181526020808401518183015260408085015190830152606080850151908301528251608083015282015160a082015260c081016122fb565b5f81518060208401855e5f93019283525090919050565b5f6127a76127a1838661277c565b8461277c565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b5f826127dd57634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611735828461277c565b5f612820828561277c565b5f81526001600160f81b03199390931660018401525050600201919050565b5f61284a828461277c565b5f81526001019392505050565b5f612862828561277c565b6001600160f01b03199390931683525050600201919050565b5f612886828561277c565b6001600160f81b03199390931683525050600101919050565b5f6128aa828661277c565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b808202811582820484141761173857611738612708565b6001815b60018411156129245780850481111561290857612908612708565b600184161561291657908102905b60019390931c9280026128ed565b935093915050565b5f8261293a57506001611738565b8161294657505f611738565b816001811461295c576002811461296657612982565b6001915050611738565b60ff84111561297757612977612708565b50506001821b611738565b5060208310610133831016604e8410600b84101617156129a5575081810a611738565b6129b15f1984846128e9565b805f19048211156129c4576129c4612708565b029392505050565b5f611735838361292c56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" - } - }, - "0x6f6c6d0e7a6bb0898333aadaeb4c87368041c9d6": { - "balance": "0x8ac6f96f0ea1d2fe", - "code": "0x", - "nonce": 3, - "storage": {} - }, - "0x8a791620dd6260079bf849dc5567adc3f2fdc318": { - "balance": "0x0", - "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0x03b401b7b39ad5148aeb9ef28bef316a982c01bdaadee32abc45fed3bc7f4746": "0x00000000000000000000000000000000000000000b9993a58a7a70d408c00000", - "0x2167eff7539e891c54e98b32937b10a4f6269ef4c2975ae5edbcdc76e7da9ebf": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x25a12f267ec5c0c6bc157bd9f2a5f8853928b268c69df0f4f481a5b93de807bc": "0x00000000000000000000000000000000000000000000002b5e3af16b18800000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6", - "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02": "0x00000000000000000000000000000000000000000b999411f60dcc5fc6000000", - "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03": "0x457370726573736f000000000000000000000000000000000000000000000010", - "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04": "0x4553500000000000000000000000000000000000000000000000000000000006", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0xa723b6812b36513a13b880a4cb14668a0e53064052b338092d0622774b736bae": "0x000000000000000000000000000000000000000000000030ca024f987b900000", - "0xeb3cf0b3fdb786328dc87f4ae2f6ff264030822d601983cfa90e9c396887ec91": "0x00000000000000000000000000000000000000000000001043561a8829300000", - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xf2d351354d16d58033c2b6b59a768e7acfc5d94d06391b408a001f1980ef2bcb": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - }, - "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0": { - "balance": "0x0", - "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0e28d2d3671776a08300039b18dd065a1acdb6282aee49e329b4085ac511e1a0", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x02d4b4bf8826b33f87f986dde73bb311d77e297f55b133dad21288833be1b8b4", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x2dfcb5714318766addfd9e7cbdda0321b7e8bbf57e42fd4fc546d314f312b6db", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000d2f000000000000000000000000000000000000000000", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000010000000000000001000000000000012c", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0e28d2d3671776a08300039b18dd065a1acdb6282aee49e329b4085ac511e1a0", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0x02d4b4bf8826b33f87f986dde73bb311d77e297f55b133dad21288833be1b8b4", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0x2dfcb5714318766addfd9e7cbdda0321b7e8bbf57e42fd4fc546d314f312b6db", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000002" - } - }, - "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853": { - "balance": "0x0", - "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000038d7ea4c68000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e": { - "balance": "0x0", - "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000c", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000002a300", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x65988aaab6fee60b915a7c6b43c7588db33087a016180dd1a794699707697e08": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x7f159dfb2339d762a397026e6cfea24f9ddfa67757f734cbde60a0a04c80d411": "0x00000000000000000000000000000000000000000000000ad78ebc5ac6200000", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0xa4aaa97df7f6bcdc97da4ca9e4116885d4a807ec2b5ad4a9b130b094dc97a171": "0x00000000000000000000000000000000000000000000000ad78ebc5ac6200000", - "0xa4aaa97df7f6bcdc97da4ca9e4116885d4a807ec2b5ad4a9b130b094dc97a172": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb0f3cc9fe3f537bf629d5d8b7774df4118bac03cf980517e5bd1c420d6326395": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", - "0xc8108b74fd3c6b13a7516728f2f1252673903e850abc5c5f03033fce78ec2501": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", - "0xc8108b74fd3c6b13a7516728f2f1252673903e850abc5c5f03033fce78ec2502": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xfbbe536cce17c94bdd99c5535667338ecd0323409ac4888e1f8a7e808f3c1d66": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660002", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000b08cc720f511062537ca78bdb0ae691f04f5a957", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3" - } - }, - "0xd208510a88ed64fe278dc04d331901fd8ad99434": { - "balance": "0x8ac6ff51571280c7", - "code": "0x", - "nonce": 3, - "storage": {} - }, - "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9": { - "balance": "0x0", - "code": "0x608060405260043610610254575f3560e01c8063715018a61161013f578063b33bc491116100b3578063d24d933d11610078578063d24d933d14610835578063e030330114610864578063f068205414610883578063f2fde38b146108a2578063f5676160146108c1578063f9e50d19146108e0575f5ffd5b8063b33bc49114610790578063b3daf254146107af578063b5adea3c146107c3578063c23b9e9e146107e2578063c8e5e4981461081a575f5ffd5b80638da5cb5b116101045780638da5cb5b1461066557806390c14390146106a157806396c1ca61146106c05780639baa3cc9146106df5780639fdb54a7146106fe578063ad3cb1cc14610753575f5ffd5b8063715018a6146105c3578063757c37ad146105d757806376671808146105f6578063826e41fc1461060a5780638584d23f14610629575f5ffd5b8063300c89dd116101d6578063426d31941161019b578063426d319414610510578063433dba9f146105315780634f1ef2861461055057806352d1902d14610563578063623a13381461057757806369cc6a04146105af575f5ffd5b8063300c89dd1461043b578063313df7b11461045a578063378ec23b146104915780633c23b6db146104ad5780633ed55b7b146104ea575f5ffd5b8063167ac6181161021c578063167ac618146103645780632063d4f71461038357806325297427146103a25780632d52aad6146103d15780632f79889d146103fd575f5ffd5b8063013fa5fc1461025857806302b592f3146102795780630625e19b146102d65780630d8e6e2c1461031857806312173c2c14610343575b5f5ffd5b348015610263575f5ffd5b50610277610272366004612a09565b6108f4565b005b348015610284575f5ffd5b50610298610293366004612a22565b6109a7565b6040516102cd94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b3480156102e1575f5ffd5b50600b54600c54600d54600e546102f89392919084565b6040805194855260208501939093529183015260608201526080016102cd565b348015610323575f5ffd5b5060408051600281525f60208201819052918101919091526060016102cd565b34801561034e575f5ffd5b506103576109f0565b6040516102cd9190612a39565b34801561036f575f5ffd5b5061027761037e366004612c50565b61101f565b34801561038e575f5ffd5b5061027761039d366004612f34565b611096565b3480156103ad575f5ffd5b506103c16103bc366004612c50565b6110af565b60405190151581526020016102cd565b3480156103dc575f5ffd5b506102776103eb366004612a22565b600f805460ff19166001179055601055565b348015610408575f5ffd5b5060085461042390600160c01b90046001600160401b031681565b6040516001600160401b0390911681526020016102cd565b348015610446575f5ffd5b506103c1610455366004612c50565b611111565b348015610465575f5ffd5b50600854610479906001600160a01b031681565b6040516001600160a01b0390911681526020016102cd565b34801561049c575f5ffd5b50435b6040519081526020016102cd565b3480156104b8575f5ffd5b506102776104c7366004612c50565b600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b3480156104f5575f5ffd5b50600a5461042390600160401b90046001600160401b031681565b34801561051b575f5ffd5b505f546001546002546003546102f89392919084565b34801561053c575f5ffd5b5061027761054b366004612f7b565b6111a6565b61027761055e366004612f94565b6111ba565b34801561056e575f5ffd5b5061049f6111d9565b348015610582575f5ffd5b5061027761059136600461307a565b8051600b556020810151600c556040810151600d5560600151600e55565b3480156105ba575f5ffd5b506102776111f4565b3480156105ce575f5ffd5b50610277611262565b3480156105e2575f5ffd5b506102776105f1366004613094565b611283565b348015610601575f5ffd5b506104236115b6565b348015610615575f5ffd5b506008546001600160a01b031615156103c1565b348015610634575f5ffd5b50610648610643366004612a22565b6115e0565b604080519283526001600160401b039091166020830152016102cd565b348015610670575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610479565b3480156106ac575f5ffd5b506104236106bb3660046130d8565b61170b565b3480156106cb575f5ffd5b506102776106da366004612f7b565b61177a565b3480156106ea575f5ffd5b506102776106f9366004613100565b611803565b348015610709575f5ffd5b5060065460075461072d916001600160401b0380821692600160401b909204169083565b604080516001600160401b039485168152939092166020840152908201526060016102cd565b34801561075e575f5ffd5b50610783604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102cd9190613155565b34801561079b575f5ffd5b506102776107aa3660046130d8565b611925565b3480156107ba575f5ffd5b50610423611a91565b3480156107ce575f5ffd5b506102776107dd36600461318a565b611ab2565b3480156107ed575f5ffd5b5060085461080590600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016102cd565b348015610825575f5ffd5b50610277600f805460ff19169055565b348015610840575f5ffd5b5060045460055461072d916001600160401b0380821692600160401b909204169083565b34801561086f575f5ffd5b506103c161087e3660046131a4565b611af9565b34801561088e575f5ffd5b50600a54610423906001600160401b031681565b3480156108ad575f5ffd5b506102776108bc366004612a09565b611b2c565b3480156108cc575f5ffd5b506102776108db3660046131c4565b611b6b565b3480156108eb575f5ffd5b5060095461049f565b6108fc611c16565b6001600160a01b0381166109235760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036109525760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b600981815481106109b6575f80fd5b5f918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6109f8612728565b620100008152600b60208201527f2faf5a113efd87d75818e63ff9a6170007f22c89bbc4a8bd0f2b48268757b0146040820151527f185aee05f8d3babfce67931f15db39e61f25f794a4134d7bee6e18c5ad1ec0576020604083015101527f0dccf5dcf667a37ca93b8d721091d8f3a8049b3d1e89a56d66e42751bbaf7b5e6060820151527f2cf10949fc5bfcecb3bc54dd4121e55807430f17f30498a7ea6a026070b191626020606083015101527f08d70e4e0184fe53bd566f0d7edc4cd7b0e339490973d0faec7dac2089f538e56080820151527ef665fe1fd110d37d1dea446e8400f06f06b9b58ab3df90fbae7c47ee5860416020608083015101527f087e14d71924ac0f2880adf0f106925e5a6fdd57d020bb3c8aa70fa9fc00ccf360a0820151527f01db7e3178b342f91d54fc972cee72569f429a393988ee43c289e2ed96077152602060a083015101527f196dd42d767201f7f196c42aaef485656046310f5083559592bd1313e16948b760c0820151527f17889680810aaabd1ff3ac4a6c5492100579e059170cd2b77e2b3da6d37cc246602060c083015101527f24935e7a77ac313fd3d60ff3f1a0a79ec32c7dc519b39da0acb2c49f367771cc60e0820151527f168e29425ef138cb6943c75352f33c190e5f1488eb54a9e11deb744da7fb6b2e602060e083015101527f1b58d558b5526453bd1028ca938c940bb89e723f7c35787c02f9f179ae9a0cea610100820151527f21afc121d91d9d1c17dafb9236bc9b872c5b43df064c0b1286012fb43a762324602061010083015101527f1047fc55794d1e597de155077611e3c789a0a2be02183821bba56cf61cc1b8ed610120820151527f174252324727c0d2ee5e50eb57a5231f67474ceed6932ad4ffe9bcf866aa3428602061012083015101527f28db289a4cfb73ba92961572f3185298ae366ed1a44971607bcbf801f120f561610140820151527f045cfe7ae2cd175508172e7d9c2e899bb1d216dfc31fe89fc6c917caaee877a2602061014083015101527f195f2eec8547727fc46ed01b79e8f666ded64ae54f57073874a5a2470380a785610160820151527f1527322e85da1aefbd839e65d11dc695aac16b0db6c62591d9813242d41cbe31602061016083015101527f10c8d7d7355f7e0f8c002f482cc3b98c90baa94261c59a17b424eecfe4e963b2610180820151527f2272e30178647167bbead3a2d7371988f2e198e65815029ded4c64bfc0850f1f602061018083015101527f15d56ea7ab2fa61265f551c2ae25389c8fe7bcb3bf6608082c36a201f225f77d6101a0820151527f0b58546887202e7273d3d0c55d65dd6132cac98ebf04efb1b52445c513c4a4df60206101a083015101527f050d6f43774e8dffaa868f2a7dc82f566c69d175d818d4517cc70ac5fcb2f1b16101c0820151527f2fff87bf605e998373bb64553f3a625dabcd12888692d678a8f44d136440c86360206101c083015101527f12d085608c602cfb5b8c03ec7bd13ac0ff9e64a9ac1e9aa746594a033e464bf26101e0820151527f18ac5a3536042eeb0b0c7c2f43f5e2ca3b2173daa4c2812ffca64787e8e956b260206101e083015101527f0f0f9891fc2b790e74dc253c8854df6392e010f4de6760b8423a3dd69bbe5dce610200820151527f16bed1d244a2fe3ab9a652c7feec5650161d8a75227dece7294f3c8fc542fd6c602061020083015101527f0fa36d00672fa6a1c44cd3c259212c1ada48c66bf7bb085f24471b15b17e6e51610220820151527f182088e56b64955232460891d2b279765325813aef1dae855e5f496c418afc41602061022083015101527f2baf5ae2dd832e1449facc611b6b80fd66d58c871d5827c5c8e2747064e29964610240820151527f29f543b543137e881804c989cd3b99934010002238e8ab3eec882e09d306681f602061024083015101527f2db0ddc7123b42f520e257466a0d92da8b564fe01ec665096c14119643012984610260820151527f1b7ab27a66966284d7fb29bce9d550eafba16c49fbc6267827cdfc8d0b16f94f602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611027611c16565b600a80546fffffffffffffffff0000000000000000198116600160401b6001600160401b0385811682029283179485905561106d9491909104811692811691161761170b565b600a60106101000a8154816001600160401b0302191690836001600160401b0316021790555050565b604051634e405c8d60e01b815260040160405180910390fd5b5f6001600160401b03821615806110cf5750600a546001600160401b0316155b156110db57505f919050565b600a546001600160401b03166110f28360056132d0565b6110fc9190613303565b6001600160401b03161592915050565b919050565b5f6001600160401b03821615806111315750600a546001600160401b0316155b1561113d57505f919050565b600a54611153906001600160401b031683613303565b6001600160401b031615806111a05750600a5461117b906005906001600160401b0316613330565b600a546001600160401b0391821691611195911684613303565b6001600160401b0316115b92915050565b6111ae611c16565b6111b78161177a565b50565b6111c2611c71565b6111cb82611d15565b6111d58282611d56565b5050565b5f6111e2611e17565b505f5160206138315f395f51905f5290565b6111fc611c16565b6008546001600160a01b03161561124757600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c02450905f90a1565b60405163a863aec960e01b815260040160405180910390fd5b565b61126a611c16565b6040516317d5c96560e11b815260040160405180910390fd5b6008546001600160a01b0316151580156112a857506008546001600160a01b03163314155b156112c6576040516301474c8f60e71b815260040160405180910390fd5b60065483516001600160401b0391821691161115806112ff575060065460208401516001600160401b03600160401b9092048216911611155b1561131d5760405163051c46ef60e01b815260040160405180910390fd5b61132a8360400151611e60565b6113378260200151611e60565b6113448260400151611e60565b6113518260600151611e60565b5f61135a6115b6565b6020850151600a549192505f9161137a91906001600160401b031661170b565b600a549091506001600160401b03600160801b9091048116908216106113c5576113a78560200151611111565b156113c55760405163080ae8d960e01b815260040160405180910390fd5b600a546001600160401b03600160801b909104811690821611156114785760026113ef8383613330565b6001600160401b0316106114165760405163080ae8d960e01b815260040160405180910390fd5b6114218260016132d0565b6001600160401b0316816001600160401b031614801561145a575060065461145890600160401b90046001600160401b03166110af565b155b156114785760405163080ae8d960e01b815260040160405180910390fd5b611483858585611ea1565b84516006805460208801516001600160401b03908116600160401b026001600160801b0319909216938116939093171790556040860151600755600a54600160801b90048116908216108015906114e257506114e285602001516110af565b1561154c578351600b556020840151600c556040840151600d556060840151600e557f31eabd9099fdb25dacddd206abff87311e553441fc9d0fcdef201062d7e7071b6115308260016132d0565b6040516001600160401b03909116815260200160405180910390a15b611557434287612018565b84602001516001600160401b0316855f01516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae687604001516040516115a791815260200190565b60405180910390a35050505050565b600654600a545f916115db916001600160401b03600160401b9092048216911661170b565b905090565b600980545f918291906115f460018361334f565b8154811061160457611604613362565b5f918252602090912060029091020154600160801b90046001600160401b0316841061164357604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b8181101561170457846009828154811061167357611673613362565b5f918252602090912060029091020154600160801b90046001600160401b031611156116fc57600981815481106116ac576116ac613362565b905f5260205f20906002020160010154600982815481106116cf576116cf613362565b905f5260205f2090600202015f0160109054906101000a90046001600160401b0316935093505050915091565b600101611657565b5050915091565b5f816001600160401b03165f0361172357505f6111a0565b826001600160401b03165f0361173b575060016111a0565b6117458284613303565b6001600160401b03165f036117655761175e8284613376565b90506111a0565b61176f8284613376565b61175e9060016132d0565b611782611c16565b610e108163ffffffff1610806117a157506301e133808163ffffffff16115b806117bf575060085463ffffffff600160a01b909104811690821611155b156117dd576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156118475750825b90505f826001600160401b031660011480156118625750303b155b905081158015611870575080155b1561188e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156118b857845460ff60401b1916600160401b1785555b6118c186612201565b6118c9612212565b6118d489898961221a565b831561191a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b61192d611c16565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611976575080546001600160401b03808416911610155b156119945760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b0380841691909117600160401b1782556005908516116119dc576040516350dd03f760e11b815260040160405180910390fd5b5f54600b55600154600c55600254600d55600354600e55600a80546001600160401b03858116600160401b026001600160801b031990921690871617179055611a25838561170b565b600a805467ffffffffffffffff60801b1916600160801b6001600160401b0393841602179055815460ff60401b1916825560405190831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b600a545f906115db906001600160401b03600160401b82048116911661170b565b80516006805460208401516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560408101516007556111b7434283612018565b600f545f9060ff16611b1457611b0f8383612346565b611b25565b8160105484611b23919061334f565b115b9392505050565b611b34611c16565b6001600160a01b038116611b6257604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6111b78161249e565b611b7660095f61298d565b5f5b81518110156111d5576009828281518110611b9557611b95613362565b6020908102919091018101518254600181810185555f94855293839020825160029092020180549383015160408401516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990971691909416179490941793909316178255606001519082015501611b78565b33611c487f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146112605760405163118cdaa760e01b8152336004820152602401611b59565b306001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9161480611cf757507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316611ceb5f5160206138315f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156112605760405163703e46dd60e11b815260040160405180910390fd5b611d1d611c16565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200161099c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611db0575060408051601f3d908101601f19168201909252611dad918101906133a3565b60015b611dd857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611b59565b5f5160206138315f395f51905f528114611e0857604051632a87526960e21b815260048101829052602401611b59565b611e12838361250e565b505050565b306001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c916146112605760405163703e46dd60e11b815260040160405180910390fd5b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806111d55760405163016c173360e21b815260040160405180910390fd5b5f611eaa6109f0565b9050611eb46129ab565b84516001600160401b0390811682526020808701805183169184019190915260408088015190840152600c546060840152600d546080840152600e5460a0840152600b5460c0840152600a549051600160401b9091048216911610801590611f245750611f2485602001516110af565b15611f5657602084015160e0820152604084015161010082015260608401516101208201528351610140820152611f7a565b600c5460e0820152600d54610100820152600e54610120820152600b546101408201525b60405163fc8660c760e01b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99063fc8660c790611fb59085908590889060040161359c565b602060405180830381865af4158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff491906137bc565b612011576040516309bde33960e01b815260040160405180910390fd5b5050505050565b6009541580159061208d575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b031690811061205857612058613362565b5f91825260209091206002909102015461208290600160401b90046001600160401b031684613330565b6001600160401b0316115b1561212057600854600980549091600160c01b90046001600160401b03169081106120ba576120ba613362565b5f9182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b03169060186120fa836137db565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b03948516815292841660208085019182528301518516848301908152929091015160608401908152600980546001810182555f91909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b612209612563565b6111b7816125ac565b611260612563565b82516001600160401b031615158061223e575060208301516001600160401b031615155b8061224b57506020820151155b8061225857506040820151155b8061226557506060820151155b8061226f57508151155b806122815750610e108163ffffffff16105b8061229557506301e133808163ffffffff16115b156122b3576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b0319938416919095169081178517909355604096870151600581905586515f5590860151600155958501516002556060909401516003556006805490941617179091556007919091556008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6009545f9043841180612357575080155b806123a15750600854600980549091600160c01b90046001600160401b031690811061238557612385613362565b5f9182526020909120600290910201546001600160401b031684105b156123bf5760405163b0b4387760e01b815260040160405180910390fd5b5f80806123cd60018561334f565b90505b8161246957600854600160c01b90046001600160401b0316811061246957866009828154811061240257612402613362565b5f9182526020909120600290910201546001600160401b03161161245757600191506009818154811061243757612437613362565b5f9182526020909120600290910201546001600160401b03169250612469565b8061246181613805565b9150506123d0565b816124875760405163b0b4387760e01b815260040160405180910390fd5b85612492848961334f565b11979650505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b612517826125b4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561255b57611e128282612617565b6111d5612689565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661126057604051631afcd79f60e31b815260040160405180910390fd5b611b34612563565b806001600160a01b03163b5f036125e957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b59565b5f5160206138315f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612633919061381a565b5f60405180830381855af49150503d805f811461266b576040519150601f19603f3d011682016040523d82523d5f602084013e612670565b606091505b50915091506126808583836126a8565b95945050505050565b34156112605760405163b398979f60e01b815260040160405180910390fd5b6060826126b857611b0f826126ff565b81511580156126cf57506001600160a01b0384163b155b156126f857604051639996b31560e01b81526001600160a01b0385166004820152602401611b59565b5092915050565b80511561270f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806102c001604052805f81526020015f815260200161275b60405180604001604052805f81526020015f81525090565b815260200161277b60405180604001604052805f81526020015f81525090565b815260200161279b60405180604001604052805f81526020015f81525090565b81526020016127bb60405180604001604052805f81526020015f81525090565b81526020016127db60405180604001604052805f81526020015f81525090565b81526020016127fb60405180604001604052805f81526020015f81525090565b815260200161281b60405180604001604052805f81526020015f81525090565b815260200161283b60405180604001604052805f81526020015f81525090565b815260200161285b60405180604001604052805f81526020015f81525090565b815260200161287b60405180604001604052805f81526020015f81525090565b815260200161289b60405180604001604052805f81526020015f81525090565b81526020016128bb60405180604001604052805f81526020015f81525090565b81526020016128db60405180604001604052805f81526020015f81525090565b81526020016128fb60405180604001604052805f81526020015f81525090565b815260200161291b60405180604001604052805f81526020015f81525090565b815260200161293b60405180604001604052805f81526020015f81525090565b815260200161295b60405180604001604052805f81526020015f81525090565b815260200161297b60405180604001604052805f81526020015f81525090565b81526020015f81526020015f81525090565b5080545f8255600202905f5260205f20908101906111b791906129ca565b604051806101600160405280600b906020820280368337509192915050565b5b808211156129ef5780546001600160c01b03191681555f60018201556002016129cb565b5090565b80356001600160a01b038116811461110c575f5ffd5b5f60208284031215612a19575f5ffd5b611b25826129f3565b5f60208284031215612a32575f5ffd5b5035919050565b5f6105008201905082518252602083015160208301526040830151612a6b604084018280518252602090810151910152565b50606083015180516080840152602081015160a0840152506080830151805160c0840152602081015160e08401525060a0830151805161010084015260208101516101208401525060c0830151805161014084015260208101516101608401525060e0830151805161018084015260208101516101a08401525061010083015180516101c084015260208101516101e08401525061012083015180516102008401526020810151610220840152506101408301518051610240840152602081015161026084015250610160830151805161028084015260208101516102a08401525061018083015180516102c084015260208101516102e0840152506101a083015180516103008401526020810151610320840152506101c083015180516103408401526020810151610360840152506101e0830151805161038084015260208101516103a08401525061020083015180516103c084015260208101516103e08401525061022083015180516104008401526020810151610420840152506102408301518051610440840152602081015161046084015250610260830151805161048084015260208101516104a0840152506102808301516104c08301526102a0909201516104e09091015290565b80356001600160401b038116811461110c575f5ffd5b5f60208284031215612c60575f5ffd5b611b2582612c3a565b634e487b7160e01b5f52604160045260245ffd5b6040516102e081016001600160401b0381118282101715612ca057612ca0612c69565b60405290565b604051608081016001600160401b0381118282101715612ca057612ca0612c69565b604051601f8201601f191681016001600160401b0381118282101715612cf057612cf0612c69565b604052919050565b5f60608284031215612d08575f5ffd5b604051606081016001600160401b0381118282101715612d2a57612d2a612c69565b604052905080612d3983612c3a565b8152612d4760208401612c3a565b6020820152604092830135920191909152919050565b5f60408284031215612d6d575f5ffd5b604080519081016001600160401b0381118282101715612d8f57612d8f612c69565b604052823581526020928301359281019290925250919050565b5f6104808284031215612dba575f5ffd5b612dc2612c7d565b9050612dce8383612d5d565b8152612ddd8360408401612d5d565b6020820152612def8360808401612d5d565b6040820152612e018360c08401612d5d565b6060820152612e14836101008401612d5d565b6080820152612e27836101408401612d5d565b60a0820152612e3a836101808401612d5d565b60c0820152612e4d836101c08401612d5d565b60e0820152612e60836102008401612d5d565b610100820152612e74836102408401612d5d565b610120820152612e88836102808401612d5d565b610140820152612e9c836102c08401612d5d565b610160820152612eb0836103008401612d5d565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f6104e08385031215612f46575f5ffd5b612f508484612cf8565b9150612f5f8460608501612da9565b90509250929050565b803563ffffffff8116811461110c575f5ffd5b5f60208284031215612f8b575f5ffd5b611b2582612f68565b5f5f60408385031215612fa5575f5ffd5b612fae836129f3565b915060208301356001600160401b03811115612fc8575f5ffd5b8301601f81018513612fd8575f5ffd5b80356001600160401b03811115612ff157612ff1612c69565b613004601f8201601f1916602001612cc8565b818152866020838501011115613018575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60808284031215613047575f5ffd5b61304f612ca6565b8235815260208084013590820152604080840135908201526060928301359281019290925250919050565b5f6080828403121561308a575f5ffd5b611b258383613037565b5f5f5f61056084860312156130a7575f5ffd5b6130b18585612cf8565b92506130c08560608601613037565b91506130cf8560e08601612da9565b90509250925092565b5f5f604083850312156130e9575f5ffd5b6130f283612c3a565b9150612f5f60208401612c3a565b5f5f5f5f6101208587031215613114575f5ffd5b61311e8686612cf8565b935061312d8660608701613037565b925061313b60e08601612f68565b915061314a61010086016129f3565b905092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6060828403121561319a575f5ffd5b611b258383612cf8565b5f5f604083850312156131b5575f5ffd5b50508035926020909101359150565b5f602082840312156131d4575f5ffd5b81356001600160401b038111156131e9575f5ffd5b8201601f810184136131f9575f5ffd5b80356001600160401b0381111561321257613212612c69565b61322160208260051b01612cc8565b8082825260208201915060208360071b850101925086831115613242575f5ffd5b6020840193505b828410156132b25760808488031215613260575f5ffd5b613268612ca6565b61327185612c3a565b815261327f60208601612c3a565b602082015261329060408601612c3a565b6040820152606085810135908201528252608090930192602090910190613249565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156111a0576111a06132bc565b634e487b7160e01b5f52601260045260245ffd5b5f6001600160401b0383168061331b5761331b6132ef565b806001600160401b0384160691505092915050565b6001600160401b0382811682821603908111156111a0576111a06132bc565b818103818111156111a0576111a06132bc565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b0383168061338e5761338e6132ef565b806001600160401b0384160491505092915050565b5f602082840312156133b3575f5ffd5b5051919050565b805f5b600b8110156133dc5781518452602093840193909101906001016133bd565b50505050565b6133f782825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e0840152506080810151805161010084015260208101516101208401525060a0810151805161014084015260208101516101608401525060c0810151805161018084015260208101516101a08401525060e081015180516101c084015260208101516101e08401525061010081015180516102008401526020810151610220840152506101208101518051610240840152602081015161026084015250610140810151805161028084015260208101516102a08401525061016081015180516102c084015260208101516102e08401525061018081015180516103008401526020810151610320840152506101a08101516103408301526101c08101516103608301526101e08101516103808301526102008101516103a08301526102208101516103c08301526102408101516103e08301526102608101516104008301526102808101516104208301526102a08101516104408301526102c0015161046090910152565b5f610ae082019050845182526020850151602083015260408501516135ce604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151805161010084015260208101516101208401525060c0850151805161014084015260208101516101608401525060e0850151805161018084015260208101516101a08401525061010085015180516101c084015260208101516101e08401525061012085015180516102008401526020810151610220840152506101408501518051610240840152602081015161026084015250610160850151805161028084015260208101516102a08401525061018085015180516102c084015260208101516102e0840152506101a085015180516103008401526020810151610320840152506101c085015180516103408401526020810151610360840152506101e0850151805161038084015260208101516103a08401525061020085015180516103c084015260208101516103e08401525061022085015180516104008401526020810151610420840152506102408501518051610440840152602081015161046084015250610260850151805161048084015260208101516104a0840152506102808501516104c08301526102a08501516104e08301526137a66105008301856133ba565b6137b46106608301846133e2565b949350505050565b5f602082840312156137cc575f5ffd5b81518015158114611b25575f5ffd5b5f6001600160401b0382166001600160401b0381036137fc576137fc6132bc565b60010192915050565b5f81613813576138136132bc565b505f190190565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" - } - }, - "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512": { - "balance": "0x0", - "code": "0x6080604052600436106101ba575f3560e01c8063826e41fc116100f2578063b5adea3c11610092578063e030330111610062578063e030330114610640578063f2fde38b1461065f578063f56761601461067e578063f9e50d191461069d575f5ffd5b8063b5adea3c14610567578063c23b9e9e146105be578063c8e5e498146105f6578063d24d933d14610611575f5ffd5b806396c1ca61116100cd57806396c1ca61146104975780639baa3cc9146104b65780639fdb54a7146104d5578063ad3cb1cc1461052a575f5ffd5b8063826e41fc146103f45780638584d23f1461041f5780638da5cb5b1461045b575f5ffd5b8063313df7b11161015d5780634f1ef286116101385780634f1ef286146103a557806352d1902d146103b857806369cc6a04146103cc578063715018a6146103e0575f5ffd5b8063313df7b114610311578063378ec23b14610348578063426d319414610364575f5ffd5b806312173c2c1161019857806312173c2c146102675780632063d4f7146102885780632d52aad6146102a75780632f79889d146102d3575f5ffd5b8063013fa5fc146101be57806302b592f3146101df5780630d8e6e2c1461023c575b5f5ffd5b3480156101c9575f5ffd5b506101dd6101d8366004612189565b6106b1565b005b3480156101ea575f5ffd5b506101fe6101f93660046121a2565b610764565b60405161023394939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b348015610247575f5ffd5b5060408051600181525f6020820181905291810191909152606001610233565b348015610272575f5ffd5b5061027b6107ad565b60405161023391906121b9565b348015610293575f5ffd5b506101dd6102a2366004612510565b6107c2565b3480156102b2575f5ffd5b506101dd6102c13660046121a2565b600a805460ff19166001179055600b55565b3480156102de575f5ffd5b506008546102f990600160c01b90046001600160401b031681565b6040516001600160401b039091168152602001610233565b34801561031c575f5ffd5b50600854610330906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610353575f5ffd5b50435b604051908152602001610233565b34801561036f575f5ffd5b505f546001546002546003546103859392919084565b604080519485526020850193909352918301526060820152608001610233565b6101dd6103b33660046126c0565b61091c565b3480156103c3575f5ffd5b5061035661093b565b3480156103d7575f5ffd5b506101dd610956565b3480156103eb575f5ffd5b506101dd6109c4565b3480156103ff575f5ffd5b506008546001600160a01b031615155b6040519015158152602001610233565b34801561042a575f5ffd5b5061043e6104393660046121a2565b6109e5565b604080519283526001600160401b03909116602083015201610233565b348015610466575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610330565b3480156104a2575f5ffd5b506101dd6104b1366004612776565b610b10565b3480156104c1575f5ffd5b506101dd6104d036600461278f565b610b99565b3480156104e0575f5ffd5b50600654600754610504916001600160401b0380821692600160401b909204169083565b604080516001600160401b03948516815293909216602084015290820152606001610233565b348015610535575f5ffd5b5061055a604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102339190612817565b348015610572575f5ffd5b506101dd61058136600461284c565b80516006805460208401516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560400151600755565b3480156105c9575f5ffd5b506008546105e190600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610233565b348015610601575f5ffd5b506101dd600a805460ff19169055565b34801561061c575f5ffd5b50600454600554610504916001600160401b0380821692600160401b909204169083565b34801561064b575f5ffd5b5061040f61065a366004612866565b610cbb565b34801561066a575f5ffd5b506101dd610679366004612189565b610cf0565b348015610689575f5ffd5b506101dd610698366004612886565b610d32565b3480156106a8575f5ffd5b50600954610356565b6106b9610ddd565b6001600160a01b0381166106e05760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b039081169082160361070f5760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b60098181548110610773575f80fd5b5f918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6107b5611ea4565b6107bd610e38565b905090565b6008546001600160a01b0316151580156107e757506008546001600160a01b03163314155b15610805576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b03918216911611158061083e575060065460208301516001600160401b03600160401b9092048216911611155b1561085c5760405163051c46ef60e01b815260040160405180910390fd5b6108698260400151611468565b61087382826114a9565b81516006805460208501516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560408201516007556108c06108b94390565b428461159d565b81602001516001600160401b0316825f01516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6846040015160405161091091815260200190565b60405180910390a35050565b610924611786565b61092d8261182a565b610937828261186b565b5050565b5f61094461192c565b505f516020612e605f395f51905f5290565b61095e610ddd565b6008546001600160a01b0316156109a957600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c02450905f90a1565b60405163a863aec960e01b815260040160405180910390fd5b565b6109cc610ddd565b6040516317d5c96560e11b815260040160405180910390fd5b600980545f918291906109f9600183612992565b81548110610a0957610a096129a5565b5f918252602090912060029091020154600160801b90046001600160401b03168410610a4857604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b81811015610b09578460098281548110610a7857610a786129a5565b5f918252602090912060029091020154600160801b90046001600160401b03161115610b015760098181548110610ab157610ab16129a5565b905f5260205f2090600202016001015460098281548110610ad457610ad46129a5565b905f5260205f2090600202015f0160109054906101000a90046001600160401b0316935093505050915091565b600101610a5c565b5050915091565b610b18610ddd565b610e108163ffffffff161080610b3757506301e133808163ffffffff16115b80610b55575060085463ffffffff600160a01b909104811690821611155b15610b73576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bdd5750825b90505f826001600160401b03166001148015610bf85750303b155b905081158015610c06575080155b15610c245760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4e57845460ff60401b1916600160401b1785555b610c5786611975565b610c5f611986565b610c6a89898961198e565b8315610cb057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600a545f9060ff16610cd657610cd18383611aba565b610ce7565b81600b5484610ce59190612992565b115b90505b92915050565b610cf8610ddd565b6001600160a01b038116610d2657604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610d2f81611c12565b50565b610d3d60095f612109565b5f5b8151811015610937576009828281518110610d5c57610d5c6129a5565b6020908102919091018101518254600181810185555f94855293839020825160029092020180549383015160408401516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990971691909416179490941793909316178255606001519082015501610d3f565b33610e0f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146109c25760405163118cdaa760e01b8152336004820152602401610d1d565b610e40611ea4565b620100008152600760208201527f1369aa78dc50135ad756d62c97a64a0edcd30066584168200d9d1facf82ca4f56040820151527f2cf23456d712b06f8e3aa5bf0acc3e46a3d094602a3a2b99d873bba05a4391476020604083015101527f08a35f379d2d2c490a51006697275e4db79b67b4a175c1477e262d29e25e42316060820151527f218828131bb7940ccc88c561b299755af4bf0b71ed930b129e8be0a1218139ea6020606083015101527f23a2172436c1145b36d5bc6d3b31fa1610c73a543ea443918aaa3ee175f9921b6080820151527f2502adf404d62877c310214ae9942e93c40b154d34c024bab48a3ca057e60a116020608083015101527f1bb88ada91ab7734882f7826b81275320081ac485f9cf8bfbc3ba54b6eb4dff360a0820151527f25c74a27e9a3b20114a3a91f31c20f01777e7ed913e0ef949f0285e2e7c2069b602060a083015101527f12b0ce76ac8b0dbd405ebc5dd0bae0f91aed50033c7ea36fc62aaba2b98333dc60c0820151527f185b42af49dd1cbe337a84f74b704172428e754a0bea024ab3eb2f996afb2c47602060c083015101527f21f53ad4538b45438bbf0521446070223920e3df6f9022a64cc16d7f94e85c0860e0820151527f2278ac3dedfdac7feb9725a022497175518eada52c8932fc40e6e75bea889fb8602060e083015101527f0876136f81c16298487bfb1be74d4a3487ec45645ab1d09dc2e5b865d62230df610100820151527f098c641c947ecd798dfd5e1b2fe428024cdf03061a53ff774ea8a9e3de9d3f2b602061010083015101527f15eaac2c6232d2268bf79dc47ed9666f992fb3d96ad23fb21690c21586c5472e610120820151527f0f10f1ffc54881287fda6f200bc85d8245b508d844a974098a41119867b325d0602061012083015101527f0895ceea40b085534e9739ca5442ba48b3a3592affde2b509df74521b47d8ab0610140820151527f2e12ec5800ac92fe2a8e7040bc5b435b9eb71e31380173fa7688bf81fcbba455602061014083015101527f2f5384eb5653e47576efe248e7903f463243414bfed5237dda750df3996bd918610160820151527f1c3cd6b11da8704cdc871ab4fa323d7ee57bd40ce165b49a56d5ef6489cd251a602061016083015101527f13579994957ce1554cc1e5b194fb63c9513707f627414f8442681ae736e36450610180820151527f26c9bdcd96d8e420b12974ade93ad9c312c4185213d2f6831a7c625a18890e95602061018083015101527f0cc70a1d542a9a1535ae5d9201696adc5c99c1bcebd9951dfa8afec79fa0b6446101a0820151527f10b043d9f1869181b96579d6616efc17a5df7b84c4d431d966c9094bf1e8815360206101a083015101527f198a65309d131a43b0ab1c47659d0336cfbf62b27f4727106b4fd971c73dd4036101c0820151527f23df99eac3c1947903b211b800efeb76f47d5e87b7414866543492e8c7798d1a60206101c083015101527f221cc5e47b81ce8dcfa72ef981916a8eddef12fcde59c56c62830c126ebef0de6101e0820151527f231f99340c35c9e09652a6df73c9cec5d88738cb71ff45716fdc9e9e45a4926e60206101e083015101527f2c9f1489fce0f263e03f3e97bf0a72273aafcca9325ff47786adb04a52a6d22c610200820151527f21f66e28f17e01e9fd593e16d022c4eca25bd5db96daec606d97b604cc414838602061020083015101527f2015745604a9571e226bd99043cfaf1f96267cc5de67f497563ff81100531d26610220820151527f206889ff4c58dd08ee1107191a2a5bc5dbae55c49d7d8397801799868d10f805602061022083015101527f21062ab8f8ecd8932b429a1eb8614b1e03db61bff6a5cd2d5d7ea193e90e9927610240820151527f217f9b27b934b88ffe555d682dfe6e8b6d503f86b14bbd96342bc48487a60b27602061024083015101527f1c9eda2d195cb731f903235ead6a4f7c66db49da713ecb27afee076f0eea7154610260820151527f2647c161c00b90258e1cefebb17481f8a5d91b5f9dca626e3e89a9215bcca16a602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806109375760405163016c173360e21b815260040160405180910390fd5b5f6114b26107ad565b90506114bc612127565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a08301525f5460c08301525163ce537a7760e01b8152735fbdb2315678afecb367f032d93f642f64180aa39063ce537a779061153b90859085908890600401612b95565b602060405180830381865af4158015611556573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157a9190612db5565b611597576040516309bde33960e01b815260040160405180910390fd5b50505050565b60095415801590611612575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b03169081106115dd576115dd6129a5565b5f91825260209091206002909102015461160790600160401b90046001600160401b031684612dd4565b6001600160401b0316115b156116a557600854600980549091600160c01b90046001600160401b031690811061163f5761163f6129a5565b5f9182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b031690601861167f83612df3565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b03948516815292841660208085019182528301518516848301908152929091015160608401908152600980546001810182555f91909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f051216148061180c57507f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f05126001600160a01b03166118005f516020612e605f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156109c25760405163703e46dd60e11b815260040160405180910390fd5b611832610ddd565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d90602001610759565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118c5575060408051601f3d908101601f191682019092526118c291810190612e1d565b60015b6118ed57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610d1d565b5f516020612e605f395f51905f52811461191d57604051632a87526960e21b815260048101829052602401610d1d565b6119278383611c82565b505050565b306001600160a01b037f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f051216146109c25760405163703e46dd60e11b815260040160405180910390fd5b61197d611cd7565b610d2f81611d20565b6109c2611cd7565b82516001600160401b03161515806119b2575060208301516001600160401b031615155b806119bf57506020820151155b806119cc57506040820151155b806119d957506060820151155b806119e357508151155b806119f55750610e108163ffffffff16105b80611a0957506301e133808163ffffffff16115b15611a27576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b0319938416919095169081178517909355604096870151600581905586515f5590860151600155958501516002556060909401516003556006805490941617179091556007919091556008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6009545f9043841180611acb575080155b80611b155750600854600980549091600160c01b90046001600160401b0316908110611af957611af96129a5565b5f9182526020909120600290910201546001600160401b031684105b15611b335760405163b0b4387760e01b815260040160405180910390fd5b5f8080611b41600185612992565b90505b81611bdd57600854600160c01b90046001600160401b03168110611bdd578660098281548110611b7657611b766129a5565b5f9182526020909120600290910201546001600160401b031611611bcb576001915060098181548110611bab57611bab6129a5565b5f9182526020909120600290910201546001600160401b03169250611bdd565b80611bd581612e34565b915050611b44565b81611bfb5760405163b0b4387760e01b815260040160405180910390fd5b85611c068489612992565b11979650505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611c8b82611d28565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611ccf576119278282611d8b565b610937611dfd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166109c257604051631afcd79f60e31b815260040160405180910390fd5b610cf8611cd7565b806001600160a01b03163b5f03611d5d57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610d1d565b5f516020612e605f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611da79190612e49565b5f60405180830381855af49150503d805f8114611ddf576040519150601f19603f3d011682016040523d82523d5f602084013e611de4565b606091505b5091509150611df4858383611e1c565b95945050505050565b34156109c25760405163b398979f60e01b815260040160405180910390fd5b606082611e3157611e2c82611e7b565b611e74565b8151158015611e4857506001600160a01b0384163b155b15611e7157604051639996b31560e01b81526001600160a01b0385166004820152602401610d1d565b50805b9392505050565b805115611e8b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806102c001604052805f81526020015f8152602001611ed760405180604001604052805f81526020015f81525090565b8152602001611ef760405180604001604052805f81526020015f81525090565b8152602001611f1760405180604001604052805f81526020015f81525090565b8152602001611f3760405180604001604052805f81526020015f81525090565b8152602001611f5760405180604001604052805f81526020015f81525090565b8152602001611f7760405180604001604052805f81526020015f81525090565b8152602001611f9760405180604001604052805f81526020015f81525090565b8152602001611fb760405180604001604052805f81526020015f81525090565b8152602001611fd760405180604001604052805f81526020015f81525090565b8152602001611ff760405180604001604052805f81526020015f81525090565b815260200161201760405180604001604052805f81526020015f81525090565b815260200161203760405180604001604052805f81526020015f81525090565b815260200161205760405180604001604052805f81526020015f81525090565b815260200161207760405180604001604052805f81526020015f81525090565b815260200161209760405180604001604052805f81526020015f81525090565b81526020016120b760405180604001604052805f81526020015f81525090565b81526020016120d760405180604001604052805f81526020015f81525090565b81526020016120f760405180604001604052805f81526020015f81525090565b81526020015f81526020015f81525090565b5080545f8255600202905f5260205f2090810190610d2f9190612145565b6040518060e001604052806007906020820280368337509192915050565b5b8082111561216a5780546001600160c01b03191681555f6001820155600201612146565b5090565b80356001600160a01b0381168114612184575f5ffd5b919050565b5f60208284031215612199575f5ffd5b610ce78261216e565b5f602082840312156121b2575f5ffd5b5035919050565b5f61050082019050825182526020830151602083015260408301516121eb604084018280518252602090810151910152565b50606083015180516080840152602081015160a0840152506080830151805160c0840152602081015160e08401525060a0830151805161010084015260208101516101208401525060c0830151805161014084015260208101516101608401525060e0830151805161018084015260208101516101a08401525061010083015180516101c084015260208101516101e08401525061012083015180516102008401526020810151610220840152506101408301518051610240840152602081015161026084015250610160830151805161028084015260208101516102a08401525061018083015180516102c084015260208101516102e0840152506101a083015180516103008401526020810151610320840152506101c083015180516103408401526020810151610360840152506101e0830151805161038084015260208101516103a08401525061020083015180516103c084015260208101516103e08401525061022083015180516104008401526020810151610420840152506102408301518051610440840152602081015161046084015250610260830151805161048084015260208101516104a0840152506102808301516104c08301526102a0909201516104e09091015290565b634e487b7160e01b5f52604160045260245ffd5b6040516102e081016001600160401b03811182821017156123f1576123f16123ba565b60405290565b604051608081016001600160401b03811182821017156123f1576123f16123ba565b604051601f8201601f191681016001600160401b0381118282101715612441576124416123ba565b604052919050565b80356001600160401b0381168114612184575f5ffd5b5f6060828403121561246f575f5ffd5b604051606081016001600160401b0381118282101715612491576124916123ba565b6040529050806124a083612449565b81526124ae60208401612449565b6020820152604092830135920191909152919050565b5f604082840312156124d4575f5ffd5b604080519081016001600160401b03811182821017156124f6576124f66123ba565b604052823581526020928301359281019290925250919050565b5f5f8284036104e0811215612523575f5ffd5b61252d858561245f565b9250610480605f1982011215612541575f5ffd5b5061254a6123ce565b61255785606086016124c4565b81526125668560a086016124c4565b60208201526125788560e086016124c4565b604082015261258b8561012086016124c4565b606082015261259e8561016086016124c4565b60808201526125b1856101a086016124c4565b60a08201526125c4856101e086016124c4565b60c08201526125d78561022086016124c4565b60e08201526125ea8561026086016124c4565b6101008201526125fe856102a086016124c4565b610120820152612612856102e086016124c4565b6101408201526126268561032086016124c4565b61016082015261263a8561036086016124c4565b6101808201526103a08401356101a08201526103c08401356101c08201526103e08401356101e08201526104008401356102008201526104208401356102208201526104408401356102408201526104608401356102608201526104808401356102808201526104a08401356102a08201526104c0909301356102c08401525092909150565b5f5f604083850312156126d1575f5ffd5b6126da8361216e565b915060208301356001600160401b038111156126f4575f5ffd5b8301601f81018513612704575f5ffd5b80356001600160401b0381111561271d5761271d6123ba565b612730601f8201601f1916602001612419565b818152866020838501011115612744575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b803563ffffffff81168114612184575f5ffd5b5f60208284031215612786575f5ffd5b610ce782612763565b5f5f5f5f8486036101208112156127a4575f5ffd5b6127ae878761245f565b94506080605f19820112156127c1575f5ffd5b506127ca6123f7565b60608681013582526080870135602083015260a0870135604083015260c08701359082015292506127fd60e08601612763565b915061280c610100860161216e565b905092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6060828403121561285c575f5ffd5b610ce7838361245f565b5f5f60408385031215612877575f5ffd5b50508035926020909101359150565b5f60208284031215612896575f5ffd5b81356001600160401b038111156128ab575f5ffd5b8201601f810184136128bb575f5ffd5b80356001600160401b038111156128d4576128d46123ba565b6128e360208260051b01612419565b8082825260208201915060208360071b850101925086831115612904575f5ffd5b6020840193505b828410156129745760808488031215612922575f5ffd5b61292a6123f7565b61293385612449565b815261294160208601612449565b602082015261295260408601612449565b604082015260608581013590820152825260809093019260209091019061290b565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610cea57610cea61297e565b634e487b7160e01b5f52603260045260245ffd5b805f5b60078110156115975781518452602093840193909101906001016129bc565b6129f082825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e0840152506080810151805161010084015260208101516101208401525060a0810151805161014084015260208101516101608401525060c0810151805161018084015260208101516101a08401525060e081015180516101c084015260208101516101e08401525061010081015180516102008401526020810151610220840152506101208101518051610240840152602081015161026084015250610140810151805161028084015260208101516102a08401525061016081015180516102c084015260208101516102e08401525061018081015180516103008401526020810151610320840152506101a08101516103408301526101c08101516103608301526101e08101516103808301526102008101516103a08301526102208101516103c08301526102408101516103e08301526102608101516104008301526102808101516104208301526102a08101516104408301526102c0015161046090910152565b5f610a608201905084518252602085015160208301526040850151612bc7604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151805161010084015260208101516101208401525060c0850151805161014084015260208101516101608401525060e0850151805161018084015260208101516101a08401525061010085015180516101c084015260208101516101e08401525061012085015180516102008401526020810151610220840152506101408501518051610240840152602081015161026084015250610160850151805161028084015260208101516102a08401525061018085015180516102c084015260208101516102e0840152506101a085015180516103008401526020810151610320840152506101c085015180516103408401526020810151610360840152506101e0850151805161038084015260208101516103a08401525061020085015180516103c084015260208101516103e08401525061022085015180516104008401526020810151610420840152506102408501518051610440840152602081015161046084015250610260850151805161048084015260208101516104a0840152506102808501516104c08301526102a08501516104e0830152612d9f6105008301856129b9565b612dad6105e08301846129db565b949350505050565b5f60208284031215612dc5575f5ffd5b81518015158114611e74575f5ffd5b6001600160401b038281168282160390811115610cea57610cea61297e565b5f6001600160401b0382166001600160401b038103612e1457612e1461297e565b60010192915050565b5f60208284031215612e2d575f5ffd5b5051919050565b5f81612e4257612e4261297e565b505f190190565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", - "nonce": 1, - "storage": { - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" - } - }, - "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": { - "balance": "0x200000000000000000000000000000000000000000000000000000000000000", - "code": "0x", - "nonce": 46, - "storage": {} - }, - "0x0000000000000000000000000000000000000000": { - "balance": "0x3c58cefa618d2600", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x0000000000000000000000000000000000000004": { - "balance": "0x0", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x0b6872da7070dc6237f3be0685cf32032638ba40": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000001bb26b99a924018c063ae4be222997aadfdec0c3", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0x0dead0118ed1ce6ad508bcedceded7987fc0566b": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c8063622d56f1116100e3578063b51f9c2b1161008c578063c993f27c11610066578063c993f27c1461045f578063cbeda5a714610472578063f3edcbe11461048557600080fd5b8063b51f9c2b146103ba578063ba7903db14610411578063becbdf4a1461043857600080fd5b806378ecabce116100bd57806378ecabce146103715780638970ac4414610394578063b23cc044146103a757600080fd5b8063622d56f1146103035780636624856a1461032a5780636ab5f6611461035157600080fd5b8063318b1b801161014557806354fd4d501161011f57806354fd4d501461029557806358084273146102ce578063604aa628146102e357600080fd5b8063318b1b801461024857806335e80ab31461025b57806341fe53851461028257600080fd5b80631481a724116101765780631481a724146101f65780631d8a4e921461021d57806330e9012c1461023357600080fd5b806303dbe68c146101925780630e9d5cb9146101d6575b600080fd5b6101b97f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f182881565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e96101e4366004611393565b610498565b6040516101cd9190611436565b6101b97f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa484881565b610225610551565b6040519081526020016101cd565b61023b6105da565b6040516101cd9190611449565b6101b96102563660046115b1565b6106ee565b6101b97f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b6101e96102903660046115ca565b610799565b60408051808201909152600581527f362e302e3100000000000000000000000000000000000000000000000000000060208201526101e9565b6102e16102dc366004611602565b61084f565b005b6102f66102f1366004611715565b610955565b6040516101cd91906118aa565b6101b97f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db81565b6101b97f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61036461035f366004611906565b610a70565b6040516101cd9190611942565b61038461037f3660046115b1565b610bbe565b60405190151581526020016101cd565b6101e96103a2366004611b02565b610c63565b6102e16103b5366004611be6565b610ccf565b6103c2610dd0565b6040516101cd919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6101b97f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd81565b6101b97f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda981565b6102e161046d366004611c2f565b610e7d565b6102e1610480366004611be6565b610f83565b6101e9610493366004611c4c565b611084565b6040517f0e9d5cb90000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd1690630e9d5cb99061050490879087908790600401611c79565b600060405180830381865afa158015610521573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105499190810190611cdb565b949350505050565b60007f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190611d52565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa1580156106ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190611d76565b6040517f318b1b80000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b03169063318b1b8090602401602060405180830381865afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190611ece565b92915050565b6040517f41fe53850000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd16906341fe5385906108039086908690600401611eeb565b600060405180830381865afa158015610820573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108489190810190611cdb565b9392505050565b6108576110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b1630036108b9576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816040516024016108cc9190611ffd565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f580842730000000000000000000000000000000000000000000000000000000017905290506109507f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa484882611133565b505050565b606061095f6110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b1630036109c1576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826040516024016109d491906120f0565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f604aa6280000000000000000000000000000000000000000000000000000000017905290506000610a5a7f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda983611133565b9050808060200190518101906105499190612225565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152610af16110ee565b6040517fcefe12230000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db169063cefe122390610b7a9085907f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc990339060040161240e565b6101e0604051808303816000875af1158015610b9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079391906125e2565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079391906126f9565b6040517f8970ac440000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd1690638970ac449061050490879087908790600401612716565b610cd76110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b163003610d39576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081604051602401610d4c9190612787565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb23cc0440000000000000000000000000000000000000000000000000000000017905290506109507f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda982611133565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d591906127f2565b610e856110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b163003610ee7576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038216602482015260009060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc993f27c0000000000000000000000000000000000000000000000000000000017905290506109507f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f182882611133565b610f8b6110ee565b6001600160a01b037f0000000000000000000000000dead0118ed1ce6ad508bcedceded7987fc0566b163003610fed576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081604051602401611000919061288a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbeda5a70000000000000000000000000000000000000000000000000000000017905290506109507f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f182882611133565b6040517ff3edcbe10000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f0000000000000000000000008e01a1674ca756b57c4719563437d25e2eac7ffd169063f3edcbe19061080390869086906004016128e9565b6110fa62010000610bbe565b15611131576040517fe232d67700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060600080846001600160a01b031684604051611150919061293e565b600060405180830381855af49150503d806000811461118b576040519150601f19603f3d011682016040523d82523d6000602084013e611190565b606091505b50915091508161054957805160208201fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156111f4576111f46111a2565b60405290565b604051610180810167ffffffffffffffff811182821017156111f4576111f46111a2565b604051610240810167ffffffffffffffff811182821017156111f4576111f46111a2565b6040516101e0810167ffffffffffffffff811182821017156111f4576111f46111a2565b604051601f8201601f1916810167ffffffffffffffff8111828210171561128f5761128f6111a2565b604052919050565b6001600160a01b03811681146112ac57600080fd5b50565b80356112ba81611297565b919050565b6000608082840312156112d157600080fd5b6040516080810181811067ffffffffffffffff821117156112f4576112f46111a2565b604052905080823561130581611297565b808252506020830135602082015260408301356040820152606083013561132b81611297565b6060919091015292915050565b80151581146112ac57600080fd5b80356112ba81611338565b60006040828403121561136357600080fd5b61136b6111d1565b9050813561137881611297565b8152602082013561138881611297565b602082015292915050565b600080600060e084860312156113a857600080fd5b6113b285856112bf565b925060808401356113c281611338565b91506113d18560a08601611351565b90509250925092565b60005b838110156113f55781810151838201526020016113dd565b83811115611404576000848401525b50505050565b600081518084526114228160208601602086016113da565b601f01601f19169290920160200192915050565b602081526000610848602083018461140a565b81516001600160a01b031681526102408101602083015161147560208401826001600160a01b03169052565b50604083015161149060408401826001600160a01b03169052565b5060608301516114ab60608401826001600160a01b03169052565b5060808301516114c660808401826001600160a01b03169052565b5060a08301516114e160a08401826001600160a01b03169052565b5060c08301516114fc60c08401826001600160a01b03169052565b5060e083015161151760e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102208085015191821681850152905b505092915050565b6000602082840312156115c357600080fd5b5035919050565b60008060a083850312156115dd57600080fd5b6115e784846112bf565b915060808301356115f781611338565b809150509250929050565b60006020828403121561161457600080fd5b813567ffffffffffffffff81111561162b57600080fd5b8201610160818503121561084857600080fd5b600067ffffffffffffffff821115611658576116586111a2565b5060051b60200190565b600067ffffffffffffffff82111561167c5761167c6111a2565b50601f01601f191660200190565b600082601f83011261169b57600080fd5b81356116ae6116a982611662565b611266565b8181528460208386010111156116c357600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146112ba57600080fd5b67ffffffffffffffff811681146112ac57600080fd5b80356112ba816116f4565b6000602080838503121561172857600080fd5b823567ffffffffffffffff8082111561174057600080fd5b818501915085601f83011261175457600080fd5b81356117626116a98261163e565b81815260059190911b8301840190848101908883111561178157600080fd5b8585015b8381101561189d5780358581111561179d5760008081fd5b8601610180818c03601f19018113156117b65760008081fd5b6117be6111fa565b89830135888111156117d05760008081fd5b6117de8e8c8387010161168a565b82525060406117ee8185016112af565b8b83015260606117ff8186016112af565b82840152608091506118128286016116e0565b818401525060a0808501358284015260c0915081850135818401525060e08085013582840152610100915061184882860161170a565b9083015261012061185a85820161170a565b82840152610140915081850135818401525061016061187a8186016112af565b82840152611889848601611346565b908301525085525050918601918601611785565b5098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156118f957815180516001600160a01b03908116865290870151168685015292840192908501906001016118c7565b5091979650505050505050565b60006020828403121561191857600080fd5b813567ffffffffffffffff81111561192f57600080fd5b8201610260818503121561084857600080fd5b81516001600160a01b031681526101e08101602083015161196e60208401826001600160a01b03169052565b50604083015161198960408401826001600160a01b03169052565b5060608301516119a460608401826001600160a01b03169052565b5060808301516119bf60808401826001600160a01b03169052565b5060a08301516119da60a08401826001600160a01b03169052565b5060c08301516119f560c08401826001600160a01b03169052565b5060e0830151611a1060e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c08085015191821681850152906115a9565b600060a08284031215611a9157600080fd5b60405160a0810181811067ffffffffffffffff82111715611ab457611ab46111a2565b6040529050808235611ac581611297565b808252506020830135602082015260408301356040820152606083013560608201526080830135611af581611297565b6080919091015292915050565b60008060006101008486031215611b1857600080fd5b611b228585611a7f565b925060a0840135611b3281611338565b91506113d18560c08601611351565b6000611b4f6116a98461163e565b83815290506020808201906060808602850187811115611b6e57600080fd5b855b81811015611bda5782818a031215611b885760008081fd5b6040805184810181811067ffffffffffffffff82111715611bab57611bab6111a2565b82528235611bb881611297565b8152828601358682015281830135918101919091528552938301938201611b70565b50505050509392505050565b600060208284031215611bf857600080fd5b813567ffffffffffffffff811115611c0f57600080fd5b8201601f81018413611c2057600080fd5b61054984823560208401611b41565b600060208284031215611c4157600080fd5b813561084881611297565b60008060c08385031215611c5f57600080fd5b611c698484611a7f565b915060a08301356115f781611338565b60e08101611cb1828680516001600160a01b039081168352602080830151908401526040808301519084015260609182015116910152565b831515608083015282516001600160a01b0390811660a084015260208401511660c0830152610549565b600060208284031215611ced57600080fd5b815167ffffffffffffffff811115611d0457600080fd5b8201601f81018413611d1557600080fd5b8051611d236116a982611662565b818152856020838501011115611d3857600080fd5b611d498260208301602086016113da565b95945050505050565b600060208284031215611d6457600080fd5b5051919050565b80516112ba81611297565b60006102408284031215611d8957600080fd5b611d9161121e565b611d9a83611d6b565b8152611da860208401611d6b565b6020820152611db960408401611d6b565b6040820152611dca60608401611d6b565b6060820152611ddb60808401611d6b565b6080820152611dec60a08401611d6b565b60a0820152611dfd60c08401611d6b565b60c0820152611e0e60e08401611d6b565b60e0820152610100611e21818501611d6b565b90820152610120611e33848201611d6b565b90820152610140611e45848201611d6b565b90820152610160611e57848201611d6b565b90820152610180611e69848201611d6b565b908201526101a0611e7b848201611d6b565b908201526101c0611e8d848201611d6b565b908201526101e0611e9f848201611d6b565b90820152610200611eb1848201611d6b565b90820152610220611ec3848201611d6b565b908201529392505050565b600060208284031215611ee057600080fd5b815161084881611297565b60a08101611f23828580516001600160a01b039081168352602080830151908401526040808301519084015260609182015116910152565b82151560808301529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f6757600080fd5b830160208101925035905067ffffffffffffffff811115611f8757600080fd5b606081023603821315611f9957600080fd5b9250929050565b8183526000602080850194508260005b85811015611ff2578135611fc381611297565b6001600160a01b0316875281830135838801526040808301359088015260609687019690910190600101611fb0565b509495945050505050565b602081526000823561200e81611338565b8015156020840152506020830135604083015260408301356060830152606083013561203981611297565b6001600160a01b0380821660808501526080850135915061205982611297565b80821660a0850152505060a083013560c083015260c083013560e083015261010060e084013581840152808401359050612092816116f4565b61012067ffffffffffffffff8216818501526120af81860161170a565b9150506101406120ca8185018367ffffffffffffffff169052565b6120d681860186611f32565b6101608681015292509050611d4961018085018383611fa0565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612217577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151610180815181865261215c8287018261140a565b915050888201516121778a8701826001600160a01b03169052565b50878201516001600160a01b03908116868a015260608084015163ffffffff16908701526080808401519087015260a0808401519087015260c0808401519087015260e08084015167ffffffffffffffff9081169188019190915261010080850151909116908701526101208084015190870152610140808401519091169086015261016091820151151591909401529386019390860190600101612117565b509098975050505050505050565b6000602080838503121561223857600080fd5b825167ffffffffffffffff81111561224f57600080fd5b8301601f8101851361226057600080fd5b805161226e6116a98261163e565b81815260069190911b8201830190838101908783111561228d57600080fd5b928401925b828410156122e357604084890312156122ab5760008081fd5b6122b36111d1565b84516122be81611297565b8152848601516122cd81611297565b8187015282526040939093019290840190612292565b979650505050505050565b80356122f981611297565b6001600160a01b03908116835260208201359061231582611297565b908116602084015260408201359061232c82611297565b908116604084015260608201359061234382611297565b908116606084015260808201359061235a82611297565b908116608084015260a08201359061237182611297565b80821660a085015250505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126123b457600080fd5b830160208101925035905067ffffffffffffffff8111156123d457600080fd5b803603821315611f9957600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6060815261241f60608201856122ee565b600061242d60c086016116e0565b6101206124418185018363ffffffff169052565b61244d60e088016116e0565b91506101406124638186018463ffffffff169052565b61016092506101008801358386015261247e8289018961237f565b9250610260610180818189015261249a6102c0890186856123e3565b94506124a8848c018c61237f565b945092506101a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089870301818a01526124e38686866123e3565b95506124f0878d0161170a565b96506101c0945061250c858a018867ffffffffffffffff169052565b612517828d016116e0565b96506101e0935061252f848a018863ffffffff169052565b6102009650808c0135878a01525050610220838b0135818901526102409350828b013584890152612561868c0161170a565b67ffffffffffffffff811689840152955061257d818c0161170a565b955050505061259961028086018467ffffffffffffffff169052565b6125a4818901611346565b9250506125b66102a085018315159052565b6001600160a01b038616602085015291506125ce9050565b6001600160a01b0383166040830152610549565b60006101e082840312156125f557600080fd5b6125fd611242565b61260683611d6b565b815261261460208401611d6b565b602082015261262560408401611d6b565b604082015261263660608401611d6b565b606082015261264760808401611d6b565b608082015261265860a08401611d6b565b60a082015261266960c08401611d6b565b60c082015261267a60e08401611d6b565b60e082015261010061268d818501611d6b565b9082015261012061269f848201611d6b565b908201526101406126b1848201611d6b565b908201526101606126c3848201611d6b565b908201526101806126d5848201611d6b565b908201526101a06126e7848201611d6b565b908201526101c0611ec3848201611d6b565b60006020828403121561270b57600080fd5b815161084881611338565b610100810161275d82866001600160a01b03808251168352602082015160208401526040820151604084015260608201516060840152806080830151166080840152505050565b83151560a083015282516001600160a01b0390811660c084015260208401511660e0830152610549565b6020808252825182820181905260009190848201906040850190845b818110156127e6576127d383855180516001600160a01b0316825260208082015190830152604090810151910152565b92840192606092909201916001016127a3565b50909695505050505050565b600060a0828403121561280457600080fd5b60405160a0810181811067ffffffffffffffff82111715612827576128276111a2565b604052825161283581611297565b8152602083015161284581611297565b6020820152604083015161285881611297565b6040820152606083015161286b81611297565b6060820152608083015161287e81611297565b60808201529392505050565b6020808252825182820181905260009190848201906040850190845b818110156127e6576128d683855180516001600160a01b0316825260208082015190830152604090810151910152565b92840192606092909201916001016128a6565b60c0810161292f82856001600160a01b03808251168352602082015160208401526040820151604084015260608201516060840152806080830151166080840152505050565b82151560a08301529392505050565b600082516129508184602087016113da565b919091019291505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x0e801d84fa97b50751dbf25036d067dcf18858bf": { - "balance": "0x0", - "code": "0x608060405234801561000f575f80fd5b506004361061019a575f3560e01c806379ba5097116100e8578063dad544e011610093578063f2fde38b1161006e578063f2fde38b1461038e578063f8c8765e146103a1578063fa14fe6d146103b4578063fc619e41146103d4575f80fd5b8063dad544e014610359578063e30c397814610361578063eca919df14610369575f80fd5b8063a526d83b116100c3578063a526d83b1461032b578063ba58e82a1461033e578063bc347f4714610351575f80fd5b806379ba5097146102fc57806388da3bb7146103045780638da5cb5b14610323575f80fd5b80633e47158c116101485780635c975abb116101235780635c975abb146102d957806371404156146102e1578063715018a6146102f4575f80fd5b80633e47158c1461027257806354387ad71461027a57806354fd4d5014610290575f80fd5b80632ce53247116101785780632ce532471461020c57806333d7e2bd1461022157806338d38c9714610241575f80fd5b80630665f04b1461019e5780630c68ba21146101bc5780631b076a4c146101df575b5f80fd5b6101a66103e7565b6040516101b391906117f4565b60405180910390f35b6101cf6101ca36600461186e565b610417565b60405190151581526020016101b3565b6101e7610472565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b3565b61021f61021a36600461186e565b610503565b005b6002546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000011681526020016101b3565b6101e76105e9565b6102826107ef565b6040519081526020016101b3565b6102cc6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516101b39190611889565b6101cf610819565b61021f6102ef36600461186e565b6108aa565b61021f61092a565b61021f61093d565b5f546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b6101e76109b5565b61021f61033936600461186e565b6109be565b61021f61034c366004611921565b610b32565b61021f610c2e565b6101e7610d55565b6101e7610da6565b6001546101cf9074010000000000000000000000000000000000000000900460ff1681565b61021f61039c36600461186e565b610de7565b61021f6103af366004611988565b610e59565b6001546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b61021f6103e23660046119e1565b611169565b60606104127f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f00611274565b905090565b5f61046c827f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f005b9073ffffffffffffffffffffffffffffffffffffffff165f9081526001919091016020526040902054151590565b92915050565b600154604080517fd80a4c2800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163d80a4c289160048083019260209291908290030181865afa1580156104df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104129190611a29565b61050b611287565b73ffffffffffffffffffffffffffffffffffffffff8116610575576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917fc7bef7b97a10ef514a01fa4d5552f5c57e72a37aa901f567bb49bbf9ea449f9c9190a35050565b5f806106137fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561063657919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026106799190611a71565b604080513060208201525f918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906106d3906060015b604051602081830303815290604052805190602001205490565b1461070a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091525f9061072b906060016106b9565b905073ffffffffffffffffffffffffffffffffffffffff8116156107bd578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610792573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b69190611a29565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104127f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f006112df565b600254604080517f5c975abb00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104129190611a88565b6108b2611287565b7f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f006108dd81836112e8565b6108e5575050565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52905f90a2505b50565b610932611287565b61093b5f611309565b565b3380610947610da6565b73ffffffffffffffffffffffffffffffffffffffff16146109ac576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161056c565b61092781611309565b5f610412611359565b6109c6611287565b73ffffffffffffffffffffffffffffffffffffffff8116610a13576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a1b6109b5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a865750610a57610da6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610abd576040517f3af3c41c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f00610ae88183611381565b15610b2e5760405173ffffffffffffffffffffffffffffffffffffffff8316907f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969905f90a25b5050565b610b3a610819565b15610b71576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546040517f7f82ea6c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691637f82ea6c91610bd1918891889188918891905f90600401611b23565b5f604051808303815f87803b158015610be8575f80fd5b505af1158015610bfa573d5f803e3d5ffd5b50506040513392507f665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c91505f90a250505050565b610c58337f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f0061043e565b158015610c985750610c686109b5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610cd1576040517fd53780c400000000000000000000000000000000000000000000000000000000815233600482015260240161056c565b6001805460ff7401000000000000000000000000000000000000000080830482161581027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9093169290921792839055604051919092049091161515907fb957d7fc29e5974594db2f2e132076d52f42c0734eae05fd5ea080d1ba175ad3905f90a2565b5f610d5e6105e9565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104df573d5f803e3d5ffd5b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b610def611287565b610e19817f0f4ac8aae5a4fa6a3612928fcd8255b475ff86b500ae30bb272e61542cfc6f0061043e565b15610e50576040517f3af3c41c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610927816113a2565b7f000000000000000000000000000000000000000000000000000000000000000160ff165f610e86611459565b805490915068010000000000000000900460ff1680610eb35750805467ffffffffffffffff808416911610155b15610eea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001667ffffffffffffffff83161768010000000000000000178155610f2f611481565b610f3883611502565b73ffffffffffffffffffffffffffffffffffffffff8516610f9d576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260240161056c565b73ffffffffffffffffffffffffffffffffffffffff8416611002576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161056c565b73ffffffffffffffffffffffffffffffffffffffff8616611067576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260240161056c565b600180545f805473ffffffffffffffffffffffffffffffffffffffff8981167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556002805489841692169190911790557fffffffffffffffffffffff000000000000000000000000000000000000000000909116908816177401000000000000000000000000000000000000000017905580547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611171610819565b156111a8576040517fb3a266c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546040517f55ddfa0600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116916355ddfa0691611205918691869189915f90600401611b75565b602060405180830381865afa158015611220573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112449190611a88565b5060405183907fee0d07d204d979d28885955e59a46f754c4db7378b7df1a95123525aac6e3f80905f90a2505050565b60605f61128083611513565b9392505050565b336112906109b5565b73ffffffffffffffffffffffffffffffffffffffff161461093b576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161056c565b5f61046c825490565b5f6112808373ffffffffffffffffffffffffffffffffffffffff841661156c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155610b2e8261164f565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610dca565b5f6112808373ffffffffffffffffffffffffffffffffffffffff84166116e4565b6113aa611287565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556114136109b5565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061046c565b3361148a6105e9565b73ffffffffffffffffffffffffffffffffffffffff16141580156114cb5750336114b2610d55565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561093b576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61150a611730565b6109278161176e565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561156057602002820191905f5260205f20905b81548152602001906001019080831161154c575b50505050509050919050565b5f8181526001830160205260408120548015611646575f61158e600183611bb8565b85549091505f906115a190600190611bb8565b9050808214611600575f865f0182815481106115bf576115bf611bcb565b905f5260205f200154905080875f0184815481106115df576115df611bcb565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061161157611611611bf8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061046c565b5f91505061046c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f81815260018301602052604081205461172957508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561046c565b505f61046c565b61173861177f565b61093b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611776611730565b6109278161179d565b5f611788611459565b5468010000000000000000900460ff16919050565b6117a5611730565b73ffffffffffffffffffffffffffffffffffffffff81166109ac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f600482015260240161056c565b602080825282518282018190525f9190848201906040850190845b8181101561184157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161180f565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610927575f80fd5b5f6020828403121561187e575f80fd5b81356112808161184d565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8083601f8401126118ec575f80fd5b50813567ffffffffffffffff811115611903575f80fd5b60208301915083602082850101111561191a575f80fd5b9250929050565b5f805f8060408587031215611934575f80fd5b843567ffffffffffffffff8082111561194b575f80fd5b611957888389016118dc565b9096509450602087013591508082111561196f575f80fd5b5061197c878288016118dc565b95989497509550505050565b5f805f806080858703121561199b575f80fd5b84356119a68161184d565b935060208501356119b68161184d565b925060408501356119c68161184d565b915060608501356119d68161184d565b939692955090935050565b5f805f604084860312156119f3575f80fd5b83359250602084013567ffffffffffffffff811115611a10575f80fd5b611a1c868287016118dc565b9497909650939450505050565b5f60208284031215611a39575f80fd5b81516112808161184d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761046c5761046c611a44565b5f60208284031215611a98575f80fd5b81518015158114611280575f80fd5b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60028110610927577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b608081525f611b3660808301888a611aa7565b8281036020840152611b49818789611aa7565b915050611b5584611aee565b836040830152611b6483611aee565b826060830152979650505050505050565b608081525f611b88608083018789611aa7565b9050846020830152611b9984611aee565b836040830152611ba883611aee565b8260608301529695505050505050565b8181038181111561046c5761046c611a44565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" - } - }, - "0x149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016": { - "balance": "0x0", - "code": "0x60806040523480156200001157600080fd5b5060043610620000935760003560e01c8063c4d66de81162000062578063c4d66de81462000175578063ce5ac90f146200018e578063e78cea9214620001a5578063ee9a31a214620001c657600080fd5b8063316b3739146200009857806354fd4d5014620000fb578063896f93d114620001475780638cf0629c146200015e575b600080fd5b620000d1620000a936600462000636565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b620001386040518060400160405280600681526020017f312e31302e32000000000000000000000000000000000000000000000000000081525081565b604051620000f29190620006c9565b620000d162000158366004620007c0565b620001e5565b620000d16200016f3660046200083d565b620001fc565b6200018c6200018636600462000636565b6200041b565b005b620000d16200019f366004620007c0565b620005ed565b600154620000d19073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16620000d1565b6000620001f4848484620005ed565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8516620002a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b600085858585604051602001620002c29493929190620008d4565b604051602081830303815290604052805190602001209050600081600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16888888886040516200031290620005fe565b620003229594939291906200092e565b8190604051809103906000f590508015801562000343573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff81811660008181526002602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016948d1694851790555193945090927fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf9190a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054610100900460ff16158080156200043c5750600054600160ff909116105b80620004585750303b15801562000458575060005460ff166001145b620004e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200029e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200054557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015620005e957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6000620001f48484846012620001fc565b61253a806200099483390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200063157600080fd5b919050565b6000602082840312156200064957600080fd5b62000654826200060c565b9392505050565b6000815180845260005b81811015620006835760208185018101518683018201520162000665565b8181111562000696576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200065460208301846200065b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200071f57600080fd5b813567ffffffffffffffff808211156200073d576200073d620006de565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715620007865762000786620006de565b81604052838152866020858801011115620007a057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215620007d657600080fd5b620007e1846200060c565b9250602084013567ffffffffffffffff80821115620007ff57600080fd5b6200080d878388016200070d565b935060408601359150808211156200082457600080fd5b5062000833868287016200070d565b9150509250925092565b600080600080608085870312156200085457600080fd5b6200085f856200060c565b9350602085013567ffffffffffffffff808211156200087d57600080fd5b6200088b888389016200070d565b94506040870135915080821115620008a257600080fd5b50620008b1878288016200070d565b925050606085013560ff81168114620008c957600080fd5b939692955090935050565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006200090560808301866200065b565b82810360408401526200091981866200065b565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526200096960a08301866200065b565b82810360608401526200097d81866200065b565b91505060ff83166080830152969550505050505056fe6101a06040523480156200001257600080fd5b506040516200253a3803806200253a833981016040819052620000359162000215565b6040805180820190915260018152603160f81b6020820152839081908185600362000061838262000350565b50600462000070828262000350565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c05261012052505050506001600160a01b0394851661014052509390921661016052505060ff16610180526200041c565b80516001600160a01b03811681146200014357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017057600080fd5b81516001600160401b03808211156200018d576200018d62000148565b604051601f8301601f19908116603f01168101908282118183101715620001b857620001b862000148565b81604052838152602092508683858801011115620001d557600080fd5b600091505b83821015620001f95785820183015181830184015290820190620001da565b838211156200020b5760008385830101525b9695505050505050565b600080600080600060a086880312156200022e57600080fd5b62000239866200012b565b945062000249602087016200012b565b60408701519094506001600160401b03808211156200026757600080fd5b6200027589838a016200015e565b945060608801519150808211156200028c57600080fd5b506200029b888289016200015e565b925050608086015160ff81168114620002b357600080fd5b809150509295509295909350565b600181811c90821680620002d657607f821691505b602082108103620002f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034b57600081815260208120601f850160051c81016020861015620003265750805b601f850160051c820191505b81811015620003475782815560010162000332565b5050505b505050565b81516001600160401b038111156200036c576200036c62000148565b62000384816200037d8454620002c1565b84620002fd565b602080601f831160018114620003bc5760008415620003a35750858301515b600019600386901b1c1916600185901b17855562000347565b600085815260208120601f198616915b82811015620003ed57888601518255948401946001909101908401620003cc565b50858210156200040c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051610140516101605161018051612091620004a960003960006102a6015260008181610401015281816104760152818161080a0152610a6d0152600081816101f6015261042701526000611557015260006115a601526000611581015260006114da015260006115040152600061152e01526120916000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636afdd850116100f9578063ae1f6aaf11610097578063d6c0b2c411610071578063d6c0b2c414610425578063dd62ed3e1461045e578063e78cea92146103ff578063ee9a31a21461047157600080fd5b8063ae1f6aaf146103ff578063c01e1bd614610425578063d505accf1461044b57600080fd5b806395d89b41116100d357806395d89b41146103be5780639dc29fac146103c6578063a457c2d7146103d9578063a9059cbb146103ec57600080fd5b80636afdd8501461036057806370a08231146103755780637ecebe00146103ab57600080fd5b8063313ce5671161016657806340c10f191161014057806340c10f19146102eb57806354fd4d50146102fe57806358cf96721461033a5780636a30b2531461034d57600080fd5b8063313ce5671461029f5780633644e515146102d057806339509351146102d857600080fd5b8063095ea7b3116101a2578063095ea7b31461025257806318160ddd1461026557806323b872dd146102775780632e0f98ad1461028a57600080fd5b806301ffc9a7146101c9578063033964be146101f157806306fdde031461023d575b600080fd5b6101dc6101d7366004611c0e565b610498565b60405190151581526020015b60405180910390f35b6102187f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610245610589565b6040516101e89190611c50565b6101dc610260366004611cec565b61061b565b6002545b6040519081526020016101e8565b6101dc610285366004611d16565b610635565b61029d610298366004611d9e565b610659565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e8565b6102696107c1565b6101dc6102e6366004611cec565b6107d0565b61029d6102f9366004611cec565b6107f2565b6102456040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b61029d610348366004611cec565b610915565b61029d61035b366004611e0a565b61098b565b6e22d473030f116ddee9f6b43ac78ba3610218565b610269610383366004611e82565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102696103b9366004611e82565b610a1b565b610245610a46565b61029d6103d4366004611cec565b610a55565b6101dc6103e7366004611cec565b610b6c565b6101dc6103fa366004611cec565b610c19565b7f0000000000000000000000000000000000000000000000000000000000000000610218565b7f0000000000000000000000000000000000000000000000000000000000000000610218565b61029d610459366004611e9d565b610c27565b61026961046c366004611f10565b610de6565b6102187f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061055157507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b8061058057507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b60606003805461059890611f43565b80601f01602080910402602001604051908101604052809291908181526020018280546105c490611f43565b80156106115780601f106105e657610100808354040283529160200191610611565b820191906000526020600020905b8154815290600101906020018083116105f457829003601f168201915b5050505050905090565b600033610629818585610e87565b60019150505b92915050565b60003361064385828561103b565b61064e8585856110ed565b506001949350505050565b33156106c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f6e6c7920564d2063616e2063616c6c0000000000000000000000000000000060448201526064015b60405180910390fd5b828114610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f526563697069656e747320616e6420616d6f756e7473206d757374206265207460448201527f68652073616d65206c656e6774682e000000000000000000000000000000000060648201526084016106bd565b60005b838110156107ba576107a885858381811061077557610775611f90565b905060200201602081019061078a9190611e82565b84848481811061079c5761079c611f90565b905060200201356113a0565b806107b281611fee565b915050610758565b5050505050565b60006107cb6114c0565b905090565b6000336106298185856107e38383610de6565b6107ed9190612026565b610e87565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106bd565b6108c182826113a0565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161090991815260200190565b60405180910390a25050565b331561097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f6e6c7920564d2063616e2063616c6c0000000000000000000000000000000060448201526064016106bd565b61098782826115f4565b5050565b33156109f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f6e6c7920564d2063616e2063616c6c0000000000000000000000000000000060448201526064016106bd565b6109fd88856113a0565b610a0787846113a0565b610a1185826113a0565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205461062f565b60606004805461059890611f43565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084016106bd565b610b2482826115f4565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161090991815260200190565b60003381610b7a8286610de6565b905083811015610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016106bd565b61064e8286868403610e87565b6000336106298185856110ed565b83421115610c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106bd565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610cc08c6117d9565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610d288261180e565b90506000610d3882878787611877565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106bd565b610dda8a8a8a610e87565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffdd2b8cfcf0ee922116094bc538745d73ffffffffffffffffffffffffffffffffffffffff831601610e4c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61062f565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160209081526040808320938616835292905220545b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8316610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8216610fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006110478484610de6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110e757818110156110da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106bd565b6110e78484848403610e87565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8216611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156112e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822085850390559185168152908120805484929061132d908490612026565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161139391815260200190565b60405180910390a36110e7565b73ffffffffffffffffffffffffffffffffffffffff821661141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106bd565b806002600082825461142f9190612026565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611469908490612026565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561152657507f000000000000000000000000000000000000000000000000000000000000000046145b1561155057507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b73ffffffffffffffffffffffffffffffffffffffff8216611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040812083830390556002805484929061178990849061203e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161102e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b600061062f61181b6114c0565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006118888787878761189f565b91509150611895816119b7565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156118d657506000905060036119ae565b8460ff16601b141580156118ee57508460ff16601c14155b156118ff57506000905060046119ae565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611953573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166119a7576000600192509250506119ae565b9150600090505b94509492505050565b60008160048111156119cb576119cb612055565b036119d35750565b60018160048111156119e7576119e7612055565b03611a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106bd565b6002816004811115611a6257611a62612055565b03611ac9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106bd565b6003816004811115611add57611add612055565b03611b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b6004816004811115611b7e57611b7e612055565b03611c0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016106bd565b50565b600060208284031215611c2057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e8057600080fd5b600060208083528351808285015260005b81811015611c7d57858101830151858201604001528201611c61565b81811115611c8f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ce757600080fd5b919050565b60008060408385031215611cff57600080fd5b611d0883611cc3565b946020939093013593505050565b600080600060608486031215611d2b57600080fd5b611d3484611cc3565b9250611d4260208501611cc3565b9150604084013590509250925092565b60008083601f840112611d6457600080fd5b50813567ffffffffffffffff811115611d7c57600080fd5b6020830191508360208260051b8501011115611d9757600080fd5b9250929050565b60008060008060408587031215611db457600080fd5b843567ffffffffffffffff80821115611dcc57600080fd5b611dd888838901611d52565b90965094506020870135915080821115611df157600080fd5b50611dfe87828801611d52565b95989497509550505050565b600080600080600080600080610100898b031215611e2757600080fd5b611e3089611cc3565b9750611e3e60208a01611cc3565b9650611e4c60408a01611cc3565b9550611e5a60608a01611cc3565b979a969950949760808101359660a0820135965060c0820135955060e0909101359350915050565b600060208284031215611e9457600080fd5b610e8082611cc3565b600080600080600080600060e0888a031215611eb857600080fd5b611ec188611cc3565b9650611ecf60208901611cc3565b95506040880135945060608801359350608088013560ff81168114611ef357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611f2357600080fd5b611f2c83611cc3565b9150611f3a60208401611cc3565b90509250929050565b600181811c90821680611f5757607f821691505b602082108103611808577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361201f5761201f611fbf565b5060010190565b6000821982111561203957612039611fbf565b500190565b60008282101561205057612050611fbf565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x14dc79964da2c08b23698b3d3cc7ca32193d9955": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x15d34aaf54267db7d7c367839aaf71a00a2c6a65": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x1bb26b99a924018c063ae4be222997aadfdec0c3": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x00000000000000000000000058ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000004200000000000000000000000000000000000010", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000061525eaacddb97d9184afc205827e6a4fd0bf62a", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0x1da922d1972e12b3b224cc4d3afbefe4efb4b245": { - "balance": "0x0", - "code": "0xfe71006080604052348015600e575f80fd5b50604051611992380380611992833981016040819052602b91608d565b603233603e565b603981603e565b5060b8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215609c575f80fd5b81516001600160a01b038116811460b1575f80fd5b9392505050565b6118cd806100c55f395ff3fe608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", - "nonce": 1, - "storage": {} - }, - "0x1f734b89bb1b422b9910118fb8d44c06e33d4dda": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063f2fde38b1161005b578063f2fde38b146101b8578063f7d12760146101cb578063ffa1ad74146101d357600080fd5b80638da5cb5b14610180578063d798b1ac146101a8578063dc8452cd146101b057600080fd5b80635fd579af116100b25780635fd579af14610152578063715018a6146101655780637a1ac61e1461016d57600080fd5b80630457d6f2146100d9578063206a8300146100ee57806354fd4d5014610109575b600080fd5b6100ec6100e7366004610867565b6101db565b005b6100f66101ef565b6040519081526020015b60405180910390f35b6101456040518060400160405280600581526020017f312e312e3100000000000000000000000000000000000000000000000000000081525081565b60405161010091906108cd565b6100ec610160366004610867565b61021d565b6100ec61022e565b6100ec61017b366004610910565b610242565b60335460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b6100f66103f7565b6100f6610430565b6100ec6101c6366004610943565b610460565b6100f6610514565b6100f6600081565b6101e361053f565b6101ec816105c0565b50565b61021a60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace161095e565b81565b61022561053f565b6101ec8161065a565b61023661053f565b61024060006106b6565b565b600054610100900460ff16158080156102625750600054600160ff909116105b8061027c5750303b15801561027c575060005460ff166001145b61030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561036b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61037361072d565b61037c84610460565b610385836105c0565b61038e8261065a565b80156103f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061042b61042760017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b61095e565b5490565b905090565b600061042b61042760017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace161095e565b61046861053f565b73ffffffffffffffffffffffffffffffffffffffff811661050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b6101ec816106b6565b61021a60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b61095e565b60335473ffffffffffffffffffffffffffffffffffffffff163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6105f36105ee60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace161095e565b829055565b60008160405160200161060891815260200190565b60408051601f19818403018152919052905060005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161064e91906108cd565b60405180910390a35050565b6106886105ee60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b61095e565b60008160405160200161069d91815260200190565b60408051601f198184030181529190529050600161061d565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166107c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610304565b610240600054610100900460ff1661085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610304565b610240336106b6565b60006020828403121561087957600080fd5b5035919050565b6000815180845260005b818110156108a65760208185018101518683018201520161088a565b818111156108b8576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006108e06020830184610880565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461090b57600080fd5b919050565b60008060006060848603121561092557600080fd5b61092e846108e7565b95602085013595506040909401359392505050565b60006020828403121561095557600080fd5b6108e0826108e7565b600082821015610997577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3": { - "balance": "0x0", - "code": "0x6080604052600436106101d85760003560e01c80639d53a64811610102578063ddcd58de11610095578063ec5efcbc11610064578063ec5efcbc14610681578063f3f480d9146106a1578063faf37bc7146106d4578063fef2b4ed146106e757600080fd5b8063ddcd58de146105d4578063e03110e11461060c578063e159261114610641578063ea7139501461066157600080fd5b8063b5e7154c116100d1578063b5e7154c14610555578063d18534b51461056c578063da35c6641461058c578063dd24f9bf146105a157600080fd5b80639d53a6481461048e5780639d7e8769146104dd578063b2e67ba8146104fd578063b4801e611461053557600080fd5b806361238bde1161017a5780637ac54767116101495780637ac54767146103ca5780638542cf50146103ea578063882856ef146104355780638dc4be111461046e57600080fd5b806361238bde1461031e5780636551927b146103565780637051472e1461038e5780637917de1d146103aa57600080fd5b80633909af5c116101b65780633909af5c146102715780634d52b4c91461029357806352f0f3ad146102a857806354fd4d50146102c857600080fd5b8063013cf08b146101dd5780630359a5631461022e5780632055b36b1461025c575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612ca2565b610714565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561023a57600080fd5b5061024e610249366004612ce4565b610759565b604051908152602001610225565b34801561026857600080fd5b5061024e601081565b34801561027d57600080fd5b5061029161028c366004612eec565b610891565b005b34801561029f57600080fd5b5061024e610ae8565b3480156102b457600080fd5b5061024e6102c3366004612fd8565b610b03565b3480156102d457600080fd5b506103116040518060400160405280600581526020017f312e312e3400000000000000000000000000000000000000000000000000000081525081565b604051610225919061303f565b34801561032a57600080fd5b5061024e610339366004613090565b600160209081526000928352604080842090915290825290205481565b34801561036257600080fd5b5061024e610371366004612ce4565b601560209081526000928352604080842090915290825290205481565b34801561039a57600080fd5b5061024e6703782dace9d9000081565b3480156103b657600080fd5b506102916103c53660046130f4565b610bd9565b3480156103d657600080fd5b5061024e6103e5366004612ca2565b6110dc565b3480156103f657600080fd5b50610425610405366004613090565b600260209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610225565b34801561044157600080fd5b50610455610450366004613190565b6110f3565b60405167ffffffffffffffff9091168152602001610225565b34801561047a57600080fd5b506102916104893660046131c3565b61114d565b34801561049a57600080fd5b5061024e6104a9366004612ce4565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b3480156104e957600080fd5b506102916104f836600461320f565b611248565b34801561050957600080fd5b5061024e610518366004612ce4565b601760209081526000928352604080842090915290825290205481565b34801561054157600080fd5b5061024e610550366004613190565b6113ff565b34801561056157600080fd5b5061024e620186a081565b34801561057857600080fd5b50610291610587366004612eec565b611431565b34801561059857600080fd5b5060135461024e565b3480156105ad57600080fd5b507f000000000000000000000000000000000000000000000000000000000001ec3061024e565b3480156105e057600080fd5b5061024e6105ef366004612ce4565b601660209081526000928352604080842090915290825290205481565b34801561061857600080fd5b5061062c610627366004613090565b611840565b60408051928352602083019190915201610225565b34801561064d57600080fd5b5061029161065c3660046131c3565b611931565b34801561066d57600080fd5b5061029161067c36600461329b565b611a39565b34801561068d57600080fd5b5061029161069c36600461330a565b611b98565b3480156106ad57600080fd5b507f000000000000000000000000000000000000000000000000000000000001518061024e565b6102916106e2366004613392565b611d1e565b3480156106f357600080fd5b5061024e610702366004612ca2565b60006020819052908152604090205481565b6013818154811061072457600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061079c9060601c63ffffffff1690565b63ffffffff16905060005b6010811015610889578160011660010361082f5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107fc576107fc6133ce565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610870565b8260038260108110610843576108436133ce565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806108818161342c565b9150506107a7565b505092915050565b600061089d8a8a610759565b90506108c086868360208b01356108bb6108b68d613464565b611fea565b61202a565b80156108de57506108de83838360208801356108bb6108b68a613464565b610914576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86604001358860405160200161092a9190613533565b6040516020818303038152906040528051906020012014610977576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161098d9190613571565b146109c4576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0c886109d28680613589565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208b92505050565b610a15886121e6565b836040013588604051602001610a2b9190613533565b6040516020818303038152906040528051906020012003610a78576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610adc8a8a33612800565b50505050505050505050565b6001610af660106002613710565b610b00919061371c565b81565b6000610b0f86866128c0565b9050610b1c836008613571565b82101580610b2a5750602083115b15610b61576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610bf257610beb868661296d565b9050610c2c565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610c5957505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610cda8260601c63ffffffff1690565b63ffffffff169050333214610d1b576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2b8260801c63ffffffff1690565b63ffffffff16600003610d6a576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d748260c01c90565b67ffffffffffffffff1615610db5576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610dee576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfb89898d88866129e6565b83516020850160888204881415608883061715610e20576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610ed0578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610ec5576001821615610ea55782818b0152610ec5565b8981015160009081526020938452604090209260019290921c9101610e88565b505050608801610e2d565b50505050600160106002610ee49190613710565b610eee919061371c565b811115610f27576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9c610f3a8360401c63ffffffff1690565b610f4a9063ffffffff168a613571565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b915084156110295777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610fd68260801c63ffffffff1690565b63ffffffff16610fec8360401c63ffffffff1690565b63ffffffff1614611029576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e8452909152902061104f90846010612c18565b503360008181526018602090815260408083208f8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055838352601582528083208f8452909152812084905560609190911b81523690601437366014016000a05050505050505050505050565b600381601081106110ec57600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061111b57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b60443560008060088301861061116b5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061119857600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b600080603087600037602060006030600060025afa806112705763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112f2576309bde3396000526004601cfd5b602886106113085763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061142757600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156114a4576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ae8160c01c90565b67ffffffffffffffff166000036114f1576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000001518061151c8260c01c90565b6115309067ffffffffffffffff164261371c565b11611567576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115738b8b610759565b905061158c87878360208c01356108bb6108b68e613464565b80156115aa57506115aa84848360208901356108bb6108b68b613464565b6115e0576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016115f69190613533565b6040516020818303038152906040528051906020012014611643576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016116599190613571565b14158061168b575060016116738360601c63ffffffff1690565b61167d9190613733565b63ffffffff16856020013514155b156116c2576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d0896109d28780613589565b6116d9896121e6565b60006116e48a612b39565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0200000000000000000000000000000000000000000000000000000000000000179050600061173b8460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555061180d8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118318d8d81612800565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166118c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546118e5816008613571565b6118f0856020613571565b1061190e5783611901826008613571565b61190b919061371c565b91505b506000938452600160209081526040808620948652939052919092205492909150565b60443560008060088301861061194f5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b60008060008060808860601b81528760c01b6014820152858782601c0137601c860181207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0600000000000000000000000000000000000000000000000000000000000000179350604088026260216001603f5a021015611ac35763dd629f866000526004601cfd5b6000808783601c018c5afa94503d6001019150600882018a10611aee5763fe2549876000526004601cfd5b60c082901b81526008018481533d6000600183013e89017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8015160008481526002602090815260408083208d8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915587845282528083209c83529b81528b8220929092559384528390529790912096909655505050505050565b6000611ba48686610759565b9050611bbd83838360208801356108bb6108b68a613464565b611bf3576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611c2f576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c37612c56565b611c45816109d28780613589565b611c4e816121e6565b846040013581604051602001611c649190613533565b6040516020818303038152906040528051906020012003611cb1576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611d15878733612800565b50505050505050565b6703782dace9d90000341015611d60576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611d99576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611da4816008613758565b63ffffffff168263ffffffff1610611de8576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000001ec308163ffffffff161015611e48576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152601560209081526040808320868452909152902054611e738160801c63ffffffff1690565b63ffffffff1615611eb0576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608082901b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff60a085901b167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff83161717336000818152601560209081526040808320898452825280832094909455835180850185528381528082018981526013805460018101825590855291517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090600290930292830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015591815260168252828120968152959052909320349055505050565b600081600001518260200151836040015160405160200161200d93929190613780565b604051602081830303815290604052805190602001209050919050565b60008160005b601081101561207e578060051b880135600186831c16600181146120635760008481526020839052604090209350612074565b600082815260208590526040902093505b5050600101612030565b5090931495945050505050565b608881511461209957600080fd5b602081016020830161211a565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050612114816120ff868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b612126600083836120a6565b612132600183836120a6565b61213e600283836120a6565b61214a600383836120a6565b612156600483836120a6565b612162600583836120a6565b61216e600683836120a6565b61217a600783836120a6565b612186600883836120a6565b612192600983836120a6565b61219e600a83836120a6565b6121aa600b83836120a6565b6121b6600c83836120a6565b6121c2600d83836120a6565b6121ce600e83836120a6565b6121da600f83836120a6565b612114601083836120a6565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e001604051602081830303815290604052905060208201602082016126e0565b600583901b8101518518604085900381901c90851b1867ffffffffffffffff8116600584901b8301525b505050505050565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6123cb8660011b67ffffffffffffffff1690565b18188584603f1c6123e68660011b67ffffffffffffffff1690565b18188584603f1c6124018660011b67ffffffffffffffff1690565b181895508483603f1c61241e8560011b67ffffffffffffffff1690565b181894508387603f1c61243b8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935087925061247b81602c60066001876122dc565b61248b87601460096006876122dc565b61249b86603d60166009876122dc565b6124ab876027600e6016876122dc565b6124bb8260126014600e876122dc565b6124cb86603e60026014876122dc565b6124db86602b600c6002876122dc565b6124eb856019600d600c876122dc565b6124fb8760086013600d876122dc565b61250b85603860176013876122dc565b61251b826029600f6017876122dc565b61252b87601b6004600f876122dc565b61253b87600e60186004876122dc565b61254b81600260156018876122dc565b61255b85603760086015876122dc565b61256b81602d60106008876122dc565b61257b82602460056010876122dc565b61258b85601c60036005876122dc565b61259b85601560126003876122dc565b6125ab86600f60116012876122dc565b6125bb81600a600b6011876122dc565b506125cc8560066007600b866122dc565b6125dc816003600a6007866122dc565b5067ffffffffffffffff8216610140820152612306565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611d15565b61267a6000826125f3565b6126856005826125f3565b612690600a826125f3565b61269b600f826125f3565b6126a66014826125f3565b50565b6126b28161230e565b6126bb8161266f565b600383901b820151815160c09190911c9061211490821867ffffffffffffffff168352565b6126ec600082846126a9565b6126f8600182846126a9565b612704600282846126a9565b612710600382846126a9565b61271c600482846126a9565b612728600582846126a9565b612734600682846126a9565b612740600782846126a9565b61274c600882846126a9565b612758600982846126a9565b612764600a82846126a9565b612770600b82846126a9565b61277c600c82846126a9565b612788600d82846126a9565b612794600e82846126a9565b6127a0600f82846126a9565b6127ac601082846126a9565b6127b8601182846126a9565b6127c4601282846126a9565b6127d0601382846126a9565b6127dc601482846126a9565b6127e8601582846126a9565b6127f4601682846126a9565b612114601782846126a9565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d8060008114612879576040519150601f19603f3d011682016040523d82523d6000602084013e61287e565b606091505b50509050806128b9576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612966818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60606040519050816020820181810182868337608883068080156129b65760888290038501848101848103803687375060806001820353506001845160001a17845386526129cd565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006129f88260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a168360801c63ffffffff1690565b63ffffffff1690506000612a308460401c63ffffffff1690565b63ffffffff169050600883108015612a46575080155b15612a7a5760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612b2f565b60088310158015612a98575080612a9260088561371c565b93508310155b8015612aac5750612aa98782613571565b83105b15612b2f576000612abd828561371c565b905087612acb826020613571565b10158015612ad7575085155b15612b0e576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612bbc565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612b6a8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612b978360101b67ffffffffffffffff1690565b1617905060008160201c612bb58360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612bd490612b40565b612b40565b6040820151612be290612b40565b60401b17612bfa612bcf60018460059190911b015190565b825160809190911b90612c0c90612b40565b60c01b17179392505050565b8260108101928215612c46579160200282015b82811115612c46578251825591602001919060010190612c2b565b50612c52929150612c6e565b5090565b6040518060200160405280612c69612c83565b905290565b5b80821115612c525760008155600101612c6f565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612cb457600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612cdf57600080fd5b919050565b60008060408385031215612cf757600080fd5b612d0083612cbb565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612d6157612d61612d0e565b60405290565b6040516060810167ffffffffffffffff81118282101715612d6157612d61612d0e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612dd157612dd1612d0e565b604052919050565b803567ffffffffffffffff81168114612cdf57600080fd5b6000610320808385031215612e0557600080fd5b604051602080820182811067ffffffffffffffff82111715612e2957612e29612d0e565b806040525081935085601f860112612e4057600080fd5b612e48612d3d565b928501928087851115612e5a57600080fd5b865b85811015612e7a57612e6d81612dd9565b8352918301918301612e5c565b509092525091949350505050565b600060608284031215612e9a57600080fd5b50919050565b60008083601f840112612eb257600080fd5b50813567ffffffffffffffff811115612eca57600080fd5b6020830191508360208260051b8501011115612ee557600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f0b57600080fd5b612f148a612cbb565b985060208a01359750612f2a8b60408c01612df1565b96506103608a013567ffffffffffffffff80821115612f4857600080fd5b612f548d838e01612e88565b97506103808c0135915080821115612f6b57600080fd5b612f778d838e01612ea0565b90975095506103a08c0135915080821115612f9157600080fd5b612f9d8d838e01612e88565b94506103c08c0135915080821115612fb457600080fd5b50612fc18c828d01612ea0565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612ff057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b8381101561302e578181015183820152602001613016565b838111156121145750506000910152565b602081526000825180602084015261305e816040850160208701613013565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080604083850312156130a357600080fd5b50508035926020909101359150565b60008083601f8401126130c457600080fd5b50813567ffffffffffffffff8111156130dc57600080fd5b602083019150836020828501011115612ee557600080fd5b600080600080600080600060a0888a03121561310f57600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561313557600080fd5b6131418b838c016130b2565b909750955060608a013591508082111561315a57600080fd5b506131678a828b01612ea0565b9094509250506080880135801515811461318057600080fd5b8091505092959891949750929550565b6000806000606084860312156131a557600080fd5b6131ae84612cbb565b95602085013595506040909401359392505050565b6000806000604084860312156131d857600080fd5b83359250602084013567ffffffffffffffff8111156131f657600080fd5b613202868287016130b2565b9497909650939450505050565b600080600080600080600060a0888a03121561322a57600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561325057600080fd5b61325c8b838c016130b2565b909750955060608a013591508082111561327557600080fd5b506132828a828b016130b2565b989b979a50959894979596608090950135949350505050565b6000806000806000608086880312156132b357600080fd5b853594506132c360208701612cbb565b93506132d160408701612dd9565b9250606086013567ffffffffffffffff8111156132ed57600080fd5b6132f9888289016130b2565b969995985093965092949392505050565b60008060008060006080868803121561332257600080fd5b61332b86612cbb565b945060208601359350604086013567ffffffffffffffff8082111561334f57600080fd5b61335b89838a01612e88565b9450606088013591508082111561337157600080fd5b506132f988828901612ea0565b803563ffffffff81168114612cdf57600080fd5b6000806000606084860312156133a757600080fd5b833592506133b76020850161337e565b91506133c56040850161337e565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345d5761345d6133fd565b5060010190565b60006060823603121561347657600080fd5b61347e612d67565b823567ffffffffffffffff8082111561349657600080fd5b9084019036601f8301126134a957600080fd5b81356020828211156134bd576134bd612d0e565b6134ed817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612d8a565b9250818352368183860101111561350357600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561356857825167ffffffffffffffff1682526020928301929091019060010161353f565b50505092915050565b60008219821115613584576135846133fd565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135be57600080fd5b83018035915067ffffffffffffffff8211156135d957600080fd5b602001915036819003821315612ee557600080fd5b600181815b8085111561364757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561362d5761362d6133fd565b8085161561363a57918102915b93841c93908002906135f3565b509250929050565b60008261365e5750600161370a565b8161366b5750600061370a565b8160018114613681576002811461368b576136a7565b600191505061370a565b60ff84111561369c5761369c6133fd565b50506001821b61370a565b5060208310610133831016604e8410600b84101617156136ca575081810a61370a565b6136d483836135ee565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613706576137066133fd565b0290505b92915050565b6000612966838361364f565b60008282101561372e5761372e6133fd565b500390565b600063ffffffff83811690831681811015613750576137506133fd565b039392505050565b600063ffffffff808316818516808303821115613777576137776133fd565b01949350505050565b60008451613792818460208901613013565b9190910192835250602082015260400191905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0xe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0xffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0x9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0xcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0xf9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0xf8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0x3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0xc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0x5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0xda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2" - } - }, - "0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x2476c911e6d4d9411e677d8faf15a64ac1fdeee8": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a6ed563e11610076578063bd02d0f51161005b578063bd02d0f51461018e578063ca446dd9146101b8578063e2a4853a1461011557600080fd5b8063a6ed563e1461018e578063abfdcced146101aa57600080fd5b80634e91db08116100a75780634e91db081461011557806354fd4d50146101275780637ae1cfca1461017057600080fd5b80630528afe2146100c357806321f8a721146100d8575b600080fd5b6100d66100d1366004610239565b6101c6565b005b6100eb6100e63660046102ae565b610229565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d66101233660046102c7565b9055565b6101636040518060400160405280600581526020017f312e322e3200000000000000000000000000000000000000000000000000000081525081565b60405161010c91906102e9565b61017e6100e63660046102ae565b604051901515815260200161010c565b61019c6100e63660046102ae565b60405190815260200161010c565b6100d661012336600461035c565b6100d6610123366004610391565b8060005b81811015610223576102118484838181106101e7576101e76103cf565b90506040020160000135858584818110610203576102036103cf565b905060400201602001359055565b8061021b816103fe565b9150506101ca565b50505050565b6000610233825490565b92915050565b6000806020838503121561024c57600080fd5b823567ffffffffffffffff8082111561026457600080fd5b818501915085601f83011261027857600080fd5b81358181111561028757600080fd5b8660208260061b850101111561029c57600080fd5b60209290920196919550909350505050565b6000602082840312156102c057600080fd5b5035919050565b600080604083850312156102da57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015610316578581018301518582016040015282016102fa565b81811115610328576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000806040838503121561036f57600080fd5b823591506020830135801515811461038657600080fd5b809150509250929050565b600080604083850312156103a457600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811461038657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610456577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x2ff5aa92912979720b554d1483dcfa76099740c2": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000058ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000004200000000000000000000000000000000000014", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000074f1ac50eb0be98853805d381c884f5f9abdecf9", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0x33dadc2d1aa9bb613a7ae6b28425ea00d44c6998": { - "balance": "0x0", - "code": "0x60806040526004361061019a5760003560e01c806370a08231116100e1578063a9059cbb1161008a578063d0e30db011610064578063d0e30db0146101a9578063dad544e014610585578063dd62ed3e1461059a578063f3fef3a3146105ed576101a9565b8063a9059cbb146104f1578063c4d66de814610511578063cd47bde114610531576101a9565b806395d89b41116100bb57806395d89b411461046b578063977a5ec5146104b1578063a7e21e80146104d1576101a9565b806370a08231146103f357806379502c55146104365780637eee288d1461044b576101a9565b8063313ce567116101435780633e47158c1161011d5780633e47158c1461036257806354fd4d50146103775780636a42b8f8146103c0576101a9565b8063313ce567146102b657806333d7e2bd146102dd57806338d38c971461032f576101a9565b806318160ddd1161017457806318160ddd1461025957806323b872dd146102765780632e1a7d4d14610296576101a9565b806306fdde03146101b1578063095ea7b3146102095780630ca3568214610239576101a9565b366101a9576101a761060d565b005b6101a761060d565b3480156101bd57600080fd5b5060408051808201909152600d81527f577261707065642045746865720000000000000000000000000000000000000060208201525b60405161020091906114c9565b60405180910390f35b34801561021557600080fd5b5061022961022436600461155e565b610668565b6040519015158152602001610200565b34801561024557600080fd5b506101a761025436600461158a565b6106e1565b34801561026557600080fd5b50475b604051908152602001610200565b34801561028257600080fd5b506102296102913660046115a3565b61084d565b3480156102a257600080fd5b506101a76102b136600461158a565b610a20565b3480156102c257600080fd5b506102cb601281565b60405160ff9091168152602001610200565b3480156102e957600080fd5b5060045461030a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610200565b34801561033b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000016102cb565b34801561036e57600080fd5b5061030a610a2d565b34801561038357600080fd5b506101f36040518060400160405280600581526020017f312e352e3000000000000000000000000000000000000000000000000000000081525081565b3480156103cc57600080fd5b507f0000000000000000000000000000000000000000000000000000000000049d40610268565b3480156103ff57600080fd5b5061026861040e3660046115e4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561044257600080fd5b5061030a610c38565b34801561045757600080fd5b506101a761046636600461155e565b610cd0565b34801561047757600080fd5b5060408051808201909152600481527f574554480000000000000000000000000000000000000000000000000000000060208201526101f3565b3480156104bd57600080fd5b506101a76104cc36600461155e565b610d24565b3480156104dd57600080fd5b506101a76104ec3660046115e4565b610e33565b3480156104fd57600080fd5b5061022961050c36600461155e565b610e63565b34801561051d57600080fd5b506101a761052c3660046115e4565b610e77565b34801561053d57600080fd5b5061057061054c366004611601565b60036020908152600092835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610200565b34801561059157600080fd5b5061030a61101e565b3480156105a657600080fd5b506102686105b5366004611601565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b3480156105f957600080fd5b506101a761060836600461155e565b611072565b336000908152600160205260408120805434929061062c908490611669565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106d09086815260200190565b60405180910390a350600192915050565b6106e961101e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f44656c61796564574554483a206e6f74206f776e65720000000000000000000060448201526064015b60405180910390fd5b60004782106107915747610793565b815b604051909150600090339083908381818185875af1925050503d80600081146107d8576040519150601f19603f3d011682016040523d82523d6000602084013e6107dd565b606091505b5050905080610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f44656c61796564574554483a207265636f766572206661696c656400000000006044820152606401610779565b505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205482111561087f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660008181526002602090815260408083203380855292529091205491148015906108e057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b1561093857828110156108f257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915281208054859290610932908490611681565b90915550505b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160205260408120805485929061096d908490611681565b909155505073ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040812080548592906109a7908490611669565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a0d91815260200190565b60405180910390a3506001949350505050565b610a2a3382611072565b50565b600080610a587fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610a7b57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610abe9190611698565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610b19906060015b604051602081830303815290604052805190602001205490565b14610b50576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610b7290606001610aff565b905073ffffffffffffffffffffffffffffffffffffffff811615610c06578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bff91906116d5565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb91906116d5565b905090565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120426001820155805490918391839190610d1a908490611669565b9091555050505050565b610d2c61101e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f44656c61796564574554483a206e6f74206f776e6572000000000000000000006044820152606401610779565b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260408083203380855290835292819020859055518481529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a361084882338361084d565b610a2a816104cc8373ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6000610e7033848461084d565b9392505050565b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015610eb7575060005460ff8083169116105b610f43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610779565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610f7c6113a0565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000611028610a2d565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b60048054604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921692635c975abb9282820192602092908290030181865afa1580156110df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110391906116f2565b1561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f44656c61796564574554483a20636f6e747261637420697320706175736564006044820152606401610779565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020805482111561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f44656c61796564574554483a20696e73756666696369656e7420756e6c6f636b60448201527f6564207769746864726177616c000000000000000000000000000000000000006064820152608401610779565b60008160010154116112be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f44656c61796564574554483a207769746864726177616c206e6f7420756e6c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152608401610779565b427f0000000000000000000000000000000000000000000000000000000000049d4082600101546112ef9190611669565b111561137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44656c61796564574554483a207769746864726177616c2064656c6179206e6f60448201527f74206d65740000000000000000000000000000000000000000000000000000006064820152608401610779565b818160000160008282546113919190611681565b90915550610848905082611423565b336113a9610a2d565b73ffffffffffffffffffffffffffffffffffffffff16141580156113ea5750336113d161101e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611421576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3360009081526001602052604090205481111561143f57600080fd5b336000908152600160205260408120805483929061145e908490611681565b9091555050604051339082156108fc029083906000818181858888f19350505050158015611490573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600060208083528351808285015260005b818110156114f6578581018301518582016040015282016114da565b81811115611508576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a2a57600080fd5b6000806040838503121561157157600080fd5b823561157c8161153c565b946020939093013593505050565b60006020828403121561159c57600080fd5b5035919050565b6000806000606084860312156115b857600080fd5b83356115c38161153c565b925060208401356115d38161153c565b929592945050506040919091013590565b6000602082840312156115f657600080fd5b8135610e708161153c565b6000806040838503121561161457600080fd5b823561161f8161153c565b9150602083013561162f8161153c565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561167c5761167c61163a565b500190565b6000828210156116935761169361163a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116d0576116d061163a565b500290565b6000602082840312156116e757600080fd5b8151610e708161153c565b60006020828403121561170457600080fd5b81518015158114610e7057600080fdfea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x3caaed2ed7cd3e53d4d7b5d4bac03bfeb8f972a2": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5", - "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e": "0x000000000000000000000000b686f13aff1e427a1f993f29ab0f2e7383729fe0" - } - }, - "0x477a27590e2f76836b8f50a23f7ba2edd640209f": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000066": "0x010000000000000000000000000000000000000000000000000c3c9d00000558", - "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", - "0x0000000000000000000000000000000000000000000000000000000000000068": "0x00000000000000000000000000000000000c3c9d000005580000000003938700", - "0x0000000000000000000000000000000000000000000000000000000000000069": "0x0000ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", - "0x000000000000000000000000000000000000000000000000000000000000006b": "0x000000000000000000000000000000000000000000000000000000000153c16e", - "0x000000000000000000000000000000000000000000000000000000000000006c": "0x000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000083a2df4b23236dccc59a67d289cd5163190213ea", - "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636": "0x00000000000000000000000058ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82", - "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7": "0x0000000000000000000000002ff5aa92912979720b554d1483dcfa76099740c2", - "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac": "0x000000000000000000000000e2daae86373cd936d1477a186a8304d86c96ae0e", - "0x51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd58ff": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x58e88e949bd180ff86d6c072735c3d8d5a05a543c16130176ec0bc0adf3fd806": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc597": "0x0000000000000000000000000075b931d030ae1bd5243b4111d6e1595917e0b2", - "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376": "0x0000000000000000000000001bb26b99a924018c063ae4be222997aadfdec0c3", - "0x99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff42": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c": "0x0000000000000000000000000b6872da7070dc6237f3be0685cf32032638ba40", - "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f": "0x0000000000000000000000000000000000000000000000000000000000000025", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0x4826533b4897376654bb4d4ad88b7fafd0c98528": { - "balance": "0x0", - "code": "0x60806040526004361061005d575f3560e01c80635c60da1b116100425780635c60da1b146100bc5780638f283970146100f5578063f851a440146101145761006c565b80633659cfe6146100745780634f1ef286146100935761006c565b3661006c5761006a610128565b005b61006a610128565b34801561007f575f80fd5b5061006a61008e3660046106c8565b610218565b6100a66100a13660046106e1565b61028a565b6040516100b3919061075d565b60405180910390f35b3480156100c7575f80fd5b506100d0610409565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b3565b348015610100575f80fd5b5061006a61010f3660046106c8565b61049f565b34801561011f575f80fd5b506100d0610506565b5f6101517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166101fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b365f80375f80365f845af43d5f803e80610213573d5ffd5b503d5ff35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610271575033155b156102825761027f81610591565b50565b61027f610128565b60606102b47fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102eb575033155b156103fa576102f984610591565b5f808573ffffffffffffffffffffffffffffffffffffffff1685856040516103229291906107b0565b5f60405180830381855af49150503d805f811461035a576040519150601f19603f3d011682016040523d82523d5f602084013e61035f565b606091505b5091509150816103f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f2565b91506104029050565b610402610128565b9392505050565b5f6104327fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610469575033155b1561049457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61049c610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104f8575033155b156102825761027f816105f9565b5f61052f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610566575033155b1561049457507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050565b5f6106227fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c3575f80fd5b919050565b5f602082840312156106d8575f80fd5b610402826106a0565b5f805f604084860312156106f3575f80fd5b6106fc846106a0565b9250602084013567ffffffffffffffff80821115610718575f80fd5b818601915086601f83011261072b575f80fd5b813581811115610739575f80fd5b87602082850101111561074a575f80fd5b6020830194508093505050509250925092565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b818382375f910190815291905056fea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000195401dc811bb5740090279ba06cfa8fcf6113778", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", - "0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf", - "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x00000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x00000000000000000000000070e0ba845a1a0f2da3359c97e0285013525ffc49", - "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "0x58396a89db8e32179b2042a50f1bc66766fa4848": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80635a4dab331161005b5780635a4dab33146100fd57806378ecabce14610124578063b51f9c2b14610147578063b6a4cd211461019e57600080fd5b80631d8a4e921461008d57806330e9012c146100a8578063318b1b80146100bd57806358084273146100e8575b600080fd5b6100956101b1565b6040519081526020015b60405180910390f35b6100b061023a565b60405161009f919061241a565b6100d06100cb36600461257d565b61034e565b6040516001600160a01b03909116815260200161009f565b6100fb6100f6366004612596565b6103c9565b005b6100d07f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61013761013236600461257d565b61172e565b604051901515815260200161009f565b61014f6117d9565b60405161009f919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6100fb6101ac3660046125ee565b611886565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610235919061260b565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023591906126af565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103bd90612807565b60601c95945050505050565b60006103d9610140830183612857565b60008181106103ea576103ea6128c5565b61040092602060609092020190810191506125ee565b6001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046191906128f4565b905060005b610474610140840184612857565b905081101561073e57816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df91906128f4565b6001600160a01b03166104f6610140850185612857565b83818110610506576105066128c5565b61051c92602060609092020190810191506125ee565b6001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d91906128f4565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105de91906128f4565b6001600160a01b03161461061e576040517f513c07ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61064d61062f610140850185612857565b6000818110610640576106406128c5565b9050606002016020013590565b61066e61065e610140860186612857565b84818110610640576106406128c5565b146106a5576040517fa9ef3a7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d46106b6610140850185612857565b60008181106106c7576106c76128c5565b9050606002016040013590565b6106f56106e5610140860186612857565b848181106106c7576106c76128c5565b1461072c576040517fa9ef3a7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061073681612940565b915050610466565b50600061075261062f610140850185612857565b03610789576040517fefc878f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610799610140840184612857565b905067ffffffffffffffff8111156107b3576107b3612624565b6040519080825280602002602001820160405280156107dc578160200160208202803683370190505b50905060005b6107f0610140850185612857565b90508110156108ca57610807610140850185612857565b82818110610817576108176128c5565b61082d92602060609092020190810191506125ee565b6001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088e91906128f4565b8282815181106108a0576108a06128c5565b6001600160a01b0390921660209283029190910190910152806108c281612940565b9150506107e2565b5060005b8151811015610a2957816000815181106108ea576108ea6128c5565b60200260200101516001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095391906128f4565b6001600160a01b031682828151811061096e5761096e6128c5565b60200260200101516001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906128f4565b6001600160a01b031614610a17576040517f8db2d5e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80610a2181612940565b9150506108ce565b506000826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e91906128f4565b90506000610b0f4285610ad4610aa86101408a018a612857565b6000818110610ab957610ab96128c5565b610acf92602060609092020190810191506125ee565b6118dd565b6040518060400160405280601281526020017f4554484c6f636b626f782d496e7465726f70000000000000000000000000000081525061190b565b905082610c0e8583610b1f611969565b60a0015187600081518110610b3657610b366128c5565b60200260200101516001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f91906128f4565b85604051602401610bb192919061295a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f946d920400000000000000000000000000000000000000000000000000000000179052611a59565b506000610c624286610c27610aa86101408b018b612857565b6040518060400160405280601a81526020017f4469737075746547616d65466163746f72792d496e7465726f7000000000000081525061190b565b9050610ce98582610c71611969565b61014001516040516001600160a01b03881660248201526044015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052611a59565b6000610d3c4287610d01610aa86101408c018c612857565b6040518060400160405280601b81526020017f416e63686f72537461746552656769737472792d496e7465726f70000000000081525061190b565b90506000610d4d60208901896129c3565b15610d5a57506004610d5e565b5060055b610e868783610d6b611969565b610160015189600081518110610d8357610d836128c5565b60200260200101516001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec91906128f4565b604080516001600160a01b039283166024820152918916604483015260208e013560648301528d0135608482015263ffffffff861660a482015260c40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47a222c500000000000000000000000000000000000000000000000000000000179052611a59565b60005b865181101561116b576000878281518110610ea657610ea66128c5565b60200260200101516001600160a01b031663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906128f4565b6040517f5ec15d890000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015291925090871690635ec15d8990602401600060405180830381600087803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b50506040517f438ab5ac0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301528416925063438ab5ac9150602401600060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b50505050600088838151811061100f5761100f6128c5565b60200260200101516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107891906128f4565b9050611085816000611ad9565b611090816004611ad9565b61109b816001611ad9565b6110a6816005611ad9565b6110b1816008611ad9565b6110bc816009611ad9565b8883815181106110ce576110ce6128c5565b60209081029190910101516040517f2152f2be0000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152878116602483015290911690632152f2be90604401600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b505050505050808061116390612940565b915050610e89565b5060006111bf4289611184610aa86101408e018e612857565b6040518060400160405280602081526020017f44656c61796564574554482d496e7465726f702d5065726d697373696f6e656481525061190b565b905061126a88826111ce611969565b61018001518a6000815181106111e6576111e66128c5565b60200260200101516001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124f91906128f4565b6040516001600160a01b039091166024820152604401610c8c565b60006113176040518060e0016040528061128e8d80610140019061062f9190612857565b815260200161129b611969565b6101a001516001600160a01b03168152602001866001600160a01b03168152602001846001600160a01b03168152602001600081526020018c60600160000160208101906112e991906125ee565b6001600160a01b0316815260200161130760a08e0160808f016125ee565b6001600160a01b03169052611b6a565b9050846001600160a01b031663b1070957600561133261023a565b6102200151846040518463ffffffff1660e01b815260040161135693929190612a3c565b600060405180830381600087803b15801561137057600080fd5b505af1158015611384573d6000803e3d6000fd5b50506040517f1e3342400000000000000000000000000000000000000000000000000000000081526005600482015260e08d013560248201526001600160a01b0388169250631e3342409150604401600060405180830381600087803b1580156113ed57600080fd5b505af1158015611401573d6000803e3d6000fd5b506114179450505060208b0191508a90506129c3565b156117245760006114524289611434610aa86101408e018e612857565b604051806060016040528060228152602001612d4c6022913961190b565b905061146188826111ce611969565b60006114ce6040518060e001604052806114858d80610140019061062f9190612857565b8152602001611492611969565b6101a001516001600160a01b0390811682528781166020830152851660408201526000606082018190526080820181905260a090910152611b6a565b9050846001600160a01b031663b107095760046114e961023a565b6102000151846040518463ffffffff1660e01b815260040161150d93929190612a3c565b600060405180830381600087803b15801561152757600080fd5b505af115801561153b573d6000803e3d6000fd5b50506040517f1e33424000000000000000000000000000000000000000000000000000000000815260048082015260e08d013560248201526001600160a01b0388169250631e3342409150604401600060405180830381600087803b1580156115a357600080fd5b505af11580156115b7573d6000803e3d6000fd5b5050505060006115d18b8061014001906106b69190612857565b90508015611720576116316040518060e001604052808381526020016115f5611969565b6101a001516001600160a01b0390811682528881166020830152861660408201526000606082018190526080820181905260a090910152611b6a565b9150856001600160a01b031663b1070957600961164c61023a565b6102000151856040518463ffffffff1660e01b815260040161167093929190612a3c565b600060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b50506040517f1e3342400000000000000000000000000000000000000000000000000000000081526009600482015260e08e013560248201526001600160a01b0389169250631e3342409150604401600060405180830381600087803b15801561170757600080fd5b505af115801561171b573d6000803e3d6000fd5b505050505b5050505b5050505050505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d39190612a73565b92915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102359190612a90565b806001600160a01b03163b6000036118da576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b604080516001600160a01b0383166020820152606091015b6040516020818303038152906040529050919050565b600080611919868585611ca1565b905061195f611926611cd7565b60200151828760405160200161194b91906001600160a01b0391909116815260200190565b604051602081830303815290604052611d60565b9695505050505050565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa48486001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa15801561032a573d6000803e3d6000fd5b611a6282611886565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d90611aab90869086908690600401612b4f565b600060405180830381600087803b158015611ac557600080fd5b505af1158015611724573d6000803e3d6000fd5b6040517fb107095700000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526000602482018190526060604483015260648201526001600160a01b0383169063b107095790608401600060405180830381600087803b158015611b4e57600080fd5b505af1158015611b62573d6000803e3d6000fd5b505050505050565b60a08101516060906001600160a01b0316158015611b93575060c08201516001600160a01b0316155b15611c0a5781516020808401516040808601516060870151608088015192516118f596959293919201948552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602087015292841b83166034860152921b166048830152605c820152607c0190565b8151602080840151604080860151606080880151608089015160a08a015160c08b01518651988901999099527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000096841b87169588019590955292821b85166054870152811b84166068860152607c85019190915290811b8216609c8401529290921b90911660b082015260c4016118f5565b919050565b6000838383604051602001611cb893929190612b7b565b6040516020818303038152906040528051906020012090509392505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f00000000000000000000000058396a89db8e32179b2042a50f1bc66766fa48486001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611862573d6000803e3d6000fd5b600080611d91856001600160a01b0316803b806020016040519081016040528181526000908060200190933c611e9a565b805190915060ff1615611dd85780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff90911660048201526024016118d1565b60208101515115611e1b5780602001516040517f57a058350000000000000000000000000000000000000000000000000000000081526004016118d19190612ba6565b6000816040015184604051602001611e34929190612bb9565b6040516020818303038152906040529050848151602083016000f592506001600160a01b038316611e91576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b611ec16040518060600160405280600060ff16815260200160608152602001606081525090565b600282511080611f2b575081600081518110611edf57611edf6128c5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b80611f90575081600181518110611f4457611f446128c5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15611fc7576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283600281518110611fde57611fde6128c5565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c905060008360028151811061200e5761200e6128c5565b60209101015160f81c60039081169150819003612057576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156121435760008260ff1667ffffffffffffffff81111561208057612080612624565b6040519080825280601f01601f1916602001820160405280156120aa576020820181803683370190505b50905060005b8360ff1681101561213557866120c7826003612be8565b815181106120d7576120d76128c5565b602001015160f81c60f81b8282815181106120f4576120f46128c5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061212d81612940565b9150506120b0565b5061213f81612359565b9150505b60008167ffffffffffffffff81111561215e5761215e612624565b6040519080825280601f01601f191660200182016040528015612188576020820181803683370190505b50905060ff83161561222d5760006121a1846003612c00565b60ff16905060005b8381101561222a57876121bc8284612be8565b815181106121cc576121cc6128c5565b602001015160f81c60f81b8382815181106121e9576121e96128c5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061222281612940565b9150506121a9565b50505b60008261223b856003612c00565b60ff166122489190612be8565b905060008188516122599190612c25565b905080600003612295576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff8111156122b0576122b0612624565b6040519080825280601f01601f1916602001820160405280156122da576020820181803683370190505b50905060008360208b0101602083018481868460045afa925050508061232c576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6000602082511115612397576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8351811015612413576123af816001612be8565b84516123bb9190612c25565b6123c6906008612c3c565b6123d1906002612d3f565b8482815181106123e3576123e36128c5565b01602001516123f5919060f81c612c3c565b6123ff9083612be8565b91508061240b81612940565b91505061239b565b5092915050565b81516001600160a01b031681526102408101602083015161244660208401826001600160a01b03169052565b50604083015161246160408401826001600160a01b03169052565b50606083015161247c60608401826001600160a01b03169052565b50608083015161249760808401826001600160a01b03169052565b5060a08301516124b260a08401826001600160a01b03169052565b5060c08301516124cd60c08401826001600160a01b03169052565b5060e08301516124e860e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102209384015116929091019190915290565b60006020828403121561258f57600080fd5b5035919050565b6000602082840312156125a857600080fd5b813567ffffffffffffffff8111156125bf57600080fd5b820161016081850312156125d257600080fd5b9392505050565b6001600160a01b03811681146118da57600080fd5b60006020828403121561260057600080fd5b81356125d2816125d9565b60006020828403121561261d57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610240810167ffffffffffffffff8111828210171561269e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b8051611c9c816125d9565b600061024082840312156126c257600080fd5b6126ca612653565b6126d3836126a4565b81526126e1602084016126a4565b60208201526126f2604084016126a4565b6040820152612703606084016126a4565b6060820152612714608084016126a4565b608082015261272560a084016126a4565b60a082015261273660c084016126a4565b60c082015261274760e084016126a4565b60e082015261010061275a8185016126a4565b9082015261012061276c8482016126a4565b9082015261014061277e8482016126a4565b908201526101606127908482016126a4565b908201526101806127a28482016126a4565b908201526101a06127b48482016126a4565b908201526101c06127c68482016126a4565b908201526101e06127d88482016126a4565b908201526102006127ea8482016126a4565b908201526102206127fc8482016126a4565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008082169350601483101561284f5780818460140360031b1b83161693505b505050919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261288c57600080fd5b83018035915067ffffffffffffffff8211156128a757600080fd5b60200191506060810236038213156128be57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561290657600080fd5b81516125d2816125d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000600019820361295357612953612911565b5060010190565b6000604082016001600160a01b0380861684526020604081860152828651808552606087019150828801945060005b818110156129a7578551851683529483019491830191600101612989565b509098975050505050505050565b80151581146118da57600080fd5b6000602082840312156129d557600080fd5b81356125d2816129b5565b60005b838110156129fb5781810151838201526020016129e3565b83811115612a0a576000848401525b50505050565b60008151808452612a288160208601602086016129e0565b601f01601f19169290920160200192915050565b63ffffffff841681526001600160a01b0383166020820152606060408201526000612a6a6060830184612a10565b95945050505050565b600060208284031215612a8557600080fd5b81516125d2816129b5565b600060a08284031215612aa257600080fd5b60405160a0810181811067ffffffffffffffff82111715612aec577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528251612afa816125d9565b81526020830151612b0a816125d9565b60208201526040830151612b1d816125d9565b60408201526060830151612b30816125d9565b60608201526080830151612b43816125d9565b60808201529392505050565b60006001600160a01b03808616835280851660208401525060606040830152612a6a6060830184612a10565b838152606060208201526000612b946060830185612a10565b828103604084015261195f8185612a10565b6020815260006125d26020830184612a10565b60008351612bcb8184602088016129e0565b835190830190612bdf8183602088016129e0565b01949350505050565b60008219821115612bfb57612bfb612911565b500190565b600060ff821660ff84168060ff03821115612c1d57612c1d612911565b019392505050565b600082821015612c3757612c37612911565b500390565b6000816000190483118215151615612c5657612c56612911565b500290565b600181815b80851115612c96578160001904821115612c7c57612c7c612911565b80851615612c8957918102915b93841c9390800290612c60565b509250929050565b600082612cad575060016117d3565b81612cba575060006117d3565b8160018114612cd05760028114612cda57612cf6565b60019150506117d3565b60ff841115612ceb57612ceb612911565b50506001821b6117d3565b5060208310610133831016604e8410600b8410161715612d19575081810a6117d3565b612d238383612c5b565b8060001904821115612d3757612d37612911565b029392505050565b60006125d28383612c9e56fe44656c61796564574554482d496e7465726f702d5065726d697373696f6e6c657373a164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x58ae7c6a170f2ed1eecb2c90cb81b09db9ea4a82": { - "balance": "0x0", - "code": "0x608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000030000000000000000000000000000000000000000", - "0x00000000000000000000000000000000000000000000000000000000000000cc": "0x000000000000000000000000000000000000000000000000000000000000dead", - "0x00000000000000000000000000000000000000000000000000000000000000cf": "0x0000000000000000000000004200000000000000000000000000000000000007", - "0x00000000000000000000000000000000000000000000000000000000000000fc": "0x000000000000000000000000e2daae86373cd936d1477a186a8304d86c96ae0e", - "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", - "0x22a50d7753da6d63509109c20d04bfc0cb620259b9f97342a05dc6215d8db877": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xb6b68c6a49af08c68434b9c8591d078d94046eeb9927fed40467a1f3675e51da": "0x0000000000000000000000003caaed2ed7cd3e53d4d7b5d4bac03bfeb8f972a2" - } - }, - "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000001f734b89bb1b422b9910118fb8d44c06e33d4dda", - "0x4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace0": "0x0000000000000000000000000000000000000009000000000000000000000000", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3", - "0xe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1a": "0x0000000000000000000000000000000000000009000000000000000000000000" - } - }, - "0x61525eaacddb97d9184afc205827e6a4fd0bf62a": { - "balance": "0x0", - "code": "0x6080604052600436106101a55760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610597578063c89701a2146105aa578063dad544e0146105d7578063e11013dd146105ec57600080fd5b8063927ede2d146105395780639a2ac6d514610564578063a9f9e6751461057757600080fd5b806387087623116100bb57806387087623146104d35780638f601f66146104f357806391c49bf81461048857600080fd5b80635c975abb146104635780637f46ddb214610488578063838b2520146104b357600080fd5b806338d38c971161014e578063485cc95511610128578063485cc955146103ad578063540abf73146103cd57806354fd4d50146103ed57806358a997f61461044357600080fd5b806338d38c971461032d5780633cb747bf1461036b5780633e47158c1461039857600080fd5b80631635f5fd1161017f5780631635f5fd146102ae57806333d7e2bd146102c157806335e80ab31461031857600080fd5b80630166a07a1461026857806309fc8843146102885780631532ec341461029b57600080fd5b36610263576101b26105ff565b610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610261333362030d406040518060200160405280600081525061063c565b005b600080fd5b34801561027457600080fd5b50610261610283366004612b73565b61064f565b610261610296366004612c24565b610a69565b6102616102a9366004612c77565b610b45565b6102616102bc366004612c77565b610b59565b3480156102cd57600080fd5b506034546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561032457600080fd5b506102ee611022565b34801561033957600080fd5b5060405160ff7f000000000000000000000000000000000000000000000000000000000000000316815260200161030f565b34801561037757600080fd5b506003546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a457600080fd5b506102ee6110bb565b3480156103b957600080fd5b506102616103c8366004612cea565b6112c6565b3480156103d957600080fd5b506102616103e8366004612d23565b61148c565b3480156103f957600080fd5b506104366040518060400160405280600581526020017f322e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161030f9190612e10565b34801561044f57600080fd5b5061026161045e366004612e23565b6114d1565b34801561046f57600080fd5b506104786115aa565b604051901515815260200161030f565b34801561049457600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102ee565b3480156104bf57600080fd5b506102616104ce366004612d23565b61163e565b3480156104df57600080fd5b506102616104ee366004612e23565b611683565b3480156104ff57600080fd5b5061052b61050e366004612cea565b600260209081526000928352604080842090915290825290205481565b60405190815260200161030f565b34801561054557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102ee565b610261610572366004612ea6565b61175c565b34801561058357600080fd5b50610261610592366004612b73565b61179e565b6102616105a5366004612c24565b6117ad565b3480156105b657600080fd5b506004546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105e357600080fd5b506102ee611883565b6102616105fa366004612ea6565b6118d7565b600032330361060e5750600190565b333b60170361063657604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b610649848434858561191a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610722575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190612f09565b73ffffffffffffffffffffffffffffffffffffffff16145b6107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161023a565b6107dc6115aa565b15610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161023a565b61084c87611ae4565b1561099a5761085b8787611b46565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161023a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561097d57600080fd5b505af1158015610991573d6000803e3d6000fd5b50505050610a1c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109d8908490612f55565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a1c908585611c66565b610a60878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3a92505050565b50505050505050565b610a716105ff565b610afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b610b403333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191a92505050565b505050565b610b528585858585610b59565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c2c575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c149190612f09565b73ffffffffffffffffffffffffffffffffffffffff16145b610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161023a565b610ce66115aa565b15610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161023a565b823414610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161023a565b3073ffffffffffffffffffffffffffffffffffffffff851603610e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161023a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161023a565b610f6e85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dc892505050565b6000610f8b855a8660405180602001604052806000815250611e3b565b90508061101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161023a565b505050505050565b603454604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190612f09565b905090565b6000806110e67fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561110957919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261114c9190612f6c565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906111a7906060015b604051602081830303815290604052805190602001205490565b146111de576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906112009060600161118d565b905073ffffffffffffffffffffffffffffffffffffffff811615611294578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128d9190612f09565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff16158015611306575060005460ff8083169116105b611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161023a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556113cb611e53565b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905561142983734200000000000000000000000000000000000010611ed6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610a6087873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fc092505050565b6114d96105ff565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b61101a86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237992505050565b603454604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b69190612fa9565b610a6087873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237992505050565b61168b6105ff565b611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b61101a86863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fc092505050565b61064933858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061063c92505050565b610a608787878787878761064f565b6117b56105ff565b611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161023a565b610b4033338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061063c92505050565b600061188d6110bb565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611092573d6000803e3d6000fd5b6106493385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191a92505050565b8234146119a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161023a565b6119b585858584612388565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a18908b908b9086908a90602401612fcb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611aab92918890600401613014565b6000604051808303818588803b158015611ac457600080fd5b505af1158015611ad8573d6000803e3d6000fd5b50505050505050505050565b6000611b10827f1d1d8b63000000000000000000000000000000000000000000000000000000006123fb565b80611b405750611b40827fec4fc8e3000000000000000000000000000000000000000000000000000000006123fb565b92915050565b6000611b72837f1d1d8b63000000000000000000000000000000000000000000000000000000006123fb565b15611c1b578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be69190612f09565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611b40565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b409084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261241e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611db293929190613059565b60405180910390a461101a86868686868661252a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e27929190613097565b60405180910390a3610649848484846125b2565b6000806000835160208501868989f195945050505050565b33611e5c6110bb565b73ffffffffffffffffffffffffffffffffffffffff1614158015611e9d575033611e84611883565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611ed4576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600054610100900460ff16611f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161023a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b341561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161023a565b61205787611ae4565b156121a5576120668787611b46565b612118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161023a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b50505050612239565b6121c773ffffffffffffffffffffffffffffffffffffffff881686308661261f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546122059084906130b0565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61224787878787878661267d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a00000000000000000000000000000000000000000000000000000000906122ab908b908d908c908c908c908b906024016130c8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261233e92918790600401613014565b600060405180830381600087803b15801561235857600080fd5b505af115801561236c573d6000803e3d6000fd5b5050505050505050505050565b610a6087878787878787611fc0565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516123e7929190613097565b60405180910390a36106498484848461270b565b60006124068361276a565b8015612417575061241783836127ce565b9392505050565b6000612480826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661289d9092919063ffffffff16565b805190915015610b40578080602001905181019061249e9190612fa9565b610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161023a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516125a293929190613059565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612611929190613097565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106499085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611cb8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516126f593929190613059565b60405180910390a461101a8686868686866128b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612611929190613097565b6000612796827f01ffc9a7000000000000000000000000000000000000000000000000000000006127ce565b8015611b4057506127c7827fffffffff000000000000000000000000000000000000000000000000000000006127ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612886575060208210155b80156128925750600081115b979650505050505050565b60606128ac848460008561292c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516125a293929190613059565b6060824710156129be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161023a565b73ffffffffffffffffffffffffffffffffffffffff85163b612a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161023a565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612a659190613123565b60006040518083038185875af1925050503d8060008114612aa2576040519150601f19603f3d011682016040523d82523d6000602084013e612aa7565b606091505b509150915061289282828660608315612ac1575081612417565b825115612ad15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023a9190612e10565b73ffffffffffffffffffffffffffffffffffffffff81168114612b2757600080fd5b50565b60008083601f840112612b3c57600080fd5b50813567ffffffffffffffff811115612b5457600080fd5b602083019150836020828501011115612b6c57600080fd5b9250929050565b600080600080600080600060c0888a031215612b8e57600080fd5b8735612b9981612b05565b96506020880135612ba981612b05565b95506040880135612bb981612b05565b94506060880135612bc981612b05565b93506080880135925060a088013567ffffffffffffffff811115612bec57600080fd5b612bf88a828b01612b2a565b989b979a50959850939692959293505050565b803563ffffffff81168114612c1f57600080fd5b919050565b600080600060408486031215612c3957600080fd5b612c4284612c0b565b9250602084013567ffffffffffffffff811115612c5e57600080fd5b612c6a86828701612b2a565b9497909650939450505050565b600080600080600060808688031215612c8f57600080fd5b8535612c9a81612b05565b94506020860135612caa81612b05565b935060408601359250606086013567ffffffffffffffff811115612ccd57600080fd5b612cd988828901612b2a565b969995985093965092949392505050565b60008060408385031215612cfd57600080fd5b8235612d0881612b05565b91506020830135612d1881612b05565b809150509250929050565b600080600080600080600060c0888a031215612d3e57600080fd5b8735612d4981612b05565b96506020880135612d5981612b05565b95506040880135612d6981612b05565b945060608801359350612d7e60808901612c0b565b925060a088013567ffffffffffffffff811115612bec57600080fd5b60005b83811015612db5578181015183820152602001612d9d565b838111156106495750506000910152565b60008151808452612dde816020860160208601612d9a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124176020830184612dc6565b60008060008060008060a08789031215612e3c57600080fd5b8635612e4781612b05565b95506020870135612e5781612b05565b945060408701359350612e6c60608801612c0b565b9250608087013567ffffffffffffffff811115612e8857600080fd5b612e9489828a01612b2a565b979a9699509497509295939492505050565b60008060008060608587031215612ebc57600080fd5b8435612ec781612b05565b9350612ed560208601612c0b565b9250604085013567ffffffffffffffff811115612ef157600080fd5b612efd87828801612b2a565b95989497509550505050565b600060208284031215612f1b57600080fd5b815161241781612b05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f6757612f67612f26565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612fa457612fa4612f26565b500290565b600060208284031215612fbb57600080fd5b8151801515811461241757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261300a6080830184612dc6565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130436060830185612dc6565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061308e6060830184612dc6565b95945050505050565b8281526040602082015260006128ac6040830184612dc6565b600082198211156130c3576130c3612f26565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261311760c0830184612dc6565b98975050505050505050565b60008251613135818460208701612d9a565b919091019291505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x6b35cca790320593ad27960764db1d53a099eebc": { - "balance": "0x0", - "code": "0x60806040526004361061034a5760003560e01c80636f034409116101bb578063c0d8bb74116100f7578063dabd396d11610095578063f8f43ff61161006f578063f8f43ff614610aee578063fa24f74314610b0e578063fa315aa914610b32578063fe2bbeb214610b6557600080fd5b8063dabd396d14610a58578063ec5e630814610a8b578063eff0f59214610abe57600080fd5b8063cf09e0d0116100d1578063cf09e0d0146109d5578063d5d44d80146109f6578063d6ae3cd514610a16578063d8cc1a3c14610a3857600080fd5b8063c0d8bb7414610914578063c395e1ca14610941578063c6f0308c1461096157600080fd5b80638b85902b11610164578063a445ece61161013e578063a445ece614610805578063bbdc02db146108a5578063bcef3b55146108d2578063bd8da956146108f457600080fd5b80638b85902b146107c15780638d450a95146107e357806399735e32146107c157600080fd5b80637b0f0adc116101955780637b0f0adc146107915780638129fc1c146107a45780638980e0cc146107ac57600080fd5b80636f0344091461075457806370872aa514610767578063786b844b1461077c57600080fd5b80633e3ac9121161028a5780635a5fa2d911610233578063609d33341161020d578063609d3334146106ca57806360e27464146106df5780636361506d146106ff5780636b6716c01461072157600080fd5b80635a5fa2d9146106655780635c0cba33146106855780635e234947146106aa57600080fd5b8063529d6a8c11610264578063529d6a8c146105b957806354fd4d50146105e657806357da950e1461063557600080fd5b80633e3ac912146105515780633fc8cef314610581578063472777c6146105a657600080fd5b806325fc2ace116102f757806330dbe570116102d157806330dbe570146104b8578063378dd48c146104f057806337b1b2291461050a5780633a7684631461052c57600080fd5b806325fc2ace146104645780632810e1d6146104835780632ad69aeb1461049857600080fd5b8063200d2ed211610328578063200d2ed2146103dc578063222abf451461040a578063250e69bd1461044a57600080fd5b8063019351301461034f57806303c2924d1461037157806319effeb414610391575b600080fd5b34801561035b57600080fd5b5061036f61036a36600461553f565b610b95565b005b34801561037d57600080fd5b5061036f61038c36600461559a565b610e54565b34801561039d57600080fd5b506000546103be9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103e857600080fd5b506000546103fd90600160801b900460ff1681565b6040516103d391906155f3565b34801561041657600080fd5b5061043a61042536600461561b565b600c6020526000908152604090205460ff1681565b60405190151581526020016103d3565b34801561045657600080fd5b50600a5461043a9060ff1681565b34801561047057600080fd5b506008545b6040519081526020016103d3565b34801561048f57600080fd5b506103fd6113dc565b3480156104a457600080fd5b506104756104b336600461559a565b6115b4565b3480156104c457600080fd5b506001546104d8906001600160a01b031681565b6040516001600160a01b0390911681526020016103d3565b3480156104fc57600080fd5b50600d546103fd9060ff1681565b34801561051657600080fd5b503660011981013560f01c90033560601c6104d8565b34801561053857600080fd5b503660011981013560f01c90036098013560601c6104d8565b34801561055d57600080fd5b5060005461043a907201000000000000000000000000000000000000900460ff1681565b34801561058d57600080fd5b503660011981013560f01c900360c0013560601c6104d8565b61036f6105b4366004615638565b6115ea565b3480156105c557600080fd5b506104756105d436600461561b565b60036020526000908152604090205481565b3480156105f257600080fd5b5060408051808201909152600581527f322e332e3000000000000000000000000000000000000000000000000000000060208201525b6040516103d391906156cf565b34801561064157600080fd5b50600854600954610650919082565b604080519283526020830191909152016103d3565b34801561067157600080fd5b506104756106803660046156e2565b6115fc565b34801561069157600080fd5b503660011981013560f01c900360ac013560601c6104d8565b3480156106b657600080fd5b506104756106c53660046156e2565b611636565b3480156106d657600080fd5b50610628611697565b3480156106eb57600080fd5b5061036f6106fa36600461561b565b6116a5565b34801561070b57600080fd5b503660011981013560f01c900360340135610475565b34801561072d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000002a306103be565b61036f610762366004615709565b6119b6565b34801561077357600080fd5b50600954610475565b34801561078857600080fd5b5061036f612339565b61036f61079f366004615638565b612727565b61036f612734565b3480156107b857600080fd5b50600254610475565b3480156107cd57600080fd5b503660011981013560f01c900360580135610475565b3480156107ef57600080fd5b503660011981013560f01c900360780135610475565b34801561081157600080fd5b506108676108203660046156e2565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b031660608201526080016103d3565b3480156108b157600080fd5b506040513660011981013560f01c90036054013560e01c81526020016103d3565b3480156108de57600080fd5b503660011981013560f01c900360140135610475565b34801561090057600080fd5b506103be61090f3660046156e2565b612fcb565b34801561092057600080fd5b5061047561092f36600461561b565b600b6020526000908152604090205481565b34801561094d57600080fd5b5061047561095c36600461574a565b613165565b34801561096d57600080fd5b5061098161097c3660046156e2565b613326565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e0016103d3565b3480156109e157600080fd5b506000546103be9067ffffffffffffffff1681565b348015610a0257600080fd5b50610475610a1136600461561b565b61339a565b348015610a2257600080fd5b503660011981013560f01c900360d40135610475565b348015610a4457600080fd5b5061036f610a53366004615773565b6133f2565b348015610a6457600080fd5b507f0000000000000000000000000000000000000000000000000000000000049d406103be565b348015610a9757600080fd5b507f000000000000000000000000000000000000000000000000000000000000001e610475565b348015610aca57600080fd5b5061043a610ad93660046156e2565b60046020526000908152604090205460ff1681565b348015610afa57600080fd5b5061036f610b09366004615638565b613926565b348015610b1a57600080fd5b50610b23613ced565b6040516103d3939291906157ff565b348015610b3e57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000049610475565b348015610b7157600080fd5b5061043a610b803660046156e2565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610bb457610bb46155bc565b14610bd25760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c25576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c3e3660011981013560f01c90036014013590565b90565b610c55610c503686900386018661583a565b613d17565b14610c8c576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610ca19291906158ae565b604051809103902014610ce0576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d29610d2484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613d7392505050565b613de0565b90506000610d5082600881518110610d4357610d436158be565b6020026020010151613f96565b9050602081511115610d8e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605801358103610de5576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054600160801b900460ff166002811115610e7357610e736155bc565b14610e915760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610ea657610ea66158be565b906000526020600020906005020190506000610ec184612fcb565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d4081169082161015610f2a576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615610f73576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805480158015610f9057508515155b15610ff357835464010000000090046001600160a01b031660008115610fb65781610fc5565b60018601546001600160a01b03165b9050610fd1818761404a565b505050600094855250506006602052505060409020805460ff19166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b03166060830152611077576001600160801b036040820152600181526000869003611077578195505b600086826020015163ffffffff1661108f91906158ea565b905060008382116110a057816110a2565b835b602084015190915063ffffffff165b818110156111c25760008682815481106110cd576110cd6158be565b6000918252602080832090910154808352600690915260409091205490915060ff16611125576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061113a5761113a6158be565b60009182526020909120600590910201805490915064010000000090046001600160a01b03161580156111815750600481015460408701516001600160801b039182169116115b156111ad5760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b505080806111ba90615902565b9150506110b1565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909316929092179091558490036113d157606083015160008a8152600660205260409020805460ff191660011790558915801561130e57506000547201000000000000000000000000000000000000900460ff165b15611369576001546001600160a01b0316611329818a61404a565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556113cf565b6113966001600160a01b038216156113815781611390565b60018901546001600160a01b03165b8961404a565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b600080600054600160801b900460ff1660028111156113fd576113fd6155bc565b1461141b5760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661147f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b0316600260008154811061149e5761149e6158be565b600091825260209091206005909102015464010000000090046001600160a01b0316146114cc5760016114cf565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b836002811115611573576115736155bc565b021790556002811115611588576115886155bc565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b600560205281600052604060002081815481106115d057600080fd5b90600052602060002001600091509150505481565b905090565b6115f783838360016119b6565b505050565b6000818152600760209081526040808320600590925282208054825461162d90610100900463ffffffff168261591c565b95945050505050565b60003660011981013560f01c900360d401358214611680576040517f0da789df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003601401355b92915050565b60606115e56058602061408c565b6116ad612339565b60006002600d5460ff1660028111156116c8576116c86155bc565b036116ec57506001600160a01b0381166000908152600b602052604090205461175b565b6001600d5460ff166002811115611705576117056155bc565b0361172957506001600160a01b03811660009081526003602052604090205461175b565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff16611839576001600160a01b0382166000908152600c60205260409020805460ff191660011790556117b860c0600119369081013560f01c9003013560601c90565b6040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529190911690637eee288d90604401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b505050505050565b80600003611873576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600b6020908152604080832083905560039091528120553660011981013560f01c900360c0013560601c6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052919091169063f3fef3a390604401600060405180830381600087803b15801561191157600080fd5b505af1158015611925573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50509050806115f7576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054600160801b900460ff1660028111156119d5576119d56155bc565b146119f35760405163067fe19560e41b815260040160405180910390fd5b600060028481548110611a0857611a086158be565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514611acc576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000611b61826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611b9c5750611b997f000000000000000000000000000000000000000000000000000000000000001e60026158ea565b81145b8015611ba6575084155b15611bdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611c03575086155b15611c3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000049811115611c94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cbf7f000000000000000000000000000000000000000000000000000000000000001e60016158ea565b8103611cd157611cd1868885886140c0565b34611cdb83613165565b14611d12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d1d88612fcb565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d40811690821603611d85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611db260017f000000000000000000000000000000000000000000000000000000000000004961591c565b8303611ec8573660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c9190615933565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8d9190615950565b611ec1907f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff16615969565b9050611f5b565b611ef360017f000000000000000000000000000000000000000000000000000000000000001e61591c565b8303611f2e57611ec17f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615995565b507f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff165b611f8f817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff166159c5565b67ffffffffffffffff16611faa8367ffffffffffffffff1690565b67ffffffffffffffff161115611ff157611fee817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff166159c5565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff1615612066576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c8152602001908152602001600020600160028054905061225d919061591c565b81546001810183556000928352602080842090910191909155338252600b90526040812080543492906122919084906158ea565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122e357600080fd5b505af11580156122f7573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b6002600d5460ff166002811115612352576123526155bc565b148061237457506001600d5460ff166002811115612372576123726155bc565b145b1561237b57565b6000600d5460ff166002811115612394576123946155bc565b146123cb576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243f91906159ee565b15612476576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff166000036124d2576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003660011981013560f01c900360ac013560601c6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039190911690630314d2b390602401602060405180830381865afa158015612546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256a91906159ee565b9050806125a3576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906317cf21a990602401600060405180830381600087803b15801561261257600080fd5b505af1925050508015612623575060015b5060003660011981013560f01c900360ac013560601c6040517f496b9c160000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03919091169063496b9c1690602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc91906159ee565b905080156126d657600d805460ff191660011790556126e4565b600d805460ff191660021790555b600d546040517f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f9161271b9160ff909116906155f3565b60405180910390a15050565b6115f783838360006119b6565b60005471010000000000000000000000000000000000900460ff1615612786576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61278e61424f565b36146127c6576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000803660011981013560f01c900360ac013560601c6001600160a01b031663d83ef2676040518163ffffffff1660e01b81526004016040805180830381865afa158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c9190615a0b565b909250905081612878576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915282815260200181905260088290556009819055803660011981013560f01c900360580135116128f3576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036014013560048201526024015b60405180910390fd5b67ffffffffffffffff3660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129709190615933565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d19190615950565b1115612a09576040517fb4e1243300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612a407f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615a2f565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab89190615933565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b199190615950565b67ffffffffffffffff16612b547f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff1690565b67ffffffffffffffff16612b6891906158ea565b90506000612b76838361425d565b905067ffffffffffffffff811115612bba576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff161115612c32576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e08101825263ffffffff808252600060208084018281523660011981013560f01c90038035606090811c8789018181526001600160801b0334818116948b0194855260149095013560808b01908152600160a08c0181815242841660c08e019081526002805493840181558c529c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590930292830180549a5191909d167fffffffffffffffff000000000000000000000000000000000000000000000000909a16999099176401000000006001600160a01b039a8b160217909b5592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0820180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001691851691909117905593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015595519651968116600160801b9790911696909602959095177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101558154710100000000000000000000000000000000007fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff909116178255918152600b909152918220805491929091612e739084906158ea565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ec557600080fd5b505af1158015612ed9573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550612f1c9150612fb59050565b63ffffffff163660011981013560f01c900360ac013560601c6001600160a01b0316633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f969190615a4e565b600a805460ff191663ffffffff92909216929092141790555050505050565b3660011981013560f01c90036054013560e01c90565b600080600054600160801b900460ff166002811115612fec57612fec6155bc565b1461300a5760405163067fe19560e41b815260040160405180910390fd5b60006002838154811061301f5761301f6158be565b600091825260208220600590910201805490925063ffffffff9081161461308557815460028054909163ffffffff1690811061305d5761305d6158be565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b60048201546000906130b090600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b6130c49067ffffffffffffffff164261591c565b6130da6130a3846001600160801b031660401c90565b67ffffffffffffffff166130ee91906158ea565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff161161313b578061162d565b7f0000000000000000000000000000000000000000000000000000000000049d4095945050505050565b6000806131e2836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000049811115613241576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a300600061325c8383615a8a565b9050670de0b6b3a76400006000613293827f0000000000000000000000000000000000000000000000000000000000000049615a2f565b905060006132b16132ac670de0b6b3a764000086615a2f565b614276565b905060006132bf84846144c8565b905060006132cd8383614517565b905060006132da82614545565b905060006132f9826132f4670de0b6b3a76400008f615a2f565b61472d565b905060006133078b83614517565b9050613313818d615a2f565b9f9e505050505050505050505050505050565b6002818154811061333657600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b60006002600d5460ff1660028111156133b5576133b56155bc565b036133d657506001600160a01b03166000908152600b602052604090205490565b506001600160a01b031660009081526003602052604090205490565b60008054600160801b900460ff166002811115613411576134116155bc565b1461342f5760405163067fe19560e41b815260040160405180910390fd5b600060028781548110613444576134446158be565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b905061349a7f000000000000000000000000000000000000000000000000000000000000004960016158ea565b613514826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461354e576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915613619576135a17f000000000000000000000000000000000000000000000000000000000000001e7f000000000000000000000000000000000000000000000000000000000000004961591c565b6001901b6135b7846001600160801b031661475e565b6001600160801b03166135ca9190615a9e565b156135fe576135f56135e660016001600160801b038716615ab2565b865463ffffffff1660006147e4565b6003015461360f565b3660011981013560f01c9003607801355b915084905061363a565b600385015491506136376135e66001600160801b0386166001615ad2565b90505b600882901b60088a8a6040516136519291906158ae565b6040518091039020901b14613692576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061369d8c6148ad565b905060006136ac836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036098013560601c9063e14ced3290613702908f908f908f908f908a90600401615b3d565b6020604051808303816000875af1158015613721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137459190615950565b6004850154911491506000906002906137ce906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613848896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6138529190615b77565b61385c9190615b9a565b60ff16159050811515810361389d576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b0316156138e7576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054600160801b900460ff166002811115613945576139456155bc565b146139635760405163067fe19560e41b815260040160405180910390fd5b600080600080613972866148dc565b9350935093509350600061398885858585614c35565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a009190615933565b905060018903613acd576001600160a01b0381166352f0f3ad8a84613a313660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615950565b506113d1565b60028903613aec576001600160a01b0381166352f0f3ad8a8489613a31565b60038903613b0b576001600160a01b0381166352f0f3ad8a8487613a31565b60048903613c40576000613b486001600160801b0385167f000000000000000000000000000000000000000000000000000000000000001e614cd4565b600954613b5591906158ea565b613b609060016158ea565b90503660011981013560f01c9003605801358110613b8d573660011981013560f01c900360580135613b8f565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015613c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c399190615950565b50506113d1565b60058903613cbb576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390523660011981013560f01c900360d4013560c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a401613a84565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003605481013560e01c90601401356060613d10611697565b9050909192565b60008160000151826020015183604001518460600151604051602001613d56949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003613dc2576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000613df085614d69565b919450925090506001816001811115613e0b57613e0b6155bc565b14613e42576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451613e4e83856158ea565b14613e85576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613e9c5790505093506000835b8651811015613f8a57600080613f0f6040518060400160405280858c60000151613ef3919061591c565b8152602001858c60200151613f0891906158ea565b9052614d69565b509150915060405180604001604052808383613f2b91906158ea565b8152602001848b60200151613f4091906158ea565b815250888581518110613f5557613f556158be565b6020908102919091010152613f6b6001856158ea565b9350613f7781836158ea565b613f8190846158ea565b92505050613ec9565b50845250919392505050565b60606000806000613fa685614d69565b919450925090506000816001811115613fc157613fc16155bc565b14613ff8576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61400282846158ea565b85511461403b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61162d85602001518484615207565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b03909316929091906140839084906158ea565b90915550505050565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60006140d66001600160801b0384166001615ad2565b905060006140e6828660016147e4565b9050600086901a83806141b0575061411f60027f000000000000000000000000000000000000000000000000000000000000001e615a9e565b60048301546002906141a1906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6141ab9190615b9a565b60ff16145b156142085760ff8116600114806141ca575060ff81166002145b614203576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016128ea565b614246565b60ff811615614246576040517ff40239db000000000000000000000000000000000000000000000000000000008152600481018890526024016128ea565b50505050505050565b60006115e560f460066158ea565b60008183101561426d578161426f565b825b9392505050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136142cc57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261450557637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156145355763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361457357919050565b680755bf798b4a1bf1e582126145915763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061426f670de0b6b3a76400008361474586614276565b61474f9190615bbc565b6147599190615c78565b614545565b6000806147d2837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826148245761481f6001600160801b0386167f000000000000000000000000000000000000000000000000000000000000001e61529b565b614836565b614836856001600160801b03166153da565b90506002848154811061484b5761484b6158be565b906000526020600020906005020191505b60048201546001600160801b038281169116146148a557815460028054909163ffffffff16908110614890576148906158be565b9060005260206000209060050201915061485c565b509392505050565b60008060008060006148be866148dc565b93509350935093506148d284848484614c35565b9695505050505050565b60008060008060008590506000600282815481106148fc576148fc6158be565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000001e906149b1906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116149eb576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000001e90614a90906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169250821115614b0557825463ffffffff16614acf7f000000000000000000000000000000000000000000000000000000000000001e60016158ea565b8303614ad9578391505b60028181548110614aec57614aec6158be565b90600052602060002090600502019350809450506149ef565b600481810154908401546001600160801b0391821691166000816001600160801b0316614b4a614b3e856001600160801b031660011c90565b6001600160801b031690565b6001600160801b03161490508015614be3576000614b70836001600160801b031661475e565b6001600160801b03161115614bc0576000614ba0614b9860016001600160801b038616615ab2565b8960016147e4565b6003810154600490910154909c506001600160801b03169a50614bc69050565b6008549a505b600386015460048701549099506001600160801b03169750614c27565b6000614bfc614b986001600160801b0385166001615ad2565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b03841615614c905760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a0016040516020818303038152906040528051906020012061162d565b8282604051602001614cb59291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614d48847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614dac576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614dd1576000600160009450945094505050615200565b60b78111614ee7576000614de660808361591c565b905080876000015111614e25576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614e9d57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614ed4576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250615200915050565b60bf8111615045576000614efc60b78361591c565b905080876000015111614f3b576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614f9d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614fe5576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614fef81846158ea565b895111615028576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6150338360016158ea565b97509550600094506152009350505050565b60f781116150aa57600061505a60c08361591c565b905080876000015111615099576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250615200915050565b60006150b760f78361591c565b9050808760000151116150f6576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003615158576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c603781116151a0576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6151aa81846158ea565b8951116151e3576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6151ee8360016158ea565b97509550600194506152009350505050565b9193909250565b60608167ffffffffffffffff81111561522257615222615824565b6040519080825280601f01601f19166020018201604052801561524c576020820181803683370190505b509050811561426f57600061526184866158ea565b90506020820160005b8481101561528257828101518282015260200161526a565b84811115615291576000858301525b5050509392505050565b600081615318846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161532e5763b34b5c226000526004601cfd5b615337836153da565b9050816153b4826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116116915761426f6153ca8360016158ea565b6001600160801b03831690615466565b60008119600183011681615455827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806154da847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261550857600080fd5b50813567ffffffffffffffff81111561552057600080fd5b60208301915083602082850101111561553857600080fd5b9250929050565b600080600083850360a081121561555557600080fd5b608081121561556357600080fd5b50839250608084013567ffffffffffffffff81111561558157600080fd5b61558d868287016154f6565b9497909650939450505050565b600080604083850312156155ad57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106155f057634e487b7160e01b600052602160045260246000fd5b50565b60208101615600836155d2565b91905290565b6001600160a01b03811681146155f057600080fd5b60006020828403121561562d57600080fd5b813561426f81615606565b60008060006060848603121561564d57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561568a5760208185018101518683018201520161566e565b8181111561569c576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061426f6020830184615664565b6000602082840312156156f457600080fd5b5035919050565b80151581146155f057600080fd5b6000806000806080858703121561571f57600080fd5b843593506020850135925060408501359150606085013561573f816156fb565b939692955090935050565b60006020828403121561575c57600080fd5b81356001600160801b038116811461426f57600080fd5b6000806000806000806080878903121561578c57600080fd5b86359550602087013561579e816156fb565b9450604087013567ffffffffffffffff808211156157bb57600080fd5b6157c78a838b016154f6565b909650945060608901359150808211156157e057600080fd5b506157ed89828a016154f6565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061162d6060830184615664565b634e487b7160e01b600052604160045260246000fd5b60006080828403121561584c57600080fd5b6040516080810181811067ffffffffffffffff8211171561587d57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156158fd576158fd6158d4565b500190565b60006000198203615915576159156158d4565b5060010190565b60008282101561592e5761592e6158d4565b500390565b60006020828403121561594557600080fd5b815161426f81615606565b60006020828403121561596257600080fd5b5051919050565b600067ffffffffffffffff80831681851680830382111561598c5761598c6158d4565b01949350505050565b600067ffffffffffffffff808316818516818304811182151516156159bc576159bc6158d4565b02949350505050565b600067ffffffffffffffff838116908316818110156159e6576159e66158d4565b039392505050565b600060208284031215615a0057600080fd5b815161426f816156fb565b60008060408385031215615a1e57600080fd5b505080516020909101519092909150565b6000816000190483118215151615615a4957615a496158d4565b500290565b600060208284031215615a6057600080fd5b815163ffffffff8116811461426f57600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615a9957615a99615a74565b500490565b600082615aad57615aad615a74565b500690565b60006001600160801b03838116908316818110156159e6576159e66158d4565b60006001600160801b0380831681851680830382111561598c5761598c6158d4565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615b51606083018789615af4565b8281036020840152615b64818688615af4565b9150508260408301529695505050505050565b600060ff821660ff841680821015615b9157615b916158d4565b90039392505050565b600060ff831680615bad57615bad615a74565b8060ff84160691505092915050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bfd57615bfd6158d4565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c3857615c386158d4565b60008712925087820587128484161615615c5457615c546158d4565b87850587128184161615615c6a57615c6a6158d4565b505050929093029392505050565b600082615c8757615c87615a74565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615cbd57615cbd6158d4565b50059056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x6b9e85984d5c58bb898d3e43a0ba4dee8d65b2ab": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f0001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000784d2f03593a42a6e4676a012762f18775ecbbe6", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5", - "0xb6f1374979fddd07a4d496dc3b0973244af6697958fc088175277086eb729144": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "0x6d46535c721a7721e5975790aa97f793a438ed4c": { - "balance": "0x0", - "code": "0x60806040526004361061016a5760003560e01c80636d1d99fb116100cb57806396cd97201161007f578063c4d66de811610059578063c4d66de8146104dc578063dad544e0146104fc578063f2fde38b1461051157600080fd5b806396cd97201461043b578063b10709571461045b578063bb8aa1fc1461047b57600080fd5b806374cc86ac116100b057806374cc86ac146103dd57806382ecf2f6146103fd5780638da5cb5b1461041057600080fd5b80636d1d99fb14610395578063715018a6146103c857600080fd5b80633e47158c1161012257806354fd4d501161010757806354fd4d50146102bd5780635f0150cb146103135780636593dc6e1461036857600080fd5b80633e47158c146102895780634d1975b41461029e57600080fd5b80631e334240116101535780631e334240146101fe578063254bd6831461021e57806338d38c971461024b57600080fd5b806314f6b1a31461016f5780631b685b9e14610191575b600080fd5b34801561017b57600080fd5b5061018f61018a3660046116f0565b610531565b005b34801561019d57600080fd5b506101d46101ac366004611729565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561020a57600080fd5b5061018f610219366004611746565b6105bb565b34801561022a57600080fd5b5061023e610239366004611772565b610607565b6040516101f59190611821565b34801561025757600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000011681526020016101f5565b34801561029557600080fd5b506101d461084b565b3480156102aa57600080fd5b506068545b6040519081526020016101f5565b3480156102c957600080fd5b506103066040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f591906118de565b34801561031f57600080fd5b5061033361032e36600461193a565b610a56565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff9091166020830152016101f5565b34801561037457600080fd5b506102af610383366004611729565b60666020526000908152604090205481565b3480156103a157600080fd5b506102af6103b0366004611729565b63ffffffff1660009081526066602052604090205490565b3480156103d457600080fd5b5061018f610aa9565b3480156103e957600080fd5b506103066103f8366004611729565b610abd565b6101d461040b36600461193a565b610b57565b34801561041c57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166101d4565b34801561044757600080fd5b506102af61045636600461193a565b610e62565b34801561046757600080fd5b5061018f610476366004611996565b610e9b565b34801561048757600080fd5b5061049b6104963660046119e3565b610f9b565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff16908201526060016101f5565b3480156104e857600080fd5b5061018f6104f73660046119fc565b611004565b34801561050857600080fd5b506101d461117c565b34801561051d57600080fd5b5061018f61052c3660046119fc565b6111f9565b6105396112b0565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b6105c36112b0565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b60685460609083101580610619575081155b610844575060408051600583901b8101602001909152825b8381116108425760006068828154811061064d5761064d611a19565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff89168303610813576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa1580156106e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261072d9190810190611a77565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190611b42565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a516107e29190611b8a565b815181106107f2576107f2611a19565b60200260200101819052508888511061081057505050505050610842565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506106319050565b505b9392505050565b6000806108767fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561089957919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026108dc9190611ba1565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610937906060015b604051602081830303815290604052805190602001205490565b1461096e576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906109909060600161091d565b905073ffffffffffffffffffffffffffffffffffffffff811615610a24578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d9190611bde565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000610a6787878787610e62565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b610ab16112b0565b610abb6000611331565b565b60696020526000908152604090208054610ad690611bfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0290611bfb565b8015610b4f5780601f10610b2457610100808354040283529160200191610b4f565b820191906000526020600020905b815481529060010190602001808311610b3257829003601f168201915b505050505081565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610bc7576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b63ffffffff86166000908152606660205260409020543414610c15576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c22600143611b8a565b63ffffffff8816600090815260696020526040902080549140925090610c4790611bfb565b9050600003610cbe57610cb73387838888604051602001610c6c959493929190611c4e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff8416906113a8565b9250610cff565b610cfc3387838a8989606960008f63ffffffff1663ffffffff168152602001908152602001600020604051602001610c6c9796959493929190611c9b565b92505b8273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b50505050506000610d6e88888888610e62565b60008181526067602052604090205490915015610dba576040517f014f6fe500000000000000000000000000000000000000000000000000000000815260048101829052602401610bbe565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b600084848484604051602001610e7b9493929190611df9565b604051602081830303815290604052805190602001209050949350505050565b610ea36112b0565b63ffffffff8416600090815260656020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905560699091529020610f0b828483611e78565b5060405163ffffffff85169073ffffffffffffffffffffffffffffffffffffffff8516907fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de90600090a38363ffffffff167fa47fcdf075d680d3817bfca7973b373e1a5f6cfc3b444748299cc2b83d8348f98383604051610f8d929190611f93565b60405180910390a250505050565b600080600080600080610ff460688881548110610fba57610fba611a19565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9199909850909650945050505050565b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015611044575060005460ff8083169116105b6110d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bbe565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556111096113b6565b611111611437565b61111a82611331565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061118661084b565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190611bde565b905090565b6112016112b0565b73ffffffffffffffffffffffffffffffffffffffff81166112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bbe565b6112ad81611331565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbe565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610844600084846114d6565b336113bf61084b565b73ffffffffffffffffffffffffffffffffffffffff16141580156114005750336113e761117c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bbe565b610abb61161c565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf0975050866115a25763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff166116b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bbe565b610abb33611331565b63ffffffff811681146112ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146112ad57600080fd5b6000806040838503121561170357600080fd5b823561170e816116bc565b9150602083013561171e816116ce565b809150509250929050565b60006020828403121561173b57600080fd5b8135610844816116bc565b6000806040838503121561175957600080fd5b8235611764816116bc565b946020939093013593505050565b60008060006060848603121561178757600080fd5b8335611792816116bc565b95602085013595506040909401359392505050565b60005b838110156117c25781810151838201526020016117aa565b838111156117d1576000848401525b50505050565b600081518084526117ef8160208601602086016117a7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156118d0578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906118bc818601836117d7565b968901969450505090860190600101611848565b509098975050505050505050565b60208152600061084460208301846117d7565b60008083601f84011261190357600080fd5b50813567ffffffffffffffff81111561191b57600080fd5b60208301915083602082850101111561193357600080fd5b9250929050565b6000806000806060858703121561195057600080fd5b843561195b816116bc565b935060208501359250604085013567ffffffffffffffff81111561197e57600080fd5b61198a878288016118f1565b95989497509550505050565b600080600080606085870312156119ac57600080fd5b84356119b7816116bc565b935060208501356119c7816116ce565b9250604085013567ffffffffffffffff81111561197e57600080fd5b6000602082840312156119f557600080fd5b5035919050565b600060208284031215611a0e57600080fd5b8135610844816116ce565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611a8957600080fd5b815167ffffffffffffffff80821115611aa157600080fd5b818401915084601f830112611ab557600080fd5b815181811115611ac757611ac7611a48565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b0d57611b0d611a48565b81604052828152876020848701011115611b2657600080fd5b611b378360208301602088016117a7565b979650505050505050565b600060208284031215611b5457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611b9c57611b9c611b5b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611bd957611bd9611b5b565b500290565b600060208284031215611bf057600080fd5b8151610844816116ce565b600181811c90821680611c0f57607f821691505b602082108103611c48577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1681528660148201528560348201527fffffffff000000000000000000000000000000000000000000000000000000008560e01b166054820152600060588486828501378483018181016000815260008654611d1b81611bfb565b60018281168015611d335760018114611d6857611d9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841686528783151584028801019450611d9b565b8a60005260208060002060005b85811015611d905781548a82018c0152908401908201611d75565b505050878388010194505b50929f9e505050505050505050505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff85168152836020820152606060408201526000611e1f606083018486611db0565b9695505050505050565b601f821115611e7357600081815260208120601f850160051c81016020861015611e505750805b601f850160051c820191505b81811015611e6f57828155600101611e5c565b5050505b505050565b67ffffffffffffffff831115611e9057611e90611a48565b611ea483611e9e8354611bfb565b83611e29565b6000601f841160018114611ef65760008515611ec05750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611f8c565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015611f455786850135825560209485019460019092019101611f25565b5086821015611f80577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b602081526000611fa7602083018486611db0565b94935050505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x7096758bdd076a4cc42255c278f2cb216d6d8ce3": { - "balance": "0x0", - "code": "0xfe7100608060405234801561001057600080fd5b506040516105f03803806105f083398101604081905261002f91610088565b30600090815260016020908152604080832080546001600160a01b0319166001600160a01b03871617905590829052902061006a8282610203565b5050506102c2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b82516001600160a01b03811681146100b257600080fd5b602084810151919350906001600160401b03808211156100d157600080fd5b818601915086601f8301126100e557600080fd5b8151818111156100f7576100f7610072565b604051601f8201601f19908116603f0116810190838211818310171561011f5761011f610072565b81604052828152898684870101111561013757600080fd5b600093505b82841015610159578484018601518185018701529285019261013c565b8284111561016a5760008684830101525b8096505050505050509250929050565b600181811c9082168061018e57607f821691505b6020821081036101ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fe57600081815260208120601f850160051c810160208610156101db5750805b601f850160051c820191505b818110156101fa578281556001016101e7565b5050505b505050565b81516001600160401b0381111561021c5761021c610072565b6102308161022a845461017a565b846101b4565b602080601f831160018114610265576000841561024d5750858301515b600019600386901b1c1916600185901b1785556101fa565b600085815260208120601f198616915b8281101561029457888601518255948401946001909101908401610275565b50858210156102b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61031f806102d16000396000f3fe608060408181523060009081526001602090815282822054908290529181207fbf40fac1000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061006d9060846101e2565b602060405180830381865afa15801561008a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ae91906102c5565b905073ffffffffffffffffffffffffffffffffffffffff8116610157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5265736f6c76656444656c656761746550726f78793a2074617267657420616460448201527f6472657373206d75737420626520696e697469616c697a656400000000000000606482015260840160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16600036604051610182929190610302565b600060405180830381855af49150503d80600081146101bd576040519150601f19603f3d011682016040523d82523d6000602084013e6101c2565b606091505b5090925090508115156001036101da57805160208201f35b805160208201fd5b600060208083526000845481600182811c91508083168061020457607f831692505b858310810361023a577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b878601838152602001818015610257576001811461028b576102b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616825284151560051b820196506102b6565b60008b81526020902060005b868110156102b057815484820152908501908901610297565b83019750505b50949998505050505050505050565b6000602082840312156102d757600080fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102fb57600080fd5b9392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x70997970c51812dc3a010c7d01b50e0d17dc79c8": { - "balance": "0x100000000000000000000000000000000000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x70e0ba845a1a0f2da3359c97e0285013525ffc49": { - "balance": "0x0", - "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906", - "0xd5083275ec75787421c0e342c563da1cfdf527bc4ff34722d89fbe983e1eca88": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - }, - "0x74f1ac50eb0be98853805d381c884f5f9abdecf9": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80635c975abb11610097578063927ede2d11610066578063927ede2d1461029e578063aa557452146102bc578063c89701a2146102cf578063dad544e0146102ef57600080fd5b80635c975abb146102215780635d93a3fc14610239578063761f44931461026d5780637f46ddb21461028057600080fd5b80633cb747bf116100d35780633cb747bf1461019d5780633e47158c146101bd578063485cc955146101c557806354fd4d50146101d857600080fd5b806333d7e2bd1461010557806335e80ab31461014f5780633687011a1461015757806338d38c971461016c575b600080fd5b6033546101259073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101256102f7565b61016a6101653660046113be565b610390565b005b60405160ff7f0000000000000000000000000000000000000000000000000000000000000003168152602001610146565b6001546101259073ffffffffffffffffffffffffffffffffffffffff1681565b610125610441565b61016a6101d3366004611441565b61064c565b6102146040518060400160405280600581526020017f322e392e3000000000000000000000000000000000000000000000000000000081525081565b60405161014691906114e5565b610229610812565b6040519015158152602001610146565b6102296102473660046114ff565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61016a61027b366004611540565b6108a6565b60025473ffffffffffffffffffffffffffffffffffffffff16610125565b60015473ffffffffffffffffffffffffffffffffffffffff16610125565b61016a6102ca3660046115d8565b610d4d565b6002546101259073ffffffffffffffffffffffffffffffffffffffff1681565b610125610e09565b603354604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015610367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b919061164f565b905090565b610398610e5d565b610429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104398686333388888888610e9a565b505050505050565b60008061046c7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561048f57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026104d2919061166c565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061052d906060015b604051602081830303815290604052805190602001205490565b14610564576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061058690606001610513565b905073ffffffffffffffffffffffffffffffffffffffff81161561061a578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610613919061164f565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff1615801561068c575060005460ff8083169116105b610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610420565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556107516111ca565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556107af8373420000000000000000000000000000000000001461124d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b603354604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610882573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038b91906116d0565b60015473ffffffffffffffffffffffffffffffffffffffff163314801561097b5750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561093f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610963919061164f565b73ffffffffffffffffffffffffffffffffffffffff16145b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f7468657220627269646765006064820152608401610420565b610a0f610812565b15610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a20706175736564000000000000000000006044820152606401610420565b3073ffffffffffffffffffffffffffffffffffffffff881603610b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c66000000000000000000000000000000000000000000006064820152608401610420565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff161515600114610bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c3120427269646765000000000000006064820152608401610420565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b158015610caa57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610d3c949392919061173b565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610df0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f742062652061646472657373283029000000000000000000000000000000006064820152608401610420565b610e008787338888888888610e9a565b50505050505050565b6000610e13610441565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610367573d6000803e3d6000fd5b6000323303610e6c5750600190565b333b601703610e9457604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b73ffffffffffffffffffffffffffffffffffffffff8716610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f7420626520616464726573732830290000000000000000000000000000006064820152608401610420565b600087898888888787604051602401610f5c979695949392919061177b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f761f44930000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603184528481208e8416825284528481208b82529093529183902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905591517f23b872dd000000000000000000000000000000000000000000000000000000008152918a166004830152306024830152604482018890529192506323b872dd90606401600060405180830381600087803b15801561109457600080fd5b505af11580156110a8573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b935061110b9290911690859089906004016117d8565b600060405180830381600087803b15801561112557600080fd5b505af1158015611139573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5898988886040516111b7949392919061173b565b60405180910390a4505050505050505050565b336111d3610441565b73ffffffffffffffffffffffffffffffffffffffff16141580156112145750336111fb610e09565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561124b576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600054610100900460ff166112e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610420565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff8116811461135957600080fd5b50565b803563ffffffff8116811461137057600080fd5b919050565b60008083601f84011261138757600080fd5b50813567ffffffffffffffff81111561139f57600080fd5b6020830191508360208285010111156113b757600080fd5b9250929050565b60008060008060008060a087890312156113d757600080fd5b86356113e281611337565b955060208701356113f281611337565b9450604087013593506114076060880161135c565b9250608087013567ffffffffffffffff81111561142357600080fd5b61142f89828a01611375565b979a9699509497509295939492505050565b6000806040838503121561145457600080fd5b823561145f81611337565b9150602083013561146f81611337565b809150509250929050565b6000815180845260005b818110156114a057602081850181015186830182015201611484565b818111156114b2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006114f8602083018461147a565b9392505050565b60008060006060848603121561151457600080fd5b833561151f81611337565b9250602084013561152f81611337565b929592945050506040919091013590565b600080600080600080600060c0888a03121561155b57600080fd5b873561156681611337565b9650602088013561157681611337565b9550604088013561158681611337565b9450606088013561159681611337565b93506080880135925060a088013567ffffffffffffffff8111156115b957600080fd5b6115c58a828b01611375565b989b979a50959850939692959293505050565b600080600080600080600060c0888a0312156115f357600080fd5b87356115fe81611337565b9650602088013561160e81611337565b9550604088013561161e81611337565b9450606088013593506116336080890161135c565b925060a088013567ffffffffffffffff8111156115b957600080fd5b60006020828403121561166157600080fd5b81516114f881611337565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500290565b6000602082840312156116e257600080fd5b815180151581146114f857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006117716060830184866116f2565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526117cb60c0830184866116f2565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611807606083018561147a565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x765c6637a370595845f637739279c353484a26a6": { - "balance": "0x0", - "code": "0xfe7100608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105ef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x784d2f03593a42a6e4676a012762f18775ecbbe6": { - "balance": "0x0", - "code": "0x6080604052600436106100f35760003560e01c8063438ab5ac1161008a5780638d445bd0116100595780638d445bd0146102e0578063946d920414610300578063b2db82f514610320578063dad544e01461034057600080fd5b8063438ab5ac1461023f57806354fd4d501461025f5780635c975abb146102ab5780635ec15d89146102c057600080fd5b806333d7e2bd116100c657806333d7e2bd1461017f57806335e80ab3146101d757806338d38c97146101ec5780633e47158c1461022a57600080fd5b80630fd11077146100f85780631ee116bf1461013d578063225ce1761461014757806330f9765d14610177575b600080fd5b34801561010457600080fd5b506101286101133660046110e0565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610145610355565b005b34801561015357600080fd5b506101286101623660046110e0565b60026020526000908152604090205460ff1681565b6101456103f1565b34801561018b57600080fd5b506000546101b29062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610134565b3480156101e357600080fd5b506101b2610482565b3480156101f857600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610134565b34801561023657600080fd5b506101b2610519565b34801561024b57600080fd5b5061014561025a3660046110e0565b610724565b34801561026b57600080fd5b50604080518082018252600581527f312e322e30000000000000000000000000000000000000000000000000000000602082015290516101349190611104565b3480156102b757600080fd5b506101286107ef565b3480156102cc57600080fd5b506101456102db3660046110e0565b610881565b3480156102ec57600080fd5b506101456102fb366004611177565b610909565b34801561030c57600080fd5b5061014561031b366004611190565b610b49565b34801561032c57600080fd5b5061014561033b3660046110e0565b610d46565b34801561034c57600080fd5b506101b2610d5a565b3360008181526001602052604090205460ff1661039e576040517f665a1d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f97efc519b9020a140ffe13878e03d340b976676090bc7fe3e33191192df7c72c346040516103e691815260200190565b60405180910390a250565b3360008181526002602052604090205460ff1661043a576040517f665a1d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fb58278ed56aa79ad2e243963b44b165a8f76d629f61c01dd3649d658e0eacca4346040516103e691815260200190565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611218565b905090565b6000806105447fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561056757919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026105aa9190611264565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610605906060015b604051602081830303815290604052805190602001205490565b1461063c576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061065e906060016105eb565b905073ffffffffffffffffffffffffffffffffffffffff8116156106f2578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106eb9190611218565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61072c610dae565b61073581610e06565b60004790508173ffffffffffffffffffffffffffffffffffffffff166330f9765d826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b50505050508173ffffffffffffffffffffffffffffffffffffffff167f87eb4064140fbec95a8de570e01b4c650c00ecd677560af9f298a975b636c22d826040516107e391815260200190565b60405180910390a25050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906112a1565b610889610dae565b61089281610e06565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f5d2682e700a2146c8e2381e0b407003576a54e96dd08f40f3ea0d2b8706db1069190a250565b6109116107ef565b15610948576040517f9e72994200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526001602052604090205460ff16610991576040517f665a1d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b478211156109cb576040517fe1ba922700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a539190611218565b73ffffffffffffffffffffffffffffffffffffffff1614610aa0576040517fd6cbd5f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16638b4c40b0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ae857600080fd5b505af1158015610afc573d6000803e3d6000fd5b50505050508073ffffffffffffffffffffffffffffffffffffffff167fe9512d49448b580f3d29031e9243ee81bc8789a93d6f04ec8f03b694d623637b836040516107e391815260200190565b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015610b89575060005460ff8083169116105b610c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610c52610ee0565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8716021781555b82811015610ce157610ccf848483818110610cb557610cb56112c3565b9050602002016020810190610cca91906110e0565b610f61565b80610cd9816112f2565b915050610c98565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b610d4e610dae565b610d5781610f61565b50565b6000610d64610519565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b33610db7610d5a565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8073ffffffffffffffffffffffffffffffffffffffff1663dad544e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190611218565b73ffffffffffffffffffffffffffffffffffffffff16610e93610d5a565b73ffffffffffffffffffffffffffffffffffffffff1614610d57576040517f075c431400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33610ee9610519565b73ffffffffffffffffffffffffffffffffffffffff1614158015610f2a575033610f11610d5a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610e04576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f6a81610e06565b610f72610482565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff79190611218565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f84ab551500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517f90a7fac2e56aebe4889351fb04eda5efb28b19dedf288bdbfd3cfd817c79630f9190a250565b73ffffffffffffffffffffffffffffffffffffffff81168114610d5757600080fd5b6000602082840312156110f257600080fd5b81356110fd816110be565b9392505050565b600060208083528351808285015260005b8181101561113157858101830151858201604001528201611115565b81811115611143576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561118957600080fd5b5035919050565b6000806000604084860312156111a557600080fd5b83356111b0816110be565b9250602084013567ffffffffffffffff808211156111cd57600080fd5b818601915086601f8301126111e157600080fd5b8135818111156111f057600080fd5b8760208260051b850101111561120557600080fd5b6020830194508093505050509250925092565b60006020828403121561122a57600080fd5b81516110fd816110be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561129c5761129c611235565b500290565b6000602082840312156112b357600080fd5b815180151581146110fd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361132357611323611235565b506001019056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x7b57e3025d0c33ac2c0cc44ac915650895a619d3": { - "balance": "0x0", - "code": "0x6080604052600436106103605760003560e01c80636f034409116101c6578063c0d8bb74116100f7578063dabd396d11610095578063f8f43ff61161006f578063f8f43ff614610b3e578063fa24f74314610b5e578063fa315aa914610b82578063fe2bbeb214610bb557600080fd5b8063dabd396d14610aa8578063ec5e630814610adb578063eff0f59214610b0e57600080fd5b8063cf09e0d0116100d1578063cf09e0d014610a25578063d5d44d8014610a46578063d6ae3cd514610a66578063d8cc1a3c14610a8857600080fd5b8063c0d8bb7414610964578063c395e1ca14610991578063c6f0308c146109b157600080fd5b80638d450a9511610164578063a8e4fb901161013e578063a8e4fb90146108d0578063bbdc02db146108f5578063bcef3b5514610922578063bd8da9561461094457600080fd5b80638d450a951461080e57806399735e32146107ec578063a445ece61461083057600080fd5b80637b0f0adc116101a05780637b0f0adc146107bc5780638129fc1c146107cf5780638980e0cc146107d75780638b85902b146107ec57600080fd5b80636f0344091461077f57806370872aa514610792578063786b844b146107a757600080fd5b80633e3ac912116102a05780635a5fa2d91161023e578063609d333411610218578063609d3334146106f557806360e274641461070a5780636361506d1461072a5780636b6716c01461074c57600080fd5b80635a5fa2d9146106905780635c0cba33146106b05780635e234947146106d557600080fd5b8063529d6a8c1161027a578063529d6a8c146105cf578063534db0e2146105fc57806354fd4d501461061157806357da950e1461066057600080fd5b80633e3ac912146105675780633fc8cef314610597578063472777c6146105bc57600080fd5b806325fc2ace1161030d57806330dbe570116102e757806330dbe570146104ce578063378dd48c1461050657806337b1b229146105205780633a7684631461054257600080fd5b806325fc2ace1461047a5780632810e1d6146104995780632ad69aeb146104ae57600080fd5b8063200d2ed21161033e578063200d2ed2146103f2578063222abf4514610420578063250e69bd1461046057600080fd5b8063019351301461036557806303c2924d1461038757806319effeb4146103a7575b600080fd5b34801561037157600080fd5b5061038561038036600461571f565b610be5565b005b34801561039357600080fd5b506103856103a236600461577a565b610ea4565b3480156103b357600080fd5b506000546103d49068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103fe57600080fd5b5060005461041390600160801b900460ff1681565b6040516103e991906157d3565b34801561042c57600080fd5b5061045061043b3660046157fb565b600c6020526000908152604090205460ff1681565b60405190151581526020016103e9565b34801561046c57600080fd5b50600a546104509060ff1681565b34801561048657600080fd5b506008545b6040519081526020016103e9565b3480156104a557600080fd5b5061041361142c565b3480156104ba57600080fd5b5061048b6104c936600461577a565b611604565b3480156104da57600080fd5b506001546104ee906001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b34801561051257600080fd5b50600d546104139060ff1681565b34801561052c57600080fd5b503660011981013560f01c90033560601c6104ee565b34801561054e57600080fd5b503660011981013560f01c90036098013560601c6104ee565b34801561057357600080fd5b50600054610450907201000000000000000000000000000000000000900460ff1681565b3480156105a357600080fd5b503660011981013560f01c900360c0013560601c6104ee565b6103856105ca366004615818565b61163a565b3480156105db57600080fd5b5061048b6105ea3660046157fb565b60036020526000908152604090205481565b34801561060857600080fd5b506104ee61164c565b34801561061d57600080fd5b5060408051808201909152600581527f322e332e3000000000000000000000000000000000000000000000000000000060208201525b6040516103e991906158af565b34801561066c57600080fd5b5060085460095461067b919082565b604080519283526020830191909152016103e9565b34801561069c57600080fd5b5061048b6106ab3660046158c2565b611671565b3480156106bc57600080fd5b503660011981013560f01c900360ac013560601c6104ee565b3480156106e157600080fd5b5061048b6106f03660046158c2565b6116ab565b34801561070157600080fd5b5061065361170c565b34801561071657600080fd5b506103856107253660046157fb565b61171a565b34801561073657600080fd5b503660011981013560f01c90036034013561048b565b34801561075857600080fd5b507f0000000000000000000000000000000000000000000000000000000000002a306103d4565b61038561078d3660046158e9565b611a2b565b34801561079e57600080fd5b5060095461048b565b3480156107b357600080fd5b50610385611aab565b6103856107ca366004615818565b611e99565b610385611ea6565b3480156107e357600080fd5b5060025461048b565b3480156107f857600080fd5b503660011981013560f01c90036058013561048b565b34801561081a57600080fd5b503660011981013560f01c90036078013561048b565b34801561083c57600080fd5b5061089261084b3660046158c2565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b031660608201526080016103e9565b3480156108dc57600080fd5b503660011981013560f01c900360f4013560601c6104ee565b34801561090157600080fd5b506040513660011981013560f01c90036054013560e01c81526020016103e9565b34801561092e57600080fd5b503660011981013560f01c90036014013561048b565b34801561095057600080fd5b506103d461095f3660046158c2565b611f11565b34801561097057600080fd5b5061048b61097f3660046157fb565b600b6020526000908152604090205481565b34801561099d57600080fd5b5061048b6109ac36600461592a565b6120ab565b3480156109bd57600080fd5b506109d16109cc3660046158c2565b61226c565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e0016103e9565b348015610a3157600080fd5b506000546103d49067ffffffffffffffff1681565b348015610a5257600080fd5b5061048b610a613660046157fb565b6122e0565b348015610a7257600080fd5b503660011981013560f01c900360d4013561048b565b348015610a9457600080fd5b50610385610aa3366004615953565b612338565b348015610ab457600080fd5b507f0000000000000000000000000000000000000000000000000000000000049d406103d4565b348015610ae757600080fd5b507f000000000000000000000000000000000000000000000000000000000000001e61048b565b348015610b1a57600080fd5b50610450610b293660046158c2565b60046020526000908152604090205460ff1681565b348015610b4a57600080fd5b50610385610b59366004615818565b6123b4565b348015610b6a57600080fd5b50610b7361277b565b6040516103e9939291906159df565b348015610b8e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000004961048b565b348015610bc157600080fd5b50610450610bd03660046158c2565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610c0457610c0461579c565b14610c225760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c75576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8e3660011981013560f01c90036014013590565b90565b610ca5610ca036869003860186615a1a565b6127a5565b14610cdc576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cf1929190615a8e565b604051809103902014610d30576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d79610d7484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061280192505050565b61286e565b90506000610da082600881518110610d9357610d93615a9e565b6020026020010151612a24565b9050602081511115610dde576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605801358103610e35576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054600160801b900460ff166002811115610ec357610ec361579c565b14610ee15760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610ef657610ef6615a9e565b906000526020600020906005020190506000610f1184611f11565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d4081169082161015610f7a576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615610fc3576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805480158015610fe057508515155b1561104357835464010000000090046001600160a01b0316600081156110065781611015565b60018601546001600160a01b03165b90506110218187612ad8565b505050600094855250506006602052505060409020805460ff19166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b031660608301526110c7576001600160801b0360408201526001815260008690036110c7578195505b600086826020015163ffffffff166110df9190615aca565b905060008382116110f057816110f2565b835b602084015190915063ffffffff165b8181101561121257600086828154811061111d5761111d615a9e565b6000918252602080832090910154808352600690915260409091205490915060ff16611175576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061118a5761118a615a9e565b60009182526020909120600590910201805490915064010000000090046001600160a01b03161580156111d15750600481015460408701516001600160801b039182169116115b156111fd5760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b5050808061120a90615ae2565b915050611101565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039093169290921790915584900361142157606083015160008a8152600660205260409020805460ff191660011790558915801561135e57506000547201000000000000000000000000000000000000900460ff165b156113b9576001546001600160a01b0316611379818a612ad8565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff90911617885561141f565b6113e66001600160a01b038216156113d157816113e0565b60018901546001600160a01b03165b89612ad8565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b600080600054600160801b900460ff16600281111561144d5761144d61579c565b1461146b5760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166114cf576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b031660026000815481106114ee576114ee615a9e565b600091825260209091206005909102015464010000000090046001600160a01b03161461151c57600161151f565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b8360028111156115c3576115c361579c565b0217905560028111156115d8576115d861579c565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b6005602052816000526040600020818154811061162057600080fd5b90600052602060002001600091509150505481565b905090565b6116478383836001611a2b565b505050565b600061163561165d60f46014615aca565b3660011981013560f01c9003013560601c90565b600081815260076020908152604080832060059092528220805482546116a290610100900463ffffffff1682615afc565b95945050505050565b60003660011981013560f01c900360d4013582146116f5576040517f0da789df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003601401355b92915050565b606061163560586020612b1a565b611722611aab565b60006002600d5460ff16600281111561173d5761173d61579c565b0361176157506001600160a01b0381166000908152600b60205260409020546117d0565b6001600d5460ff16600281111561177a5761177a61579c565b0361179e57506001600160a01b0381166000908152600360205260409020546117d0565b6040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff166118ae576001600160a01b0382166000908152600c60205260409020805460ff1916600117905561182d60c0600119369081013560f01c9003013560601c90565b6040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529190911690637eee288d90604401600060405180830381600087803b15801561189257600080fd5b505af11580156118a6573d6000803e3d6000fd5b505050505050565b806000036118e8576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000908152600b6020908152604080832083905560039091528120553660011981013560f01c900360c0013560601c6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052919091169063f3fef3a390604401600060405180830381600087803b15801561198657600080fd5b505af115801561199a573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146119eb576040519150601f19603f3d011682016040523d82523d6000602084013e6119f0565b606091505b5050905080611647576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360f4013560601c331480611a635750611a4e61164c565b6001600160a01b0316336001600160a01b0316145b611a99576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa584848484612b4e565b50505050565b6002600d5460ff166002811115611ac457611ac461579c565b1480611ae657506001600d5460ff166002811115611ae457611ae461579c565b145b15611aed57565b6000600d5460ff166002811115611b0657611b0661579c565b14611b3d576040517f078a3df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb19190615b13565b15611be8576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005468010000000000000000900467ffffffffffffffff1667ffffffffffffffff16600003611c44576040517fc105260a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003660011981013560f01c900360ac013560601c6040517f0314d2b30000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039190911690630314d2b390602401602060405180830381865afa158015611cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdc9190615b13565b905080611d15576040517f4851bd9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c900360ac013560601c6040517f17cf21a90000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906317cf21a990602401600060405180830381600087803b158015611d8457600080fd5b505af1925050508015611d95575060015b5060003660011981013560f01c900360ac013560601c6040517f496b9c160000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03919091169063496b9c1690602401602060405180830381865afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e9190615b13565b90508015611e4857600d805460ff19166001179055611e56565b600d805460ff191660021790555b600d546040517f9908eaac0645df9d0704d06adc9e07337c951de2f06b5f2836151d48d5e4722f91611e8d9160ff909116906157d3565b60405180910390a15050565b6116478383836000611a2b565b611eae6134d1565b3660011981013560f01c900360f4013560601c3214611ef9576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3660011981013560f01c90036054013560e01c90565b600080600054600160801b900460ff166002811115611f3257611f3261579c565b14611f505760405163067fe19560e41b815260040160405180910390fd5b600060028381548110611f6557611f65615a9e565b600091825260208220600590910201805490925063ffffffff90811614611fcb57815460028054909163ffffffff16908110611fa357611fa3615a9e565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b6004820154600090611ff690600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b61200a9067ffffffffffffffff1642615afc565b612020611fe9846001600160801b031660401c90565b67ffffffffffffffff166120349190615aca565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff161161208157806116a2565b7f0000000000000000000000000000000000000000000000000000000000049d4095945050505050565b600080612128836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000049811115612187576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a30060006121a28383615b46565b9050670de0b6b3a764000060006121d9827f0000000000000000000000000000000000000000000000000000000000000049615b5a565b905060006121f76121f2670de0b6b3a764000086615b5a565b613d52565b905060006122058484613fa4565b905060006122138383613ff3565b9050600061222082614021565b9050600061223f8261223a670de0b6b3a76400008f615b5a565b614209565b9050600061224d8b83613ff3565b9050612259818d615b5a565b9f9e505050505050505050505050505050565b6002818154811061227c57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b60006002600d5460ff1660028111156122fb576122fb61579c565b0361231c57506001600160a01b03166000908152600b602052604090205490565b506001600160a01b031660009081526003602052604090205490565b3660011981013560f01c900360f4013560601c331480612370575061235b61164c565b6001600160a01b0316336001600160a01b0316145b6123a6576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118a6868686868686614241565b60008054600160801b900460ff1660028111156123d3576123d361579c565b146123f15760405163067fe19560e41b815260040160405180910390fd5b60008060008061240086614775565b9350935093509350600061241685858585614ace565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248e9190615b79565b90506001890361255b576001600160a01b0381166352f0f3ad8a846124bf3660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af1158015612531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125559190615b96565b50611421565b6002890361257a576001600160a01b0381166352f0f3ad8a84896124bf565b60038903612599576001600160a01b0381166352f0f3ad8a84876124bf565b600489036126ce5760006125d66001600160801b0385167f000000000000000000000000000000000000000000000000000000000000001e614b6d565b6009546125e39190615aca565b6125ee906001615aca565b90503660011981013560f01c900360580135811061261b573660011981013560f01c90036058013561261d565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af11580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c79190615b96565b5050611421565b60058903612749576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390523660011981013560f01c900360d4013560c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a401612512565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3660011981013560f01c9003605481013560e01c9060140135606061279e61170c565b9050909192565b600081600001518260200151836040015184606001516040516020016127e4949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612850576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061287e85614c02565b9194509250905060018160018111156128995761289961579c565b146128d0576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516128dc8385615aca565b14612913576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161292a5790505093506000835b8651811015612a185760008061299d6040518060400160405280858c600001516129819190615afc565b8152602001858c602001516129969190615aca565b9052614c02565b5091509150604051806040016040528083836129b99190615aca565b8152602001848b602001516129ce9190615aca565b8152508885815181106129e3576129e3615a9e565b60209081029190910101526129f9600185615aca565b9350612a058183615aca565b612a0f9084615aca565b92505050612957565b50845250919392505050565b60606000806000612a3485614c02565b919450925090506000816001811115612a4f57612a4f61579c565b14612a86576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a908284615aca565b855114612ac9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116a2856020015184846150a0565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b0390931692909190612b11908490615aca565b90915550505050565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054600160801b900460ff166002811115612b6d57612b6d61579c565b14612b8b5760405163067fe19560e41b815260040160405180910390fd5b600060028481548110612ba057612ba0615a9e565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514612c64576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000612cf9826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612d345750612d317f000000000000000000000000000000000000000000000000000000000000001e6002615aca565b81145b8015612d3e575084155b15612d75576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d9b575086155b15612dd2576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000049811115612e2c576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e577f000000000000000000000000000000000000000000000000000000000000001e6001615aca565b8103612e6957612e6986888588615134565b34612e73836120ab565b14612eaa576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612eb588611f11565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d40811690821603612f1d576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612f4a60017f0000000000000000000000000000000000000000000000000000000000000049615afc565b8303613060573660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc49190615b79565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190615b96565b613059907f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff16615baf565b90506130f3565b61308b60017f000000000000000000000000000000000000000000000000000000000000001e615afc565b83036130c6576130597f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615bdb565b507f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff165b613127817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff16615c0b565b67ffffffffffffffff166131428367ffffffffffffffff1690565b67ffffffffffffffff16111561318957613186817f0000000000000000000000000000000000000000000000000000000000049d4067ffffffffffffffff16615c0b565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff16156131fe576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c815260200190815260200160002060016002805490506133f59190615afc565b81546001810183556000928352602080842090910191909155338252600b9052604081208054349290613429908490615aca565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561347b57600080fd5b505af115801561348f573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b60005471010000000000000000000000000000000000900460ff1615613523576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61352b6152c3565b3614613563576040517f9824bdab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000803660011981013560f01c900360ac013560601c6001600160a01b031663d83ef2676040518163ffffffff1660e01b81526004016040805180830381865afa1580156135b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d99190615c34565b909250905081613615576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915282815260200181905260088290556009819055803660011981013560f01c90036058013511613690576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036014013560048201526024015b60405180910390fd5b67ffffffffffffffff3660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370d9190615b79565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e9190615b96565b11156137a6576040517fb4e1243300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137dd7f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff166002615b5a565b905060003660011981013560f01c90036098013560601c6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138559190615b79565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b69190615b96565b67ffffffffffffffff166138f17f0000000000000000000000000000000000000000000000000000000000002a3067ffffffffffffffff1690565b67ffffffffffffffff166139059190615aca565b9050600061391383836152d8565b905067ffffffffffffffff811115613957576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000049d401667ffffffffffffffff168167ffffffffffffffff1611156139cf576040517f8d77ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e08101825263ffffffff808252600060208084018281523660011981013560f01c90038035606090811c8789018181526001600160801b0334818116948b0194855260149095013560808b01908152600160a08c0181815242841660c08e019081526002805493840181558c529c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590930292830180549a5191909d167fffffffffffffffff000000000000000000000000000000000000000000000000909a16999099176401000000006001600160a01b039a8b160217909b5592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0820180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001691851691909117905593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015595519651968116600160801b9790911696909602959095177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101558154710100000000000000000000000000000000007fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff909116178255918152600b909152918220805491929091613c10908490615aca565b90915550503660011981013560f01c900360c0013560601c6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c6257600080fd5b505af1158015613c76573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550613cb99150611efb9050565b63ffffffff163660011981013560f01c900360ac013560601c6001600160a01b0316633c9f397c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d339190615c58565b600a805460ff191663ffffffff92909216929092141790555050505050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613da857631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613fe157637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156140115763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d7821361404f57919050565b680755bf798b4a1bf1e5821261406d5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061423a670de0b6b3a76400008361422186613d52565b61422b9190615c7e565b6142359190615d3a565b614021565b9392505050565b60008054600160801b900460ff1660028111156142605761426061579c565b1461427e5760405163067fe19560e41b815260040160405180910390fd5b60006002878154811061429357614293615a9e565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b90506142e97f00000000000000000000000000000000000000000000000000000000000000496001615aca565b614363826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461439d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915614468576143f07f000000000000000000000000000000000000000000000000000000000000001e7f0000000000000000000000000000000000000000000000000000000000000049615afc565b6001901b614406846001600160801b03166152ef565b6001600160801b03166144199190615d84565b1561444d5761444461443560016001600160801b038716615d98565b865463ffffffff166000615375565b6003015461445e565b3660011981013560f01c9003607801355b9150849050614489565b600385015491506144866144356001600160801b0386166001615db8565b90505b600882901b60088a8a6040516144a0929190615a8e565b6040518091039020901b146144e1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006144ec8c61543e565b905060006144fb836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081523660011981013560f01c90036098013560601c9063e14ced3290614551908f908f908f908f908a90600401615e23565b6020604051808303816000875af1158015614570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145949190615b96565b60048501549114915060009060029061461d906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614697896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6146a19190615e5d565b6146ab9190615e80565b60ff1615905081151581036146ec576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b031615614736576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061479557614795615a9e565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000001e9061484a906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614884576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000001e90614929906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16925082111561499e57825463ffffffff166149687f000000000000000000000000000000000000000000000000000000000000001e6001615aca565b8303614972578391505b6002818154811061498557614985615a9e565b9060005260206000209060050201935080945050614888565b600481810154908401546001600160801b0391821691166000816001600160801b03166149e36149d7856001600160801b031660011c90565b6001600160801b031690565b6001600160801b03161490508015614a7c576000614a09836001600160801b03166152ef565b6001600160801b03161115614a59576000614a39614a3160016001600160801b038616615d98565b896001615375565b6003810154600490910154909c506001600160801b03169a50614a5f9050565b6008549a505b600386015460048701549099506001600160801b03169750614ac0565b6000614a95614a316001600160801b0385166001615db8565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b03841615614b295760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a001604051602081830303815290604052805190602001206116a2565b8282604051602001614b4e9291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614be1847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614c45576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614c6a576000600160009450945094505050615099565b60b78111614d80576000614c7f608083615afc565b905080876000015111614cbe576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614d3657507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614d6d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250615099915050565b60bf8111614ede576000614d9560b783615afc565b905080876000015111614dd4576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614e36576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e7e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e888184615aca565b895111614ec1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614ecc836001615aca565b97509550600094506150999350505050565b60f78111614f43576000614ef360c083615afc565b905080876000015111614f32576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250615099915050565b6000614f5060f783615afc565b905080876000015111614f8f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ff1576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111615039576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6150438184615aca565b89511161507c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b615087836001615aca565b97509550600194506150999350505050565b9193909250565b60608167ffffffffffffffff8111156150bb576150bb615a04565b6040519080825280601f01601f1916602001820160405280156150e5576020820181803683370190505b509050811561423a5760006150fa8486615aca565b90506020820160005b8481101561511b578281015182820152602001615103565b8481111561512a576000858301525b5050509392505050565b600061514a6001600160801b0384166001615db8565b9050600061515a82866001615375565b9050600086901a8380615224575061519360027f000000000000000000000000000000000000000000000000000000000000001e615d84565b6004830154600290615215906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61521f9190615e80565b60ff16145b1561527c5760ff81166001148061523e575060ff81166002145b615277576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613687565b6152ba565b60ff8116156152ba576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613687565b50505050505050565b60006152cd61546d565b611635906006615aca565b6000818310156152e8578161423a565b5090919050565b600080615363837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826153b5576153b06001600160801b0386167f000000000000000000000000000000000000000000000000000000000000001e61547b565b6153c7565b6153c7856001600160801b03166155ba565b9050600284815481106153dc576153dc615a9e565b906000526020600020906005020191505b60048201546001600160801b0382811691161461543657815460028054909163ffffffff1690811061542157615421615a9e565b906000526020600020906005020191506153ed565b509392505050565b600080600080600061544f86614775565b935093509350935061546384848484614ace565b9695505050505050565b600061163560f46028615aca565b6000816154f8846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161550e5763b34b5c226000526004601cfd5b615517836155ba565b905081615594826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116117065761423a6155aa836001615aca565b6001600160801b03831690615646565b60008119600183011681615635827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806156ba847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126156e857600080fd5b50813567ffffffffffffffff81111561570057600080fd5b60208301915083602082850101111561571857600080fd5b9250929050565b600080600083850360a081121561573557600080fd5b608081121561574357600080fd5b50839250608084013567ffffffffffffffff81111561576157600080fd5b61576d868287016156d6565b9497909650939450505050565b6000806040838503121561578d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600381106157d057634e487b7160e01b600052602160045260246000fd5b50565b602081016157e0836157b2565b91905290565b6001600160a01b03811681146157d057600080fd5b60006020828403121561580d57600080fd5b813561423a816157e6565b60008060006060848603121561582d57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561586a5760208185018101518683018201520161584e565b8181111561587c576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061423a6020830184615844565b6000602082840312156158d457600080fd5b5035919050565b80151581146157d057600080fd5b600080600080608085870312156158ff57600080fd5b843593506020850135925060408501359150606085013561591f816158db565b939692955090935050565b60006020828403121561593c57600080fd5b81356001600160801b038116811461423a57600080fd5b6000806000806000806080878903121561596c57600080fd5b86359550602087013561597e816158db565b9450604087013567ffffffffffffffff8082111561599b57600080fd5b6159a78a838b016156d6565b909650945060608901359150808211156159c057600080fd5b506159cd89828a016156d6565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006116a26060830184615844565b634e487b7160e01b600052604160045260246000fd5b600060808284031215615a2c57600080fd5b6040516080810181811067ffffffffffffffff82111715615a5d57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115615add57615add615ab4565b500190565b60006000198203615af557615af5615ab4565b5060010190565b600082821015615b0e57615b0e615ab4565b500390565b600060208284031215615b2557600080fd5b815161423a816158db565b634e487b7160e01b600052601260045260246000fd5b600082615b5557615b55615b30565b500490565b6000816000190483118215151615615b7457615b74615ab4565b500290565b600060208284031215615b8b57600080fd5b815161423a816157e6565b600060208284031215615ba857600080fd5b5051919050565b600067ffffffffffffffff808316818516808303821115615bd257615bd2615ab4565b01949350505050565b600067ffffffffffffffff80831681851681830481118215151615615c0257615c02615ab4565b02949350505050565b600067ffffffffffffffff83811690831681811015615c2c57615c2c615ab4565b039392505050565b60008060408385031215615c4757600080fd5b505080516020909101519092909150565b600060208284031215615c6a57600080fd5b815163ffffffff8116811461423a57600080fd5b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615ab4565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615ab4565b60008712925087820587128484161615615d1657615d16615ab4565b87850587128184161615615d2c57615d2c615ab4565b505050929093029392505050565b600082615d4957615d49615b30565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615d7f57615d7f615ab4565b500590565b600082615d9357615d93615b30565b500690565b60006001600160801b0383811690831681811015615c2c57615c2c615ab4565b60006001600160801b03808316818516808303821115615bd257615bd2615ab4565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615e37606083018789615dda565b8281036020840152615e4a818688615dda565b9150508260408301529695505050505050565b600060ff821660ff841680821015615e7757615e77615ab4565b90039392505050565b600060ff831680615e9357615e93615b30565b8060ff8416069150509291505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x83a2df4b23236dccc59a67d289cd5163190213ea": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106103d05760003560e01c80638da5cb5b116101ff578063d220a9e01161011a578063f2c4bc9e116100ad578063f8c68de01161007c578063f8c68de014610a1a578063fd32aa0f14610a22578063fe3d571014610a2a578063ffa1ad7414610a6357600080fd5b8063f2c4bc9e146109d7578063f2fde38b146109ea578063f45e65d8146109fd578063f68016b714610a0657600080fd5b8063e0e2016d116100e9578063e0e2016d1461099e578063e81b2c6d146109a6578063ec707517146109af578063f2b4e617146109cf57600080fd5b8063d220a9e014610975578063d6ae3cd514610985578063dac6e63a1461098e578063dad544e01461099657600080fd5b8063b40a817c11610192578063c4e8ddfa11610161578063c4e8ddfa1461080e578063c9b26f6114610816578063c9ff2d1614610829578063cc731b021461084157600080fd5b8063b40a817c146107c4578063bc49ce5f146107d7578063bfb14fb7146107df578063c0fd4b41146107fb57600080fd5b80639fabcc84116101ce5780639fabcc8414610706578063a39fac121461070e578063a62611a214610790578063a7119869146107bc57600080fd5b80638da5cb5b146106c55780638ed95502146106e3578063935f029e146106eb5780639b7d7f0a146106fe57600080fd5b80632efe2c63116102ef5780634d5d9a2a116102825780635d73369c116102515780635d73369c1461069a578063715018a6146106a25780637616f0e8146106aa5780637e54b8ad146106bd57600080fd5b80634d5d9a2a146105f85780634f16540b1461062957806354fd4d50146106505780635c975abb1461069257600080fd5b8063452a9320116102be578063452a9320146105bd57806347af267b146105c557806348cd4cb1146105e85780634add321d146105f057600080fd5b80632efe2c631461055c57806335e80ab31461056457806338d38c97146105845780633e47158c146105b557600080fd5b806318d1391811610367578063213268491161033657806321326849146104cf578063215b7a1c1461052e57806321d7fde5146105365780632b598b8a1461054957600080fd5b806318d139181461049957806319f5cea8146104ac5780631fd19ee1146104b457806320f06fdc146104bc57600080fd5b80630ae14b1b116103a35780630ae14b1b1461043a5780630c18c16214610459578063155b6c6f1461046257806316d3bc7f1461047557600080fd5b806306c92657146103d5578063078f29cf146103f05780630a2ca2a91461041d5780630a49cb0314610432575b600080fd5b6103dd610a6b565b6040519081526020015b60405180910390f35b6103f8610a99565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103e7565b61043061042b366004612c64565b610ad2565b005b6103f8610afc565b631dcd65005b60405167ffffffffffffffff90911681526020016103e7565b6103dd60655481565b610430610470366004612cb4565b610b2c565b606a54610440906c01000000000000000000000000900467ffffffffffffffff1681565b6104306104a7366004612c64565b610b42565b6103dd610b53565b6103f8610b7e565b6104306104ca366004612ce7565b610ba8565b7f435553544f4d5f4741535f544f4b454e00000000000000000000000000000000600052606d6020527f3ec9a18bd22a834e2a13465cc2aa2a9aebb161ffdebf39cdb0028dbb1b5394b45460ff165b60405190151581526020016103e7565b6103f8610bb9565b610430610544366004612d0b565b610be9565b610430610557366004612e59565b610bfb565b6103dd610fce565b606c546103f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000031681526020016103e7565b6103f8610ff9565b6103f8611204565b61051e6105d3366004612fc9565b606d6020526000908152604090205460ff1681565b6103dd611298565b6104406112c8565b606a546106149068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103e7565b6103dd7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b60408051808201909152600681527f332e31342e30000000000000000000000000000000000000000000000000000060208201525b6040516103e7919061305c565b61051e6112ee565b6103dd6114fb565b610430611526565b6104306106b836600461306f565b61153a565b6103dd61154b565b60335473ffffffffffffffffffffffffffffffffffffffff166103f8565b6103f8611576565b6104306106f936600461308a565b6115a6565b6103f86115b8565b6106856115e8565b610716611682565b6040516103e79190600060e08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401528060a08501511660a08401528060c08501511660c08401525092915050565b606c546104409074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103f86117bd565b6104306107d236600461306f565b6117ed565b6103dd6117fe565b6068546106149068010000000000000000900463ffffffff1681565b610430610809366004612d0b565b611829565b6103f861183b565b610430610824366004612fc9565b61186b565b606a5461061490640100000000900463ffffffff1681565b6109056040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103e79190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546106149063ffffffff1681565b6103dd606b5481565b6103f861187c565b6103f86118ac565b6103dd611900565b6103dd60675481565b606854610614906c01000000000000000000000000900463ffffffff1681565b6103f861192b565b6104306109e53660046130ba565b6119a7565b6104306109f8366004612c64565b611bb8565b6103dd60665481565b6068546104409067ffffffffffffffff1681565b6103dd611c6c565b6103dd611c97565b606a54610a509074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016103e7565b6103dd600081565b610a9660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d613119565b81565b6000610acd610ac960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377613119565b5490565b905090565b610ada611cc6565b610af973ffffffffffffffffffffffffffffffffffffffff8216611d47565b50565b6000610acd610ac960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad613119565b610b34611cc6565b610b3e8282611da8565b5050565b610b4a611cc6565b610af981611eb8565b610a9660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8613119565b6000610acd7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610bb0611cc6565b610af981611f3c565b6000610acd610ac960017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd5900613119565b610bf1611cc6565b610b3e8282611fa9565b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff16158015610c3b575060005460ff8083169116105b610ccc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d056120ae565b610d0d61212f565b610d168c611bb8565b610d1f89611d47565b610d298b8b611fa9565b610d32886121ce565b610d5b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610d8e610d8960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598613119565b869055565b610dc2610dbc60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637613119565b85519055565b610df9610df060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8613119565b60208601519055565b610e30610e2760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377613119565b60408601519055565b610e67610e5e60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad613119565b60608601519055565b610e9e610e9560017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d613119565b60808601519055565b610ed5610ecc60017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd5900613119565b60a08601519055565b610f0c610f0360017f99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff43613119565b60c08601519055565b610f14612324565b610f1d8661238c565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b610a9660017f99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff43613119565b6000806110247fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561104757919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261108a9190613130565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000091909117906110e5906060015b604051602081830303815290604052805190602001205490565b1461111c576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061113e906060016110cb565b905073ffffffffffffffffffffffffffffffffffffffff8116156111d2578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb919061316d565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd919061316d565b6000610acd610ac960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b606954600090610acd9063ffffffff6a010000000000000000000082048116911661318a565b7f4554485f4c4f434b424f580000000000000000000000000000000000000000006000908152606d6020527f58e88e949bd180ff86d6c072735c3d8d5a05a543c16130176ec0bc0adf3fd80654819060ff166113515761134c610afc565b6113c7565b611359610afc565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c7919061316d565b606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015291925073ffffffffffffffffffffffffffffffffffffffff1690632e48152c90602401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b91906131b6565b806114f55750606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690632e48152c90602401602060405180830381865afa1580156114d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f591906131b6565b91505090565b610a9660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637613119565b61152e611cc6565b6115386000612800565b565b611542611cc6565b610af981612877565b610a9660017f51547f31a231e1007dca33017faa3da20d959b95087c588a7768bfb922fd5900613119565b6000610acd610ac960017f99f45962df4bc30de8d4c3c6d1ffc0f100edce16e80c7a5768b6d55ca463ff43613119565b6115ae611cc6565b610b3e82826128ea565b6000610acd610ac960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d613119565b60606115f2611576565b73ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa15801561163c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610acd91908101906131d3565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052806116ce6117bd565b73ffffffffffffffffffffffffffffffffffffffff1681526020016116f161183b565b73ffffffffffffffffffffffffffffffffffffffff168152602001611714610a99565b73ffffffffffffffffffffffffffffffffffffffff168152602001611737610afc565b73ffffffffffffffffffffffffffffffffffffffff16815260200161175a6115b8565b73ffffffffffffffffffffffffffffffffffffffff16815260200161177d610bb9565b73ffffffffffffffffffffffffffffffffffffffff1681526020016117a0611576565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610acd610ac960017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637613119565b6117f5611cc6565b610af9816121ce565b610a9660017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598613119565b611831611cc6565b610b3e82826129c0565b6000610acd610ac960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8613119565b611873611cc6565b610af981611d47565b6000610acd610ac960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598613119565b60006118b6610ff9565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611274573d6000803e3d6000fd5b610a9660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b600080611936610afc565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f5919061316d565b6119af6120ae565b6000828152606d602052604090205460ff161515811515036119fd576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4554485f4c4f434b424f580000000000000000000000000000000000000000008203611b4e576000828152606d602052604090205460ff168015611a40575080155b8015611ad857506000611a51610afc565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abf919061316d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611b0f576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b176112ee565b15611b4e576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152606d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091559051909184917fb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c9190a35050565b611bc0611cc6565b73ffffffffffffffffffffffffffffffffffffffff8116611c63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cc3565b610af981612800565b610a9660017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377613119565b610a9660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad613119565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cc3565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611d9c919061305c565b60405180910390a35050565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611eab919061305c565b60405180910390a3505050565b611ee17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003611d6b565b606a80547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040805160208082019390935281518082039093018352810190526007611d6b565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611e7a565b336120b7610ff9565b73ffffffffffffffffffffffffffffffffffffffff16141580156120f85750336120df6118ac565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611538576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166121c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610cc3565b611538612b92565b6121d66112c8565b67ffffffffffffffff168167ffffffffffffffff161015612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610cc3565b631dcd650067ffffffffffffffff821611156122cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f20686967686044820152606401610cc3565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611d6b565b612352610ac960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b6000036115385761153861238760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0613119565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff16111561243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610cc3565b6001816040015160ff16116124d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610cc3565b6068546080820151825167ffffffffffffffff909216916124f4919061329e565b63ffffffff161115612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610cc3565b6000816020015160ff16116125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610cc3565b8051602082015163ffffffff82169160ff909116906126199082906132bd565b6126239190613307565b63ffffffff16146126b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610cc3565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040805160208082019390935281518082039093018352810190526006611d6b565b7fff0000000000000000000000000000000000000000000000000000000000000081161561299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610cc3565b606582905560668190556040805160208101849052908101829052600090606001612077565b60018263ffffffff161015612a57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d203100000000000000000000000000000000000000000000000000006064820152608401610cc3565b60018163ffffffff161015612aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d20310000000000000000000000000000000000000000000000000000006064820152608401610cc3565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009093169186169190911791909117909155604051600091612b5b91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611e7a565b600054610100900460ff16612c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610cc3565b61153833612800565b73ffffffffffffffffffffffffffffffffffffffff81168114610af957600080fd5b8035612c5f81612c32565b919050565b600060208284031215612c7657600080fd5b8135612c8181612c32565b9392505050565b803563ffffffff81168114612c5f57600080fd5b803567ffffffffffffffff81168114612c5f57600080fd5b60008060408385031215612cc757600080fd5b612cd083612c88565b9150612cde60208401612c9c565b90509250929050565b600060208284031215612cf957600080fd5b813561ffff81168114612c8157600080fd5b60008060408385031215612d1e57600080fd5b612d2783612c88565b9150612cde60208401612c88565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612d8757612d87612d35565b60405290565b803560ff81168114612c5f57600080fd5b600060e08284031215612db057600080fd5b60405160e0810181811067ffffffffffffffff82111715612dd357612dd3612d35565b6040529050808235612de481612c32565b81526020830135612df481612c32565b60208201526040830135612e0781612c32565b60408201526060830135612e1a81612c32565b6060820152612e2b60808401612c54565b6080820152612e3c60a08401612c54565b60a0820152612e4d60c08401612c54565b60c08201525092915050565b60008060008060008060008060008060008b8d036102c0811215612e7c57600080fd5b8c35612e8781612c32565b9b50612e9560208e01612c88565b9a50612ea360408e01612c88565b995060608d01359850612eb860808e01612c9c565b975060a08d0135612ec881612c32565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612efa57600080fd5b50612f03612d64565b612f0f60c08e01612c88565b8152612f1d60e08e01612d8d565b6020820152612f2f6101008e01612d8d565b6040820152612f416101208e01612c88565b6060820152612f536101408e01612c88565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612f7c57600080fd5b60a08201529450612f906101808d01612c54565b9350612fa08d6101a08e01612d9e565b92506102808c01359150612fb76102a08d01612c54565b90509295989b509295989b9093969950565b600060208284031215612fdb57600080fd5b5035919050565b60005b83811015612ffd578181015183820152602001612fe5565b8381111561300c576000848401525b50505050565b6000815180845261302a816020860160208601612fe2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612c816020830184613012565b60006020828403121561308157600080fd5b612c8182612c9c565b6000806040838503121561309d57600080fd5b50508035926020909101359150565b8015158114610af957600080fd5b600080604083850312156130cd57600080fd5b8235915060208301356130df816130ac565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561312b5761312b6130ea565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613168576131686130ea565b500290565b60006020828403121561317f57600080fd5b8151612c8181612c32565b600067ffffffffffffffff8083168185168083038211156131ad576131ad6130ea565b01949350505050565b6000602082840312156131c857600080fd5b8151612c81816130ac565b6000602082840312156131e557600080fd5b815167ffffffffffffffff808211156131fd57600080fd5b818401915084601f83011261321157600080fd5b81518181111561322357613223612d35565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561326957613269612d35565b8160405282815287602084870101111561328257600080fd5b613293836020830160208801612fe2565b979650505050505050565b600063ffffffff8083168185168083038211156131ad576131ad6130ea565b600063ffffffff808416806132fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561332a5761332a6130ea565b0294935050505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff", - "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - }, - "0x877d4a7c4b8d2d49f1b8b814ae08cae354a672eb": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000006d46535c721a7721e5975790aa97f793a438ed4c", - "0x4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e": "0x0000000000000000000000007b57e3025d0c33ac2c0cc44ac915650895a619d3", - "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7c": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c", - "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7d": "0x969e7a548b4e1ea6f44b101535318a7d1a469f8ac3237117312fcd40bbfe8a4f", - "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7e": "0xe93b1c74a2e0d78ffff5f6fef1779e1faa40d4382c1b47b5204d105200000000", - "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa7f": "0x0000000000000000000000000000000000000000000000000153c16e70997970", - "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa80": "0xc51812dc3a010c7d01b50e0d17dc79c8f39fd6e51aad88f6f4ce6ab8827279cf", - "0x9afb513dc3306e3bc370fea0bac86eaae93221c831ccaae670c9d4101fb0fa81": "0xffb9226600000000000000000000000000000000000000000000000000000000", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5", - "0xc073f36c05b6a60b24c30a48974b549770d8fa354751fb3170c9dfd8ca536add": "0x0000000000000000000000000000000000000000000000000000000000000149" - } - }, - "0x89dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635958a19311610104578063952b2797116100a2578063e0a840eb11610071578063e0a840eb146104d5578063ee658e45146104f5578063f2b4e61714610508578063fdbb3dcf1461052857600080fd5b8063952b27971461048f578063d5a3e12e146104bd578063d83ef267146104c5578063dad544e0146104cd57600080fd5b80636c4f4467116100de5780636c4f44671461042e5780637258a807146104415780637d6be8dc146104695780637fc485041461047c57600080fd5b80635958a193146103d55780635c975abb146103e8578063664ed830146103f057600080fd5b80633c9f397c1161017157806345884d321161014b57806345884d321461034357806347a222c514610366578063496b9c161461037957806354fd4d501461038c57600080fd5b80633c9f397c146102e15780633e47158c146103065780634086d1831461030e57600080fd5b806333d7e2bd116101ad57806333d7e2bd1461022457806334a346ea1461026f57806335e80ab3146102a857806338d38c97146102b057600080fd5b80630314d2b3146101d457806304e50fed146101fc57806317cf21a91461020f575b600080fd5b6101e76101e23660046117c8565b61053b565b60405190151581526020015b60405180910390f35b6101e761020a3660046117c8565b61061b565b61022261021d3660046117c8565b610692565b005b60005461024a9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e761027d3660046117c8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205460ff1690565b61024a6107f7565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000011681526020016101f3565b6006546102f19063ffffffff1681565b60405163ffffffff90911681526020016101f3565b61024a61088e565b60065461032a90640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f3565b6101e76103513660046117c8565b60056020526000908152604090205460ff1681565b61022261037436600461187c565b610a99565b6101e76103873660046117c8565b610d15565b6103c86040518060400160405280600581526020017f332e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f391906119ad565b6101e76103e33660046117c8565b610d8d565b6101e7610e10565b6040805180820182526000808252602091820152815180830183526003548082526004549183019182528351908152905191810191909152016101f3565b6101e761043c3660046117c8565b610ea2565b61045461044f3660046119c0565b610f72565b604080519283526020830191909152016101f3565b6102226104773660046117c8565b610f86565b61022261048a3660046119c0565b611005565b6040517f000000000000000000000000000000000000000000000000000000000000000681526020016101f3565b610222611076565b6104546110f6565b61024a611255565b60025461024a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101e76105033660046117c8565b6112a9565b60015461024a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101e76105363660046117c8565b6114b6565b6000610546826114b6565b61055257506000919050565b7f00000000000000000000000000000000000000000000000000000000000000066105f28373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e591906119fa565b67ffffffffffffffff1690565b6106069067ffffffffffffffff1642611a44565b1161061357506000919050565b506001919050565b60008173ffffffffffffffffffffffffffffffffffffffff1663250e69bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068c9190611a5b565b92915050565b8061069c81610ea2565b6106d2576040517f47ad367a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106dc6110f6565b915050808273ffffffffffffffffffffffffffffffffffffffff166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074f9190611a7d565b11610786576040517f47ad367a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f474f180d74ea8751955ee261c93ff8270411b180408d1014c49f552c92a4d11e90600090a2505050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108899190611a96565b905090565b6000806108b97fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156108dc57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261091f9190611ab3565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061097a906060015b604051602081830303815290604052805190602001205490565b146109b1576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906109d390606001610960565b905073ffffffffffffffffffffffffffffffffffffffff811615610a67578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a609190611a96565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001600054610100900460ff16158015610ad9575060005460ff8083169116105b610b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610ba261162b565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff88811691909102919091178255600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691871691909117905583516003556020840151600455600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff85161790819055640100000000900467ffffffffffffffff169003610cb057600680547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff166401000000004267ffffffffffffffff16021790555b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000610d20826112a9565b610d2c57506000919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604090205460ff1615610d6257506000919050565b610d6b82610d8d565b15610d7857506000919050565b610d80610e10565b1561061357506000919050565b6000600660049054906101000a900467ffffffffffffffff1667ffffffffffffffff16610dfe8373ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c1573d6000803e3d6000fd5b67ffffffffffffffff16111592915050565b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108899190611a5b565b6000610ead82610d15565b610eb957506000919050565b610ec28261061b565b610ece57506000919050565b610ed78261053b565b610ee357506000919050565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f549190611b1f565b6002811115610f6557610f65611af0565b1461061357506000919050565b600080610f7d6110f6565b91509150915091565b610f8e6116ae565b73ffffffffffffffffffffffffffffffffffffffff811660008181526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b61100d6116ae565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff83169081179091556040519081527fcee0703b5e4bad4efededab85c9fd1aec17dee7c5f6c584330e0509b677745a29060200160405180910390a150565b61107e6116ae565b600680547fffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff166401000000004267ffffffffffffffff811691909102919091179091556040519081527f6e5b1ba771e8e484f741ed085f039ff4e5c6e882eaf68f550fb390922d0ae4a79060200160405180910390a1565b600254600090819073ffffffffffffffffffffffffffffffffffffffff166111245750506003546004549091565b600254604080517fbcef3b5500000000000000000000000000000000000000000000000000000000815290516111bc9273ffffffffffffffffffffffffffffffffffffffff169163bcef3b559160048083019260209291908290030181865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b99190611a7d565b90565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d9190611a7d565b915091509091565b600061125f61088e565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610865573d6000803e3d6000fd5b6000806000808473ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526113409190810190611b40565b6001546040517f5f0150cb000000000000000000000000000000000000000000000000000000008152939650919450925060009173ffffffffffffffffffffffffffffffffffffffff90911690635f0150cb906113a590879087908790600401611c11565b6040805180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e59190611c3f565b50905060008673ffffffffffffffffffffffffffffffffffffffff16635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114599190611a96565b90508673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156114ab575073ffffffffffffffffffffffffffffffffffffffff811630145b979650505050505050565b60006115068273ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c1573d6000803e3d6000fd5b67ffffffffffffffff161580159061068c575060028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158a9190611b1f565b600281111561159b5761159b611af0565b148061068c575060018273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116139190611b1f565b600281111561162457611624611af0565b1492915050565b3361163461088e565b73ffffffffffffffffffffffffffffffffffffffff161415801561167557503361165c611255565b73ffffffffffffffffffffffffffffffffffffffff1614155b156116ac576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f9190611a96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f2e5321ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146117c557600080fd5b50565b6000602082840312156117da57600080fd5b81356117e5816117a3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611862576118626117ec565b604052919050565b63ffffffff811681146117c557600080fd5b60008060008084860360a081121561189357600080fd5b853561189e816117a3565b945060208601356118ae816117a3565b935060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0820112156118e057600080fd5b506040516040810181811067ffffffffffffffff82111715611904576119046117ec565b6040908152860135815260608601356020820152915060808501356119288161186a565b939692955090935050565b60005b8381101561194e578181015183820152602001611936565b8381111561195d576000848401525b50505050565b6000815180845261197b816020860160208601611933565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117e56020830184611963565b6000602082840312156119d257600080fd5b81356117e58161186a565b805167ffffffffffffffff811681146119f557600080fd5b919050565b600060208284031215611a0c57600080fd5b6117e5826119dd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611a5657611a56611a15565b500390565b600060208284031215611a6d57600080fd5b815180151581146117e557600080fd5b600060208284031215611a8f57600080fd5b5051919050565b600060208284031215611aa857600080fd5b81516117e5816117a3565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611aeb57611aeb611a15565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611b3157600080fd5b8151600381106117e557600080fd5b600080600060608486031215611b5557600080fd5b8351611b608161186a565b60208501516040860151919450925067ffffffffffffffff80821115611b8557600080fd5b818601915086601f830112611b9957600080fd5b815181811115611bab57611bab6117ec565b611bdc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161181b565b9150808252876020828501011115611bf357600080fd5b611c04816020840160208601611933565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000611c366060830184611963565b95945050505050565b60008060408385031215611c5257600080fd5b8251611c5d816117a3565b9150611c6b602084016119dd565b9050925092905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0x8e01a1674ca756b57c4719563437d25e2eac7ffd": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80637d8bd0d8116100ee578063bb98b3f411610097578063dea2198411610071578063dea21984146103ae578063e303272c146103c1578063e3fef4a8146103d4578063f3edcbe1146103e757600080fd5b8063bb98b3f414610375578063bc3f6fd414610388578063c34e047a1461039b57600080fd5b8063a38d5595116100c8578063a38d559514610316578063a4dec37a14610329578063ad7e7e401461033c57600080fd5b80637d8bd0d8146102dd5780638970ac44146102f057806398ccec3e1461030357600080fd5b806354fd4d5011610150578063718394181161012a57806371839418146102ae57806374459cf3146102b75780637b491a98146102ca57600080fd5b806354fd4d501461024c57806358256afb146102885780636c0e21701461029b57600080fd5b806335e80ab31161018157806335e80ab31461021357806341fe538514610226578063534db0e21461023957600080fd5b80630e9d5cb9146101a85780631d8a4e92146101d15780632aecd35c146101e8575b600080fd5b6101bb6101b6366004614888565b6103fa565b6040516101c891906148ff565b60405180910390f35b6101da60125481565b6040519081526020016101c8565b600d546101fb906001600160a01b031681565b6040516001600160a01b0390911681526020016101c8565b6000546101fb906001600160a01b031681565b6101bb610234366004614932565b61047b565b6002546101fb906001600160a01b031681565b6101bb6040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b600a546101fb906001600160a01b031681565b6006546101fb906001600160a01b031681565b6101da60035481565b600e546101fb906001600160a01b031681565b6007546101fb906001600160a01b031681565b6004546101fb906001600160a01b031681565b6101bb6102fe3660046149ed565b6104f8565b6011546101fb906001600160a01b031681565b6005546101fb906001600160a01b031681565b6001546101fb906001600160a01b031681565b60408051808201909152600581527f312e312e3400000000000000000000000000000000000000000000000000000060208201526101bb565b600c546101fb906001600160a01b031681565b6008546101fb906001600160a01b031681565b600b546101fb906001600160a01b031681565b6010546101fb906001600160a01b031681565b600f546101fb906001600160a01b031681565b6009546101fb906001600160a01b031681565b6101bb6103f5366004614a2c565b6107a5565b6040805160a0808201835260008083526020808401829052838501829052606084810183905260809485018390528551938401865288516001600160a01b039081168552828a015192850192909252838601839052948801518386015287850151169282019290925290506104708185856104f8565b9150505b9392505050565b6040805160a0808201835260008083526020808401829052838501829052606084810183905260809485018390528551938401865287516001600160a01b0390811685528289015192850192909252838601839052948701518386015286850151169282019290925290506104f081846107a5565b949350505050565b60606000604051806020016040528060008152509050600085600001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105769190614a59565b9050610581826107da565b915061058e8282866108aa565b915061059f82876000015183610977565b91506105b08287600001518361103c565b91506105c1828760000151836115f0565b91506105d282876000015183611b9a565b91506105e382876000015183611e99565b91506105f482876000015183612443565b915061060682876000015183876128ec565b915061062782876000015188602001518960600151858b608001518a612b39565b915061067b828760000151600089602001518a60600151868a6040518060400160405280600481526020017f504c444700000000000000000000000000000000000000000000000000000000815250612d3d565b91506106cf828760000151600889604001518a60600151868a6040518060400160405280600481526020017f434b444700000000000000000000000000000000000000000000000000000000815250612d3d565b91506106e082876000015183612e47565b915060006106ed85613263565b805190915083901561072c57835115610729578184604051602001610713929190614a76565b604051602081830303815290604052905061072c565b50805b6000845111801561073b575086155b1561079a57806040516020016107519190614ace565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610791916004016148ff565b60405180910390fd5b979650505050505050565b60606104748383604051806040016040528060006001600160a01b0316815260200160006001600160a01b03168152506104f8565b600080546040517f2e48152c00000000000000000000000000000000000000000000000000000000815260048101929092526060916108a4916001600160a01b031690632e48152c90602401602060405180830381865afa158015610843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108679190614b39565b156040518060400160405280600981526020017f5350524346472d3130000000000000000000000000000000000000000000000081525084613300565b92915050565b606060006108b78361334c565b905061096e816001600160a01b0316856001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190614a59565b6001600160a01b0316146040518060400160405280600981526020017f50524f5859412d3130000000000000000000000000000000000000000000000081525087613300565b95945050505050565b60606109ef6109b361098885613375565b60085461099d906001600160a01b0316613375565b8051602091820120825192909101919091201490565b6040518060400160405280600981526020017f535953434f4e2d3130000000000000000000000000000000000000000000000081525086613300565b9350610aad631dcd650067ffffffffffffffff16846001600160a01b031663f68016b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190614b6c565b67ffffffffffffffff1611156040518060400160405280600981526020017f535953434f4e2d3230000000000000000000000000000000000000000000000081525086613300565b9350610b54836001600160a01b031663f45e65d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b149190614b89565b600014156040518060400160405280600981526020017f535953434f4e2d3330000000000000000000000000000000000000000000000081525086613300565b600854909450610bb7906001600160a01b0316610b7184866133dd565b6001600160a01b0316146040518060400160405280600981526020017f535953434f4e2d3430000000000000000000000000000000000000000000000081525086613300565b93506000836001600160a01b031663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190614bcc565b9050610c6f816000015163ffffffff166301312d00146040518060400160405280600981526020017f535953434f4e2d3530000000000000000000000000000000000000000000000081525087613300565b9450610cbb816020015160ff16600a146040518060400160405280600981526020017f535953434f4e2d3630000000000000000000000000000000000000000000000081525087613300565b9450610d07816040015160ff166008146040518060400160405280600981526020017f535953434f4e2d3730000000000000000000000000000000000000000000000081525087613300565b9450610d58816080015163ffffffff16620f4240146040518060400160405280600981526020017f535953434f4e2d3830000000000000000000000000000000000000000000000081525087613300565b9450610daa816060015163ffffffff16633b9aca00146040518060400160405280600981526020017f535953434f4e2d3930000000000000000000000000000000000000000000000081525087613300565b9450610e166fffffffffffffffffffffffffffffffff80168260a001516fffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f535953434f4e2d3130300000000000000000000000000000000000000000000081525087613300565b9450610ec2846001600160a01b0316634d5d9a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190614c82565b63ffffffff166000146040518060400160405280600a81526020017f535953434f4e2d3131300000000000000000000000000000000000000000000081525087613300565b9450610f72846001600160a01b03166316d3bc7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f299190614b6c565b67ffffffffffffffff166000146040518060400160405280600a81526020017f535953434f4e2d3132300000000000000000000000000000000000000000000081525087613300565b945061096e60008054906101000a90046001600160a01b03166001600160a01b0316856001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff69190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f535953434f4e2d3133300000000000000000000000000000000000000000000081525087613300565b60606000836001600160a01b031663a71198696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614a59565b90506111046110c86110b383613375565b600a5461099d906001600160a01b0316613375565b6040518060400160405280600881526020017f4c3178444d2d313000000000000000000000000000000000000000000000000081525087613300565b600a54909550611167906001600160a01b031661112185846133dd565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d323000000000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190614a59565b90506112987342000000000000000000000000000000000000076001600160a01b0316836001600160a01b0316639fce812c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112529190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d333000000000000000000000000000000000000000000000000081525088613300565b95506113637342000000000000000000000000000000000000076001600160a01b0316836001600160a01b031663db505d806040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d343000000000000000000000000000000000000000000000000081525088613300565b955061141a816001600160a01b0316836001600160a01b0316630ff754ea6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d49190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d353000000000000000000000000000000000000000000000000081525088613300565b95506114d1816001600160a01b0316836001600160a01b0316636425666b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148b9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d363000000000000000000000000000000000000000000000000081525088613300565b9550611588856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d373000000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b03166115a084613464565b6001600160a01b0316146040518060400160405280600881526020017f4c3178444d2d383000000000000000000000000000000000000000000000000081525088613300565b9695505050505050565b60606000836001600160a01b031663078f29cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190614a59565b90506116b861167c61166783613375565b600b5461099d906001600160a01b0316613375565b6040518060400160405280600781526020017f4c3153422d31300000000000000000000000000000000000000000000000000081525087613300565b600b5490955061171b906001600160a01b03166116d585846133dd565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d32300000000000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b031663a71198696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190614a59565b9050611838816001600160a01b0316836001600160a01b031663927ede2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d33300000000000000000000000000000000000000000000000000081525088613300565b95506118ef816001600160a01b0316836001600160a01b0316633cb747bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a99190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d34300000000000000000000000000000000000000000000000000081525088613300565b95506119ba7342000000000000000000000000000000000000106001600160a01b0316836001600160a01b0316637f46ddb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119749190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d35300000000000000000000000000000000000000000000000000081525088613300565b9550611a857342000000000000000000000000000000000000106001600160a01b0316836001600160a01b031663c89701a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f9190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d36300000000000000000000000000000000000000000000000000081525088613300565b9550611b3c856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af69190614a59565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d37300000000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b0316611b5484613464565b6001600160a01b0316146040518060400160405280600781526020017f4c3153422d38300000000000000000000000000000000000000000000000000081525088613300565b60606000836001600160a01b0316639b7d7f0a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c009190614a59565b9050611c62611c26611c1183613375565b60095461099d906001600160a01b0316613375565b6040518060400160405280600a81526020017f4d4552433230462d31300000000000000000000000000000000000000000000081525087613300565b600954909550611cc5906001600160a01b0316611c7f85846133dd565b6001600160a01b0316146040518060400160405280600a81526020017f4d4552433230462d32300000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b031663078f29cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b9190614a59565b9050611de2816001600160a01b0316836001600160a01b031663ee9a31a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9c9190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f4d4552433230462d33300000000000000000000000000000000000000000000081525088613300565b95506115e6816001600160a01b0316836001600160a01b031663e78cea926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e539190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f4d4552433230462d34300000000000000000000000000000000000000000000081525088613300565b60606000836001600160a01b031663c4e8ddfa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eff9190614a59565b9050611f61611f25611f1083613375565b60045461099d906001600160a01b0316613375565b6040518060400160405280600881526020017f4c373231422d313000000000000000000000000000000000000000000000000081525087613300565b600454909550611fc4906001600160a01b0316611f7e85846133dd565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d323000000000000000000000000000000000000000000000000081525087613300565b94506000846001600160a01b031663a71198696040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614a59565b90506120f57342000000000000000000000000000000000000146001600160a01b0316836001600160a01b0316637f46ddb26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d333000000000000000000000000000000000000000000000000081525088613300565b95506121c07342000000000000000000000000000000000000146001600160a01b0316836001600160a01b031663c89701a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217a9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d343000000000000000000000000000000000000000000000000081525088613300565b9550612277816001600160a01b0316836001600160a01b031663927ede2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561220d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122319190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d353000000000000000000000000000000000000000000000000081525088613300565b955061232e816001600160a01b0316836001600160a01b0316633cb747bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d363000000000000000000000000000000000000000000000000081525088613300565b95506123e5856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561237b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239f9190614a59565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d373000000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b03166123fd84613464565b6001600160a01b0316146040518060400160405280600881526020017f4c373231422d383000000000000000000000000000000000000000000000000081525088613300565b60606000836001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a99190614a59565b90506124bb601254600160001b6134c8565b156125bf576125556125196124cf83613375565b6006546124e4906001600160a01b0316613375565b6040516020016124f49190614c9d565b6040516020818303038152906040528051602091820120825192909101919091201490565b6040518060400160405280600981526020017f504f5254414c2d3130000000000000000000000000000000000000000000000081525087613300565b6006549095506125b8906001600160a01b031661257285846133dd565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3230000000000000000000000000000000000000000000000081525087613300565b9450612603565b6125e36125196125ce83613375565b60055461099d906001600160a01b0316613375565b600554909550612600906001600160a01b031661257285846133dd565b94505b6000846001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015612643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126679190614a59565b905061271e816001600160a01b0316836001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d89190614a59565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3330000000000000000000000000000000000000000000000081525088613300565b95506127d5856001600160a01b0316836001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f9190614a59565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3430000000000000000000000000000000000000000000000081525088613300565b955061288e61dead6001600160a01b0316836001600160a01b0316639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128489190614a59565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3830000000000000000000000000000000000000000000000081525088613300565b95506115e6846001600160a01b03166128a684613464565b6001600160a01b0316146040518060400160405280600981526020017f504f5254414c2d3930000000000000000000000000000000000000000000000081525088613300565b606060006128f98361334c565b90506000856001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561293b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295f9190614a59565b90506129c161298561297083613375565b600c5461099d906001600160a01b0316613375565b6040518060400160405280600581526020017f44462d313000000000000000000000000000000000000000000000000000000081525089613300565b600c54909750612a24906001600160a01b03166129de87846133dd565b6001600160a01b0316146040518060400160405280600581526020017f44462d323000000000000000000000000000000000000000000000000000000081525089613300565b9650612adb826001600160a01b0316826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a959190614a59565b6001600160a01b0316146040518060400160405280600581526020017f44462d333000000000000000000000000000000000000000000000000000000081525089613300565b965061079a856001600160a01b0316612af383613464565b6001600160a01b0316146040518060400160405280600581526020017f44462d343000000000000000000000000000000000000000000000000000000081525089613300565b604080518082018252600481527f504444470000000000000000000000000000000000000000000000000000000060208083019190915282516101c081018452600080825291810182905292830181905260608084018290526080840182905260a0840182905260c0840182905260e08401829052610100840182905261012084018290526101408401829052610160840182905261018084018290526101a084018290529260019291612bef8c858d866134dc565b909d5090925090508015612c09578b94505050505061079a565b612c696040518061012001604052808e81526020018d6001600160a01b031681526020018481526020018c81526020018b81526020018a6001600160a01b031681526020018663ffffffff16815260200188815260200185815250613770565b9b506000612c7687613afe565b9050612cd1816001600160a01b03168461018001516001600160a01b0316146040518060400160405280600881526020017f504444472d3133300000000000000000000000000000000000000000000000008152508f613300565b9c50612d2c886001600160a01b0316846101a001516001600160a01b0316146040518060400160405280600881526020017f504444472d3134300000000000000000000000000000000000000000000000008152508f613300565b9d9c50505050505050505050505050565b604080516101c08101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082018390526101408201839052610160820183905261018082018390526101a0820183905291612dbb8b8a8c876134dc565b909c5090925090508015612dd3578a92505050612e3b565b612e336040518061012001604052808d81526020018c6001600160a01b031681526020018481526020018a8152602001898152602001886001600160a01b031681526020018b63ffffffff16815260200187815260200186815250613770565b9a508a925050505b98975050505050505050565b60606000836001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ead9190614a59565b90506000816001600160a01b031663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f139190614a59565b6040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201529091506001600160a01b038616906347af267b90602401602060405180830381865afa158015612f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb79190614b39565b612fc5578592505050610474565b613025612fe9612fd483613375565b60075461099d906001600160a01b0316613375565b6040518060400160405280600a81526020017f4c4f434b424f582d31300000000000000000000000000000000000000000000081525088613300565b600754909650613088906001600160a01b031661304286846133dd565b6001600160a01b0316146040518060400160405280600a81526020017f4c4f434b424f582d32300000000000000000000000000000000000000000000081525088613300565b95506130e6846001600160a01b03166130a083613464565b6001600160a01b0316146040518060400160405280600a81526020017f4c4f434b424f582d33300000000000000000000000000000000000000000000081525088613300565b955061319d856001600160a01b0316826001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131579190614a59565b6001600160a01b0316146040518060400160405280600a81526020017f4c4f434b424f582d34300000000000000000000000000000000000000000000081525088613300565b6040517f0fd110770000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529197506115e691831690630fd1107790602401602060405180830381865afa158015613203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132279190614b39565b6040518060400160405280600a81526020017f4c4f434b424f582d35300000000000000000000000000000000000000000000081525088613300565b805160609081906001600160a01b03161561329b57806040516020016132899190614cb9565b60405160208183030381529060405290505b60208301516001600160a01b0316156108a4578051156132d857806040516020016132c69190614cfa565b60405160208183030381529060405290505b806040516020016132e99190614d3b565b604051602081830303815290604052905092915050565b6060831561330f575080610474565b815160000361332057829150613345565b8183604051602001613333929190614a76565b60405160208183030381529060405291505b5092915050565b80516000906001600160a01b03161561336457505190565b50506001546001600160a01b031690565b6060816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa1580156133b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108a49190810190614df0565b6040517f204e1c7a0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000919084169063204e1c7a90602401602060405180830381865afa158015613440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104749190614a59565b6000816001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190614a59565b600081158015906104745750509081161490565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810182905290859080600163ffffffff881663ffffffff161490506000866001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190614a59565b6040517f1b685b9e00000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201529091506000906001600160a01b03831690631b685b9e90602401602060405180830381865afa15801561362f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136539190614a59565b90506001600160a01b03811661369c5761368e6000886040516020016136799190614e39565b60405160208183030381529060405287613300565b945060019350505050613766565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201526000906001600160a01b038416906374cc86ac90602401600060405180830381865afa158015613702573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261372a9190810190614df0565b9050600061373a8783878c613b2d565b9097509050801561375357600195505050505050613766565b61375e83838d613bb5565b975050505050505b9450945094915050565b805161010082015160408084015161012081015182517fd83ef267000000000000000000000000000000000000000000000000000000008152835192936000936001600160a01b039093169263d83ef2679260048082019392918290030181865afa1580156137e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138079190614e7a565b509050600085602001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561384e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138729190614a59565b90506138d96138c86138878560000151613375565b60c089015163ffffffff166001146138b3576010546138ae906001600160a01b0316613375565b61099d565b60115461099d906001600160a01b0316613375565b856040516020016136799190614e9e565b94506139068660c0015163ffffffff168460a0015163ffffffff1614856040516020016136799190614edf565b945061392786606001518460e0015114856040516020016136799190614f20565b9450613949866080015184610160015114856040516020016136799190614f61565b94506139678360c00151600014856040516020016136799190614fa2565b9450613990836080015167ffffffffffffffff16612a3014856040516020016136799190614fe3565b94506139ae8360400151601e14856040516020016136799190615024565b94506139cc8360200151604914856040516020016136799190615065565b94506139f6836060015167ffffffffffffffff1662049d40148560405160200161367991906150a6565b9450613a136000801b8314158560405160200161367991906150e7565b9450613a348587602001518561014001518960a001518a60e0015189613eea565b9450613a51858760200151838661012001518a60a0015189614164565b9450613a638584610100015186614399565b600f546101008501519196506001600160a01b03908116911603613af557613af2858461010001516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aec9190614a59565b866144ae565b94505b50505050919050565b60208101516000906001600160a01b031615613b1c57506020015190565b50506002546001600160a01b031690565b6060600082604051602001613b429190615128565b60405160208183030381529060405292508315613b9f576000613b66865160a41490565b9050613b928185604051602001613b7d9190614e39565b60405160208183030381529060405289613300565b9650869250159050613bac565b6000613b668651607c1490565b94509492505050565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810182905290613c2f84614625565b9050604051806101c00160405280866001600160a01b03168152602001866001600160a01b031663fa315aa96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cae9190614b89565b8152602001866001600160a01b031663ec5e63086040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d159190614b89565b8152602001866001600160a01b031663dabd396d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7c9190614b6c565b67ffffffffffffffff168152602001866001600160a01b0316636b6716c06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ded9190614b6c565b67ffffffffffffffff1681526020018463ffffffff168152602001866001600160a01b03166399735e326040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6a9190614b89565b81526020018260000151815260200182602001516001600160a01b0316815260200182604001516001600160a01b0316815260200182606001516001600160a01b03168152602001826080015181526020018260c001516001600160a01b031681526020018260a001516001600160a01b03168152509150509392505050565b606081604051602001613efd9190615169565b6040516020818303038152906040529150613f43613f32613f1d87613375565b600e5461099d906001600160a01b0316613375565b83604051602001613b7d9190614e39565b600e54909750613f7b906001600160a01b0316613f6086886133dd565b6001600160a01b03161483604051602001613b7d9190614e9e565b96506000613f888461334c565b9050614029816001600160a01b0316876001600160a01b031663dad544e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff99190614a59565b6001600160a01b031614846040516020016140149190614edf565b6040516020818303038152906040528a613300565b97506140a5600354876001600160a01b0316636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561406f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140939190614b89565b14846040516020016140149190614f20565b9750614131876001600160a01b0316876001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141169190614a59565b6001600160a01b0316148460405160200161401491906151aa565b9750612e3b856001600160a01b031661414988613464565b6001600160a01b031614846040516020016140149190614f61565b60608160405160200161417791906151eb565b60405160208183030381529060405291506141ac613f3261419786613375565b600d5461099d906001600160a01b0316613375565b600d549097506141c9906001600160a01b0316613f6085876133dd565b9650614255856001600160a01b0316856001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015614216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423a9190614a59565b6001600160a01b03161483604051602001613b7d9190614edf565b96506142e1866001600160a01b0316856001600160a01b03166333d7e2bd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c69190614a59565b6001600160a01b03161483604051602001613b7d9190614f20565b9650614314836001600160a01b03166142f986613464565b6001600160a01b03161483604051602001613b7d91906151aa565b965061079a6000856001600160a01b0316634086d1836040518163ffffffff1660e01b8152600401602060405180830381865afa158015614359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437d9190614b6c565b67ffffffffffffffff161183604051602001613b7d9190614f61565b6060816040516020016143ac919061522c565b60408051601f1981840301815290829052600f549093506143fc916001600160a01b03868116921691909114906143e7908590602001614e39565b60405160208183030381529060405286613300565b935061443361442261440d85613375565b600f5461099d906001600160a01b0316613375565b836040516020016143e79190614e9e565b93506104f0836001600160a01b0316631219a4e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015614476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061449a9190614b89565b600814836040516020016143e79190614edf565b6060816040516020016144c1919061526d565b604051602081830303815290604052915061452b61451a6144e185613375565b60408051808201909152600581527f312e312e34000000000000000000000000000000000000000000000000000000602082015261099d565b836040516020016143e79190614e39565b93506145a8836001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561456e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145929190614b89565b6201518014836040516020016143e79190614e9e565b93506104f0836001600160a01b031663dd24f9bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460f9190614b89565b6201ec3014836040516020016143e79190614edf565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152815160a481148015906146725750607c8114155b156146a9576040517fbff6e41600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151604084015160548501516068860151607c870151606093841c9392831c929190911c906000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c880161470f575050609c88015160b0890151606091821c911c5b6040805160e0810182529788526001600160a01b0396871660208901529486169487019490945291841660608601526080850152821660a08401521660c08201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001600160a01b038116811461479b57600080fd5b50565b6000608082840312156147b057600080fd5b6040516080810181811067ffffffffffffffff821117156147d3576147d3614757565b60405290508082356147e481614786565b808252506020830135602082015260408301356040820152606083013561480a81614786565b6060919091015292915050565b801515811461479b57600080fd5b60006040828403121561483757600080fd5b6040516040810181811067ffffffffffffffff8211171561485a5761485a614757565b604052905080823561486b81614786565b8152602083013561487b81614786565b6020919091015292915050565b600080600060e0848603121561489d57600080fd5b6148a7858561479e565b925060808401356148b781614817565b91506148c68560a08601614825565b90509250925092565b60005b838110156148ea5781810151838201526020016148d2565b838111156148f9576000848401525b50505050565b602081526000825180602084015261491e8160408501602087016148cf565b601f01601f19169190910160400192915050565b60008060a0838503121561494557600080fd5b61494f848461479e565b9150608083013561495f81614817565b809150509250929050565b600060a0828403121561497c57600080fd5b60405160a0810181811067ffffffffffffffff8211171561499f5761499f614757565b60405290508082356149b081614786565b8082525060208301356020820152604083013560408201526060830135606082015260808301356149e081614786565b6080919091015292915050565b60008060006101008486031215614a0357600080fd5b614a0d858561496a565b925060a0840135614a1d81614817565b91506148c68560c08601614825565b60008060c08385031215614a3f57600080fd5b614a49848461496a565b915060a083013561495f81614817565b600060208284031215614a6b57600080fd5b815161047481614786565b60008351614a888184602088016148cf565b7f2c000000000000000000000000000000000000000000000000000000000000009083019081528351614ac28160018401602088016148cf565b01600101949350505050565b7f4f50436f6e7472616374734d616e616765725374616e6461726456616c69646181527f746f723a20000000000000000000000000000000000000000000000000000000602082015260008251614b2c8160258501602087016148cf565b9190910160250192915050565b600060208284031215614b4b57600080fd5b815161047481614817565b67ffffffffffffffff8116811461479b57600080fd5b600060208284031215614b7e57600080fd5b815161047481614b56565b600060208284031215614b9b57600080fd5b5051919050565b805163ffffffff81168114614bb657600080fd5b919050565b805160ff81168114614bb657600080fd5b600060c08284031215614bde57600080fd5b60405160c0810181811067ffffffffffffffff82111715614c0157614c01614757565b604052614c0d83614ba2565b8152614c1b60208401614bbb565b6020820152614c2c60408401614bbb565b6040820152614c3d60608401614ba2565b6060820152614c4e60808401614ba2565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114614c7657600080fd5b60a08201529392505050565b600060208284031215614c9457600080fd5b61047482614ba2565b60008251614caf8184602087016148cf565b9190910192915050565b60008251614ccb8184602087016148cf565b7f4f56455252494445532d4c3150414f4d554c5449534947000000000000000000920191825250601701919050565b60008251614d0c8184602087016148cf565b7f2c00000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b60008251614d4d8184602087016148cf565b7f4f56455252494445532d4348414c4c454e474552000000000000000000000000920191825250601401919050565b600067ffffffffffffffff80841115614d9757614d97614757565b604051601f8501601f19908116603f01168101908282118183101715614dbf57614dbf614757565b81604052809350858152868686011115614dd857600080fd5b614de68660208301876148cf565b5050509392505050565b600060208284031215614e0257600080fd5b815167ffffffffffffffff811115614e1957600080fd5b8201601f81018413614e2a57600080fd5b6104f084825160208401614d7c565b60008251614e4b8184602087016148cf565b7f2d31300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008060408385031215614e8d57600080fd5b505080516020909101519092909150565b60008251614eb08184602087016148cf565b7f2d32300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614ef18184602087016148cf565b7f2d33300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614f328184602087016148cf565b7f2d34300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614f738184602087016148cf565b7f2d36300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614fb48184602087016148cf565b7f2d37300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b60008251614ff58184602087016148cf565b7f2d38300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b600082516150368184602087016148cf565b7f2d39300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b600082516150778184602087016148cf565b7f2d31303000000000000000000000000000000000000000000000000000000000920191825250600401919050565b600082516150b88184602087016148cf565b7f2d31313000000000000000000000000000000000000000000000000000000000920191825250600401919050565b600082516150f98184602087016148cf565b7f2d31323000000000000000000000000000000000000000000000000000000000920191825250600401919050565b6000825161513a8184602087016148cf565b7f2d47415247530000000000000000000000000000000000000000000000000000920191825250600601919050565b6000825161517b8184602087016148cf565b7f2d44574554480000000000000000000000000000000000000000000000000000920191825250600601919050565b600082516151bc8184602087016148cf565b7f2d35300000000000000000000000000000000000000000000000000000000000920191825250600301919050565b600082516151fd8184602087016148cf565b7f2d414e43484f5250000000000000000000000000000000000000000000000000920191825250600801919050565b6000825161523e8184602087016148cf565b7f2d564d0000000000000000000000000000000000000000000000000000000000920191825250600301919050565b6000825161527f8184602087016148cf565b7f2d50494d474f000000000000000000000000000000000000000000000000000092019182525060060191905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000049d40", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x00000000000000000000000074f1ac50eb0be98853805d381c884f5f9abdecf9", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000cdb7a450076dc6c607b60c6956bace4cca77c12f", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x000000000000000000000000a63f352da318a6f0767a703da6b91ea8e9177f02", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x000000000000000000000000784d2f03593a42a6e4676a012762f18775ecbbe6", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x00000000000000000000000083a2df4b23236dccc59a67d289cd5163190213ea", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000b686f13aff1e427a1f993f29ab0f2e7383729fe0", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0x00000000000000000000000061525eaacddb97d9184afc205827e6a4fd0bf62a", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0000000000000000000000006d46535c721a7721e5975790aa97f793a438ed4c", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0x00000000000000000000000089dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0x00000000000000000000000033dadc2d1aa9bb613a7ae6b28425ea00d44c6998", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0x000000000000000000000000969e7a548b4e1ea6f44b101535318a7d1a469f8a", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0x0000000000000000000000006b35cca790320593ad27960764db1d53a099eebc", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0x0000000000000000000000007b57e3025d0c33ac2c0cc44ac915650895a619d3", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - }, - "0x90f79bf6eb2c4f870365e785982e1f101e93b906": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x95401dc811bb5740090279ba06cfa8fcf6113778": { - "balance": "0x0", - "code": "0x608060405234801561000f575f80fd5b5060043610610163575f3560e01c80639f3eb672116100c7578063ce3fe7ee1161007d578063d80a4c2811610063578063d80a4c281461030f578063dac79fc814610317578063ed0fb60314610288575f80fd5b8063ce3fe7ee146102d8578063d522f60a14610301575f80fd5b8063bc3a0911116100ad578063bc3a0911146102d8578063cd8f6997146102e9578063cda752ff146102fb575f80fd5b80639f3eb672146102c3578063a628a19e146102d8575f80fd5b80636d8f5aa91161011c5780637f82ea6c116101025780637f82ea6c1461027557806380710c80146102885780639143e764146102af575f80fd5b80636d8f5aa91461024c5780637e41f57c1461025f575f80fd5b8063330282f51161014c578063330282f51461018f57806336adf1c91461021157806355ddfa0614610239575f80fd5b80630f1f0f8614610167578063213b26581461017c575b5f80fd5b61017a610175366004610ee1565b505050565b005b61017a61018a366004610f41565b61032a565b61017a61019d366004610f78565b5f805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61022461021f366004610f9a565b61042b565b60405190151581526020015b60405180910390f35b610224610247366004611043565b6104f7565b61022461025a36600461111a565b6106b0565b61022461026d366004611146565b5f9392505050565b61017a6102833660046111a8565b610715565b5f5b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610230565b61017a6102bd366004611237565b50505050565b6102246102d1366004611287565b5f92915050565b61017a6102e6366004610f78565b50565b61017a6102f7366004611327565b5050565b3061028a565b61017a61017536600461136b565b61028a61086d565b61017a6103253660046113b0565b61089b565b801561039e575073ffffffffffffffffffffffffffffffffffffffff165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4d6f636b457370726573736f54454556657269666965723a20756e726567697360448201527f746572696e67206e6f7420737570706f7274656400000000000000000000000060648201526084015b60405180910390fd5b6002545f90819060ff1661043f5730610458565b5f5473ffffffffffffffffffffffffffffffffffffffff165b6040517f6d8f5aa900000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff821690636d8f5aa9906104af908890879060040161145b565b602060405180830381865afa1580156104ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ee91906114ba565b95945050505050565b5f600183600181111561050c5761050c61142e565b14610543576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517ff2069c4294e295535d771d7fbbd52e3db330ca380d24e42af36427513a27649b60208201529081018590525f906060016040516020818303038152906040528051906020012090505f61059a82610951565b90505f6105a782896109be565b6002549091505f9060ff166105bc57306105d5565b5f5473ffffffffffffffffffffffffffffffffffffffff165b6040517f6d8f5aa900000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff821690636d8f5aa99061062c9085908a9060040161145b565b602060405180830381865afa158015610647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066b91906114ba565b6106a1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600198975050505050505050565b5f60015f8360018111156106c6576106c661142e565b60018111156106d7576106d761142e565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff8716825290925290205460ff16905092915050565b60018260018111156107295761072961142e565b146107b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4d6f636b457370726573736f54454556657269666965723a206f6e6c79204e4960448201527f54524f20737570706f72746564000000000000000000000000000000000000006064820152608401610422565b60148510610865575f6107cc601482888a6114d5565b6107d5916114fc565b60601c90506001805f8460018111156107f0576107f061142e565b60018111156108015761080161142e565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9590951681529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b505050505050565b6002545f9060ff161561089657505f5473ffffffffffffffffffffffffffffffffffffffff1690565b503090565b6014841061094a575f6108b160148287896114d5565b6108ba916114fc565b60601c90506001805f8460018111156108d5576108d561142e565b60018111156108e6576108e661142e565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9590951681529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b5050505050565b5f6109b861095d6109e0565b836040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101839052604281018290525f9060620160405160208183030381529060405280519060200120905092915050565b92915050565b5f805f6109cb8585610b13565b915091506109d881610b55565b509392505050565b5f3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000095401dc811bb5740090279ba06cfa8fcf611377816148015610a4557507f0000000000000000000000000000000000000000000000000000000000aa36a746145b15610a6f57507fd1df8b540861317511bce8fcb1e687b8725da2fe56deb4c0d7c808a6d632dbd790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f2c8dbda6d933995d68811718a8f9faa29e7d3c5748bc811a2277ec9bc9dcf624828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b5f808251604103610b47576020830151604084015160608501515f1a610b3b87828585610da8565b94509450505050610b4e565b505f905060025b9250929050565b5f816004811115610b6857610b6861142e565b03610b705750565b6001816004811115610b8457610b8461142e565b03610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610422565b6002816004811115610bff57610bff61142e565b03610c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610422565b6003816004811115610c7a57610c7a61142e565b03610d07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610422565b6004816004811115610d1b57610d1b61142e565b036102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610422565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610ddd57505f90506003610eaf565b8460ff16601b14158015610df557508460ff16601c14155b15610e0557505f90506004610eaf565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610e56573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610ea9575f60019250925050610eaf565b91505f90505b94509492505050565b80151581146102e6575f80fd5b600281106102e6575f80fd5b8035610edc81610ec5565b919050565b5f805f60608486031215610ef3575f80fd5b833592506020840135610f0581610eb8565b91506040840135610f1581610ec5565b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146102e6575f80fd5b5f8060408385031215610f52575f80fd5b8235610f5d81610f20565b91506020830135610f6d81610eb8565b809150509250929050565b5f60208284031215610f88575f80fd5b8135610f9381610f20565b9392505050565b5f805f60608486031215610fac575f80fd5b8335610fb781610f20565b92506020840135610f0581610ec5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561103b5761103b610fc7565b604052919050565b5f805f8060808587031215611056575f80fd5b843567ffffffffffffffff8082111561106d575f80fd5b818701915087601f830112611080575f80fd5b813560208282111561109457611094610fc7565b6110c4817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601610ff4565b925081835289818386010111156110d9575f80fd5b81818501828501375f8183850101528297508089013596505050505061110160408601610ed1565b915061110f60608601610ed1565b905092959194509250565b5f806040838503121561112b575f80fd5b823561113681610f20565b91506020830135610f6d81610ec5565b5f805f60608486031215611158575f80fd5b833592506020840135610f0581610ec5565b5f8083601f84011261117a575f80fd5b50813567ffffffffffffffff811115611191575f80fd5b602083019150836020828501011115610b4e575f80fd5b5f805f805f80608087890312156111bd575f80fd5b863567ffffffffffffffff808211156111d4575f80fd5b6111e08a838b0161116a565b909850965060208901359150808211156111f8575f80fd5b5061120589828a0161116a565b909550935050604087013561121981610ec5565b9150606087013561122981610ec5565b809150509295509295509295565b5f805f806080858703121561124a575f80fd5b84359350602085013561125c81610eb8565b9250604085013561126c81610ec5565b9150606085013561127c81610ec5565b939692955090935050565b5f8060408385031215611298575f80fd5b823591506020830135610f6d81610ec5565b5f82601f8301126112b9575f80fd5b8135602067ffffffffffffffff8211156112d5576112d5610fc7565b8160051b6112e4828201610ff4565b92835284810182019282810190878511156112fd575f80fd5b83870192505b8483101561131c57823582529183019190830190611303565b979650505050505050565b5f8060408385031215611338575f80fd5b823567ffffffffffffffff81111561134e575f80fd5b61135a858286016112aa565b9250506020830135610f6d81610ec5565b5f805f6060848603121561137d575f80fd5b833567ffffffffffffffff811115611393575f80fd5b61139f868287016112aa565b9350506020840135610f0581610ec5565b5f805f805f606086880312156113c4575f80fd5b853567ffffffffffffffff808211156113db575f80fd5b6113e789838a0161116a565b909750955060208801359150808211156113ff575f80fd5b5061140c8882890161116a565b909450925050604086013561142081610ec5565b809150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8316815260408101600283106114ad577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f602082840312156114ca575f80fd5b8151610f9381610eb8565b5f80858511156114e3575f80fd5b838611156114ef575f80fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000813581811691601485101561153c5780818660140360031b1b83161692505b50509291505056fea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "0x969e7a548b4e1ea6f44b101535318a7d1a469f8a": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631219a4e41461005157806354fd4d50146100865780637dc0d1d0146100cf578063e14ced3214610113575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000085b6040519081526020015b60405180910390f35b6100c26040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161007d9190615144565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001fb8cdfc6831fc866ed9c51af8817da5c287add316815260200161007d565b6100736101213660046151f9565b60006101308686868686610143565b905061013a61066b565b95945050505050565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101c36150da565b6000608083146101d257600080fd5b61026082146101e057600080fd5b604051610760146101f057600080fd5b608489146101fd57600080fd5b610164871461020b57600080fd5b508735608052602088013560a052604088013560c090811c81526048890135811c60e052605089013560f890811c6101005260518a0135821c6101205260598a0135821c6101405260618a0135811c6101605260628a0135811c61018081905260638b0135831c6101a052606b8b0135831c6101c05260738b013590911c6101e05260748a01356102005260948a01356102205260b48a013590911c610240526102b4816107b5565b826101000151156102d1576102c76107f9565b935050505061013a565b7fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58361018001511480156103085750826101600151155b8061034457507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5836101a0015114801561034457508261016001515b156103d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4d49505336343a206163746976652074687265616420737461636b206973206560448201527f6d7074790000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101208301805160010167ffffffffffffffff1690526103f482610919565b6103fe8383610a3d565b8160400151156104195761041183610ae1565b6102c76107f9565b620186a067ffffffffffffffff1683610140015167ffffffffffffffff161061044f576104468383610b6c565b506102c76107f9565b6101408301805160010167ffffffffffffffff16905260006102ae905060008060006104848660600151886000015186610d4a565b9250925092508163ffffffff1660001480156104a657508063ffffffff16600c145b156104c2576104b489610dd0565b97505050505050505061013a565b63ffffffff8216603014806104dd575063ffffffff82166038145b156104ee576104b487878585611f95565b63ffffffff821660341480610509575063ffffffff8216603c145b1561051a576104b487878585611f95565b60006105a4876040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b6040805160e080820183528382528a015160208201528a5191810191909152610a2e606082015263ffffffff808716608083015285811660a0830152841660c08201529091506000806105f68361224a565b918d52855167ffffffffffffffff9081166060808f01919091526020880151821660808f01526040880151821660a08f01528701511660c08d01529250905061063d6127ff565b811561064d5761064d8b826128bc565b6106556107f9565b9b50505050505050505050505095945050505050565b604080516101e0808201835260008083526020830181905292820183905260608201839052608080830184905260a0830184905260c0830184905260e08301849052610100830184905261012083018490526101408301849052610160830184905261018083018490526101a083018490526101c0909201839052519091906106f957816101800151610700565b816101a001515b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581036107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4d49505336343a20706f73742d7374617465206163746976652074687265616460448201527f20737461636b20697320656d707479000000000000000000000000000000000060648201526084016103cc565b5050565b60018163ffffffff1611156107f6576040517f0136cc7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60408051608051815260a051602082015260d8519181019190915260f851604882015261011f5160508201526101385160518201526101585160598201526101605161017f5160618301526101805161019f5160628401526101b85160638401526101d851606b8401526101ff5160738401526102005160748401526102205160948401526102585160b4840152600060bc8085018281529194929361026093929183a06000935084600181146108b357600394506108db565b8180156108cb57600181146108d457600295506108d9565b600095506108d9565b600195505b505b505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b179150610915816107b5565b5090565b3661092861012a61016461529c565b8110156109b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d49505336343a20696e73756666696369656e742063616c6c6461746120666f60448201527f7220746872656164207769746e6573730000000000000000000000000000000060648201526084016103cc565b6101643560c090811c835261016c3560f890811c602085015261016d35901c604084015261016e35811c606084015261017635811c608084015261017e35811c60a084015261018635811c9083015260e082015161018e9060005b6020811015610a3657823560c01c8252600890920191602090910190600101610a12565b5050505050565b6000610a50610a4a6128f4565b836129a7565b90506000836101600151610a6957836101800151610a70565b836101a001515b9050818114610adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d49505336343a20696e76616c696420746872656164207769746e657373000060448201526064016103cc565b50505050565b80610160015115610aff57610af46128f4565b6101a0820152610b0e565b610b076128f4565b6101808201525b6000816101600151610b2557816101800151610b2c565b816101a001515b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58103610b6057610160820180511590525b50600061014090910152565b600082610160015115610c30577fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5836101a0015103610c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d49505336343a20656d7074792072696768742074687265616420737461636b60448201526064016103cc565b610c0f6128f4565b6101a0840152610180830151610c2590836129a7565b610180840152610ce3565b7fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb583610180015103610cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d49505336343a20656d707479206c6566742074687265616420737461636b0060448201526064016103cc565b610cc66128f4565b6101808401526101a0830151610cdc90836129a7565b6101a08401525b6000836101600151610cfa57836101800151610d01565b836101a001515b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58103610d395761016084018051159052600191505b506000610140909301929092525090565b600080806003861615610d89576040517f3f8200bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610da08667fffffffffffffff88916876129e9565b9050610db0878260046000612a3b565b9350601a8463ffffffff16901c925083603f169150505b93509350939050565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101829052610e506150da565b608091506102609050600080600080610e6c8560e00151612a8b565b935093509350935060008061139163ffffffff168667ffffffffffffffff1603610eb857610e9f85858a60600151612aa7565b67ffffffffffffffff1660608b01529092509050611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6c67ffffffffffffffff871601610ef757654000000000009150611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec4167ffffffffffffffff87160161114e5762050f0067ffffffffffffffff861614610f61576001610100890152600260e0890152610f536107f9565b9a9950505050505050505050565b50506101c08601516000610f736150da565b6101c089015167ffffffffffffffff9081168252600060208301819052604083018190526080808b018051841660608601525160040183169084015260a0808b015183169084015260c0808b0151909216918301919091525b6020811015611022578860e001518160208110610feb57610feb6152b4565b60200201518260e001518260208110611006576110066152b4565b67ffffffffffffffff9092166020929092020152600101610fcc565b5060e0818101805167ffffffffffffffff8881166103a09092019190915281516000604091820181905292519093018290526101c08c018051600101821690528251608080820185528382526020808301859052828601859052606092830185905285518083018752838f015185168152918e015184169082015260a08d015183169481019490945260c08c0151909116908301529060e0808b015167ffffffffffffffff80881660408301528087169190920152602082018051808316845260040190911690529050805167ffffffffffffffff9081166060808c01919091526020830151821660808c01526040830151821660a08c01528201511660c08a015261112c6127ff565b6111368a83612b59565b61113e6107f9565b9c9b505050505050505050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebab67ffffffffffffffff8716016111a057600161010089015260ff851660e08901526111986127ff565b610f536107f9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7867ffffffffffffffff87160161127a57604080516101208101825267ffffffffffffffff8781168252868116602080840191909152868216838501528b01516060830152918a0151909116608082015260a081018b90527f0000000000000000000000001fb8cdfc6831fc866ed9c51af8817da5c287add373ffffffffffffffffffffffffffffffffffffffff1660c0820152610a2e60e0820152885161010082015261126e8982612b9f565b9093509150611e8f9050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7767ffffffffffffffff871601611322576040805160e08101825267ffffffffffffffff8781168252868116602080840191909152868216838501528b01516060830152918a01519091166080820152610a2e60a0820152885160c082015261130281612be5565b67ffffffffffffffff1660408d015260208c01529093509150611e8f9050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3267ffffffffffffffff8716016113675761135d8585612d77565b9092509050611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebc667ffffffffffffffff8716016113a357505084516000611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3e67ffffffffffffffff87160161140c576001604088015260ff851660208801526113ed88612efe565b1561140457600161010089015260ff851660e08901525b6111986127ff565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebb667ffffffffffffffff87160161152d5767fffffffffffffffc85167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8067ffffffffffffffff8616016114cd57600061148482612f81565b90508463ffffffff808316908216146114ab57600b945067ffffffffffffffff93506114c6565b6114b58b8b61300b565b9d9c50505050505050505050505050565b5050611527565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f67ffffffffffffffff86160161151757611508898961300b565b9b9a5050505050505050505050565b6016925067ffffffffffffffff91505b50611e8f565b67ffffffffffffffff861661139f1480611552575067ffffffffffffffff86166113aa145b1561156157610f53888861300b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7667ffffffffffffffff8716016115a557506009905067ffffffffffffffff611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9a67ffffffffffffffff8716016117435767ffffffffffffffff851615806115f7575067ffffffffffffffff85166001145b156117305750600090508080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff8816016116575750506101208801516298968067ffffffffffffffff9091168181049190066064025b895167fffffffffffffff88716906116729082610a2e613121565b6116a8576040517f8e77b2b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b581610a2e8561312e565b8b526116c18b826128bc565b8a516116d390600883016111ae613121565b611709576040517f834c4cd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611719600882016111ae8461312e565b8b526117288b600883016128bc565b505050611e8f565b506016905067ffffffffffffffff611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5267ffffffffffffffff87160161177f57506000905080611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb3f67ffffffffffffffff8716016117c7576117bb8886866131fd565b8a529092509050611e8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6d67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6e67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebb467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5d67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6a67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebf767ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6b67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb4f67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7567ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6867ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7367ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb8167ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec2167ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb7767ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6967ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5b67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5967ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeba867ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb6867ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3b67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1267ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5e67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9767ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec5467ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeba067ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9f67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb9c67ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1967ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7067ffffffffffffffff87160115611e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb5c67ffffffffffffffff871601611e2d5760808416600003611e2457506016905067ffffffffffffffff611e8f565b60649150611e8f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d49505336343a20756e696d706c656d656e7465642073797363616c6c00000060448201526064016103cc565b6000611f19886040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b60e0808a015167ffffffffffffffff80871660408301528086169190920152602082018051808316845260040190911690529050805167ffffffffffffffff9081166060808b01919091526020830151821660808b01526040830151821660a08b01528201511660c0890152611f8d6127ff565b6115086107f9565b60e08301516000908190601f601586901c1660208110611fb757611fb76152b4565b60200201519050601f601085901c166000611fd18661338a565b830190506001600463ffffffff871660341480611ff4575063ffffffff8716603c145b1561200157506002905060085b885160009063ffffffff891660301480612021575063ffffffff89166034145b1561205b576120338c868560016133a1565b60ff851660808e015267ffffffffffffffff80871660a08f0152821660c08e0152915061215e565b63ffffffff891660381480612076575063ffffffff8916603c145b1561212c578360ff168c6080015160ff161480156120ab57508067ffffffffffffffff168c60c0015167ffffffffffffffff16145b80156120ce57508467ffffffffffffffff168c60a0015167ffffffffffffffff16145b1561212357600060808d0181905260a08d0181905260c08d015260008b60e001518763ffffffff1660208110612106576121066152b4565b602002015190506121198d8786846133e1565b600192505061215e565b6000915061215e565b6040517fecf79d0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121e88c6040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b9050612202818d60e001518963ffffffff1686600161343b565b805167ffffffffffffffff9081166060808f01919091526020830151821660808f01526040830151821660a08f01528201511660c08d01526122426127ff565b6114b56107f9565b604081015160a0820151600090819063ffffffff166002148061227757508360a0015163ffffffff166003145b156122db57608084015160009060021b630ffffffc1661229c63f0000000602061351f565b866000015160200151161790506122d5858660a0015163ffffffff166002146122c657601f6122c9565b60005b63ffffffff1683613599565b506127f8565b60808401516020808601516000928392601f601083901c8116939260151c16908110612309576123096152b4565b6020020151925060008190508760a0015163ffffffff166027148061233857508760a0015163ffffffff16601a145b8061234d57508760a0015163ffffffff16601b145b156123815787602001518267ffffffffffffffff1660208110612372576123726152b4565b602002015192508190506124be565b60a088015163ffffffff1615806123a257508760a0015163ffffffff16601c145b156123e15787602001518267ffffffffffffffff16602081106123c7576123c76152b4565b60200201516080890151909350600b1c601f1690506124be565b60208860a0015163ffffffff161015612455578760a0015163ffffffff16600c148061241757508760a0015163ffffffff16600d145b8061242c57508760a0015163ffffffff16600e145b1561244157608088015161ffff1692506124be565b61244e886080015161338a565b92506124be565b60288860a0015163ffffffff1610158061247957508760a0015163ffffffff166022145b8061248e57508760a0015163ffffffff166026145b156124be5787602001518267ffffffffffffffff16602081106124b3576124b36152b4565b602002015192508190505b60048860a0015163ffffffff16101580156124e3575060088860a0015163ffffffff16105b806124f857508760a0015163ffffffff166001145b156125245761251b886000015189602001518a60a001518b608001518689613683565b505050506127f8565b600067ffffffffffffffff9050600060208a60a0015163ffffffff16101580612557575060a08a015163ffffffff16601a145b8061256c575060a08a015163ffffffff16601b145b156125d45761257e8a6080015161338a565b86019550600067fffffffffffffff8871690506125a48b60400151828d606001516129e9565b915060288b60a0015163ffffffff16106125d2578a60a0015163ffffffff166037146125d257809250600093505b505b60006040518060c001604052808c6080015163ffffffff1681526020018c60a0015163ffffffff1681526020018c60c0015163ffffffff1681526020018867ffffffffffffffff1681526020018767ffffffffffffffff1681526020018367ffffffffffffffff168152509050600067ffffffffffffffff612655836138f6565b60a08e01519116915060209063ffffffff1615801561267f575060088d60c0015163ffffffff1610155b801561269e57508067ffffffffffffffff168d60c0015163ffffffff16105b156127ae578c60c0015163ffffffff16600814806126c657508c60c0015163ffffffff166009145b156126fe576126f08d8e60c0015163ffffffff166008146126e757876126ea565b60005b8b613599565b5050505050505050506127f8565b8c60c0015163ffffffff16600a0361272f578c5160208e01516126f09190888c67ffffffffffffffff8d161561343b565b8c60c0015163ffffffff16600b03612761578c5160208e01516126f09190888c67ffffffffffffffff8d16151561343b565b60108d60c0015163ffffffff161015801561278f57508067ffffffffffffffff168d60c0015163ffffffff16105b156127ae576126f08d600001518e602001518f60c001518c8c8b614570565b67ffffffffffffffff858116146127d8576127ce858e606001518461312e565b9b5060019a508499505b6127ee8d600001518e602001518885600161343b565b5050505050505050505b9193909250565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526128806150da565b50608090506102606000612895610a4a6128f4565b9050826101600151156128af576101a08301819052505050565b6101808301819052505050565b60a082015167fffffffffffffff81667ffffffffffffffff8216036107b15760006080830181905260a0830181905260c08301525050565b61028e353661290661012a6020615312565b6129189063ffffffff1661016461529c565b811015610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d49505336343a20696e73756666696369656e742063616c6c6461746120666f60448201527f7220746872656164207769746e6573730000000000000000000000000000000060648201526084016103cc565b6000806129b383614b4a565b60408051602081018790529081018290529091506060016040516020818303038152906040528051906020012091505092915050565b6000806129f7858585614bd3565b909250905080612a33576040517f8e77b2b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600080600080612a4b8887614cab565b925092509250828267ffffffffffffffff168867ffffffffffffffff16901c1693508415612a8057612a7d848261351f565b93505b505050949350505050565b6040810151608082015160a083015160c08401515b9193509193565b6000808284610fff811615612ac157610fff811661100003015b8667ffffffffffffffff16600003612b4b57849350908101906560000000000067ffffffffffffffff83161180612b0b57508467ffffffffffffffff168267ffffffffffffffff16105b80612b2957508567ffffffffffffffff168167ffffffffffffffff16105b15612b4657506016925067ffffffffffffffff9150839050610dc7565b612b4f565b8693505b5093509350939050565b81610160015115612b7e57612b73826101a00151826129a7565b6101a0830152610b60565b612b8d826101800151826129a7565b61018083015250600061014090910152565b600080600080612bae85614d2f565b918b5267ffffffffffffffff90921660408b0152929650909450925090508115612bdc57612bdc86826128bc565b50509250929050565b6060810151608082015182516000928392909167ffffffffffffffff1660011480612c1b5750845167ffffffffffffffff166002145b80612c315750845167ffffffffffffffff166004145b15612c425784604001519350612aa0565b845167ffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa01612d1c576000612c978660c0015167fffffffffffffff88860200151168860a001516129e9565b60608701516020880151604089015192935090916007821660080381811015612cbe578091505b67ffffffffffffffff821660408b018190529850600880830294851b600190951b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192909103029390931c9290921617925060009150612aa09050565b845167ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01612d6257600b935067ffffffffffffffff9250612aa0565b60099567ffffffffffffffff95509193509150565b60008067ffffffffffffffff8316600103612e375767ffffffffffffffff84161580612dad575067ffffffffffffffff84166001145b80612dc2575067ffffffffffffffff84166002145b80612dd7575067ffffffffffffffff84166005145b80612dec575067ffffffffffffffff84166003145b80612e01575067ffffffffffffffff84166006145b80612e16575067ffffffffffffffff84166004145b15612e245760009150612ef7565b506009905067ffffffffffffffff612ef7565b8267ffffffffffffffff16600303612ee85767ffffffffffffffff84161580612e6a575067ffffffffffffffff84166005145b80612e7f575067ffffffffffffffff84166003145b15612e8d5760009150612ef7565b67ffffffffffffffff841660011480612eb0575067ffffffffffffffff84166002145b80612ec5575067ffffffffffffffff84166006145b80612eda575067ffffffffffffffff84166004145b15612e245760019150612ef7565b506016905067ffffffffffffffff5b9250929050565b600080826101600151612f1657826101a00151612f1d565b8261018001515b905060007fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5612f4a6128f4565b1490507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb582148015612f795750805b949350505050565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290525060806000612f7982856004846133a1565b6000808080613098856040805160808101825260008082526020820181905291810182905260608101919091526040518060800160405280836060015167ffffffffffffffff168152602001836080015167ffffffffffffffff1681526020018360a0015167ffffffffffffffff1681526020018360c0015167ffffffffffffffff168152509050919050565b60e08087015167ffffffffffffffff80871660408301528086169190920152602082018051808316845260040190911690529050805167ffffffffffffffff9081166060808801919091526020830151821660808801526040830151821660a08801528201511660c086015261310e8686610b6c565b506131176107f9565b9695505050505050565b600061013a848484614bd3565b60006131398361500d565b600784161561316d576040517fe6c4247b000000000000000000000000000000000000000000000000000000008152600481fd5b6020830192601f851660180360031b83811b913567ffffffffffffffff90911b191617600585901c603b60005b818110156131f15760208701963583821c60011680156131c157600181146131d6576131e7565b600086815260208390526040902095506131e7565b600082815260208790526040902095505b505060010161319a565b50919695505050505050565b6000808067fffffffffffffff885168161323061321e61012a61016461529c565b61322990602061529c565b6107800190565b90506000613243896000015184846129e9565b905060006132b38a610120015160008082679e3779b97f4a7c15019050601e8167ffffffffffffffff16901c811867bf58476d1ce4e5b9029050601b8167ffffffffffffffff16901c81186794d049bb133111eb029050601f8167ffffffffffffffff16901c8118915050919050565b905060006132c1858b61533a565b905060006132d082600861533a565b90508967ffffffffffffffff80821690831610156132eb5750805b600060016132fa836008615363565b67ffffffffffffffff166001901b6133129190615393565b905061331f82600861533a565b61332a906008615363565b67ffffffffffffffff91821691161b613344846008615363565b67ffffffffffffffff91821691161c801986168582161761336689898361312e565b99506133728f8a6128bc565b50909d60009d50979b50969950505050505050505050565b600061339b61ffff8316601061351f565b92915050565b600067fffffffffffffff88416816133c061321e61012a61016461529c565b905060006133d3886000015184846129e9565b9050612a7d87828888612a3b565b67fffffffffffffff8831660006133ff61321e61012a61016461529c565b90506000613412876000015184846129e9565b90506000613422878388886150a2565b905061342f84848361312e565b90975250505050505050565b60208367ffffffffffffffff16106134af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d49505336343a2076616c69642072656769737465720000000000000000000060448201526064016103cc565b67ffffffffffffffff8316158015906134c55750805b156134fc5781848467ffffffffffffffff16602081106134e7576134e76152b4565b67ffffffffffffffff90921660209290920201525b5050505060208101805167ffffffffffffffff8082169093526004019091169052565b6000600167ffffffffffffffff8481167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85810183169190911c83161515926040869003831681901b820192861692831b921b018261357f576000613581565b815b90861667ffffffffffffffff16179250505092915050565b8251805160209091015167ffffffffffffffff9081166004909201161461361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d49505336343a206a756d7020696e2064656c617920736c6f7400000000000060448201526064016103cc565b8251805160208083015167ffffffffffffffff908116909352855184841691015290831615610adb578060080184602001518467ffffffffffffffff1660208110613669576136696152b4565b67ffffffffffffffff909216602092909202015250505050565b6000866000015160040167ffffffffffffffff16876020015167ffffffffffffffff161461370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d49505336343a206272616e636820696e2064656c617920736c6f740000000060448201526064016103cc565b8463ffffffff166004148061372857508463ffffffff166005145b156137b3576000868467ffffffffffffffff166020811061374b5761374b6152b4565b602002015190508067ffffffffffffffff168367ffffffffffffffff1614801561377b57508563ffffffff166004145b806137ab57508067ffffffffffffffff168367ffffffffffffffff16141580156137ab57508563ffffffff166005145b91505061388d565b8463ffffffff166006036137d05760008260070b1315905061388d565b8463ffffffff166007036137ec5760008260070b13905061388d565b8463ffffffff1660010361388d57601f601085901c1660008190036138155760008360070b1291505b8063ffffffff1660100361384357875160080167ffffffffffffffff166103e08801526000600784900b1291505b8063ffffffff1660010361385c5760008360070b121591505b8063ffffffff1660110361388b57875160080167ffffffffffffffff166103e08801526000600784900b121591505b505b8651602088015167ffffffffffffffff16885281156138d65760026138b761ffff8716601061351f565b67ffffffffffffffff90811690911b82016004011660208901526138ec565b60208801805160040167ffffffffffffffff1690525b5050505050505050565b8051602082015160408301516060840151608085015160a0860151600095949392919063ffffffff85161580613944575060088563ffffffff16101580156139445750600f8563ffffffff16105b8061395557508463ffffffff166018145b8061396657508463ffffffff166019145b1561409a5784600881146139b957600981146139c257600a81146139cb57600b81146139d457600c81146139dd57600d81146139e657600e81146139ef57601881146139f85760198114613a0157613a06565b60209450613a06565b60219450613a06565b602a9450613a06565b602b9450613a06565b60249450613a06565b60259450613a06565b60269450613a06565b602c9450613a06565b602d94505b508363ffffffff16600003613a4757601f600687901c16613a3a67ffffffffffffffff8416821b63ffffffff16602061351f565b9998505050505050505050565b8363ffffffff16600203613a7b57613a6f63ffffffff8316601f600689901c161c602061351f565b98975050505050505050565b8363ffffffff16600303613aaa57601f600687901c16613a3a63ffffffff848116831c9060208490031661351f565b8363ffffffff16600403613ad957601f8316613a3a67ffffffffffffffff8416821b63ffffffff16602061351f565b8363ffffffff16600603613afd57613a6f63ffffffff8316601f85161c602061351f565b8363ffffffff16600703613b2557601f8316613a3a63ffffffff8416821c602083900361351f565b8363ffffffff16600803613b3f5750909695505050505050565b8363ffffffff16600903613b595750909695505050505050565b8363ffffffff16600a03613b735750909695505050505050565b8363ffffffff16600b03613b8d5750909695505050505050565b8363ffffffff16600c03613ba75750909695505050505050565b8363ffffffff16600f03613bc15750909695505050505050565b8363ffffffff16601003613bdb5750909695505050505050565b8363ffffffff16601103613bf55750909695505050505050565b8363ffffffff16601203613c0f5750909695505050505050565b8363ffffffff16601303613c295750909695505050505050565b8363ffffffff16601403613c4257509695505050505050565b8363ffffffff16601603613c5b57509695505050505050565b8363ffffffff16601703613c7457509695505050505050565b8363ffffffff16601803613c8e5750909695505050505050565b8363ffffffff16601903613ca85750909695505050505050565b8363ffffffff16601a03613cc25750909695505050505050565b8363ffffffff16601b03613cdc5750909695505050505050565b8363ffffffff16601c03613cf65750909695505050505050565b8363ffffffff16601d03613d105750909695505050505050565b8363ffffffff16601e03613d2a5750909695505050505050565b8363ffffffff16601f03613d445750909695505050505050565b8363ffffffff16602003613d6557613a6f82840163ffffffff16602061351f565b8363ffffffff16602103613d8657613a6f82840163ffffffff16602061351f565b8363ffffffff16602203613da757613a6f82840363ffffffff16602061351f565b8363ffffffff16602303613dc857613a6f82840363ffffffff16602061351f565b8363ffffffff16602403613de157501695945050505050565b8363ffffffff16602503613dfa57501795945050505050565b8363ffffffff16602603613e1357501895945050505050565b8363ffffffff16602703613e2d5750171995945050505050565b8363ffffffff16602a03613e61578160070b8360070b12613e4f576000613e52565b60015b60ff1698975050505050505050565b8363ffffffff16602b03613e91578167ffffffffffffffff168367ffffffffffffffff1610613e4f576000613e52565b8363ffffffff16602c03613eaa57500195945050505050565b8363ffffffff16602d03613ec357500195945050505050565b8363ffffffff16602e03613edd5750900395945050505050565b8363ffffffff16602f03613ef75750900395945050505050565b8363ffffffff16603803613f26575067ffffffffffffffff1660069490941c601f169390931b95945050505050565b8363ffffffff16603a03613f55575067ffffffffffffffff1660069490941c601f169390931c95945050505050565b8363ffffffff16603b03613f7d575060070b60069490941c601f169390931d95945050505050565b8363ffffffff16603c03613fbc5760068663ffffffff16901c601f1660200163ffffffff168267ffffffffffffffff16901b9650505050505050919050565b8363ffffffff16603e03613ffb5760068663ffffffff16901c601f1660200163ffffffff168267ffffffffffffffff16901c9650505050505050919050565b8363ffffffff16603f036140335760068663ffffffff16901c601f1660200163ffffffff168260070b901d9650505050505050919050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4d49505336343a20696e76616c696420696e737472756374696f6e000000000060448201526064016103cc565b614033565b8463ffffffff16601c0361418f578363ffffffff166002036140c957613a6f82840263ffffffff16602061351f565b8363ffffffff16602014806140e457508363ffffffff166021145b15614133578363ffffffff166020036140fb579119915b60005b6380000000841615614121576801fffffffffffffffe600194851b1693016140fe565b63ffffffff1698975050505050505050565b8363ffffffff166024148061414e57508363ffffffff166025145b15614095578363ffffffff16602403614165579119915b60005b678000000000000000841615614121576801fffffffffffffffe600194851b169301614168565b8463ffffffff16600f036141b657613a6f60108367ffffffffffffffff16901b602061351f565b8463ffffffff166020036141d157613a6f8382600180612a3b565b8463ffffffff166021036141ed57613a6f838260026001612a3b565b8463ffffffff1660220361423e57600061420b848360046000612a3b565b905063ffffffff80821660086003871602821690811b919081901b8116906115089082198716811690841617602061351f565b8463ffffffff1660230361425a57613a6f838260046001612a3b565b8463ffffffff1660240361427657613a6f838260016000612a3b565b8463ffffffff1660250361429257613a6f838260026000612a3b565b8463ffffffff1660260361430f5760006142b0848360046000612a3b565b905063ffffffff80821660038681166008810260180367ffffffffffffffff1692831c939283901c928319881685171691036142f15761113e81602061351f565b67ffffffff00000000959095169094179a9950505050505050505050565b8463ffffffff1660280361432a57613a6f83826001856150a2565b8463ffffffff1660290361434557613a6f83826002856150a2565b8463ffffffff16602a036143985763ffffffff601860039490941b93841681811c67ffffffffffffffff9081166020968716909603811695861b199390931693909116901c1690911b1795945050505050565b8463ffffffff16602b036143b357613a6f83826004856150a2565b8463ffffffff16602e036144135760006143d1848360046000612a3b565b905067ffffffffffffffff838116600860038716026018039182161b9063ffffffff90811681901b8116908119841681169083161761113e87866004846150a2565b8463ffffffff16601a036144475767ffffffffffffffff90811660039390931b60381692831b921b19161795945050505050565b8463ffffffff16601b0361448a5767ffffffffffffffff90811660039390931b60389081169081900382169390931c60089390930181161b161795945050505050565b8463ffffffff166027036144c65767ffffffffffffffff908116602060039490941b8416909303169190911c63ffffffff169695505050505050565b8463ffffffff16602c036144ff5767ffffffffffffffff91821660039390931b60381692831c9190921c19919091161795945050505050565b8463ffffffff16602d0361453e5767ffffffffffffffff603860039490941b8416909303831683811b19919091169190921690911b1795945050505050565b8463ffffffff1660370361455757979650505050505050565b8463ffffffff16603f0361403357509695505050505050565b60008463ffffffff1660100361458b57506060860151614ae2565b8463ffffffff166011036145ae5767ffffffffffffffff84166060880152614ae2565b8463ffffffff166012036145c757506040860151614ae2565b8463ffffffff166013036145ea5767ffffffffffffffff84166040880152614ae2565b8463ffffffff166018036146535760008360030b8560030b02905061461e60208267ffffffffffffffff16901c602061351f565b67ffffffffffffffff16606089015261463e63ffffffff8216602061351f565b67ffffffffffffffff16604089015250614ae2565b8463ffffffff1660190361468d5760008363ffffffff168563ffffffff1602905061461e60208267ffffffffffffffff16901c602061351f565b8463ffffffff16601a0361477b578263ffffffff1660000361470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b6147318360030b8560030b81614723576147236152e3565b0763ffffffff16602061351f565b67ffffffffffffffff166060880152614767600384810b9086900b81614759576147596152e3565b0563ffffffff16602061351f565b67ffffffffffffffff166040880152614ae2565b8463ffffffff16601b0361485d578263ffffffff166000036147f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b6148258363ffffffff168563ffffffff1681614817576148176152e3565b0663ffffffff16602061351f565b67ffffffffffffffff16606088015261476763ffffffff8085169086168161484f5761484f6152e3565b0463ffffffff16602061351f565b8463ffffffff16601403614881575067ffffffffffffffff8216603f84161b614ae2565b8463ffffffff166016036148a5575067ffffffffffffffff8216603f84161c614ae2565b8463ffffffff166017036148c35750600782900b603f84161d614ae2565b8463ffffffff16601c036149005767ffffffffffffffff600785810b9085900b02600f81900b604090811d831660608b0152911690880152614ae2565b8463ffffffff16601d036149355767ffffffffffffffff84811681851602604081811c831660608b0152911690880152614ae2565b8463ffffffff16601e03614a07578267ffffffffffffffff166000036149b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b8260070b8460070b816149cc576149cc6152e3565b0767ffffffffffffffff166060880152600783810b9085900b816149f2576149f26152e3565b0567ffffffffffffffff166040880152614ae2565b8463ffffffff16601f03614ae2578267ffffffffffffffff16600003614a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d49505336343a206469766973696f6e206279207a65726f000000000000000060448201526064016103cc565b8267ffffffffffffffff168467ffffffffffffffff1681614aac57614aac6152e3565b0667ffffffffffffffff908116606089015283811690851681614ad157614ad16152e3565b0467ffffffffffffffff1660408801525b67ffffffffffffffff821615614b245780868367ffffffffffffffff1660208110614b0f57614b0f6152b4565b67ffffffffffffffff90921660209290920201525b50505060208401805167ffffffffffffffff808216909652600401909416909352505050565b60405160188201518152603f8201516008820152605f82015160098201526078820151600a8201526098820151601282015260b8820151601a82015260d8820151602282015260e0820151600091602a8101835b6020811015614bc25760188401518252602090930192600890910190600101614b9e565b506000815281900390209392505050565b600080614bdf8361500d565b6007841615614c13576040517fe6c4247b000000000000000000000000000000000000000000000000000000008152600481fd5b602083019235600585901c81603b60005b81811015614c7b5760208801973584821c6001168015614c4b5760018114614c6057614c71565b60008581526020839052604090209450614c71565b600082815260208690526040902094505b5050600101614c24565b505087149250508115614ca257601f851660180360031b81901c67ffffffffffffffff1692505b50935093915050565b600080806807fffffffffffffff8600385901b1681614ccb82604061533a565b67ffffffffffffffff9081161c90506000614ce760018861533a565b19881660071690506000614cfc88600861533a565b905088821660006003614d0f838561533a565b959c67ffffffffffffffff909616901b9a50949850929650505050505050565b610100810151608082015182516000928392918390819067ffffffffffffffff161561500457865167ffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb01614f7057600067fffffffffffffff888602001511690506000614db0896101000151838b60e001516129e9565b60608a015190915060001a600103614e3257614e2c89606001518a60a0015160408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b60608a01525b6000808a60c0015173ffffffffffffffffffffffffffffffffffffffff1663e03110e18c606001518d608001516040518363ffffffff1660e01b8152600401614e8f92919091825267ffffffffffffffff16602082015260400190565b6040805180830381865afa158015614eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ecf91906153aa565b60208d015160408e01519294509092509060078216600881900384811015614ef5578094505b5083821015614f02578193505b8460088502610100031c9450846008828660080303021b9450600180600883600803021b036001806008878560080303021b03915081198116905085811988161796505050614f56868e60e001518761312e565b929b50505096890196955060019450919250615004915050565b865167ffffffffffffffff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01614fae5786604001519550615004565b865167ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01614ff457600b955067ffffffffffffffff9450615004565b6009955067ffffffffffffffff94505b91939550919395565b3661078082018110156107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4d49505336344d656d6f72793a20636865636b2074686174207468657265206960448201527f7320656e6f7567682063616c6c6461746100000000000000000000000000000060648201526084016103cc565b60008060006150b18786614cab565b5067ffffffffffffffff868316811691811691821b9216901b1987161792505050949350505050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260e08101615120615125565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b8181101561517157858101830151858201604001528201615155565b81811115615183576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f8401126151c957600080fd5b50813567ffffffffffffffff8111156151e157600080fd5b602083019150836020828501011115612ef757600080fd5b60008060008060006060868803121561521157600080fd5b853567ffffffffffffffff8082111561522957600080fd5b61523589838a016151b7565b9097509550602088013591508082111561524e57600080fd5b5061525b888289016151b7565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156152af576152af61526d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600063ffffffff8083168185168083038211156153315761533161526d565b01949350505050565b600067ffffffffffffffff8381169083168181101561535b5761535b61526d565b039392505050565b600067ffffffffffffffff8083168185168183048111821515161561538a5761538a61526d565b02949350505050565b6000828210156153a5576153a561526d565b500390565b600080604083850312156153bd57600080fd5b50508051602090910151909290915056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0x976ea74026e726554db657fa54763abd0c3a0aa9": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0x998abeb3e57409262ae5b751f60747921b33613e": { - "balance": "0x0", - "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906" - } - }, - "0x9ede005fcc899c226098654926398a9e0b3345df": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c806378ecabce1161005057806378ecabce1461022a578063b51f9c2b1461024d578063debc60071461032d57600080fd5b80631d8a4e921461006c57806330e9012c146100a6575b600080fd5b6100937f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61021d6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081019190915250604080516102408101825260055473ffffffffffffffffffffffffffffffffffffffff9081168252600654811660208301526007548116928201929092526008548216606082015260095482166080820152600a54821660a0820152600b54821660c0820152600c54821660e0820152600d548216610100820152600e548216610120820152600f5482166101408201526010548216610160820152601154821661018082015260125482166101a082015260135482166101c082015260145482166101e0820152601554821661020082015260165490911661022082015290565b60405161009d9190610385565b61023d61023836600461055d565b61033a565b604051901515815260200161009d565b6102d16040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260005473ffffffffffffffffffffffffffffffffffffffff90811682526001548116602083015260025481169282019290925260035482166060820152600454909116608082015290565b60405161009d9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b63beefcafe3b151561023d565b60006103667f00000000000000000000000000000000000000000000000000000000000000008361036c565b92915050565b6000811580159061037e575081828416145b9392505050565b815173ffffffffffffffffffffffffffffffffffffffff168152610240810160208301516103cb602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516103f3604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015161041b606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151610443608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015161046b60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161049360c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e08301516104bb60e084018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015173ffffffffffffffffffffffffffffffffffffffff90811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102209384015116929091019190915290565b60006020828403121561056f57600080fd5b503591905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000765c6637a370595845f637739279c353484a26a6", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000a643ea8ee60d92f615ec70af0248c449bbcecf4d", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000001da922d1972e12b3b224cc4d3afbefe4efb4b245", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000a5d36deaf2267b267278a4a1458defe0d65620eb", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000007096758bdd076a4cc42255c278f2cb216d6d8ce3", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000b08cc720f511062537ca78bdb0ae691f04f5a957", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000001f734b89bb1b422b9910118fb8d44c06e33d4dda", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x00000000000000000000000074f1ac50eb0be98853805d381c884f5f9abdecf9", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000cdb7a450076dc6c607b60c6956bace4cca77c12f", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x000000000000000000000000a63f352da318a6f0767a703da6b91ea8e9177f02", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000784d2f03593a42a6e4676a012762f18775ecbbe6", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0x00000000000000000000000083a2df4b23236dccc59a67d289cd5163190213ea", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0x000000000000000000000000149bd036f5f57d0ff4b5f102c9d46e3c0eb2c016", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0x000000000000000000000000b686f13aff1e427a1f993f29ab0f2e7383729fe0", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0x00000000000000000000000061525eaacddb97d9184afc205827e6a4fd0bf62a", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000006d46535c721a7721e5975790aa97f793a438ed4c", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0x00000000000000000000000089dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0x00000000000000000000000033dadc2d1aa9bb613a7ae6b28425ea00d44c6998", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0x000000000000000000000000969e7a548b4e1ea6f44b101535318a7d1a469f8a", - "0x0000000000000000000000000000000000000000000000000000000000000013": "0x0000000000000000000000006b35cca790320593ad27960764db1d53a099eebc", - "0x0000000000000000000000000000000000000000000000000000000000000014": "0x0000000000000000000000007b57e3025d0c33ac2c0cc44ac915650895a619d3", - "0x0000000000000000000000000000000000000000000000000000000000000015": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000016": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - }, - "0xa0ee7a142d267c1f36714e4a8f75612f20a79720": { - "balance": "0x21e19e0c9bab2400000", - "code": "0x", - "nonce": 0, - "storage": {} - }, - "0xa5d36deaf2267b267278a4a1458defe0d65620eb": { - "balance": "0x0", - "code": "0xfe7100608060405234801561001057600080fd5b50604051610a44380380610a4483398101604081905261002f9161005d565b610057817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6109a88061009c6000396000f3fe60806040526004361061005e5760003560e01c8063893d20e811610043578063893d20e8146100b55780639b0b0fda146100f3578063aaf10f42146101135761006d565b806313af4035146100755780636c5d4ad0146100955761006d565b3661006d5761006b610128565b005b61006b610128565b34801561008157600080fd5b5061006b6100903660046107a2565b6103cb565b3480156100a157600080fd5b5061006b6100b036600461080e565b61045c565b3480156100c157600080fd5b506100ca610611565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ff57600080fd5b5061006b61010e3660046108dd565b6106a8565b34801561011f57600080fd5b506100ca610716565b60006101527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7947262000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8516916101d4919061093a565b600060405180830381855afa9150503d806000811461020f576040519150601f19603f3d011682016040523d82523d6000602084013e610214565b606091505b5091509150818015610227575080516020145b156102d9576000818060200190518101906102429190610946565b905080156102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c314368756753706c61736850726f78793a2073797374656d2069732063757260448201527f72656e746c79206265696e67207570677261646564000000000000000000000060648201526084015b60405180910390fd5b505b60006103037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4c314368756753706c61736850726f78793a20696d706c656d656e746174696f60448201527f6e206973206e6f7420736574207965740000000000000000000000000000000060648201526084016102ce565b3660008037600080366000845af43d6000803e806103c5573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610424575033155b1561045457610451817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b50565b610451610128565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104b5575033155b156104545760006104e47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050803f82516020840120036104f8575050565b60405160009061052e907f600d380380600d6000396000f30000000000000000000000000000000000000090859060200161095f565b604051602081830303815290604052905060008151602083016000f084516020860120909150813f146105e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4c314368756753706c61736850726f78793a20636f646520776173206e6f742060448201527f636f72726563746c79206465706c6f796564000000000000000000000000000060648201526084016102ce565b61060b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50505050565b600061063b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610672575033155b1561069d57507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106a5610128565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610701575033155b1561070a579055565b610712610128565b5050565b60006107407fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610777575033155b1561069d57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6000602082840312156107b457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146107d857600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561082057600080fd5b813567ffffffffffffffff8082111561083857600080fd5b818401915084601f83011261084c57600080fd5b81358181111561085e5761085e6107df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156108a4576108a46107df565b816040528281528760208487010111156108bd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156108f057600080fd5b50508035926020909101359150565b6000815160005b818110156109205760208185018101518683015201610906565b8181111561092f576000828601525b509290920192915050565b60006107d882846108ff565b60006020828403121561095857600080fd5b5051919050565b7fffffffffffffffffffffffffff00000000000000000000000000000000000000831681526000610993600d8301846108ff565b94935050505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0xa63f352da318a6f0767a703da6b91ea8e9177f02": { - "balance": "0x0", - "code": "0x6080604052600436106102385760003560e01c80638c3152e911610138578063bb2c727e116100b0578063cff0ab961161007f578063dad544e011610064578063dad544e01461082a578063e9e05c421461083f578063f2b4e6171461085257600080fd5b8063cff0ab9614610757578063d325d3bf146107f857600080fd5b8063bb2c727e14610648578063bda204bb146106ef578063bf653a5c14610704578063c0c53b8b1461073757600080fd5b80639bf62d8211610107578063a35d99df116100ec578063a35d99df146105db578063a3860f48146105fb578063b682c4441461061b57600080fd5b80639bf62d821461057e578063a14238e7146105ab57600080fd5b80638c3152e9146105095780638c90dd6514610529578063952b27971461054957806399a88ec41461055e57600080fd5b806345884d32116101cb57806354fd4d501161019a5780635c975abb1161017f5780635c975abb146104d457806371c1566e146104e95780638b4c40b01461025d57600080fd5b806354fd4d501461045b5780635c0cba33146104a757600080fd5b806345884d32146103a25780634870496f146103d25780634fd0434c146103f2578063513747ab1461042057600080fd5b80633c9f397c116102075780633c9f397c1461032e5780633e47158c1461035857806343ca1c501461036d578063452a93201461038d57600080fd5b80632152f2be1461026457806333d7e2bd1461028457806335e80ab3146102db57806338d38c97146102f057600080fd5b3661025f5761025d3334620186a0600060405180602001604052806000815250610867565b005b600080fd5b34801561027057600080fd5b5061025d61027f366004614f47565b610ab3565b34801561029057600080fd5b506037546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102e757600080fd5b506102b1610bf9565b3480156102fc57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000041681526020016102d2565b34801561033a57600080fd5b50610343610c92565b60405163ffffffff90911681526020016102d2565b34801561036457600080fd5b506102b1610d26565b34801561037957600080fd5b5061025d610388366004615187565b610f31565b34801561039957600080fd5b506102b1611272565b3480156103ae57600080fd5b506103c26103bd3660046151ce565b6112e2565b60405190151581526020016102d2565b3480156103de57600080fd5b5061025d6103ed36600461524f565b61137d565b3480156103fe57600080fd5b506104076114ad565b60405167ffffffffffffffff90911681526020016102d2565b34801561042c57600080fd5b5061044d61043b3660046152d5565b6000908152603c602052604090205490565b6040519081526020016102d2565b34801561046757600080fd5b50604080518082018252600d81527f352e322e302b696e7465726f7000000000000000000000000000000000000000602082015290516102d29190615364565b3480156104b357600080fd5b50603e546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e057600080fd5b506103c2611541565b3480156104f557600080fd5b5061025d610504366004615377565b6115d5565b34801561051557600080fd5b5061025d61052436600461539c565b6118d9565b34801561053557600080fd5b5061025d6105443660046153d9565b6118e6565b34801561055557600080fd5b5061044d61196a565b34801561056a57600080fd5b5061025d610579366004614f47565b6119fe565b34801561058a57600080fd5b506032546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105b757600080fd5b506103c26105c63660046152d5565b60336020526000908152604090205460ff1681565b3480156105e757600080fd5b506104076105f63660046154b9565b611bc0565b34801561060757600080fd5b506102b16106163660046154d6565b611bd9565b34801561062757600080fd5b50603f546102b19073ffffffffffffffffffffffffffffffffffffffff1681565b34801561065457600080fd5b506106ba610663366004615377565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff9091166020830152016102d2565b3480156106fb57600080fd5b5061025d611c1e565b34801561071057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000c61044d565b34801561074357600080fd5b5061025d6107523660046154f8565b611d00565b34801561076357600080fd5b506001546107bf906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016102d2565b34801561080457600080fd5b50603f546103c29074010000000000000000000000000000000000000000900460ff1681565b34801561083657600080fd5b506102b1611efd565b61025d61084d366004615551565b610867565b34801561085e57600080fd5b506102b1611f51565b8260005a905034156108f757603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ee116bf346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b50505050505b838015610919575073ffffffffffffffffffffffffffffffffffffffff871615155b15610950576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61095a8351611bc0565b67ffffffffffffffff168567ffffffffffffffff1610156109a7576040517f70c8bdbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156109e5576040517f5aa3bac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336109ee611fc1565b610a0b575033731111000000000000000000000000000000001111015b60003488888888604051602001610a269594939291906155d0565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610a969190615364565b60405180910390a45050610aaa8282611fff565b50505050505050565b610abb6122d6565b610ac3612315565b603e5473ffffffffffffffffffffffffffffffffffffffff808316911603610b17576040517f785df91100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603f8054603e805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093557fffffffffffffffffffffff0000000000000000000000000000000000000000008416878216908117740100000000000000000000000000000000000000001790955560408051948216808652602086019690965291169083018190526060830191909152907f9e5368471a58d81987e5dc7d6374dd5ed5e756cc95a79ff726903423bce0060d906080015b60405180910390a150505050565b603754604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190615635565b905090565b603e54604080517f3c9f397c000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633c9f397c9160048083019260209291908290030181865afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190615664565b600080610d517fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610d7457919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610db791906156b0565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610e12906060015b604051602081830303815290604052805190602001205490565b14610e49576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610e6b90606001610df8565b905073ffffffffffffffffffffffffffffffffffffffff811615610eff578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef89190615635565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f396122d6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f8c576040517fdfeaaeb800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f99826040015161236b565b15610fd0576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fdb836123ae565b9050610fe781836115d5565b600081815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556060830151156110b857603f5460608401516040517f8d445bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691638d445bd0916110859160040190815260200190565b600060405180830381600087803b15801561109f57600080fd5b505af11580156110b3573d6000803e3d6000fd5b505050505b8260200151603260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061111b8460400151856080015186606001518760a001516123fb565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061118090841515815260200190565b60405180910390a28015801561119a575060008460600151115b1561122757603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ee116bf85606001516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561120d57600080fd5b505af1158015611221573d6000803e3d6000fd5b50505050505b801580156112355750326001145b1561126c576040517fab58103600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b603754604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015610c69573d6000803e3d6000fd5b603e546040517f45884d3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009216906345884d3290602401602060405180830381865afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137791906156ed565b92915050565b6113856122d6565b603f5474010000000000000000000000000000000000000000900460ff16156113da576040517f5e74b54200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113e4611f51565b73ffffffffffffffffffffffffffffffffffffffff1663bb8aa1fc866040518263ffffffff1660e01b815260040161141e91815260200190565b606060405180830381865afa15801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f919061570a565b6040805160608082018352600080835260208301529181019190915290935091506114879050565b610aaa878360008461149e368b90038b018b61574c565b6114a8898b6157d6565b612459565b603e54604080517f4086d183000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634086d1839160048083019260209291908290030181865afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d919061584f565b603754604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d91906156ed565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152868552603390935292205490919060ff1615611684576040517f730a107400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816020015167ffffffffffffffff166000036116cc576040517fcca6afda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61174b8173ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e919061584f565b67ffffffffffffffff1690565b67ffffffffffffffff16826020015167ffffffffffffffff161161179b576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000c826020015167ffffffffffffffff16426117d6919061586c565b1161180d576040517fd9bc01be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f6c4f446700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690636c4f446790602401602060405180830381865afa15801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a191906156ed565b61126c576040517f332a57f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118e38133610f31565b50565b6118ee6122d6565b603f5474010000000000000000000000000000000000000000900460ff16611942576040517f5e74b54200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aaa87878761195188615883565b6119603689900389018961574c565b6114a887896157d6565b603e54604080517f952b2797000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163952b27979160048083019260209291908290030181865afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d919061598d565b7f0000000000000000000000000000000000000000000000000000000000000004600054610100900460ff16158015611a3e575060005460ff8083169116105b611acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611b08612cb4565b603e805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603f805492851692909116919091179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6000611bcd8260286159a6565b611377906152086159d6565b603c6020528160005260406000208181548110611bf557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b611c26612315565b603f54604080517f1ee116bf0000000000000000000000000000000000000000000000000000000081529051479273ffffffffffffffffffffffffffffffffffffffff1691631ee116bf91849160048082019260009290919082900301818588803b158015611c9457600080fd5b505af1158015611ca8573d6000803e3d6000fd5b5050603f5460405185815273ffffffffffffffffffffffffffffffffffffffff90911693507fd893f630c6867fa43689da9ae949ebf04cac24aad3b45c759d442ed3c32e3a379250602001905060405180910390a250565b7f0000000000000000000000000000000000000000000000000000000000000004600054610100900460ff16158015611d40575060005460ff8083169116105b611dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401611ac6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e05612cb4565b6037805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603e8054868416908316179055603f8054858416921691909117905560325416611e9a57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611ea2612d35565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610beb565b6000611f07610d26565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c69573d6000803e3d6000fd5b603e54604080517ff2b4e617000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f2b4e6179160048083019260209291908290030181865afa158015610c69573d6000803e3d6000fd5b6000323303611fd05750600190565b333b601703611ff857604051602081016040526020600082333c5160e81c62ef010014905090565b5060005b90565b600154600090612035907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361586c565b90506000612041612e48565b90506000816020015160ff16826000015163ffffffff166120629190615a31565b9050821561219957600154600090612099908390700100000000000000000000000000000000900467ffffffffffffffff16615a99565b90506000836040015160ff16836120b09190615b0d565b6001546120d09084906fffffffffffffffffffffffffffffffff16615b0d565b6120da9190615a31565b60015490915060009061212b906121049084906fffffffffffffffffffffffffffffffff16615bc9565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612f0e565b9050600186111561215a5761215761210482876040015160ff1660018a612152919061586c565b612f2d565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906121cc908490700100000000000000000000000000000000900467ffffffffffffffff166159d6565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612259576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612285906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166156b0565b9050600061229748633b9aca00612f82565b6122a19083615c3d565b905060005a6122b0908861586c565b9050808211156122cc576122cc6122c7828461586c565b612f99565b5050505050505050565b6122de611541565b156118d7576040517fb9c3c2ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361231e611efd565b73ffffffffffffffffffffffffffffffffffffffff16146118d7576040517f7f12c64b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff8216301480611377575050603f5473ffffffffffffffffffffffffffffffffffffffff90811691161490565b80516020808301516040808501516060860151608087015160a088015193516000976123de979096959101615c51565b604051602081830303815290604052805190602001209050919050565b600080600061240b866000612fc7565b905080612441576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b612466866040015161236b565b1561249d576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f496b9c1600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529091169063496b9c1690602401602060405180830381865afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906156ed565b612567576040517ff395240e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f04e50fed00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906304e50fed90602401602060405180830381865afa1580156125d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fb91906156ed565b612631576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a29190615cd7565b60028111156126b3576126b3615ca8565b036126ea576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127388573ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171a573d6000803e3d6000fd5b67ffffffffffffffff16421161277a576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603f5474010000000000000000000000000000000000000000900460ff16156129c4576127a683612fe5565b6128188673ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffc919061598d565b1461284f576040517f2b1a9a6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826040015151841061288d576040517f32dc285c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000836040015185815181106128a5576128a5615cf8565b60200260200101519050603760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d6ae3cd56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561291c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612940919061598d565b815114612979576040517f7cc2f31b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61298283612ffe565b8160200151146129be576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50612a52565b6129cd82612ffe565b612a1b8673ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b14612a52576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612a5d876123ae565b90506000816000604051602001612a7e929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250612b299101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282018252600183527f0100000000000000000000000000000000000000000000000000000000000000602084015290870151909190869061303d565b1515600003612b64576040517f2e57ef3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808a16825267ffffffffffffffff42811660208085019182526000888152603982528681203380835290835287822096518754945190951674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009094169486169490941792909217909455868152603c845284812080546001810182559082528482200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091558b840151928c01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a35050505050505050565b33612cbd610d26565b73ffffffffffffffffffffffffffffffffffffffff1614158015612cfe575033612ce5611efd565b73ffffffffffffffffffffffffffffffffffffffff1614155b156118d7576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16612dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401611ac6565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036118d75760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603754604080517fcc731b02000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cc731b029160048083019260c09291908290030181865afa158015612eea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113779190615d3d565b6000612f23612f1d8585613061565b83613071565b90505b9392505050565b6000670de0b6b3a7640000612f6e612f458583615a31565b612f5790670de0b6b3a7640000615a99565b612f6985670de0b6b3a7640000615b0d565b613080565b612f789086615b0d565b612f239190615a31565b600081831015612f925781612f26565b5090919050565b6000805a90505b825a612fac908361586c565b1015612fc257612fbb82615df9565b9150612fa0565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000612ff0826130b1565b805190602001209050919050565b600081600001518260200151836040015184606001516040516020016123de949392919093845260208401929092526040830152606082015260800190565b60008061304986613267565b905061305781868686613299565b9695505050505050565b600081831215612f925781612f26565b6000818312612f925781612f26565b6000612f26670de0b6b3a764000083613098866132c9565b6130a29190615b0d565b6130ac9190615a31565b61350d565b80516060907fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000014613130576040517fc06b523800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81604001515160000361316f576040517f9103e7cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260000151836020015160c01b6040516020016131de9291907fff000000000000000000000000000000000000000000000000000000000000009290921682527fffffffffffffffff00000000000000000000000000000000000000000000000016600182015260090190565b604051602081830303815290604052905060005b8360400151518110156132605760008460400151828151811061321757613217615cf8565b60209081029190910181015180518183015160405192945061323b93879301615e31565b604051602081830303815290604052925050808061325890615df9565b9150506131f2565b5092915050565b6060818051906020012060405160200161328391815260200190565b6040516020818303038152906040529050919050565b60006132c0846132aa87868661374c565b8051602091820120825192909101919091201490565b95945050505050565b6000808213613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611ac6565b60006060613341846141ca565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361353e57506000919050565b680755bf798b4a1bf1e582126135b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401611ac6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606060008451116137b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401611ac6565b60006137c4846142a0565b905060006137d18661438c565b90506000846040516020016137e891815260200190565b60405160208183030381529060405290506000805b845181101561414157600085828151811061381a5761381a615cf8565b6020026020010151905084518311156138b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401611ac6565b8260000361396e5780518051602091820120604051613903926138dd92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401611ac6565b613ac5565b805151602011613a245780518051602091820120604051613998926138dd92910190815260200190565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401611ac6565b805184516020808701919091208251919092012014613ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401611ac6565b613ad160106001615e58565b81602001515103613cad5784518303613c4557613b0b8160200151601081518110613afe57613afe615cf8565b60200260200101516143ef565b96506000875111613b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401611ac6565b60018651613bac919061586c565b8214613c3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401611ac6565b505050505050612f26565b6000858481518110613c5957613c59615cf8565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110613c8457613c84615cf8565b60200260200101519050613c97816144a3565b9550613ca4600186615e58565b9450505061412e565b6002816020015151036140a6576000613cc5826144c8565b9050600081600081518110613cdc57613cdc615cf8565b016020015160f81c90506000613cf3600283615e70565b613cfe906002615e92565b90506000613d0f848360ff166144ec565b90506000613d1d8a896144ec565b90506000613d2b8383614522565b905080835114613dbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401611ac6565b60ff851660021480613dd2575060ff85166003145b15613fc15780825114613e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401611ac6565b613e818760200151600181518110613afe57613afe615cf8565b9c5060008d5111613f14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401611ac6565b60018c51613f22919061586c565b8814613fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401611ac6565b505050505050505050505050612f26565b60ff85161580613fd4575060ff85166001145b15614013576140008760200151600181518110613ff357613ff3615cf8565b60200260200101516144a3565b995061400c818a615e58565b985061409b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401611ac6565b50505050505061412e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401611ac6565b508061413981615df9565b9150506137fd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401611ac6565b6000808211614235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611ac6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b80516060908067ffffffffffffffff8111156142be576142be614f80565b60405190808252806020026020018201604052801561430357816020015b60408051808201909152606080825260208201528152602001906001900390816142dc5790505b50915060005b8181101561438557604051806040016040528085838151811061432e5761432e615cf8565b6020026020010151815260200161435d86848151811061435057614350615cf8565b60200260200101516145cf565b81525083828151811061437257614372615cf8565b6020908102919091010152600101614309565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156143e4578060011b82018184015160001a8060041c8253600f8116600183015350506001016143b6565b509295945050505050565b606060008060006143ff856145e2565b91945092509050600081600181111561441a5761441a615ca8565b14614451576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61445b8284615e58565b855114614494576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132c085602001518484614a80565b606060208260000151106144bf576144ba826143ef565b611377565b61137782614b14565b60606113776144e78360200151600081518110613afe57613afe615cf8565b61438c565b60608251821061450b5750604080516020810190915260008152611377565b612f26838384865161451d919061586c565b614b2a565b6000808251845110614535578251614538565b83515b90505b80821080156145bf575082828151811061455757614557615cf8565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061459657614596615cf8565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156132605781600101915061453b565b60606113776145dd83614d02565b614d6f565b60008060008360000151600003614625576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f811161464a576000600160009450945094505050614a79565b60b7811161476057600061465f60808361586c565b90508087600001511161469e576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214801561471657507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b1561474d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614a79915050565b60bf81116148be57600061477560b78361586c565b9050808760000151116147b4576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614816576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c6037811161485e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148688184615e58565b8951116148a1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148ac836001615e58565b9750955060009450614a799350505050565b60f781116149235760006148d360c08361586c565b905080876000015111614912576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614a79915050565b600061493060f78361586c565b90508087600001511161496f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036149d1576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614a19576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a238184615e58565b895111614a5c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a67836001615e58565b9750955060019450614a799350505050565b9193909250565b60608167ffffffffffffffff811115614a9b57614a9b614f80565b6040519080825280601f01601f191660200182016040528015614ac5576020820181803683370190505b5090508115612f26576000614ada8486615e58565b90506020820160005b84811015614afb578281015182820152602001614ae3565b84811115614b0a576000858301525b5050509392505050565b6060611377826020015160008460000151614a80565b60608182601f011015614b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611ac6565b828284011015614c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611ac6565b81830184511015614c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401611ac6565b606082158015614c915760405191506000825260208201604052614cf9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614cca578051835260209283019201614cb2565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201528151600003614d51576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000614d7f856145e2565b919450925090506001816001811115614d9a57614d9a615ca8565b14614dd1576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451614ddd8385615e58565b14614e14576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614e2b5790505093506000835b8651811015614f1957600080614e9e6040518060400160405280858c60000151614e82919061586c565b8152602001858c60200151614e979190615e58565b90526145e2565b509150915060405180604001604052808383614eba9190615e58565b8152602001848b60200151614ecf9190615e58565b815250888581518110614ee457614ee4615cf8565b6020908102919091010152614efa600185615e58565b9350614f068183615e58565b614f109084615e58565b92505050614e58565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118e357600080fd5b60008060408385031215614f5a57600080fd5b8235614f6581614f25565b91506020830135614f7581614f25565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715614fd257614fd2614f80565b60405290565b6040805190810167ffffffffffffffff81118282101715614fd257614fd2614f80565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561504257615042614f80565b604052919050565b600082601f83011261505b57600080fd5b813567ffffffffffffffff81111561507557615075614f80565b6150a660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614ffb565b8181528460208386010111156150bb57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156150ea57600080fd5b60405160c0810167ffffffffffffffff828210818311171561510e5761510e614f80565b81604052829350843583526020850135915061512982614f25565b8160208401526040850135915061513f82614f25565b816040840152606085013560608401526080850135608084015260a085013591508082111561516d57600080fd5b5061517a8582860161504a565b60a0830152505092915050565b6000806040838503121561519a57600080fd5b823567ffffffffffffffff8111156151b157600080fd5b6151bd858286016150d8565b9250506020830135614f7581614f25565b6000602082840312156151e057600080fd5b8135612f2681614f25565b6000608082840312156151fd57600080fd5b50919050565b60008083601f84011261521557600080fd5b50813567ffffffffffffffff81111561522d57600080fd5b6020830191508360208260051b850101111561524857600080fd5b9250929050565b600080600080600060e0868803121561526757600080fd5b853567ffffffffffffffff8082111561527f57600080fd5b61528b89838a016150d8565b9650602088013595506152a18960408a016151eb565b945060c08801359150808211156152b757600080fd5b506152c488828901615203565b969995985093965092949392505050565b6000602082840312156152e757600080fd5b5035919050565b60005b838110156153095781810151838201526020016152f1565b8381111561126c5750506000910152565b600081518084526153328160208601602086016152ee565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612f26602083018461531a565b6000806040838503121561538a57600080fd5b823591506020830135614f7581614f25565b6000602082840312156153ae57600080fd5b813567ffffffffffffffff8111156153c557600080fd5b6153d1848285016150d8565b949350505050565b6000806000806000806000610120888a0312156153f557600080fd5b873567ffffffffffffffff8082111561540d57600080fd5b6154198b838c016150d8565b985060208a0135915061542b82614f25565b909650604089013595506060890135908082111561544857600080fd5b908901906060828c03121561545c57600080fd5b81955061546c8b60808c016151eb565b94506101008a013591508082111561548357600080fd5b506154908a828b01615203565b989b979a50959850939692959293505050565b67ffffffffffffffff811681146118e357600080fd5b6000602082840312156154cb57600080fd5b8135612f26816154a3565b600080604083850312156154e957600080fd5b50508035926020909101359150565b60008060006060848603121561550d57600080fd5b833561551881614f25565b9250602084013561552881614f25565b9150604084013561553881614f25565b809150509250925092565b80151581146118e357600080fd5b600080600080600060a0868803121561556957600080fd5b853561557481614f25565b945060208601359350604086013561558b816154a3565b9250606086013561559b81615543565b9150608086013567ffffffffffffffff8111156155b757600080fd5b6155c38882890161504a565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516156248160498501602087016152ee565b919091016049019695505050505050565b60006020828403121561564757600080fd5b8151612f2681614f25565b63ffffffff811681146118e357600080fd5b60006020828403121561567657600080fd5b8151612f2681615652565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156e8576156e8615681565b500290565b6000602082840312156156ff57600080fd5b8151612f2681615543565b60008060006060848603121561571f57600080fd5b835161572a81615652565b602085015190935061573b816154a3565b604085015190925061553881614f25565b60006080828403121561575e57600080fd5b6040516080810181811067ffffffffffffffff8211171561578157615781614f80565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8211156157cc576157cc614f80565b5060051b60200190565b60006157e96157e4846157b2565b614ffb565b80848252602080830192508560051b85013681111561580757600080fd5b855b8181101561584357803567ffffffffffffffff8111156158295760008081fd5b61583536828a0161504a565b865250938201938201615809565b50919695505050505050565b60006020828403121561586157600080fd5b8151612f26816154a3565b60008282101561587e5761587e615681565b500390565b60006060823603121561589557600080fd5b61589d614faf565b82357fff00000000000000000000000000000000000000000000000000000000000000811681146158cd57600080fd5b81526020838101356158de816154a3565b8282015260408481013567ffffffffffffffff8111156158fd57600080fd5b850136601f82011261590e57600080fd5b803561591c6157e4826157b2565b81815260069190911b8201840190848101903683111561593b57600080fd5b928501925b8284101561597b578484360312156159585760008081fd5b615960614fd8565b84358152868501358782015282529284019290850190615940565b93860193909352509295945050505050565b60006020828403121561599f57600080fd5b5051919050565b600067ffffffffffffffff808316818516818304811182151516156159cd576159cd615681565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159f9576159f9615681565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a4057615a40615a02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615a9457615a94615681565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ad357615ad3615681565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b0757615b07615681565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615b4e57615b4e615681565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615b8957615b89615681565b60008712925087820587128484161615615ba557615ba5615681565b87850587128184161615615bbb57615bbb615681565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c0357615c03615681565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615c3757615c37615681565b50500190565b600082615c4c57615c4c615a02565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615c9c60c083018461531a565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215615ce957600080fd5b815160038110612f2657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160ff81168114615d3857600080fd5b919050565b600060c08284031215615d4f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615d7257615d72614f80565b6040528251615d8081615652565b8152615d8e60208401615d27565b6020820152615d9f60408401615d27565b60408201526060830151615db281615652565b60608201526080830151615dc581615652565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615ded57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e2a57615e2a615681565b5060010190565b60008451615e438184602089016152ee565b91909101928352506020820152604001919050565b60008219821115615e6b57615e6b615681565b500190565b600060ff831680615e8357615e83615a02565b8060ff84160691505092915050565b600060ff821660ff841680821015615eac57615eac615681565b9003939250505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0xa643ea8ee60d92f615ec70af0248c449bbcecf4d": { - "balance": "0x0", - "code": "0xfe7100608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "nonce": 1, - "storage": {} - }, - "0xaa548131045b79c335d4bb08385fef4ceba3bfe5": { - "balance": "0x0", - "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000003caaed2ed7cd3e53d4d7b5d4bac03bfeb8f972a2", - "0x007c1e774adbfeea461900fcd0d82d3e599675052953d1417bb171f848e27e39": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0ef99612c462bb495b4411d3674b1f698304ca7516aedc1683e20e892828d9c7": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x637613909751abc06cdd57c1b755762ec54ec119c20f53ab22b52123fd454ca9": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x7ed7fbb20709b7a8ffaca6862a739af245e396bcb918400653ae07d7e7a014fc": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xb3ec867699d4910cedc72be977fe173764d77960fc5658b61602a10640e67ac4": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb6b68c6a49af08c68434b9c8591d078d94046eeb9927fed40467a1f3675e51da": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0xb6f1374979fddd07a4d496dc3b0973244af6697958fc088175277086eb729144": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xce7ae6e6c9d294d7b47d106b26c6f0ffdde2c4058c3e2a90e5f780808e40b7d8": "0x4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034", - "0xd56869593aeb3c45a72416daf1abecd7ce6514592905411127d7b6940e71fd80": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xdf00cf1600477e15a1bd9d50ebf993c1c5096fd6f6e80b599a4a4ded1e89ec3a": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0xf0711ff4d9637ca95a1e07fb0de6df4f307d815093330e21d66f72c2d1cfa9fe": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - }, - "0xb08cc720f511062537ca78bdb0ae691f04f5a957": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806354fd4d501161009757806382005715116100665780638200571514610297578063c4d66de8146102aa578063dad544e0146102bd578063f125af6b146102c557600080fd5b806354fd4d501461021e57806357b001f9146102675780635c975abb1461027c57806376a67a511461028457600080fd5b806332dfadd9116100d357806332dfadd91461016357806338d38c971461019a5780633e47158c146101cb578063452a9320146101f857600080fd5b806304dbe3fe146100fa5780630e3b6d1f146101205780632e48152c14610140575b600080fd5b61010d610108366004610af3565b6102ce565b6040519081526020015b60405180910390f35b61010d61012e366004610af3565b60016020526000908152604090205481565b61015361014e366004610af3565b610318565b6040519015158152602001610117565b610153610171366004610af3565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020541590565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000002168152602001610117565b6101d3610364565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610117565b6000546101d39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b61025a6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101179190610b7b565b61027a610275366004610af3565b61056f565b005b6101536105d7565b61027a610292366004610af3565b6105e8565b61027a6102a5366004610af3565b6106c3565b61027a6102b8366004610af3565b610741565b6101d36108b1565b62784ce061010d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036103045750600092915050565b61031162784ce082610bbd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205480820361034e5750600092915050565b61035b62784ce082610bbd565b42109392505050565b60008061038f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff8116156103b257919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026103f59190610bd5565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610450906060015b604051602081830303815290604052805190602001205490565b14610487576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906104a990606001610436565b905073ffffffffffffffffffffffffffffffffffffffff81161561053d578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190610c12565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610577610929565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260408083209290925590519182527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91015b60405180910390a150565b60006105e36000610318565b905090565b6105f0610929565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409020541561066a576040517fb7d8689400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902042905590519182527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891016105cc565b6106cb610929565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812054900361066a576040517f335b869500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610661565b7f0000000000000000000000000000000000000000000000000000000000000002600054610100900460ff16158015610781575060005460ff8083169116105b61080d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610661565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610846610982565b61084f82610a03565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60006108bb610364565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e39190610c12565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610980576040517fafbe9bc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3361098b610364565b73ffffffffffffffffffffffffffffffffffffffff16141580156109cc5750336109b36108b1565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610980576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8416021781556040805173ffffffffffffffffffffffffffffffffffffffff841660208201527f7b743789cff01dafdeae47739925425aab5dfd02d0c8229e4a508bcd2b9f42bb9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610ac391610b7b565b60405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff81168114610af057600080fd5b50565b600060208284031215610b0557600080fd5b813561031181610ace565b6000815180845260005b81811015610b3657602081850181015186830182015201610b1a565b81811115610b48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006103116020830184610b10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610bd057610bd0610b8e565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c0d57610c0d610b8e565b500290565b600060208284031215610c2457600080fd5b815161031181610ace56fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0xb686f13aff1e427a1f993f29ab0f2e7383729fe0": { - "balance": "0x0", - "code": "0x6080604052600436106101cd5760003560e01c80635c975abb116100f7578063b1b1b20911610095578063db505d8011610064578063db505d8014610556578063ddd5a40f14610583578063e46e245a14610599578063ecc70428146105ae57600080fd5b8063b1b1b209146104de578063b28ade251461050e578063d764ad0b1461052e578063dad544e01461054157600080fd5b806383a74074116100d157806383a740741461046c5780638cbeeef2146103835780639fce812c14610483578063a4e7f8bd146104ae57600080fd5b80635c975abb146104055780636425666b1461042a5780636e296e451461045757600080fd5b806338d38c971161016f578063485cc9551161013e578063485cc955146103635780634c1d6a691461038357806354fd4d50146103995780635644cfdf146103ef57600080fd5b806338d38c97146102d35780633dbb202b146103115780633e47158c146103265780633f827a5a1461033b57600080fd5b80632828d7e8116101ab5780632828d7e8146102665780632f7d39221461027b57806333d7e2bd1461029157806335e80ab3146102be57600080fd5b8063028f85f7146101d25780630c568498146102055780630ff754ea1461021a575b600080fd5b3480156101de57600080fd5b506101e7601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561021157600080fd5b506101e7603f81565b34801561022657600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b34801561027257600080fd5b506101e7604081565b34801561028757600080fd5b506101e761520881565b34801561029d57600080fd5b5060fe546102419073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ca57600080fd5b50610241610613565b3480156102df57600080fd5b5060405160ff7f00000000000000000000000000000000000000000000000000000000000000031681526020016101fc565b61032461031f366004611f13565b6106ac565b005b34801561033257600080fd5b5061024161093f565b34801561034757600080fd5b50610350600181565b60405161ffff90911681526020016101fc565b34801561036f57600080fd5b5061032461037e366004611f7a565b610b4a565b34801561038f57600080fd5b506101e7619c4081565b3480156103a557600080fd5b506103e26040518060400160405280600681526020017f322e31312e30000000000000000000000000000000000000000000000000000081525081565b6040516101fc919061201e565b3480156103fb57600080fd5b506101e761138881565b34801561041157600080fd5b5061041a610da4565b60405190151581526020016101fc565b34801561043657600080fd5b5060fc546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561046357600080fd5b50610241610e38565b34801561047857600080fd5b506101e762030d4081565b34801561048f57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610241565b3480156104ba57600080fd5b5061041a6104c9366004612031565b60ce6020526000908152604090205460ff1681565b3480156104ea57600080fd5b5061041a6104f9366004612031565b60cb6020526000908152604090205460ff1681565b34801561051a57600080fd5b506101e7610529366004612079565b610f1f565b61032461053c366004612159565b610fe0565b34801561054d57600080fd5b506102416118f5565b34801561056257600080fd5b5060cf546102419073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058f57600080fd5b506101e761010481565b3480156105a557600080fd5b506101e7602881565b3480156105ba57600080fd5b5061060560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101fc565b60fe54604080517f35e80ab3000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916335e80ab39160048083019260209291908290030181865afa158015610683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a791906121df565b905090565b60cf54604080516020601f86018190048102820181019092528481526108149273ffffffffffffffffffffffffffffffffffffffff169161070a91908790879081908401838280828437600092019190915250879250610f1f915050565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061077660cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016107929796959493929190612245565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611949565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561089960cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516108ab9594939291906122a4565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008061096a7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81161561098d57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000008152505160026109d09190612321565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610a2b906060015b604051602081830303815290604052805190602001205490565b14610a62576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610a8490606001610a11565b905073ffffffffffffffffffffffffffffffffffffffff811615610b18578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1191906121df565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000036000547501000000000000000000000000000000000000000000900460ff16158015610bb6575060005460ff8083167401000000000000000000000000000000000000000090920416105b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff84167401000000000000000000000000000000000000000002167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909116177501000000000000000000000000000000000000000000179055610ccf6119e2565b60fe805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805492851692909116919091179055610d41734200000000000000000000000000000000000007611a65565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60fe54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a7919061235e565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610c3e565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b600080603f610f35604063ffffffff8616612380565b610f3f91906123b0565b611388619c40610f528162030d406123fe565b610f5c91906123fe565b610f6691906123fe565b610f7091906123fe565b9050600061010467ffffffffffffffff168551610f8d919061242a565b9050610fcb610f9d601083612380565b610fa790846123fe565b67ffffffffffffffff16610fbc602884612380565b67ffffffffffffffff16611ba1565b610fd7906152086123fe565b95945050505050565b610fe8610da4565b1561104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610c3e565b60f087901c6002811061110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610c3e565b8061ffff166000036111ff57600061115b878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611bba915050565b600081815260cb602052604090205490915060ff16156111fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610c3e565b505b6000611245898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bd992505050565b905061124f611bfc565b156112875785341461126357611263612442565b600081815260ce602052604090205460ff161561128257611282612442565b6113d9565b341561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610c3e565b600081815260ce602052604090205460ff166113d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610c3e565b6113e287611cd8565b15611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610c3e565b600081815260cb602052604090205460ff1615611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610c3e565b61155585611546611388619c406123fe565b67ffffffffffffffff16611d1e565b158061157b575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561169457600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610c3e565b50506118ec565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061172588619c405a6116e89190612471565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156117db57600082815260cb602052604090205460ff161561177857611778612442565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26118e8565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016118e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610c3e565b5050505b50505050505050565b60006118ff61093f565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610683573d6000803e3d6000fd5b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906119aa908890839089906000908990600401612488565b6000604051808303818588803b1580156119c357600080fd5b505af11580156119d7573d6000803e3d6000fd5b505050505050505050565b336119eb61093f565b73ffffffffffffffffffffffffffffffffffffffff1614158015611a2c575033611a136118f5565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611a63576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000547501000000000000000000000000000000000000000000900460ff16611b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c3e565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611b5a5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081831015611bb15781611bb3565b825b9392505050565b6000611bc885858585611d54565b805190602001209050949350505050565b6000611be9878787878787611ded565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156106a7575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbc91906121df565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611d18575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000806000835160208501868989f195945050505050565b606084848484604051602401611d6d94939291906124e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611e0a9695949392919061252a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611eae57600080fd5b50565b60008083601f840112611ec357600080fd5b50813567ffffffffffffffff811115611edb57600080fd5b602083019150836020828501011115611ef357600080fd5b9250929050565b803563ffffffff81168114611f0e57600080fd5b919050565b60008060008060608587031215611f2957600080fd5b8435611f3481611e8c565b9350602085013567ffffffffffffffff811115611f5057600080fd5b611f5c87828801611eb1565b9094509250611f6f905060408601611efa565b905092959194509250565b60008060408385031215611f8d57600080fd5b8235611f9881611e8c565b91506020830135611fa881611e8c565b809150509250929050565b6000815180845260005b81811015611fd957602081850181015186830182015201611fbd565b81811115611feb576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bb36020830184611fb3565b60006020828403121561204357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561208c57600080fd5b823567ffffffffffffffff808211156120a457600080fd5b818501915085601f8301126120b857600080fd5b8135818111156120ca576120ca61204a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121105761211061204a565b8160405282815288602084870101111561212957600080fd5b82602086016020830137600060208483010152809650505050505061215060208401611efa565b90509250929050565b600080600080600080600060c0888a03121561217457600080fd5b87359650602088013561218681611e8c565b9550604088013561219681611e8c565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156121c057600080fd5b6121cc8a828b01611eb1565b989b979a50959850939692959293505050565b6000602082840312156121f157600080fd5b8151611bb381611e8c565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261229760c0830184866121fc565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006122d46080830186886121fc565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612359576123596122f2565b500290565b60006020828403121561237057600080fd5b81518015158114611bb357600080fd5b600067ffffffffffffffff808316818516818304811182151516156123a7576123a76122f2565b02949350505050565b600067ffffffffffffffff808416806123f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115612421576124216122f2565b01949350505050565b6000821982111561243d5761243d6122f2565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015612483576124836122f2565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a0608082015260006124d560a0830184611fb3565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526125196080830185611fb3565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261257560c0830184611fb3565b9897505050505050505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000ff0000000000000000000000000000000000000000" - } - }, - "0xbc941408d9bbe8da9c40129f12fb0caddc2fcda9": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c8063604aa62811610076578063b23cc0441161005b578063b23cc0441461016d578063b51f9c2b14610182578063b6a4cd21146101d957600080fd5b8063604aa6281461012a57806378ecabce1461014a57600080fd5b80631d8a4e92146100a857806330e9012c146100c3578063318b1b80146100d85780635a4dab3314610103575b600080fd5b6100b06101ec565b6040519081526020015b60405180910390f35b6100cb610275565b6040516100ba91906128b7565b6100eb6100e6366004612a1a565b610389565b6040516001600160a01b0390911681526020016100ba565b6100eb7f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61013d610138366004612c14565b610404565b6040516100ba9190612da9565b61015d610158366004612a1a565b610b7e565b60405190151581526020016100ba565b61018061017b366004612e05565b610c29565b005b61018a611356565b6040516100ba919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6101806101e7366004612ecc565b611403565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102709190612ee9565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102709190612f0d565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103f890613065565b60601c95945050505050565b60608151600003610441576040517fea11647200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000825167ffffffffffffffff81111561045d5761045d612a33565b6040519080825280602002602001820160405280156104a257816020015b604080518082019091526000808252602082015281526020019060019003908161047b5790505b50905060001960005b8451811015610b755760008582815181106104c8576104c86130b5565b6020026020010151905060006104e5826060015163ffffffff1690565b63ffffffff169050808412610526576040517fea11647200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809350600082602001516001600160a01b031663d6ae3cd56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105919190612ee9565b60408401519091506001600160a01b03166107865761063f8184602001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061091906130e4565b855161061b8661145a565b60405160200161062b9190613131565b604051602081830303815290604052611597565b868581518110610651576106516130b5565b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061078183602001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906130e4565b8786815181106106f0576106f06130b5565b6020026020010151600001516107046115f5565b610180015160208701516040516001600160a01b03909116602482015260440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de8000000000000000000000000000000000000000000000000000000001790526116e5565b6107b6565b826040015186858151811061079d5761079d6130b5565b60209081029190910101516001600160a01b0390911690525b60006107c5846020015161176f565b905060006107d78286606001516117d3565b90506107e68560600151611864565b806107f957506107f98560600151611897565b1561090a57600061080d86606001516118b0565b905060006108ba6040518060e0016040528061082a8a6080015190565b81526020018961014001516001600160a01b031681526020016108508a602001516119af565b6001600160a01b031681526020018c8b81518110610870576108706130b5565b6020026020010151600001516001600160a01b031681526020016108978a60600151611a50565b6108a157876108a4565b60005b8152600060208201819052604090910152611a7a565b90506108cc8488606001518484611bc2565b818a89815181106108df576108df6130b5565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250505050610a5d565b606085015163ffffffff166001148061092d5750606085015163ffffffff166005145b15610a2b57600061094186606001516118b0565b905060006108ba6040518060e0016040528061095e8a6080015190565b81526020018961014001516001600160a01b031681526020016109848a602001516119af565b6001600160a01b031681526020018c8b815181106109a4576109a46130b5565b602090810291909101810151516001600160a01b0316825201600163ffffffff166109d68b6060015163ffffffff1690565b63ffffffff16146109e85760006109ea565b875b81526020016109fe87878c60600151611c0b565b6001600160a01b03168152602001610a1b87878c60600151611d26565b6001600160a01b03169052611a7a565b6040517f5d02c1fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608501516101208601516040517f1e33424000000000000000000000000000000000000000000000000000000000815263ffffffff909216600483015260248201526001600160a01b03831690631e33424090604401600060405180830381600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b50505050846060015163ffffffff16837f4b8d2d3f00ea4ebab553d99606c8aea67fd4deb9ef0abee0e7c4b246c59a0e0f8a8981518110610b2557610b256130b5565b60200260200101516020015184604051610b559291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050508080610b6d906131a5565b9150506104ab565b50909392505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2391906131bf565b92915050565b60005b8151811015611352576000828281518110610c4957610c496130b5565b6020026020010151600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb691906130e4565b60408051600680825260e08201909252919250600091906020820160c080368337019050509050600081600081518110610cf257610cf26130b5565b602002602001019063ffffffff16908163ffffffff1681525050600181600181518110610d2157610d216130b5565b602002602001019063ffffffff16908163ffffffff1681525050600481600281518110610d5057610d506130b5565b602002602001019063ffffffff16908163ffffffff1681525050600581600381518110610d7f57610d7f6130b5565b602002602001019063ffffffff16908163ffffffff1681525050600881600481518110610dae57610dae6130b5565b602002602001019063ffffffff16908163ffffffff1681525050600981600581518110610ddd57610ddd6130b5565b602002602001019063ffffffff16908163ffffffff168152505060008060005b835181101561133a576000848281518110610e1a57610e1a6130b5565b602002602001015190506000610e3087836117d3565b90506001600160a01b038116610e47575050611328565b63ffffffff821660041480610e62575063ffffffff82166005145b80610e73575063ffffffff82166009145b15610e815760019350610e86565b600194505b848015610e905750835b15610ec7576040517f393f5fc900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600063ffffffff831660081480610ee4575063ffffffff83166009145b610f0b57898981518110610efa57610efa6130b5565b602002602001015160200151610f2a565b898981518110610f1d57610f1d6130b5565b6020026020010151604001515b905080610f63576040517fb30c83ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604051806101800160405280610f978d8d81518110610f8657610f866130b5565b602002602001015160000151611e14565b81526020018c8c81518110610fae57610fae6130b5565b6020026020010151600001516001600160a01b03168152602001610fd38b8688611e30565b6001600160a01b031681526020018563ffffffff168152602001838152602001846001600160a01b031663fa315aa96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190612ee9565b8152602001846001600160a01b031663ec5e63086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc9190612ee9565b8152602001846001600160a01b0316636b6716c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112391906131dc565b67ffffffffffffffff168152602001846001600160a01b031663dabd396d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119491906131dc565b67ffffffffffffffff1681526040517f6593dc6e00000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526020909101906001600160a01b038c1690636593dc6e90602401602060405180830381865afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190612ee9565b815260200161123d8b8688611f1e565b6001600160a01b0316815260200163ffffffff861660011480611266575063ffffffff86166005145b1515905260408051600180825281830190925291925060009190816020015b60408051610180810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201528252600019909201910181611285579050509050818160008151811061130d5761130d6130b5565b602002602001018190525061132181610404565b5050505050505b80611332816131a5565b915050610dfd565b5050505050808061134a906131a5565b915050610c2c565b5050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156113df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027091906131f9565b806001600160a01b03163b600003611457576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b60608160000361149d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156114c757806114b1816131a5565b91506114c09050600a836132c0565b91506114a1565b60008167ffffffffffffffff8111156114e2576114e2612a33565b6040519080825280601f01601f19166020018201604052801561150c576020820181803683370190505b5090505b841561158f576115216001836132d4565b915061152e600a866132eb565b6115399060306132ff565b60f81b81838151811061154e5761154e6130b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611588600a866132c0565b9450611510565b949350505050565b6000806115a586858561200c565b90506115eb6115b2612042565b6020015182876040516020016115d791906001600160a01b0391909116815260200190565b6040516020818303038152906040526120cb565b9695505050505050565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda96001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610365573d6000803e3d6000fd5b6116ee82611403565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d9061173790869086908690600401613343565b600060405180830381600087803b15801561175157600080fd5b505af1158015611765573d6000803e3d6000fd5b5050505050505050565b6000816001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2391906130e4565b6040517f1b685b9e00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526000906001600160a01b03841690631b685b9e90602401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d91906130e4565b9392505050565b600063ffffffff82161580610c23575060045b63ffffffff1661188a8363ffffffff1690565b63ffffffff161492915050565b600063ffffffff821660081480610c2357506009611877565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8316016118f2576118e76115f5565b610220015192915050565b60001963ffffffff831601611914576119096115f5565b6101e0015192915050565b63ffffffff82166004148061192f575063ffffffff82166009145b156119475761193c6115f5565b610200015192915050565b63ffffffff82161580611960575063ffffffff82166008145b156119785761196d6115f5565b6101c0015192915050565b6040517f45447e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000816001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1391906130e4565b6001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117af573d6000803e3d6000fd5b600063ffffffff821660041480611a6d575063ffffffff82166009145b80610c2357506005611877565b60a08101516060906001600160a01b0316158015611aa3575060c08201516001600160a01b0316155b15611b30578151602080840151604080860151606087015160808801519251611b1a96959293919201948552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602087015292841b83166034860152921b166048830152605c820152607c0190565b6040516020818303038152906040529050919050565b8151602080840151604080860151606080880151608089015160a08a015160c08b01518651988901999099527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000096841b87169588019590955292821b85166054870152811b84166068860152607c85019190915290811b8216609c8401529290921b90911660b082015260c401611b1a565b6040517fb10709570000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063b10709579061173790869086908690600401613378565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611c73573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c9b91908101906133a6565b90508051600003611d1057836001600160a01b031663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0891906130e4565b91505061185d565b611d1981612205565b60a0015195945050505050565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611d8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611db691908101906133a6565b90508051600003611dff57836001600160a01b031663534db0e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b611e0881612205565b60c0015191505061185d565b604080516001600160a01b038316602082015260609101611b1a565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611e98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ec091908101906133a6565b90508051600003611f0957836001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b611f1281612205565b6060015191505061185d565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fae91908101906133a6565b90508051600003611ff757836001600160a01b0316633a7684636040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce4573d6000803e3d6000fd5b61200081612205565b6020015191505061185d565b600083838360405160200161202393929190613414565b6040516020818303038152906040528051906020012090509392505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000bc941408d9bbe8da9c40129f12fb0caddc2fcda96001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156113df573d6000803e3d6000fd5b6000806120fc856001600160a01b0316803b806020016040519081016040528181526000908060200190933c612337565b805190915060ff16156121435780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff909116600482015260240161144e565b602081015151156121865780602001516040517f57a0583500000000000000000000000000000000000000000000000000000000815260040161144e919061343f565b600081604001518460405160200161219f929190613452565b6040516020818303038152906040529050848151602083016000f592506001600160a01b0383166121fc576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152815160a481148015906122525750607c8114155b15612289576040517fbff6e41600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151604084015160548501516068860151607c870151606093841c9392831c929190911c906000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c88016122ef575050609c88015160b0890151606091821c911c5b6040805160e0810182529788526001600160a01b0396871660208901529486169487019490945291841660608601526080850152821660a08401521660c08201529392505050565b61235e6040518060600160405280600060ff16815260200160608152602001606081525090565b6002825110806123c857508160008151811061237c5761237c6130b5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b8061242d5750816001815181106123e1576123e16130b5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15612464576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028360028151811061247b5761247b6130b5565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c90506000836002815181106124ab576124ab6130b5565b60209101015160f81c600390811691508190036124f4576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156125e05760008260ff1667ffffffffffffffff81111561251d5761251d612a33565b6040519080825280601f01601f191660200182016040528015612547576020820181803683370190505b50905060005b8360ff168110156125d257866125648260036132ff565b81518110612574576125746130b5565b602001015160f81c60f81b828281518110612591576125916130b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806125ca816131a5565b91505061254d565b506125dc816127f6565b9150505b60008167ffffffffffffffff8111156125fb576125fb612a33565b6040519080825280601f01601f191660200182016040528015612625576020820181803683370190505b50905060ff8316156126ca57600061263e846003613481565b60ff16905060005b838110156126c7578761265982846132ff565b81518110612669576126696130b5565b602001015160f81c60f81b838281518110612686576126866130b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806126bf816131a5565b915050612646565b50505b6000826126d8856003613481565b60ff166126e591906132ff565b905060008188516126f691906132d4565b905080600003612732576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561274d5761274d612a33565b6040519080825280601f01601f191660200182016040528015612777576020820181803683370190505b50905060008360208b0101602083018481868460045afa92505050806127c9576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6000602082511115612834576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b83518110156128b05761284c8160016132ff565b845161285891906132d4565b6128639060086134a6565b61286e9060026135a9565b848281518110612880576128806130b5565b0160200151612892919060f81c6134a6565b61289c90836132ff565b9150806128a8816131a5565b915050612838565b5092915050565b81516001600160a01b03168152610240810160208301516128e360208401826001600160a01b03169052565b5060408301516128fe60408401826001600160a01b03169052565b50606083015161291960608401826001600160a01b03169052565b50608083015161293460808401826001600160a01b03169052565b5060a083015161294f60a08401826001600160a01b03169052565b5060c083015161296a60c08401826001600160a01b03169052565b5060e083015161298560e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102209384015116929091019190915290565b600060208284031215612a2c57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715612a8657612a86612a33565b60405290565b6040516060810167ffffffffffffffff81118282101715612a8657612a86612a33565b604051610240810167ffffffffffffffff81118282101715612a8657612a86612a33565b604051601f8201601f1916810167ffffffffffffffff81118282101715612afc57612afc612a33565b604052919050565b600067ffffffffffffffff821115612b1e57612b1e612a33565b5060051b60200190565b600067ffffffffffffffff821115612b4257612b42612a33565b50601f01601f191660200190565b600082601f830112612b6157600080fd5b8135612b74612b6f82612b28565b612ad3565b818152846020838601011115612b8957600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b038116811461145757600080fd5b80356119aa81612ba6565b803563ffffffff811681146119aa57600080fd5b67ffffffffffffffff8116811461145757600080fd5b80356119aa81612bda565b801515811461145757600080fd5b80356119aa81612bfb565b60006020808385031215612c2757600080fd5b823567ffffffffffffffff80821115612c3f57600080fd5b818501915085601f830112612c5357600080fd5b8135612c61612b6f82612b04565b81815260059190911b83018401908481019088831115612c8057600080fd5b8585015b83811015612d9c57803585811115612c9c5760008081fd5b8601610180818c03601f1901811315612cb55760008081fd5b612cbd612a62565b8983013588811115612ccf5760008081fd5b612cdd8e8c83870101612b50565b8252506040612ced818501612bbb565b8b8301526060612cfe818601612bbb565b8284015260809150612d11828601612bc6565b818401525060a0808501358284015260c0915081850135818401525060e080850135828401526101009150612d47828601612bf0565b90830152610120612d59858201612bf0565b828401526101409150818501358184015250610160612d79818601612bbb565b82840152612d88848601612c09565b908301525085525050918601918601612c84565b5098975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015612df857815180516001600160a01b0390811686529087015116868501529284019290850190600101612dc6565b5091979650505050505050565b60006020808385031215612e1857600080fd5b823567ffffffffffffffff811115612e2f57600080fd5b8301601f81018513612e4057600080fd5b8035612e4e612b6f82612b04565b81815260609182028301840191848201919088841115612e6d57600080fd5b938501935b83851015612ec05780858a031215612e8a5760008081fd5b612e92612a8c565b8535612e9d81612ba6565b815285870135878201526040808701359082015283529384019391850191612e72565b50979650505050505050565b600060208284031215612ede57600080fd5b813561185d81612ba6565b600060208284031215612efb57600080fd5b5051919050565b80516119aa81612ba6565b60006102408284031215612f2057600080fd5b612f28612aaf565b612f3183612f02565b8152612f3f60208401612f02565b6020820152612f5060408401612f02565b6040820152612f6160608401612f02565b6060820152612f7260808401612f02565b6080820152612f8360a08401612f02565b60a0820152612f9460c08401612f02565b60c0820152612fa560e08401612f02565b60e0820152610100612fb8818501612f02565b90820152610120612fca848201612f02565b90820152610140612fdc848201612f02565b90820152610160612fee848201612f02565b90820152610180613000848201612f02565b908201526101a0613012848201612f02565b908201526101c0613024848201612f02565b908201526101e0613036848201612f02565b90820152610200613048848201612f02565b9082015261022061305a848201612f02565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156130ad5780818460140360031b1b83161693505b505050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156130f657600080fd5b815161185d81612ba6565b60005b8381101561311c578181015183820152602001613104565b8381111561312b576000848401525b50505050565b7f44656c61796564574554482d000000000000000000000000000000000000000081526000825161316981600c850160208701613101565b91909101600c0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982036131b8576131b8613176565b5060010190565b6000602082840312156131d157600080fd5b815161185d81612bfb565b6000602082840312156131ee57600080fd5b815161185d81612bda565b600060a0828403121561320b57600080fd5b60405160a0810181811067ffffffffffffffff8211171561322e5761322e612a33565b604052825161323c81612ba6565b8152602083015161324c81612ba6565b6020820152604083015161325f81612ba6565b6040820152606083015161327281612ba6565b6060820152608083015161328581612ba6565b60808201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826132cf576132cf613291565b500490565b6000828210156132e6576132e6613176565b500390565b6000826132fa576132fa613291565b500690565b6000821982111561331257613312613176565b500190565b6000815180845261332f816020860160208601613101565b601f01601f19169290920160200192915050565b60006001600160a01b0380861683528085166020840152506060604083015261336f6060830184613317565b95945050505050565b63ffffffff841681526001600160a01b038316602082015260606040820152600061336f6060830184613317565b6000602082840312156133b857600080fd5b815167ffffffffffffffff8111156133cf57600080fd5b8201601f810184136133e057600080fd5b80516133ee612b6f82612b28565b81815285602083850101111561340357600080fd5b61336f826020830160208601613101565b83815260606020820152600061342d6060830185613317565b82810360408401526115eb8185613317565b60208152600061185d6020830184613317565b60008351613464818460208801613101565b835190830190613478818360208801613101565b01949350505050565b600060ff821660ff84168060ff0382111561349e5761349e613176565b019392505050565b60008160001904831182151516156134c0576134c0613176565b500290565b600181815b808511156135005781600019048211156134e6576134e6613176565b808516156134f357918102915b93841c93908002906134ca565b509250929050565b60008261351757506001610c23565b8161352457506000610c23565b816001811461353a576002811461354457613560565b6001915050610c23565b60ff84111561355557613555613176565b50506001821b610c23565b5060208310610133831016604e8410600b8410161715613583575081810a610c23565b61358d83836134c5565b80600019048211156135a1576135a1613176565b029392505050565b600061185d838361350856fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0xbf2528122b773d2d5539c2b0912e4710dc9b02db": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c806378ecabce1161005b57806378ecabce1461010f578063b51f9c2b14610132578063b6a4cd2114610189578063cefe12231461019e57600080fd5b80631d8a4e921461008d57806330e9012c146100a8578063318b1b80146100bd5780635a4dab33146100e8575b600080fd5b6100956101be565b6040519081526020015b60405180910390f35b6100b0610247565b60405161009f9190612988565b6100d06100cb366004612af0565b61035b565b6040516001600160a01b03909116815260200161009f565b6100d07f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61012261011d366004612af0565b6103d6565b604051901515815260200161009f565b61013a610481565b60405161009f919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61019c610197366004612b1e565b61052e565b005b6101b16101ac366004612b42565b610585565b60405161009f9190612bac565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190612ce9565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190612d8f565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103ca90612ee7565b60601c95945050505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b9190612f45565b92915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190612f62565b806001600160a01b03163b600003610582576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526106078461156e565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290529061068861195d565b905060006106946119e6565b8251909150610737906107236101008a01356106b46101408c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f416464726573734d616e6167657200000000000000000000000000000000000060208201529150611ad69050565b604080516000815260208101909152611b0c565b6001600160a01b0316602084015260408201516107f4906107d46101008a01356107656101408c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81527f50726f787941646d696e0000000000000000000000000000000000000000000060208201529150611ad69050565b60408051306020820152015b604051602081830303815290604052611b0c565b6001600160a01b0390811680855260208501516040517f0652b57a0000000000000000000000000000000000000000000000000000000081529216600483015290630652b57a90602401600060405180830381600087803b15801561085857600080fd5b505af115801561086c573d6000803e3d6000fd5b505050602084015184516108809250611c46565b825161090a906101008901359061089b6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f4c3145524337323142726964676500000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b0316604084015282516109a290610100890135906109336101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600e81527f4f7074696d69736d506f7274616c00000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b0316610100808501919091528351610a3c91890135906109cd6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81527f4554484c6f636b626f780000000000000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b031660e08401528251610ad49061010089013590610a656101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600c81527f53797374656d436f6e666967000000000000000000000000000000000000000060208201529150611cbe9050565b6001600160a01b031660608401528251610b6c9061010089013590610afd6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601c81527f4f7074696d69736d4d696e7461626c654552433230466163746f72790000000060208201529150611cbe9050565b6001600160a01b031660808401528251610c049061010089013590610b956101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601281527f4469737075746547616d65466163746f7279000000000000000000000000000060208201529150611cbe9050565b6001600160a01b03166101208401528251610c9d9061010089013590610c2e6101408b018b612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601381527f416e63686f72537461746552656769737472790000000000000000000000000060208201529150611cbe9050565b6001600160a01b0316610140808501919091526060830151610d5b91610d3f906101008b013590610cd0908c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601081527f4c315374616e646172644272696467650000000000000000000000000000000060208201529150611ad69050565b8551604080516001600160a01b039092166020830152016107e0565b6001600160a01b0390811660a0850181905284516040517f8d52d4a0000000000000000000000000000000000000000000000000000000008152921691638d52d4a091610dad9160019060040161305f565b600060405180830381600087803b158015610dc757600080fd5b505af1158015610ddb573d6000803e3d6000fd5b505060408051808201909152601a81527f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000060208201526080850151909250610eb99150610ea46101008b0135610e356101408d018d612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601681527f4c3143726f7373446f6d61696e4d657373656e6765720000000000000000000060208201529150611ad69050565b6020808801516040516107e09287910161310b565b6001600160a01b0390811660c0860181905285516040517f8d52d4a0000000000000000000000000000000000000000000000000000000008152921691638d52d4a091610f0b9160029060040161305f565b600060405180830381600087803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b5050855160c08701516040517f860f7cda0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063860f7cda9250610f8a91859060040161310b565b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b5050855161104692506101008b01359150610fd76101408c018c612ffa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601b81527f44656c61796564574554485065726d697373696f6e656447616d65000000000060208201529150611cbe9050565b6001600160a01b03166101a0850152606061106085611d08565b905061107a85600001518660400151856040015184611d90565b61108d6110868a6132a8565b868a611e1a565b90506110a7856000015186606001518560c0015184611d90565b6110b96102608a016102408b016133d8565b1561115e5760608501516040517ff2c4bc9e0000000000000000000000000000000000000000000000000000000081527f435553544f4d5f4741535f544f4b454e000000000000000000000000000000006004820152600160248201526001600160a01b039091169063f2c4bc9e90604401600060405180830381600087803b15801561114557600080fd5b505af1158015611159573d6000803e3d6000fd5b505050505b61116860016103d6565b1561120d5760608501516040517ff2c4bc9e0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f580000000000000000000000000000000000000000006004820152600160248201526001600160a01b039091169063f2c4bc9e90604401600060405180830381600087803b1580156111f457600080fd5b505af1158015611208573d6000803e3d6000fd5b505050505b61121760016103d6565b156112d6576112b68560608181015161014083015160e08401516040516001600160a01b039384166024820152918316604483015291909116606482015260840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905292915050565b90506112d18560000151866101000151856080015184611d90565b6112fa565b6112df85611e39565b90506112fa8560000151866101000151856060015184611d90565b6040805160018082528183019092526000916020808301908036833701905050905085610100015181600081518110611335576113356133f5565b60200260200101906001600160a01b031690816001600160a01b03168152505061135f8682611e67565b915061137986600001518760e001518660a0015185611d90565b61138286611ee0565b915061139c866000015187608001518660e0015185611d90565b6113a586611f5d565b91506113c086600001518760c0015186610100015185611d90565b6113c986611d08565b91506113e486600001518760a0015186610120015185611d90565b6113ed86611f8b565b91506114098660000151876101a0015186610180015185611d90565b61147860405130602482015260609060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052919050565b9150611494866000015187610120015186610140015185611d90565b61149f8a8588611fac565b6101208601516114bb906114b660208d018d612b1e565b611c46565b6114cd6114c78b6132a8565b87612086565b91506114e9866000015187610140015186610160015185611d90565b85516114fc906114b660208d018d612b1e565b876001600160a01b03168a61010001357fb40fb1137b92aa97efb20f29c17d36c5947aac681c3315ba854b0232f83495428860405160200161153e9190612bac565b60408051601f198184030181529082905261155891613424565b60405180910390a3509398975050505050505050565b6101008101351580611584575046816101000135145b156115bb576040517f7a47c9a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ca6020830183612b1e565b6001600160a01b03160361163a576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70436861696e50726f787941646d696e4f776e6572000000000000000000006044820152606401610579565b600061164c6040830160208401612b1e565b6001600160a01b0316036116bc576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f73797374656d436f6e6669674f776e65720000000000000000000000000000006044820152606401610579565b60006116ce6060830160408401612b1e565b6001600160a01b03160361173e576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f62617463686572000000000000000000000000000000000000000000000000006044820152606401610579565b60006117506080830160608401612b1e565b6001600160a01b0316036117c0576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e73616665426c6f636b5369676e65720000000000000000000000000000006044820152606401610579565b60006117d260a0830160808401612b1e565b6001600160a01b031603611842576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f70726f706f7365720000000000000000000000000000000000000000000000006044820152606401610579565b600061185460c0830160a08401612b1e565b6001600160a01b0316036118c4576040517fe646e04300000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6368616c6c656e676572000000000000000000000000000000000000000000006044820152606401610579565b6118d2610120820182612ffa565b905060000361190d576040517f89e0acdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061191d610120830183612ffa565b61192691613437565b03610582576040517f89e0acdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561050a573d6000803e3d6000fd5b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000bf2528122b773d2d5539c2b0912e4710dc9b02db6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610337573d6000803e3d6000fd5b6000838383604051602001611aed93929190613455565b6040516020818303038152906040528051906020012090509392505050565b600080611b3d856001600160a01b0316803b806020016040519081016040528181526000908060200190933c612146565b805190915060ff1615611b845780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610579565b60208101515115611bc75780602001516040517f57a058350000000000000000000000000000000000000000000000000000000081526004016105799190613424565b6000816040015184604051602001611be0929190613480565b6040516020818303038152906040529050848151602083016000f592506001600160a01b038316611c3d576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b6040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015283169063f2fde38b90602401600060405180830381600087803b158015611ca257600080fd5b505af1158015611cb6573d6000803e3d6000fd5b505050505050565b600080611ccc868585611ad6565b9050611cfe611cd961195d565b6020015182876040516020016107e091906001600160a01b0391909116815260200190565b9695505050505050565b60c08101516060828101516040516001600160a01b03938416602482015292166044830152906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905292915050565b611d998261052e565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d90611de2908690869086906004016134af565b600060405180830381600087803b158015611dfc57600080fd5b505af1158015611e10573d6000803e3d6000fd5b5050505050505050565b6060600080611e298686612605565b91509150611cfe868584846127c0565b6060818101516101408301516040516001600160a01b03928316602482015291166044820152606401611d32565b6060826060015182604051602401611e809291906134e4565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f946d920400000000000000000000000000000000000000000000000000000000179052905092915050565b60a08101516040516001600160a01b0390911660248201526060906044015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de80000000000000000000000000000000000000000000000000000000017905292915050565b6060818101516101008301516040516001600160a01b03928316602482015291166044820152606401611d32565b6060818101516040516001600160a01b039091166024820152604401611eff565b6101a08281015161014083015183830151600093870135929190610100880135611fdc60a08a0160808b01612b1e565b611fec60c08b0160a08c01612b1e565b6040805160208101989098527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b81169189019190915294861b8516605488015292851b84166068870152607c860191909152831b8216609c85015290911b1660b082015260c40160405160208183030381529060405290506120808261012001516001856101e001518461287e565b50505050565b6060600083608001518060200190518101906120a2919061353f565b60608401516101208501516040516001600160a01b039283166024820152911660448201528151606482015260208201516084820152600160a482015290915060c40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47a222c50000000000000000000000000000000000000000000000000000000017905291505092915050565b61216d6040518060600160405280600060ff16815260200160608152602001606081525090565b6002825110806121d757508160008151811061218b5761218b6133f5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b8061223c5750816001815181106121f0576121f06133f5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15612273576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028360028151811061228a5761228a6133f5565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c90506000836002815181106122ba576122ba6133f5565b60209101015160f81c60039081169150819003612303576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156123ef5760008260ff1667ffffffffffffffff81111561232c5761232c612d02565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060005b8360ff168110156123e157866123738260036135bd565b81518110612383576123836133f5565b602001015160f81c60f81b8282815181106123a0576123a06133f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806123d9816135d5565b91505061235c565b506123eb816128c7565b9150505b60008167ffffffffffffffff81111561240a5761240a612d02565b6040519080825280601f01601f191660200182016040528015612434576020820181803683370190505b50905060ff8316156124d957600061244d8460036135ef565b60ff16905060005b838110156124d6578761246882846135bd565b81518110612478576124786133f5565b602001015160f81c60f81b838281518110612495576124956133f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806124ce816135d5565b915050612455565b50505b6000826124e78560036135ef565b60ff166124f491906135bd565b905060008188516125059190613614565b905080600003612541576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561255c5761255c612d02565b6040519080825280601f01601f191660200182016040528015612586576020820181803683370190505b50905060008360208b0101602083018481868460045afa92505050806125d8576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6040805160c08082018352600080835260208084018290528385018290526060808501839052608080860184905260a0808701859052875160e081018952858152938401859052968301849052908201839052810182905293840181905290830152906126eb6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b91506040518060e001604052808460c001516001600160a01b0316815260200184604001516001600160a01b031681526020018460a001516001600160a01b031681526020018461010001516001600160a01b0316815260200184608001516001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152509050612785816000015161052e565b612792816020015161052e565b61279f816040015161052e565b6127ac816060015161052e565b6127b9816080015161052e565b9250929050565b8351602080820151908601516040808801519084015160c08901516060958601518a8701516001600160a01b039093169289906127fc9061035b565b60608d015160405161281c9998979695949392918c918f9060240161362b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2b598b8a000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517fb10709570000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063b107095790611de290869086908690600401613774565b6000602082511115612905576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b83518110156129815761291d8160016135bd565b84516129299190613614565b6129349060086137a2565b61293f9060026138a5565b848281518110612951576129516133f5565b0160200151612963919060f81c6137a2565b61296d90836135bd565b915080612979816135d5565b915050612909565b5092915050565b81516001600160a01b03168152610240810160208301516129b460208401826001600160a01b03169052565b5060408301516129cf60408401826001600160a01b03169052565b5060608301516129ea60608401826001600160a01b03169052565b506080830151612a0560808401826001600160a01b03169052565b5060a0830151612a2060a08401826001600160a01b03169052565b5060c0830151612a3b60c08401826001600160a01b03169052565b5060e0830151612a5660e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e080850151821690840152610200808501518216908401526102208085015191821681850152905b505092915050565b600060208284031215612b0257600080fd5b5035919050565b6001600160a01b038116811461058257600080fd5b600060208284031215612b3057600080fd5b8135612b3b81612b09565b9392505050565b600080600060608486031215612b5757600080fd5b833567ffffffffffffffff811115612b6e57600080fd5b84016102608187031215612b8157600080fd5b92506020840135612b9181612b09565b91506040840135612ba181612b09565b809150509250925092565b81516001600160a01b031681526101e081016020830151612bd860208401826001600160a01b03169052565b506040830151612bf360408401826001600160a01b03169052565b506060830151612c0e60608401826001600160a01b03169052565b506080830151612c2960808401826001600160a01b03169052565b5060a0830151612c4460a08401826001600160a01b03169052565b5060c0830151612c5f60c08401826001600160a01b03169052565b5060e0830151612c7a60e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501519182168185015290612ae8565b600060208284031215612cfb57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610240810167ffffffffffffffff81118282101715612d5557612d55612d02565b60405290565b6040516101c0810167ffffffffffffffff81118282101715612d5557612d55612d02565b8051612d8a81612b09565b919050565b60006102408284031215612da257600080fd5b612daa612d31565b612db383612d7f565b8152612dc160208401612d7f565b6020820152612dd260408401612d7f565b6040820152612de360608401612d7f565b6060820152612df460808401612d7f565b6080820152612e0560a08401612d7f565b60a0820152612e1660c08401612d7f565b60c0820152612e2760e08401612d7f565b60e0820152610100612e3a818501612d7f565b90820152610120612e4c848201612d7f565b90820152610140612e5e848201612d7f565b90820152610160612e70848201612d7f565b90820152610180612e82848201612d7f565b908201526101a0612e94848201612d7f565b908201526101c0612ea6848201612d7f565b908201526101e0612eb8848201612d7f565b90820152610200612eca848201612d7f565b90820152610220612edc848201612d7f565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000080821693506014831015612f2f5780818460140360031b1b83161693505b505050919050565b801515811461058257600080fd5b600060208284031215612f5757600080fd5b8151612b3b81612f37565b600060a08284031215612f7457600080fd5b60405160a0810181811067ffffffffffffffff82111715612f9757612f97612d02565b6040528251612fa581612b09565b81526020830151612fb581612b09565b60208201526040830151612fc881612b09565b60408201526060830151612fdb81612b09565b60608201526080830151612fee81612b09565b60808201529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261302f57600080fd5b83018035915067ffffffffffffffff82111561304a57600080fd5b6020019150368190038213156127b957600080fd5b6001600160a01b038316815260408101600383106130a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8260208301529392505050565b60005b838110156130ce5781810151838201526020016130b6565b838111156120805750506000910152565b600081518084526130f78160208601602086016130b3565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820152600061312d60408301846130df565b949350505050565b600060c0828403121561314757600080fd5b60405160c0810181811067ffffffffffffffff8211171561316a5761316a612d02565b604052905080823561317b81612b09565b8152602083013561318b81612b09565b6020820152604083013561319e81612b09565b604082015260608301356131b181612b09565b606082015260808301356131c481612b09565b608082015260a08301356131d781612b09565b60a0919091015292915050565b803563ffffffff81168114612d8a57600080fd5b600082601f83011261320957600080fd5b813567ffffffffffffffff8082111561322457613224612d02565b604051601f8301601f19908116603f0116810190828211818310171561324c5761324c612d02565b8160405283815286602085880101111561326557600080fd5b836020870160208301376000602085830101528094505050505092915050565b803567ffffffffffffffff81168114612d8a57600080fd5b8035612d8a81612f37565b600061026082360312156132bb57600080fd5b6132c3612d5b565b6132cd3684613135565b81526132db60c084016131e4565b60208201526132ec60e084016131e4565b60408201526101008084013560608301526101208085013567ffffffffffffffff8082111561331a57600080fd5b613326368389016131f8565b60808601526101409150818701358181111561334157600080fd5b61334d36828a016131f8565b60a08701525050610160613362818801613285565b60c08601526101806133758189016131e4565b60e08701526101a080890135868801526101c0890135858801526101e0890135848801526133a66102008a01613285565b838801526133b76102208a01613285565b828801526133c86102408a0161329d565b9087015250939695505050505050565b6000602082840312156133ea57600080fd5b8135612b3b81612f37565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602081526000612b3b60208301846130df565b8035602083101561047b57600019602084900360031b1b1692915050565b83815260606020820152600061346e60608301856130df565b8281036040840152611cfe81856130df565b600083516134928184602088016130b3565b8351908301906134a68183602088016130b3565b01949350505050565b60006001600160a01b038086168352808516602084015250606060408301526134db60608301846130df565b95945050505050565b6000604082016001600160a01b0380861684526020604081860152828651808552606087019150828801945060005b81811015613531578551851683529483019491830191600101613513565b509098975050505050505050565b60006040828403121561355157600080fd5b6040516040810181811067ffffffffffffffff8211171561357457613574612d02565b604052825181526020928301519281019290925250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156135d0576135d061358e565b500190565b600060001982036135e8576135e861358e565b5060010190565b600060ff821660ff84168060ff0382111561360c5761360c61358e565b019392505050565b6000828210156136265761362661358e565b500390565b60006102c0820190506001600160a01b03808e16835263ffffffff808e166020850152808d1660408501528b606085015267ffffffffffffffff8b166080850152818a1660a08501528089511660c085015260ff60208a01511660e085015260ff60408a0151166101008501528060608a0151166101208501528060808a01511661014085015250506fffffffffffffffffffffffffffffffff60a0880151166101608301526136e76101808301876001600160a01b03169052565b84516001600160a01b039081166101a0840152602086015181166101c0840152604086015181166101e0840152606086015181166102008401526080860151811661022084015260a0860151811661024084015260c086015116610260830152836102808301526137646102a08301846001600160a01b03169052565b9c9b505050505050505050505050565b63ffffffff841681526001600160a01b03831660208201526060604082015260006134db60608301846130df565b60008160001904831182151516156137bc576137bc61358e565b500290565b600181815b808511156137fc5781600019048211156137e2576137e261358e565b808516156137ef57918102915b93841c93908002906137c6565b509250929050565b6000826138135750600161047b565b816138205750600061047b565b816001811461383657600281146138405761385c565b600191505061047b565b60ff8411156138515761385161358e565b50506001821b61047b565b5060208310610133831016604e8410600b841016171561387f575081810a61047b565b61388983836137c1565b806000190482111561389d5761389d61358e565b029392505050565b6000612b3b838361380456fea164736f6c634300080f000a", - "nonce": 13, - "storage": {} - }, - "0xc3237117312fcd40bbfe8a4fe93b1c74a2e0d78f": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f0001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000877d4a7c4b8d2d49f1b8b814ae08cae354a672eb", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0xdead000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x00000000000000000000000000000000000000000000000069e5d9f300000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000089dc3f22f583e0b8b52c5ffb8b4e9992fbdccb61", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0xcdb7a450076dc6c607b60c6956bace4cca77c12f": { - "balance": "0x0", - "code": "0x6080604052600436106101d15760003560e01c806371c1566e116100f7578063a3860f4811610095578063cff0ab9611610064578063cff0ab9614610620578063dad544e0146106c1578063e9e05c42146106d6578063f2b4e617146106e957600080fd5b8063a3860f4814610520578063b682c44414610540578063bb2c727e14610560578063bf653a5c146105ed57600080fd5b8063952b2797116100d1578063952b27971461049b5780639bf62d82146104b0578063a14238e7146104d0578063a35d99df1461050057600080fd5b806371c1566e1461045b5780638b4c40b0146101f65780638c3152e91461047b57600080fd5b806345884d321161016f578063513747ab1161013e578063513747ab1461039f57806354fd4d50146103da5780635c0cba33146104265780635c975abb1461044657600080fd5b806345884d3214610301578063485cc955146103315780634870496f146103515780634fd0434c1461037157600080fd5b80633c9f397c116101ab5780633c9f397c1461028d5780633e47158c146102b757806343ca1c50146102cc578063452a9320146102ec57600080fd5b806333d7e2bd146101fd57806335e80ab31461023a57806338d38c971461024f57600080fd5b366101f8576101f63334620186a06000604051806020016040528060008152506106fe565b005b600080fd5b34801561020957600080fd5b5060375461021d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561024657600080fd5b5061021d61095b565b34801561025b57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000003168152602001610231565b34801561029957600080fd5b506102a26109e7565b60405163ffffffff9091168152602001610231565b3480156102c357600080fd5b5061021d610a6e565b3480156102d857600080fd5b506101f66102e736600461457d565b610c52565b3480156102f857600080fd5b5061021d610fa8565b34801561030d57600080fd5b5061032161031c3660046145cf565b61100b565b6040519015158152602001610231565b34801561033d57600080fd5b506101f661034c3660046145ec565b611099565b34801561035d57600080fd5b506101f661036c36600461461a565b611281565b34801561037d57600080fd5b50610386611943565b60405167ffffffffffffffff9091168152602001610231565b3480156103ab57600080fd5b506103cc6103ba3660046146f6565b6000908152603c602052604090205490565b604051908152602001610231565b3480156103e657600080fd5b50604080518082018252600581527f352e322e30000000000000000000000000000000000000000000000000000000602082015290516102319190614767565b34801561043257600080fd5b50603e5461021d906001600160a01b031681565b34801561045257600080fd5b506103216119ca565b34801561046757600080fd5b506101f661047636600461477a565b611a51565b34801561048757600080fd5b506101f661049636600461479f565b611cfd565b3480156104a757600080fd5b506103cc611d0a565b3480156104bc57600080fd5b5060325461021d906001600160a01b031681565b3480156104dc57600080fd5b506103216104eb3660046146f6565b60336020526000908152604090205460ff1681565b34801561050c57600080fd5b5061038661051b3660046147f2565b611d91565b34801561052c57600080fd5b5061021d61053b36600461480f565b611daa565b34801561054c57600080fd5b50603f5461021d906001600160a01b031681565b34801561056c57600080fd5b506105c561057b36600461477a565b60396020908152600092835260408084209091529082529020546001600160a01b0381169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b604080516001600160a01b03909316835267ffffffffffffffff909116602083015201610231565b3480156105f957600080fd5b507f000000000000000000000000000000000000000000000000000000000000000c6103cc565b34801561062c57600080fd5b50600154610688906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610231565b3480156106cd57600080fd5b5061021d611de2565b6101f66106e436600461483f565b6106fe565b3480156106f557600080fd5b5061021d611e29565b8260005a905061070c611e8c565b15610749573415610749576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610751611f0e565b156107c65734156107c657603f60009054906101000a90046001600160a01b03166001600160a01b0316631ee116bf346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156107ac57600080fd5b505af11580156107c0573d6000803e3d6000fd5b50505050505b8380156107db57506001600160a01b03871615155b15610812576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081c8351611d91565b67ffffffffffffffff168567ffffffffffffffff161015610869576040517f70c8bdbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156108a7576040517f5aa3bac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336108b0611fcd565b6108cd575033731111000000000000000000000000000000001111015b600034888888886040516020016108e89594939291906148be565b60405160208183030381529060405290506000896001600160a01b0316836001600160a01b03167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161093e9190614767565b60405180910390a45050610952828261200a565b50505050505050565b603754604080517f35e80ab300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916335e80ab39160048083019260209291908290030181865afa1580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614923565b905090565b603e54604080517f3c9f397c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691633c9f397c9160048083019260209291908290030181865afa158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614952565b600080610a997fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b90506001600160a01b03811615610aaf57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610af2919061499e565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790610b4d906060015b604051602081830303815290604052805190602001205490565b14610b84576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051306020820152600191810191909152600090610ba690606001610b33565b90506001600160a01b03811615610c2057806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c199190614923565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5a6122e1565b610c62611e8c565b15610ca357606082015115610ca3576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032546001600160a01b031661dead14610ce9576040517fdfeaaeb800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf68260400151612320565b15610d2d576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d3883612349565b9050610d448183611a51565b600081815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d83611f0e565b15610e1557606083015115610e1557603f5460608401516040517f8d445bd00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638d445bd091610de29160040190815260200190565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505b8260200151603260006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000610e5e8460400151856080015186606001518760a00151612396565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610ec390841515815260200190565b60405180910390a2610ed3611f0e565b15610f5d5780158015610eea575060008460600151115b15610f5d57603f60009054906101000a90046001600160a01b03166001600160a01b0316631ee116bf85606001516040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f4357600080fd5b505af1158015610f57573d6000803e3d6000fd5b50505050505b80158015610f6b5750326001145b15610fa2576040517fab58103600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b603754604080517f452a932000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163452a93209160048083019260209291908290030181865afa1580156109be573d6000803e3d6000fd5b603e546040517f45884d320000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906345884d3290602401602060405180830381865afa15801561106f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109391906149bd565b92915050565b7f0000000000000000000000000000000000000000000000000000000000000003600054610100900460ff161580156110d9575060005460ff8083169116105b6111505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556111896123f4565b603780546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603e8054928516929091169190911790556111d961245b565b6032546001600160a01b031661121657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61121e61260e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6112896122e1565b6112968560400151612320565b156112cd576040517fc5defbad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d5611e8c565b1561131657606085015115611316576040517fbd58e0a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611320611e29565b6001600160a01b031663bb8aa1fc866040518263ffffffff1660e01b815260040161134d91815260200190565b606060405180830381865afa15801561136a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138e91906149da565b603e546040517f496b9c160000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301529295509116925063496b9c169150602401602060405180830381865afa1580156113f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141991906149bd565b61144f576040517ff395240e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f04e50fed0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906304e50fed90602401602060405180830381865afa1580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d691906149bd565b61150c576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190614a56565b600281111561158157611581614a27565b036115b8576040517fe29927ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61162a816001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d9190614a77565b67ffffffffffffffff1690565b67ffffffffffffffff16421161166c576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61168361167e36869003860186614a94565b612707565b6116eb826001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190614afa565b90565b14611722576040517f426149af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061172d87612349565b9050600081600060405160200161174e929190918252602082015260400190565b60408051601f19818403018152828252805160209182012090830181905292506117c5910160408051601f19818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906117bb8789614b13565b8960400135612746565b1515600003611800576040517f2e57ef3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b03808616825267ffffffffffffffff42811660208085019182526000888152603982528681203380835290835287822096518754945190951674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009094169486169490941792909217909455868152603c845284812080546001810182559082528482200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092179091558b840151928c01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a35050505050505050565b603e54604080517f4086d18300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634086d1839160048083019260209291908290030181865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614a77565b603754604080517f5c975abb00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635c975abb9160048083019260209291908290030181865afa158015611a2d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e291906149bd565b60008281526039602090815260408083206001600160a01b0385811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152868552603390935292205490919060ff1615611af3576040517f730a107400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816020015167ffffffffffffffff16600003611b3b576040517fcca6afda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7c816001600160a01b031663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f9573d6000803e3d6000fd5b67ffffffffffffffff16826020015167ffffffffffffffff1611611bcc576040517fb4caa4e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000c826020015167ffffffffffffffff1642611c079190614b97565b11611c3e576040517fd9bc01be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603e546040517f6c4f44670000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690636c4f446790602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc591906149bd565b610fa2576040517f332a57f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611d078133610c52565b50565b603e54604080517f952b279700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163952b27979160048083019260209291908290030181865afa158015611d6d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614afa565b6000611d9e826028614bae565b61109390615208614bde565b603c6020528160005260406000208181548110611dc657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000611dec610a6e565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109be573d6000803e3d6000fd5b603e54604080517ff2b4e61700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f2b4e6179160048083019260209291908290030181865afa1580156109be573d6000803e3d6000fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f435553544f4d5f4741535f544f4b454e0000000000000000000000000000000060048201526000916001600160a01b0316906347af267b90602401602060405180830381865afa158015611a2d573d6000803e3d6000fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201526000916001600160a01b0316906347af267b90602401602060405180830381865afa158015611f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb491906149bd565b80156109e2575050603f546001600160a01b0316151590565b6000323303611fdc5750600190565b333b60170361200457604051602081016040526020600082333c5160e81c62ef010014905090565b50600090565b600154600090612040907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614b97565b9050600061204c61276a565b90506000816020015160ff16826000015163ffffffff1661206d9190614c39565b905082156121a4576001546000906120a4908390700100000000000000000000000000000000900467ffffffffffffffff16614c83565b90506000836040015160ff16836120bb9190614cf7565b6001546120db9084906fffffffffffffffffffffffffffffffff16614cf7565b6120e59190614c39565b6001549091506000906121369061210f9084906fffffffffffffffffffffffffffffffff16614db3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612823565b905060018611156121655761216261210f82876040015160ff1660018a61215d9190614b97565b612842565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906121d7908490700100000000000000000000000000000000900467ffffffffffffffff16614bde565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612264576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612290906fffffffffffffffffffffffffffffffff1667ffffffffffffffff881661499e565b905060006122a248633b9aca00612897565b6122ac9083614e27565b905060005a6122bb9088614b97565b9050808211156122d7576122d76122d28284614b97565b6128ae565b5050505050505050565b6122e96119ca565b15611cfb576040517fb9c3c2ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b038216301480611093575050603f546001600160a01b0390811691161490565b80516020808301516040808501516060860151608087015160a08801519351600097612379979096959101614e3b565b604051602081830303815290604052805190602001209050919050565b60008060006123a68660006128dc565b9050806123dc576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b336123fd610a6e565b6001600160a01b031614158015612424575033612418611de2565b6001600160a01b031614155b15611cfb576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201526001600160a01b03909116906347af267b90602401602060405180830381865afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250091906149bd565b80156125155750603f546001600160a01b0316155b806125d757506037546040517f47af267b0000000000000000000000000000000000000000000000000000000081527f4554485f4c4f434b424f5800000000000000000000000000000000000000000060048201526001600160a01b03909116906347af267b90602401602060405180830381865afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c091906149bd565b1580156125d75750603f546001600160a01b031615155b15611cfb576040517f9c46cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661268b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401611147565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611cfb5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60008160000151826020015183604001518460600151604051602001612379949392919093845260208401929092526040830152606082015260800190565b600080612752866128fa565b90506127608186868661292c565b9695505050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603754604080517fcc731b0200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc731b029160048083019260c09291908290030181865afa1580156127ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110939190614e9b565b6000612838612832858561295c565b8361296c565b90505b9392505050565b6000670de0b6b3a764000061288361285a8583614c39565b61286c90670de0b6b3a7640000614c83565b61287e85670de0b6b3a7640000614cf7565b61297b565b61288d9086614cf7565b6128389190614c39565b6000818310156128a7578161283b565b5090919050565b6000805a90505b825a6128c19083614b97565b10156128d7576128d082614f57565b91506128b5565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161291691815260200190565b6040516020818303038152906040529050919050565b60006129538461293d8786866129ac565b8051602091820120825192909101919091201490565b95945050505050565b6000818312156128a7578161283b565b60008183126128a7578161283b565b600061283b670de0b6b3a764000083612993866132be565b61299d9190614cf7565b6129a79190614c39565b6134e8565b606060008451116129ff5760405162461bcd60e51b815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401611147565b6000612a0a8461370d565b90506000612a17866137f9565b9050600084604051602001612a2e91815260200190565b60405160208183030381529060405290506000805b845181101561324f576000858281518110612a6057612a60614f71565b602002602001015190508451831115612ae15760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401611147565b82600003612b805780518051602091820120604051612b2f92612b0992910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612b7b5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401611147565b612ca3565b805151602011612c1c5780518051602091820120604051612baa92612b0992910190815260200190565b612b7b5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401611147565b805184516020808701919091208251919092012014612ca35760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401611147565b612caf60106001614fa0565b81602001515103612e575784518303612def57612ce98160200151601081518110612cdc57612cdc614f71565b602002602001015161385c565b96506000875111612d625760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401611147565b60018651612d709190614b97565b8214612de45760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401611147565b50505050505061283b565b6000858481518110612e0357612e03614f71565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612e2e57612e2e614f71565b60200260200101519050612e4181613910565b9550612e4e600186614fa0565b9450505061323c565b6002816020015151036131ce576000612e6f82613935565b9050600081600081518110612e8657612e86614f71565b016020015160f81c90506000612e9d600283614fb8565b612ea8906002614fda565b90506000612eb9848360ff16613959565b90506000612ec78a89613959565b90506000612ed5838361398f565b905080835114612f4d5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401611147565b60ff851660021480612f62575060ff85166003145b156131035780825114612fdd5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401611147565b612ff78760200151600181518110612cdc57612cdc614f71565b9c5060008d51116130705760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401611147565b60018c5161307e9190614b97565b88146130f25760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401611147565b50505050505050505050505061283b565b60ff85161580613116575060ff85166001145b1561315557613142876020015160018151811061313557613135614f71565b6020026020010151613910565b995061314e818a614fa0565b98506131c3565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401611147565b50505050505061323c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401611147565b508061324781614f57565b915050612a43565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401611147565b600080821361330f5760405162461bcd60e51b815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611147565b6000606061331c84613a43565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361351957506000919050565b680755bf798b4a1bf1e582126135715760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401611147565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561372b5761372b6143e9565b60405190808252806020026020018201604052801561377057816020015b60408051808201909152606080825260208201528152602001906001900390816137495790505b50915060005b818110156137f257604051806040016040528085838151811061379b5761379b614f71565b602002602001015181526020016137ca8684815181106137bd576137bd614f71565b6020026020010151613aff565b8152508382815181106137df576137df614f71565b6020908102919091010152600101613776565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613851578060011b82018184015160001a8060041c8253600f811660018301535050600101613823565b509295945050505050565b6060600080600061386c85613b12565b91945092509050600081600181111561388757613887614a27565b146138be576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6138c88284614fa0565b855114613901576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61295385602001518484613fb0565b6060602082600001511061392c576139278261385c565b611093565b61109382614044565b60606110936139548360200151600081518110612cdc57612cdc614f71565b6137f9565b6060825182106139785750604080516020810190915260008152611093565b61283b838384865161398a9190614b97565b61405a565b60008082518451106139a25782516139a5565b83515b90505b8082108015613a2c57508282815181106139c4576139c4614f71565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613a0357613a03614f71565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613a3c578160010191506139a8565b5092915050565b6000808211613a945760405162461bcd60e51b815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401611147565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060611093613b0d836141c6565b614233565b60008060008360000151600003613b55576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111613b7a576000600160009450945094505050613fa9565b60b78111613c90576000613b8f608083614b97565b905080876000015111613bce576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015613c4657507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15613c7d576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250613fa9915050565b60bf8111613dee576000613ca560b783614b97565b905080876000015111613ce4576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613d46576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613d8e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d988184614fa0565b895111613dd1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ddc836001614fa0565b9750955060009450613fa99350505050565b60f78111613e53576000613e0360c083614b97565b905080876000015111613e42576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250613fa9915050565b6000613e6060f783614b97565b905080876000015111613e9f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613f01576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613f49576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f538184614fa0565b895111613f8c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f97836001614fa0565b9750955060019450613fa99350505050565b9193909250565b60608167ffffffffffffffff811115613fcb57613fcb6143e9565b6040519080825280601f01601f191660200182016040528015613ff5576020820181803683370190505b509050811561283b57600061400a8486614fa0565b90506020820160005b8481101561402b578281015182820152602001614013565b8481111561403a576000858301525b5050509392505050565b6060611093826020015160008460000151613fb0565b60608182601f0110156140af5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611147565b8282840110156141015760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401611147565b818301845110156141545760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401611147565b60608215801561417357604051915060008252602082016040526141bd565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141ac578051835260209283019201614194565b5050858452601f01601f1916604052505b50949350505050565b60408051808201909152600080825260208201528151600003614215576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061424385613b12565b91945092509050600181600181111561425e5761425e614a27565b14614295576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516142a18385614fa0565b146142d8576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816142ef5790505093506000835b86518110156143dd576000806143626040518060400160405280858c600001516143469190614b97565b8152602001858c6020015161435b9190614fa0565b9052613b12565b50915091506040518060400160405280838361437e9190614fa0565b8152602001848b602001516143939190614fa0565b8152508885815181106143a8576143a8614f71565b60209081029190910101526143be600185614fa0565b93506143ca8183614fa0565b6143d49084614fa0565b9250505061431c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614441576144416143e9565b604052919050565b6001600160a01b0381168114611d0757600080fd5b600082601f83011261446f57600080fd5b813567ffffffffffffffff811115614489576144896143e9565b61449c6020601f19601f84011601614418565b8181528460208386010111156144b157600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156144e057600080fd5b60405160c0810167ffffffffffffffff8282108183111715614504576145046143e9565b81604052829350843583526020850135915061451f82614449565b8160208401526040850135915061453582614449565b816040840152606085013560608401526080850135608084015260a085013591508082111561456357600080fd5b506145708582860161445e565b60a0830152505092915050565b6000806040838503121561459057600080fd5b823567ffffffffffffffff8111156145a757600080fd5b6145b3858286016144ce565b92505060208301356145c481614449565b809150509250929050565b6000602082840312156145e157600080fd5b813561283b81614449565b600080604083850312156145ff57600080fd5b823561460a81614449565b915060208301356145c481614449565b600080600080600085870360e081121561463357600080fd5b863567ffffffffffffffff8082111561464b57600080fd5b6146578a838b016144ce565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561469057600080fd5b60408901955060c08901359250808311156146aa57600080fd5b828901925089601f8401126146be57600080fd5b82359150808211156146cf57600080fd5b508860208260051b84010111156146e557600080fd5b959894975092955050506020019190565b60006020828403121561470857600080fd5b5035919050565b60005b8381101561472a578181015183820152602001614712565b83811115610fa25750506000910152565b6000815180845261475381602086016020860161470f565b601f01601f19169290920160200192915050565b60208152600061283b602083018461473b565b6000806040838503121561478d57600080fd5b8235915060208301356145c481614449565b6000602082840312156147b157600080fd5b813567ffffffffffffffff8111156147c857600080fd5b6147d4848285016144ce565b949350505050565b67ffffffffffffffff81168114611d0757600080fd5b60006020828403121561480457600080fd5b813561283b816147dc565b6000806040838503121561482257600080fd5b50508035926020909101359150565b8015158114611d0757600080fd5b600080600080600060a0868803121561485757600080fd5b853561486281614449565b9450602086013593506040860135614879816147dc565b9250606086013561488981614831565b9150608086013567ffffffffffffffff8111156148a557600080fd5b6148b18882890161445e565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b60488201526000825161491281604985016020870161470f565b919091016049019695505050505050565b60006020828403121561493557600080fd5b815161283b81614449565b63ffffffff81168114611d0757600080fd5b60006020828403121561496457600080fd5b815161283b81614940565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160001904831182151516156149b8576149b861496f565b500290565b6000602082840312156149cf57600080fd5b815161283b81614831565b6000806000606084860312156149ef57600080fd5b83516149fa81614940565b6020850151909350614a0b816147dc565b6040850151909250614a1c81614449565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215614a6857600080fd5b81516003811061283b57600080fd5b600060208284031215614a8957600080fd5b815161283b816147dc565b600060808284031215614aa657600080fd5b6040516080810181811067ffffffffffffffff82111715614ac957614ac96143e9565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600060208284031215614b0c57600080fd5b5051919050565b600067ffffffffffffffff80841115614b2e57614b2e6143e9565b8360051b6020614b3f818301614418565b868152918501918181019036841115614b5757600080fd5b865b84811015614b8b57803586811115614b715760008081fd5b614b7d36828b0161445e565b845250918301918301614b59565b50979650505050505050565b600082821015614ba957614ba961496f565b500390565b600067ffffffffffffffff80831681851681830481118215151615614bd557614bd561496f565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c0157614c0161496f565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614c4857614c48614c0a565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615614c7e57614c7e61496f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614cbd57614cbd61496f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614cf157614cf161496f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614d3857614d3861496f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614d7357614d7361496f565b60008712925087820587128484161615614d8f57614d8f61496f565b87850587128184161615614da557614da561496f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614ded57614ded61496f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614e2157614e2161496f565b50500190565b600082614e3657614e36614c0a565b500490565b86815260006001600160a01b03808816602084015280871660408401525084606083015283608083015260c060a0830152614e7960c083018461473b565b98975050505050505050565b805160ff81168114614e9657600080fd5b919050565b600060c08284031215614ead57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ed057614ed06143e9565b6040528251614ede81614940565b8152614eec60208401614e85565b6020820152614efd60408401614e85565b60408201526060830151614f1081614940565b60608201526080830151614f2381614940565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114614f4b57600080fd5b60a08201529392505050565b60006000198203614f6a57614f6a61496f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115614fb357614fb361496f565b500190565b600060ff831680614fcb57614fcb614c0a565b8060ff84160691505092915050565b600060ff821660ff841680821015614ff457614ff461496f565b9003939250505056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0xcddd9799b3dd219f4220f73495e89da1690f1828": { - "balance": "0x0", - "code": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806378ecabce11610076578063b6a4cd211161005b578063b6a4cd21146101a4578063c993f27c146101b9578063cbeda5a7146101cc57600080fd5b806378ecabce1461012a578063b51f9c2b1461014d57600080fd5b80631d8a4e92146100a857806330e9012c146100c3578063318b1b80146100d85780635a4dab3314610103575b600080fd5b6100b06101df565b6040519081526020015b60405180910390f35b6100cb610268565b6040516100ba9190612b93565b6100eb6100e6366004612cf7565b61037c565b6040516001600160a01b0390911681526020016100ba565b6100eb7f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df81565b61013d610138366004612cf7565b6103f7565b60405190151581526020016100ba565b6101556104a2565b6040516100ba919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6101b76101b2366004612d25565b61054f565b005b6101b76101c7366004612d25565b6105a6565b6101b76101da366004612def565b610742565b60007f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316631d8a4e926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561023f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102639190612ecc565b905090565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610358573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102639190612ef0565b604080516020808201849052825180830382018152828401845280519101206000606083018190527fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082166061840152835160548185030181526074909301909352829181906103eb90613048565b60601c95945050505050565b6040517f78ecabce000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b0316906378ecabce90602401602060405180830381865afa158015610478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049c9190613098565b92915050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f0000000000000000000000009ede005fcc899c226098654926398a9e0b3345df6001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561052b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026391906130ba565b806001600160a01b03163b6000036105a3576040517f86bb51b80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b50565b610685816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261060f91908101906131d1565b610617610a2b565b600001516001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261068091908101906131d1565b610b1b565b156106bc576040517f1b44701300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106c6610a2b565b90506000826001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190613222565b905061073d81848460000151610b3e565b505050565b600061074c610a2b565b905060005b825181101561073d5761077c83828151811061076f5761076f61323f565b6020026020010151610bc8565b60008382815181106107905761079061323f565b6020026020010151600001516001600160a01b031663d6ae3cd56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190612ecc565b905060008483815181106108135761081361323f565b6020026020010151600001516001600160a01b03166335e80ab36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190613222565b905061095a816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108eb91908101906131d1565b85600001516001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401600060405180830381865afa15801561092d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261095591908101906131d1565b610bd3565b15610994576040517fccc6ea860000000000000000000000000000000000000000000000000000000081526004810184905260240161059a565b6109b8848685815181106109aa576109aa61323f565b602002602001015184610c4c565b306001600160a01b03168584815181106109d4576109d461323f565b6020026020010151600001516001600160a01b0316837f78bc67b9bf548ef6410becd31a3e10b9ea6c255974ef6b4530728b431df3003060405160405180910390a450508080610a239061329d565b915050610751565b6040805161024081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081018290526102208101919091527f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f18286001600160a01b03166330e9012c6040518163ffffffff1660e01b815260040161024060405180830381865afa158015610358573d6000803e3d6000fd5b6000610b278383611493565b80610b375750610b3783836114df565b9392505050565b610b478161054f565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015282811660248301528416906399a88ec490604401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b50505050505050565b80516105a39061054f565b600080610bdf84611505565b90506000610bec84611505565b805183519192501180610c12575080518251148015610c12575080602001518260200151105b80610c43575080518251148015610c30575080602001518260200151145b8015610c43575080604001518260400151105b95945050505050565b600082600001516001600160a01b0316633e47158c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb49190613222565b9050610cc98184600001518660c00151610b3e565b600083600001516001600160a01b0316630a49cb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d319190613222565b9050610d3d60016103f7565b1561102a57610d5182828760800151610b3e565b6000816001600160a01b031663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db59190613222565b90506001600160a01b038116610f3f57610e128484610dd788600001516116d1565b6040518060400160405280600f81526020017f4554484c6f636b626f782d5531366100000000000000000000000000000000008152506116ff565b60408051600180825281830190925291925060009190602080830190803683370190505090508281600081518110610e4c57610e4c61323f565b60200260200101906001600160a01b031690816001600160a01b031681525050610eea84838960a00151896000015185604051602401610e8d9291906132b7565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f946d92040000000000000000000000000000000000000000000000000000000017905261175d565b826001600160a01b031663bda204bb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b50505050505b6000826001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa39190613222565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528481166024830152919250908416906399a88ec490604401600060405180830381600087803b15801561100b57600080fd5b505af115801561101f573d6000803e3d6000fd5b505050505050611039565b61103982828760600151610b3e565b6110aa82826001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190613222565b876101600151610b3e565b61111e8285600001516001600160a01b0316639b7d7f0a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190613222565b8760e00151610b3e565b600084600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111869190613222565b90506111988382886101400151610b3e565b600085600001516001600160a01b031663a39fac126040518163ffffffff1660e01b815260040160e060405180830381865afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190613312565b9050611216848260000151896101000151610b3e565b61122a848260400151896101200151610b3e565b61123d8482602001518960400151610b3e565b50600061124b8260016117dd565b905061127187868361125f86866001611867565b61126b87876001611982565b8b611a70565b600061127e8360006117dd565b90506001600160a01b0381161561148957600087600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f79190613222565b905060008060001b61130a8a6020015190565b036113205761131b82846000611bdb565b611326565b88602001515b905061134e8a898361133a89886000611867565b6113468a896000611982565b600088611cee565b604089015115611486576113828a898b6040015161136e89886000611867565b61137a8a896000611982565b600888611cee565b6040517f6593dc6e000000000000000000000000000000000000000000000000000000008152600060048201819052906001600160a01b03841690636593dc6e90602401602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190612ecc565b6040517f1e33424000000000000000000000000000000000000000000000000000000000815260086004820152602481018290529091506001600160a01b03841690631e33424090604401600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b50505050505b50505b5050505050505050565b60008061149f84611505565b905060006114ac84611505565b805183519192501480156114c7575080602001518260200151145b8015610c435750604090810151910151149392505050565b60006114eb8383611493565b158015610b3757506114fd8383610bd3565b159392505050565b61152960405180606001604052806000815260200160008152602001600081525090565b600061156a836040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250611da1565b90506003815110156115a8576040517f9eda858c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611603826002815181106115c0576115c061323f565b60200260200101516040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250611da1565b905060006116608260008151811061161d5761161d61323f565b60200260200101516040518060400160405280600181526020017f2b00000000000000000000000000000000000000000000000000000000000000815250611da1565b90506040518060600160405280611690856000815181106116835761168361323f565b6020026020010151611e4c565b81526020016116ab856001815181106116835761168361323f565b81526020016116c6836000815181106116835761168361323f565b905295945050505050565b604080516001600160a01b0383166020820152606091015b6040516020818303038152906040529050919050565b60008061170d868585611ec4565b905061175361171a611efa565b60200151828760405160200161173f91906001600160a01b0391909116815260200190565b604051602081830303815290604052611f83565b9695505050505050565b6117668261054f565b6040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851690639623609d906117af908690869086906004016133f6565b600060405180830381600087803b1580156117c957600080fd5b505af1158015611489573d6000803e3d6000fd5b6040517f1b685b9e00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526000906001600160a01b03841690631b685b9e90602401602060405180830381865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190613222565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa1580156118cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f791908101906131d1565b9050805160000361196c57836001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190613222565b915050610b37565b611975816120bd565b6060015195945050505050565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa1580156119ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a1291908101906131d1565b90508051600003611a5b57836001600160a01b0316635c0cba336040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b611a64816120bd565b60400151915050610b37565b600081600001516001600160a01b031663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad89190613222565b6020830151909150600090611afa57611af382876001611bdb565b9050611b01565b5060208201515b80611b38576040517fefc878f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000886101e0015190506000611bcc6040518060e00160405280611b598690565b81526020018c6101a001516001600160a01b03168152602001886001600160a01b03168152602001896001600160a01b031681526020018b8152602001611ba2878c60016121ef565b6001600160a01b03168152602001611bbc878c60016122dd565b6001600160a01b031690526123cb565b90506114868460018484612502565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015611c43573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6b91908101906131d1565b90508051600003611cd857836001600160a01b0316638d450a956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190612ecc565b6000611ce3826120bd565b519250610b37915050565b84611d25576040517fefc878f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000876101c0015190506000611d886040518060e00160405280611d468a90565b81526101a08c01516001600160a01b039081166020830152888116604083015289166060820152608081018b9052600060a0820181905260c0909101526123cb565b9050611d9683858484612502565b505050505050505050565b60606000611daf848461254b565b9050601f1960208201600183510160051b81018651838201526001845101845260005b825160608452818114611e175760405182820380825286601f8201165b8b850181015183820152870180611def5750600082820160200152603f018616810160405284525b875160209490940193019050818310611dd257505050508091508251611e4557602081019150600281510382525b5092915050565b80516000907f1999999999999999999999999999999999999999999999999999999999999999825b600181019050603060ff82870151160382851185600a028281019650600983118188108317171586029550505050828110611e7457505080611ebe5763101827966000526004601cfd5b50919050565b6000838383604051602001611edb93929190613422565b6040516020818303038152906040528051906020012090509392505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091527f000000000000000000000000cddd9799b3dd219f4220f73495e89da1690f18286001600160a01b031663b51f9c2b6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561052b573d6000803e3d6000fd5b600080611fb4856001600160a01b0316803b806020016040519081016040528181526000908060200190933c61261a565b805190915060ff1615611ffb5780516040517f1a66c69200000000000000000000000000000000000000000000000000000000815260ff909116600482015260240161059a565b6020810151511561203e5780602001516040517f57a0583500000000000000000000000000000000000000000000000000000000815260040161059a919061344d565b6000816040015184604051602001612057929190613460565b6040516020818303038152906040529050848151602083016000f592506001600160a01b0383166120b4576040517f3011642500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152815160a4811480159061210a5750607c8114155b15612141576040517fbff6e41600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020830151604084015160548501516068860151607c870151606093841c9392831c929190911c906000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c88016121a7575050609c88015160b0890151606091821c911c5b6040805160e0810182529788526001600160a01b0396871660208901529486169487019490945291841660608601526080850152821660a08401521660c08201529392505050565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015612257573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261227f91908101906131d1565b905080516000036122c857836001600160a01b031663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b6122d1816120bd565b60a00151915050610b37565b6040517f74cc86ac00000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260009081906001600160a01b038616906374cc86ac90602401600060405180830381865afa158015612345573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236d91908101906131d1565b905080516000036123b657836001600160a01b031663534db0e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611940573d6000803e3d6000fd5b6123bf816120bd565b60c00151915050610b37565b60a08101516060906001600160a01b03161580156123f4575060c08201516001600160a01b0316155b1561246b5781516020808401516040808601516060870151608088015192516116e996959293919201948552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602087015292841b83166034860152921b166048830152605c820152607c0190565b8151602080840151604080860151606080880151608089015160a08a015160c08b01518651988901999099527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000096841b87169588019590955292821b85166054870152811b84166068860152607c85019190915290811b8216609c8401529290921b90911660b082015260c4016116e9565b919050565b6040517fb10709570000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063b1070957906117af9086908690869060040161348f565b60608251825181811161261257602085019450602084019350602060405101925084600182848801030160006020841061258457508286205b601f841660200360031b87515b8951818118831c6125e65783156125c45783878c20146125c45760018b019a50848b106125be57506125f5565b50612591565b858b0389529986019960209098019786156125e657848b106125be57506125f5565b5060018a019950838a10612591575b505060408051601f198189030160051c8152602090970190525050505b505092915050565b6126416040518060600160405280600060ff16815260200160608152602001606081525090565b6002825110806126ab57508160008151811061265f5761265f61323f565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167ffe0000000000000000000000000000000000000000000000000000000000000014155b806127105750816001815181106126c4576126c461323f565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f710000000000000000000000000000000000000000000000000000000000000014155b15612747576040517f31f56e1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028360028151811061275e5761275e61323f565b602001015160f81c60f81b60fc60f81b1660f81c60ff16901c905060008360028151811061278e5761278e61323f565b60209101015160f81c600390811691508190036127d7576040517fb214675a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ff8216156128c35760008260ff1667ffffffffffffffff81111561280057612800612d42565b6040519080825280601f01601f19166020018201604052801561282a576020820181803683370190505b50905060005b8360ff168110156128b557866128478260036134bd565b815181106128575761285761323f565b602001015160f81c60f81b8282815181106128745761287461323f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806128ad8161329d565b915050612830565b506128bf81612ad9565b9150505b60008167ffffffffffffffff8111156128de576128de612d42565b6040519080825280601f01601f191660200182016040528015612908576020820181803683370190505b50905060ff8316156129ad5760006129218460036134d5565b60ff16905060005b838110156129aa578761293c82846134bd565b8151811061294c5761294c61323f565b602001015160f81c60f81b8382815181106129695761296961323f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806129a28161329d565b915050612929565b50505b6000826129bb8560036134d5565b60ff166129c891906134bd565b905060008188516129d991906134fa565b905080600003612a15576040517f028512d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115612a3057612a30612d42565b6040519080825280601f01601f191660200182016040528015612a5a576020820181803683370190505b50905060008360208b0101602083018481868460045afa9250505080612aac576040517ff7046f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808960ff1681526020018681526020018381525098505050505050505050919050565b6000602082511115612b17576040517f5623dc1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8351811015611e4557612b2f8160016134bd565b8451612b3b91906134fa565b612b46906008613511565b612b51906002613614565b848281518110612b6357612b6361323f565b0160200151612b75919060f81c613511565b612b7f90836134bd565b915080612b8b8161329d565b915050612b1b565b81516001600160a01b0316815261024081016020830151612bbf60208401826001600160a01b03169052565b506040830151612bda60408401826001600160a01b03169052565b506060830151612bf560608401826001600160a01b03169052565b506080830151612c1060808401826001600160a01b03169052565b5060a0830151612c2b60a08401826001600160a01b03169052565b5060c0830151612c4660c08401826001600160a01b03169052565b5060e0830151612c6160e08401826001600160a01b03169052565b50610100838101516001600160a01b0390811691840191909152610120808501518216908401526101408085015182169084015261016080850151821690840152610180808501518216908401526101a0808501518216908401526101c0808501518216908401526101e08085015182169084015261020080850151821690840152610220808501519182168185015290612612565b600060208284031215612d0957600080fd5b5035919050565b6001600160a01b03811681146105a357600080fd5b600060208284031215612d3757600080fd5b8135610b3781612d10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715612d9457612d94612d42565b60405290565b604051610240810167ffffffffffffffff81118282101715612d9457612d94612d42565b604051601f8201601f1916810167ffffffffffffffff81118282101715612de757612de7612d42565b604052919050565b60006020808385031215612e0257600080fd5b823567ffffffffffffffff80821115612e1a57600080fd5b818501915085601f830112612e2e57600080fd5b813581811115612e4057612e40612d42565b612e4e848260051b01612dbe565b81815284810192506060918202840185019188831115612e6d57600080fd5b938501935b82851015612ec05780858a031215612e8a5760008081fd5b612e92612d71565b8535612e9d81612d10565b815285870135878201526040808701359082015284529384019392850192612e72565b50979650505050505050565b600060208284031215612ede57600080fd5b5051919050565b80516124fd81612d10565b60006102408284031215612f0357600080fd5b612f0b612d9a565b612f1483612ee5565b8152612f2260208401612ee5565b6020820152612f3360408401612ee5565b6040820152612f4460608401612ee5565b6060820152612f5560808401612ee5565b6080820152612f6660a08401612ee5565b60a0820152612f7760c08401612ee5565b60c0820152612f8860e08401612ee5565b60e0820152610100612f9b818501612ee5565b90820152610120612fad848201612ee5565b90820152610140612fbf848201612ee5565b90820152610160612fd1848201612ee5565b90820152610180612fe3848201612ee5565b908201526101a0612ff5848201612ee5565b908201526101c0613007848201612ee5565b908201526101e0613019848201612ee5565b9082015261020061302b848201612ee5565b9082015261022061303d848201612ee5565b908201529392505050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156130905780818460140360031b1b83161693505b505050919050565b6000602082840312156130aa57600080fd5b81518015158114610b3757600080fd5b600060a082840312156130cc57600080fd5b60405160a0810181811067ffffffffffffffff821117156130ef576130ef612d42565b60405282516130fd81612d10565b8152602083015161310d81612d10565b6020820152604083015161312081612d10565b6040820152606083015161313381612d10565b6060820152608083015161314681612d10565b60808201529392505050565b60005b8381101561316d578181015183820152602001613155565b8381111561317c576000848401525b50505050565b600067ffffffffffffffff83111561319c5761319c612d42565b6131af6020601f19601f86011601612dbe565b90508281528383830111156131c357600080fd5b610b37836020830184613152565b6000602082840312156131e357600080fd5b815167ffffffffffffffff8111156131fa57600080fd5b8201601f8101841361320b57600080fd5b61321a84825160208401613182565b949350505050565b60006020828403121561323457600080fd5b8151610b3781612d10565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982036132b0576132b061326e565b5060010190565b6000604082016001600160a01b0380861684526020604081860152828651808552606087019150828801945060005b818110156133045785518516835294830194918301916001016132e6565b509098975050505050505050565b600060e0828403121561332457600080fd5b60405160e0810181811067ffffffffffffffff8211171561334757613347612d42565b604052825161335581612d10565b8152602083015161336581612d10565b6020820152604083015161337881612d10565b6040820152606083015161338b81612d10565b606082015261339c60808401612ee5565b60808201526133ad60a08401612ee5565b60a08201526133be60c08401612ee5565b60c08201529392505050565b600081518084526133e2816020860160208601613152565b601f01601f19169290920160200192915050565b60006001600160a01b03808616835280851660208401525060606040830152610c4360608301846133ca565b83815260606020820152600061343b60608301856133ca565b828103604084015261175381856133ca565b602081526000610b3760208301846133ca565b60008351613472818460208801613152565b835190830190613486818360208801613152565b01949350505050565b63ffffffff841681526001600160a01b0383166020820152606060408201526000610c4360608301846133ca565b600082198211156134d0576134d061326e565b500190565b600060ff821660ff84168060ff038211156134f2576134f261326e565b019392505050565b60008282101561350c5761350c61326e565b500390565b600081600019048311821515161561352b5761352b61326e565b500290565b600181815b8085111561356b5781600019048211156135515761355161326e565b8085161561355e57918102915b93841c9390800290613535565b509250929050565b6000826135825750600161049c565b8161358f5750600061049c565b81600181146135a557600281146135af576135cb565b600191505061049c565b60ff8411156135c0576135c061326e565b50506001821b61049c565b5060208310610133831016604e8410600b84101617156135ee575081810a61049c565b6135f88383613530565b806000190482111561360c5761360c61326e565b029392505050565b6000610b37838361357356fea164736f6c634300080f000a", - "nonce": 1, - "storage": {} - }, - "0xe2daae86373cd936d1477a186a8304d86c96ae0e": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000002500000000000000000000000000000000000000003b9aca00", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x000000000000000000000000000000000000000000000000000000000000dead", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x000000000000000000000000c3237117312fcd40bbfe8a4fe93b1c74a2e0d78f", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000cdb7a450076dc6c607b60c6956bace4cca77c12f", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0xf5059a5d33d5853360d16c683c16e67980206f36": { - "balance": "0x0", - "code": "0x608060405234801561000f575f80fd5b50600436106100b9575f3560e01c8063bd5e21c111610072578063cda752ff11610058578063cda752ff146101c8578063dac79fc814610206578063ed0fb60314610219575f80fd5b8063bd5e21c1146101a3578063cd8f6997146101b6575f80fd5b80636d8f5aa9116100a25780636d8f5aa9146101545780639f3eb6721461017c578063a628a19e14610192575f80fd5b80630f1f0f86146100bd578063213b2658146100d2575b5f80fd5b6100d06100cb36600461043e565b505050565b005b6100d06100e036600461049a565b73ffffffffffffffffffffffffffffffffffffffff919091165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6101676101623660046104cb565b61021f565b60405190151581526020015b60405180910390f35b61016761018a3660046104f3565b600192915050565b6100d06101a0366004610514565b50565b6100d06101b1366004610534565b6102d7565b6100d06101c436600461058a565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b6100d06102143660046106b8565b610366565b5f6101e1565b5f7fffffffffffffffffffffffff1e92a3bf7f3f05292d10b14f839a898b5de8d8e473ffffffffffffffffffffffffffffffffffffffff84160161026457505f6102d1565b60015f83600181111561027957610279610733565b600181111561028a5761028a610733565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff8716825290925290205460ff16156102cd575060016102d1565b5060015b92915050565b8160015f8360018111156102ed576102ed610733565b60018111156102fe576102fe610733565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9790971681529590915290932080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092555050565b60148410610415575f61037c6014828789610760565b61038591610787565b60601c90506001805f8460018111156103a0576103a0610733565b60018111156103b1576103b1610733565b815260208082019290925260409081015f90812073ffffffffffffffffffffffffffffffffffffffff9590951681529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555b5050505050565b8035801515811461042b575f80fd5b919050565b80356002811061042b575f80fd5b5f805f60608486031215610450575f80fd5b833592506104606020850161041c565b915061046e60408501610430565b90509250925092565b803573ffffffffffffffffffffffffffffffffffffffff8116811461042b575f80fd5b5f80604083850312156104ab575f80fd5b6104b483610477565b91506104c26020840161041c565b90509250929050565b5f80604083850312156104dc575f80fd5b6104e583610477565b91506104c260208401610430565b5f8060408385031215610504575f80fd5b823591506104c260208401610430565b5f60208284031215610524575f80fd5b61052d82610477565b9392505050565b5f805f60608486031215610546575f80fd5b61054f84610477565b92506104606020850161041c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561059b575f80fd5b823567ffffffffffffffff808211156105b2575f80fd5b818501915085601f8301126105c5575f80fd5b81356020828211156105d9576105d961055d565b8160051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110868211171561061c5761061c61055d565b604052928352818301935084810182019289841115610639575f80fd5b948201945b838610156106575785358552948201949382019361063e565b96506106669050878201610430565b9450505050509250929050565b5f8083601f840112610683575f80fd5b50813567ffffffffffffffff81111561069a575f80fd5b6020830191508360208285010111156106b1575f80fd5b9250929050565b5f805f805f606086880312156106cc575f80fd5b853567ffffffffffffffff808211156106e3575f80fd5b6106ef89838a01610673565b90975095506020880135915080821115610707575f80fd5b5061071488828901610673565b9094509250610727905060408701610430565b90509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f808585111561076e575f80fd5b8386111561077a575f80fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156107c75780818660140360031b1b83161692505b50509291505056fea164736f6c6343000819000a", - "nonce": 1, - "storage": {} - }, - "0xfff5f6fef1779e1faa40d4382c1b47b5204d1052": { - "balance": "0x0", - "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", - "nonce": 1, - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x000000000000000000000000477a27590e2f76836b8f50a23f7ba2edd640209f", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000033dadc2d1aa9bb613a7ae6b28425ea00d44c6998", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000aa548131045b79c335d4bb08385fef4ceba3bfe5" - } - }, - "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { - "balance": "0x200000000000000000000000000000000000000000000000000000000000000" - }, - "0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E": { - "balance": "0x56BC75E2D63100000" - } - }, - "config": { - "chainId": 11155111, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "muirGlacierBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "arrowGlacierBlock": 0, - "grayGlacierBlock": 0, - "shanghaiTime": 0, - "cancunTime": 0, - "pragueTime": 0, - "terminalTotalDifficulty": 0, - "terminalTotalDifficultyPassed": true, - "depositContractAddress": "0x0000000000000000000000000000000000000000", - "blobSchedule": { - "cancun": { - "target": 3, - "max": 6, - "baseFeeUpdateFraction": 3338477 - }, - "prague": { - "target": 6, - "max": 9, - "baseFeeUpdateFraction": 5007716 - } - } - }, - "nonce": "0x0", - "timestamp": "0x685c6a58", - "extraData": "0x", - "gasLimit": "0x2aea540", - "difficulty": "0x0", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "baseFeePerGas": "0x3b9aca00", - "excessBlobGas": null, - "blobGasUsed": null -} \ No newline at end of file From 7327808bef5be4cd0d5bb7b2c19d1b2c0aea3592 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 11 May 2026 19:41:38 -0400 Subject: [PATCH 09/21] fix startup --- verifier/nitro/nitro_verifier.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 184a3a5..12458ef 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -85,13 +85,24 @@ func NewNitroEspressoBatchVerifier( startHotshotBlock = espressoState.FallbackHotshotHeight } + // Upon startup see if finalized is ahead of stored + startNitroBlock := espressoState.L2BlockNumber + header, err := l2Client.HeaderByNumber(ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) + if err != nil { + log.Warn("failed to get nitro finalized on startup", err) + } else if header == nil { + log.Warn("nitro finalized block not found") + } else if header.Number.Uint64() > espressoState.L2BlockNumber { + log.Warn("finalized block is ahead of stored espresso. updating", "espresso_height", startNitroBlock, "finalized_height", header.Number.Uint64()) + startNitroBlock = header.Number.Uint64() + } streamer := nitroStreamer.NewEspressoStreamer( config.Namespace, - espressoState.L2BlockNumber, + startHotshotBlock, client, batcherAddrs, time.Second, - startHotshotBlock, + startNitroBlock, logger, ) From 48536771798e43ae4881cf73ca186f3a90390889 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Wed, 13 May 2026 14:15:55 -0400 Subject: [PATCH 10/21] small fixes --- config.go | 3 + espresso_e2e/nitro/.env | 2 +- .../nitro-config/batch_poster_config.json | 6 - main.go | 12 +- verifier/nitro/feed_client/client.go | 92 ++++++++------ verifier/nitro/nitro_verifier.go | 113 +++++------------- 6 files changed, 95 insertions(+), 133 deletions(-) diff --git a/config.go b/config.go index 536faa1..ef9f453 100644 --- a/config.go +++ b/config.go @@ -177,6 +177,9 @@ func (c *Config) validate() error { if c.NitroConfig.Namespace == 0 { errs = append(errs, fmt.Errorf("nitro.namespace: must not be zero")) } + if c.NitroConfig.VerificationInterval <= 0 { + errs = append(errs, fmt.Errorf("nitro.verification-interval: must not be zero")) + } if len(c.NitroConfig.ValidBatcherAddresses) == 0 { errs = append(errs, fmt.Errorf("nitro.valid-batcher-addresses: at least one address required")) } diff --git a/espresso_e2e/nitro/.env b/espresso_e2e/nitro/.env index cef6a20..6b81a6e 100644 --- a/espresso_e2e/nitro/.env +++ b/espresso_e2e/nitro/.env @@ -25,7 +25,7 @@ L1_CHAIN_ID=11155111 OPERATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 OPERATOR_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 -BATCH_POSTER_PRIVATE_KEY=0xb6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 +BATCH_POSTER_PRIVATE_KEY=b6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 DEPLOYER_PRIVATE_KEY=0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff NITRO_IMAGE=ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:v3.9.8-espresso-v1.1.0 diff --git a/espresso_e2e/nitro/nitro-config/batch_poster_config.json b/espresso_e2e/nitro/nitro-config/batch_poster_config.json index 02350a6..96e355b 100644 --- a/espresso_e2e/nitro/nitro-config/batch_poster_config.json +++ b/espresso_e2e/nitro/nitro-config/batch_poster_config.json @@ -50,13 +50,7 @@ "max-delay": "1m", "wait-for-max-delay": false, "l1-block-bound": "ignore", - "parent-chain-wallet": { - "private-key": "b6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659" - }, "data-poster": { - "redis-signer": { - "signing-key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" - }, "wait-for-l1-finality": false }, "poll-interval": "5s" diff --git a/main.go b/main.go index c8b91e3..f7cca31 100644 --- a/main.go +++ b/main.go @@ -20,6 +20,11 @@ import ( "github.com/ethereum/go-ethereum/log" ) +type batchVerifier interface { + Start(ctx context.Context) + Stop() +} + type statusResponseWriter struct { http.ResponseWriter statusCode int @@ -90,12 +95,7 @@ func main() { logger.Crit("failed to create espresso store", "error", err) } - type BatchVerifier interface { - Start(ctx context.Context) - Stop() - } - - var fullNodeVerifier BatchVerifier + var fullNodeVerifier batchVerifier switch { case cfg.OPConfig.Enable: diff --git a/verifier/nitro/feed_client/client.go b/verifier/nitro/feed_client/client.go index a789062..62e3c3a 100644 --- a/verifier/nitro/feed_client/client.go +++ b/verifier/nitro/feed_client/client.go @@ -3,6 +3,8 @@ package feedclient import ( "context" "encoding/json" + "errors" + "fmt" "net/http" "strconv" "sync" @@ -13,43 +15,35 @@ import ( "github.com/ethereum/go-ethereum/log" ) +var ErrIncorrectChainId = errors.New("incorrect chain id") +var ErrMissingChainId = errors.New("missing chain id") + type FeedClient struct { - feedWSURL string - nextSeqNum uint64 - mu sync.RWMutex - messages map[uint64]*BroadcastFeedMessage - logger log.Logger - - reconnectBackoff time.Duration - maxBackoff time.Duration + feedWSURL string + chainID uint64 + nextSeqNum uint64 + mu sync.RWMutex + messages map[uint64]*BroadcastFeedMessage + logger log.Logger } const ( headerRequestedSequenceNumber = "Arbitrum-Requested-Sequence-Number" headerFeedClientVersion = "Arbitrum-Feed-Client-Version" + headerChainID = "Arbitrum-Chain-Id" feedClientVersion = "2" broadcastMessageVersion = 1 + startBackOff = 1 * time.Second + maxBackoff = 10 * time.Second ) -var ( - defaultBackoff = 1 * time.Second - defaultMaxBackoff = 30 * time.Second -) - -func NewFeedClient(feedWSURL string, startSeqNum uint64, logger log.Logger, reconnectBackoff *time.Duration, maxBackoff *time.Duration) *FeedClient { - if reconnectBackoff == nil { - reconnectBackoff = &defaultBackoff - } - if maxBackoff == nil { - maxBackoff = &defaultMaxBackoff - } +func NewFeedClient(feedWSURL string, chainID uint64, startSeqNum uint64, logger log.Logger) *FeedClient { return &FeedClient{ - feedWSURL: feedWSURL, - nextSeqNum: startSeqNum, - messages: make(map[uint64]*BroadcastFeedMessage), - logger: logger, - reconnectBackoff: *reconnectBackoff, - maxBackoff: *maxBackoff, + feedWSURL: feedWSURL, + chainID: chainID, + nextSeqNum: startSeqNum, + messages: make(map[uint64]*BroadcastFeedMessage), + logger: logger, } } @@ -80,11 +74,11 @@ func (fc *FeedClient) Start(ctx context.Context) { } func (fc *FeedClient) readLoop(ctx context.Context) { - backoff := fc.reconnectBackoff - + backoff := startBackOff for { select { case <-ctx.Done(): + log.Info("feed client read loop is closing.") return default: } @@ -94,22 +88,24 @@ func (fc *FeedClient) readLoop(ctx context.Context) { headerRequestedSequenceNumber: []string{strconv.FormatUint(fc.nextSeqNum, 10)}, } dialer := websocket.Dialer{EnableCompression: true} - conn, _, err := dialer.DialContext(ctx, fc.feedWSURL, header) + conn, resp, err := dialer.DialContext(ctx, fc.feedWSURL, header) if err != nil { fc.logger.Error("failed to connect to the feed", "url", fc.feedWSURL, "error", err) - select { - case <-time.After(backoff): - if backoff < fc.maxBackoff { - backoff *= 2 - } - case <-ctx.Done(): - return + time.Sleep(backoff) + if backoff < maxBackoff { + backoff *= 2 } continue } + if err := fc.verifyChainID(resp); errors.Is(err, ErrIncorrectChainId) || errors.Is(err, ErrMissingChainId) { + conn.Close() + fc.logger.Crit("feed chain id verification failed", "url", fc.feedWSURL, "error", err) + return + } + fc.logger.Info("connected to the feed", "url", fc.feedWSURL) - backoff = fc.reconnectBackoff + backoff = startBackOff fc.readMessages(ctx, conn) if err := conn.Close(); err != nil { fc.logger.Warn("error closing connection", "err", err) @@ -117,17 +113,36 @@ func (fc *FeedClient) readLoop(ctx context.Context) { } } +func (fc *FeedClient) verifyChainID(resp *http.Response) error { + if resp == nil { + return ErrMissingChainId + } + val := resp.Header.Get(headerChainID) + if val == "" { + return ErrMissingChainId + } + chainID, err := strconv.ParseUint(val, 0, 64) + if err != nil { + return fmt.Errorf("malformed %s header: %w", headerChainID, err) + } + if chainID != fc.chainID { + return fmt.Errorf("%w: expected %d, got %d", ErrIncorrectChainId, fc.chainID, chainID) + } + return nil +} + func (fc *FeedClient) readMessages(ctx context.Context, conn *websocket.Conn) { for { select { case <-ctx.Done(): + log.Info("feed client read message loop is closing.") return default: } _, msg, err := conn.ReadMessage() if err != nil { - fc.logger.Error("error reading message from feed", "error", err) + fc.logger.Error("error reading message from feed, will reconnect", "error", err) return } @@ -151,7 +166,6 @@ func (fc *FeedClient) readMessages(ctx context.Context, conn *websocket.Conn) { continue } if fc.messages[feedMsg.SequenceNumber] != nil { - fc.logger.Warn("received duplicate message", "seqNum", feedMsg.SequenceNumber) continue } fc.messages[feedMsg.SequenceNumber] = feedMsg diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 12458ef..242709b 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -74,6 +74,17 @@ func NewNitroEspressoBatchVerifier( return nil } + chainID, err := l2Client.ChainID(ctx) + if err != nil { + logger.Crit("failed to get chain ID from L2 client", "error", err) + return nil + } + if chainID.Uint64() != config.Namespace { + logger.Crit("chain ID mismatch", "chain_id", chainID.Uint64(), "namespace", config.Namespace) + return nil + } + logger.Info("chain ID verified", "chain_id", chainID.Uint64()) + batcherAddrs := make([]common.Address, 0, len(config.ValidBatcherAddresses)) for _, addr := range config.ValidBatcherAddresses { batcherAddrs = append(batcherAddrs, common.HexToAddress(addr)) @@ -89,11 +100,11 @@ func NewNitroEspressoBatchVerifier( startNitroBlock := espressoState.L2BlockNumber header, err := l2Client.HeaderByNumber(ctx, big.NewInt(int64(rpc.FinalizedBlockNumber))) if err != nil { - log.Warn("failed to get nitro finalized on startup", err) + logger.Warn("failed to get nitro finalized block on startup", "error", err) } else if header == nil { - log.Warn("nitro finalized block not found") + logger.Warn("nitro finalized block not found") } else if header.Number.Uint64() > espressoState.L2BlockNumber { - log.Warn("finalized block is ahead of stored espresso. updating", "espresso_height", startNitroBlock, "finalized_height", header.Number.Uint64()) + logger.Warn("finalized block is ahead of stored espresso block", "espresso_height", startNitroBlock, "finalized_height", header.Number.Uint64()) startNitroBlock = header.Number.Uint64() } streamer := nitroStreamer.NewEspressoStreamer( @@ -102,11 +113,11 @@ func NewNitroEspressoBatchVerifier( client, batcherAddrs, time.Second, - startNitroBlock, + startNitroBlock+1, logger, ) - feed := feedclient.NewFeedClient(config.FeedURL, espressoState.L2BlockNumber, logger, nil, nil) + feed := feedclient.NewFeedClient(config.FeedURL, config.Namespace, espressoState.L2BlockNumber, logger) return &NitroEspressoBatchVerifier{ streamer: streamer, @@ -165,14 +176,14 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { nitroFinalizedBlock, err := v.getNitroFinalizedBlock(ctx) if err != nil { v.logger.Error("failed to fetch Nitro finalized L2 block", "error", err) + return } espressoMsg := v.streamer.Peek() if espressoMsg == nil { - if err == nil { - if err := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); err != nil { - v.logger.Error("failed to sync espresso state with Nitro finality", "error", err) - } + if err := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); err != nil { + v.logger.Error("failed to sync espresso state with Nitro finality", "error", err) + return } v.logger.Debug("no new messages to verify") return @@ -180,10 +191,8 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { feedMsg := v.feedClient.GetMessage(espressoMsg.Pos) if feedMsg == nil { - if err == nil { - if err := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); err != nil { - v.logger.Error("failed to sync espresso state with Nitro finality", "error", err) - } + if err := v.syncEspressoStateWithNitroFinality(nitroFinalizedBlock); err != nil { + v.logger.Error("failed to sync espresso state with Nitro finality", "error", err) } v.logger.Debug("feed does not have message yet", "msg_pos", espressoMsg.Pos) return @@ -203,8 +212,10 @@ func (v *NitroEspressoBatchVerifier) verifyAndAdvance(ctx context.Context) { return } if !updated { - v.logger.Warn("espresso state not updated — message position not greater than current", + v.logger.Warn("not updating espresso state in store because message position is not greater than current message position in store", "msg_pos", espressoMsg.Pos) + v.advance() + return } v.advance() @@ -256,30 +267,14 @@ func (v *NitroEspressoBatchVerifier) syncEspressoStateWithNitroFinality(nitroFin return nil } -func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) error { +func ensureMessagesMatch(espresso *nitroStreamer.MessageWithMetadata, feed *nitroStreamer.MessageWithMetadata) error { // If the Espresso message has no L2msg it is a delayed message — the payload - // lives in the L1 delayed inbox and is not included in the messages sent to hotshot. - // In that case only compare the header and delayed message counter. + // lives in the L1 delayed inbox and is not included in the HotShot batch. + // DelayedMessagesRead uniquely identifies which inbox entry this is, so that's sufficient. if len(espresso.Message.L2msg) == 0 { - espressoHeader, feedHeader := espresso.Message.Header, feed.Message.Header - if espresso.DelayedMessagesRead != feed.DelayedMessagesRead || - espressoHeader.Kind != feedHeader.Kind || - espressoHeader.Poster != feedHeader.Poster || - espressoHeader.BlockNumber != feedHeader.BlockNumber || - espressoHeader.Timestamp != feedHeader.Timestamp { - return fmt.Errorf( - "delayed message header mismatch\n"+ - " delayed_messages_read: espresso=%d feed=%d\n"+ - " header.kind: espresso=%d feed=%d\n"+ - " header.poster: espresso=%s feed=%s\n"+ - " header.block_number: espresso=%d feed=%d\n"+ - " header.timestamp: espresso=%d feed=%d", - espresso.DelayedMessagesRead, feed.DelayedMessagesRead, - espressoHeader.Kind, feedHeader.Kind, - espressoHeader.Poster, feedHeader.Poster, - espressoHeader.BlockNumber, feedHeader.BlockNumber, - espressoHeader.Timestamp, feedHeader.Timestamp, - ) + if espresso.DelayedMessagesRead != feed.DelayedMessagesRead { + return fmt.Errorf("delayed message mismatch: espresso=%d feed=%d", + espresso.DelayedMessagesRead, feed.DelayedMessagesRead) } return nil } @@ -293,29 +288,7 @@ func ensureMessagesMatch(espresso, feed *nitroStreamer.MessageWithMetadata) erro return fmt.Errorf("failed to RLP-encode feed message: %w", err) } if !bytes.Equal(espressoBytes, feedBytes) { - espressoHeader := espresso.Message.Header - feedHeader := feed.Message.Header - return fmt.Errorf( - "espresso message does not match Nitro feed message\n"+ - " delayed_messages_read: espresso=%d feed=%d\n"+ - " header.kind: espresso=%d feed=%d\n"+ - " header.poster: espresso=%s feed=%s\n"+ - " header.block_number: espresso=%d feed=%d\n"+ - " header.timestamp: espresso=%d feed=%d\n"+ - " header.request_id: espresso=%v feed=%v\n"+ - " header.l1_base_fee: espresso=%v feed=%v\n"+ - " l2msg (hex): espresso=%x feed=%x\n"+ - " rlp (hex): espresso=%x feed=%x", - espresso.DelayedMessagesRead, feed.DelayedMessagesRead, - espressoHeader.Kind, feedHeader.Kind, - espressoHeader.Poster, feedHeader.Poster, - espressoHeader.BlockNumber, feedHeader.BlockNumber, - espressoHeader.Timestamp, feedHeader.Timestamp, - espressoHeader.RequestId, feedHeader.RequestId, - espressoHeader.L1BaseFee, feedHeader.L1BaseFee, - espresso.Message.L2msg, feed.Message.L2msg, - espressoBytes, feedBytes, - ) + return fmt.Errorf("message mismatch: espresso=%+v feed=%+v", espresso, feed) } return nil } @@ -334,25 +307,3 @@ func (v *NitroEspressoBatchVerifier) Stop() { v.l2Client.Close() v.logger.Info("Nitro verifier stopped") } - -func ValidateNitroVerifierConfig(config *NitroEspressoBatchVerifierConfig) error { - if config.FeedURL == "" { - return fmt.Errorf("feed_url is required") - } - if config.FullNodeExecutionRPC == "" { - return fmt.Errorf("full_node_execution_rpc is required") - } - if config.QueryServiceURL == "" { - return fmt.Errorf("query_service_url is required") - } - if config.Namespace == 0 { - return fmt.Errorf("namespace is required") - } - if len(config.ValidBatcherAddresses) == 0 { - return fmt.Errorf("at least one valid_batcher_address is required") - } - if config.VerificationInterval <= 0 { - return fmt.Errorf("verification_interval must be positive") - } - return nil -} From a35b07ec1b2f4f77833b1a6ac779924846c14d26 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Thu, 14 May 2026 12:22:21 -0400 Subject: [PATCH 11/21] add nitro e2e --- .github/workflows/ci.yml | 29 +++- config.go | 29 +++- espresso_e2e/e2e_utils.go | 44 +++++ espresso_e2e/nitro/.env | 6 +- espresso_e2e/nitro/docker-compose.yml | 14 +- espresso_e2e/nitro/l1-config/genesis.json | 193 ++++++++++++++++++++++ espresso_e2e/nitro_e2e_test.go | 162 ++++++++++++++++++ go.mod | 2 +- go.sum | 2 + justfile | 8 +- verifier/nitro/feed_client/client.go | 19 ++- verifier/nitro/nitro_verifier.go | 33 ++-- 12 files changed, 500 insertions(+), 41 deletions(-) create mode 100644 espresso_e2e/nitro/l1-config/genesis.json create mode 100644 espresso_e2e/nitro_e2e_test.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c508ea9..c5af633 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: - name: Test run: just test -v -race - e2e: + e2e-op: runs-on: ubuntu-latest timeout-minutes: 30 steps: @@ -54,7 +54,7 @@ jobs: - name: E2E Tests run: just e2e -v -run TestOPE2ERollupEspressoProxy$ - e2e-reorg: + e2e-op-reorg: runs-on: ubuntu-latest timeout-minutes: 30 steps: @@ -77,7 +77,7 @@ jobs: - name: E2E Tests run: just e2e -v -run TestOPE2ERollupEspressoProxyReorg - e2e-l2-reorg: + e2e-op-l2-reorg: runs-on: ubuntu-latest timeout-minutes: 30 steps: @@ -99,3 +99,26 @@ jobs: - name: E2E Tests run: just e2e -v -run TestOPE2EL2Reorg + + e2e-nitro: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + cache: true + + - uses: extractions/setup-just@v2 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: E2E Tests + run: just e2e -v -run TestNitroE2ERollupEspressoProxy diff --git a/config.go b/config.go index ef9f453..86a9c49 100644 --- a/config.go +++ b/config.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "net/url" "os" "proxy/proxy" @@ -27,13 +28,13 @@ type OPConfig struct { } type NitroConfig struct { - Enable bool `json:"enable"` - FeedURL string `json:"feed_url"` - VerificationInterval time.Duration `json:"verification_interval"` - QueryServiceURL string `json:"query_service_url"` - Namespace uint64 `json:"namespace"` - InitialHotshotBlock uint64 `json:"initial_hotshot_block"` - ValidBatcherAddresses []string `json:"valid_batcher_addresses"` + Enable bool `json:"enable"` + FeedURL string `json:"feed_url"` + VerificationInterval time.Duration `json:"verification_interval"` + QueryServiceURL string `json:"query_service_url"` + Namespace uint64 `json:"namespace"` + InitialHotshotBlock uint64 `json:"initial_hotshot_block"` + ValidBatcherAddresses []nitroVerifier.BatcherAddressConfig `json:"valid_batcher_addresses"` } type Config struct { @@ -115,10 +116,19 @@ func parseConfig() *Config { pflag.StringVar(&cfg.NitroConfig.QueryServiceURL, "nitro.query-service-url", cfg.NitroConfig.QueryServiceURL, "Espresso query service URL for Nitro") pflag.Uint64Var(&cfg.NitroConfig.Namespace, "nitro.namespace", cfg.NitroConfig.Namespace, "Nitro namespace") pflag.Uint64Var(&cfg.NitroConfig.InitialHotshotBlock, "nitro.initial-hotshot-block", cfg.NitroConfig.InitialHotshotBlock, "initial HotShot block for Nitro streamer") - pflag.StringArrayVar(&cfg.NitroConfig.ValidBatcherAddresses, "nitro.valid-batcher-addresses", cfg.NitroConfig.ValidBatcherAddresses, "valid batcher addresses for Nitro verifier") + var batcherAddressFlags []string + pflag.StringArrayVar(&batcherAddressFlags, "nitro.valid-batcher-addresses", nil, "valid batcher addresses for Nitro verifier (full range; use config file for from/to)") pflag.Parse() + for _, addr := range batcherAddressFlags { + cfg.NitroConfig.ValidBatcherAddresses = append(cfg.NitroConfig.ValidBatcherAddresses, nitroVerifier.BatcherAddressConfig{ + Address: addr, + From: 0, + To: math.MaxUint64, + }) + } + if err := cfg.validate(); err != nil { log.Crit("invalid configuration", "error", err) } @@ -183,6 +193,9 @@ func (c *Config) validate() error { if len(c.NitroConfig.ValidBatcherAddresses) == 0 { errs = append(errs, fmt.Errorf("nitro.valid-batcher-addresses: at least one address required")) } + for i, a := range c.NitroConfig.ValidBatcherAddresses { + errs = append(errs, validateAddress(fmt.Sprintf("nitro.valid-batcher-addresses[%d].address", i), a.Address)) + } } if c.ListenAddr == "" { diff --git a/espresso_e2e/e2e_utils.go b/espresso_e2e/e2e_utils.go index 09eee19..4804823 100644 --- a/espresso_e2e/e2e_utils.go +++ b/espresso_e2e/e2e_utils.go @@ -8,6 +8,7 @@ import ( "fmt" "io" "log/slog" + "math" "math/big" "net" "net/http" @@ -22,6 +23,7 @@ import ( "time" espressostore "proxy/store" + nitroVerifier "proxy/verifier/nitro" espressoClient "github.com/EspressoSystems/espresso-network/sdks/go/client" opStreamer "github.com/EspressoSystems/espresso-streamers/op" @@ -59,6 +61,7 @@ func (m *mockLightClient) FinalizedState(_ *bind.CallOpts) (opStreamer.Finalized }, nil } +// OP const ( rollupWorkingDir = "./op" l1GethURL = "http://127.0.0.1:8545" @@ -77,6 +80,18 @@ const ( batchAuthenticatorOwnerAddress = "0x90F79bf6EB2c4f870365E785982E1f101E93b906" ) +// Nitro +const ( + nitroWorkingDir = "./nitro" + nitroEspressoURL = "http://127.0.0.1:24000" + nitroL1URL = "http://127.0.0.1:8545" + nitroSeqURL = "http://127.0.0.1:8547" + nitroFullNodeURL = "http://127.0.0.1:8549" + nitroFullNodeFeedURL = "ws://127.0.0.1:9643" + nitroNamespace = uint64(412346) + nitroBatchPoster = "0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E" +) + func startVerifier(ctx context.Context, t *testing.T, logger log.Logger, store *espressostore.EspressoStore) *verifier.OPEspressoBatchVerifier { t.Helper() l1Client, err := ethclient.DialContext(ctx, l1GethURL) @@ -99,6 +114,25 @@ func startVerifier(ctx context.Context, t *testing.T, logger log.Logger, store * return v } +func startNitroVerifier(ctx context.Context, t *testing.T, store *espressostore.EspressoStore) *nitroVerifier.NitroEspressoBatchVerifier { + t.Helper() + v := nitroVerifier.NewNitroEspressoBatchVerifier(ctx, newDefaultLogger(), store, + &nitroVerifier.NitroEspressoBatchVerifierConfig{ + FeedURL: nitroFullNodeFeedURL, + FullNodeExecutionRPC: nitroFullNodeURL, + VerificationInterval: 250 * time.Millisecond, + QueryServiceURL: nitroEspressoURL, + Namespace: nitroNamespace, + InitialHotshotBlock: 0, + ValidBatcherAddresses: []nitroVerifier.BatcherAddressConfig{ + {Address: nitroBatchPoster, From: 0, To: math.MaxUint64}, + }, + }) + require.NotNil(t, v, "failed to create Nitro verifier") + v.Start(ctx) + return v +} + func runDockerCompose(workingDir string, services ...string) func() { return runDockerComposeFile(workingDir, "", nil, services...) } @@ -232,6 +266,16 @@ func waitForRollupServicesReady(t *testing.T) { waitForHTTPReady(t, opNodeFullNode, 1*time.Minute) } +func waitForNitroServicesReady(t *testing.T) { + t.Helper() + // l1-geth must be up before rollup-creator can deploy contracts + waitForHTTPReady(t, nitroL1URL, 2*time.Minute) + waitForHTTPReady(t, nitroEspressoURL+"/v0/status/block-height", 2*time.Minute) + // sequencer only starts after rollup-creator completes so give sufficient time + waitForHTTPReady(t, nitroSeqURL, 5*time.Minute) + waitForHTTPReady(t, nitroFullNodeURL, 5*time.Minute) +} + type JSONRPCResponse struct { Version string `json:"jsonrpc"` ID json.RawMessage `json:"id"` diff --git a/espresso_e2e/nitro/.env b/espresso_e2e/nitro/.env index 6b81a6e..e9eded2 100644 --- a/espresso_e2e/nitro/.env +++ b/espresso_e2e/nitro/.env @@ -14,8 +14,9 @@ ESPRESSO_SEQUENCER_LIGHT_CLIENT_PROXY_ADDRESS=0x9fe46736679d2d9a65f0992f2272de9f ESPRESSO_SEQUENCER_FEE_CONTRACT_PROXY_ADDRESS=0xa513e6e4b8f2a923d98304ec87f64353c4d5c853 ESPRESSO_SEQUENCER_STAKE_TABLE_PROXY_ADDRESS=0xb7f8bc63bbcad18155201308c8f3540b07f84f5e ESPRESSO_SEQUENCER_PLONK_VERIFIER_V2_ADDRESS=0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 +ESPRESSO_SEQUENCER_ETH_MNEMONIC=giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete -L1_GETH_IMAGE=ghcr.io/espressosystems/optimism-espresso-integration/l1-geth:celo-integration-rebase-16.3 +L1_GETH_IMAGE=ghcr.io/espressosystems/geth-l1:main LIGHTHOUSE_IMAGE=sigp/lighthouse:v7.1.0 L1_HTTP_PORT=8545 @@ -23,10 +24,11 @@ L1_ENGINE_PORT=8551 L1_BEACON_PORT=5052 L1_CHAIN_ID=11155111 +BATCH_POSTER_ADDRESS=0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E OPERATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 OPERATOR_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 BATCH_POSTER_PRIVATE_KEY=b6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 DEPLOYER_PRIVATE_KEY=0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff -NITRO_IMAGE=ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:v3.9.8-espresso-v1.1.0 +NITRO_IMAGE=ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:v3.9.8-espresso-v1.1.1 ROLLUP_CREATOR_IMAGE=ghcr.io/espressosystems/timeboost/rollup-creator:v2.1.3-legacy \ No newline at end of file diff --git a/espresso_e2e/nitro/docker-compose.yml b/espresso_e2e/nitro/docker-compose.yml index e15784c..08654df 100644 --- a/espresso_e2e/nitro/docker-compose.yml +++ b/espresso_e2e/nitro/docker-compose.yml @@ -1,10 +1,12 @@ services: l1-geth: - image: ghcr.io/espressosystems/timeboost/geth-l1:rollup-creator-round2 + image: ${L1_GETH_IMAGE} command: --dev --dev.period=1 --verbosity=2 ports: - 8545:8545 - 8546:8546 + volumes: + - "./l1-config/genesis.json:/genesis.json" espresso-dev-node: image: ${ESPRESSO_DEV_NODE_IMAGE} @@ -27,7 +29,6 @@ services: ESPRESSO_SEQUENCER_L1_PROVIDER: http://l1-geth:${L1_HTTP_PORT} ESPRESSO_DEPLOYER_ACCOUNT_INDEX: 0 ESPRESSO_DEV_NODE_EPOCH_HEIGHT: "4294967295" - ESPRESSO_SEQUENCER_ETH_MNEMONIC: "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" rollup-creator: image: ${ROLLUP_CREATOR_IMAGE} @@ -44,10 +45,10 @@ services: CHILD_CHAIN_NAME: "arb-dev-test" DEPLOYER_PRIVKEY: ${DEPLOYER_PRIVATE_KEY} MAX_DATA_SIZE: 117964 - OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E - PARENT_CHAIN_ID: 1337 + OWNER_ADDRESS: ${BATCH_POSTER_ADDRESS} + PARENT_CHAIN_ID: ${L1_CHAIN_ID} PARENT_CHAIN_RPC: "http://l1-geth:8545" - SEQUENCER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E + SEQUENCER_ADDRESS: ${BATCH_POSTER_ADDRESS} WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a command: ["create-rollup-testnode"] depends_on: @@ -105,6 +106,7 @@ services: - "./nitro-config:/nitro-config" command: - --conf.file=/nitro-config/batch_poster_config.json + - --node.batch-poster.parent-chain-wallet.private-key=${BATCH_POSTER_PRIVATE_KEY} env_file: - ./.env depends_on: @@ -143,7 +145,7 @@ services: cast send \ --rpc-url http://sequencer:8547 \ --private-key ${BATCH_POSTER_PRIVATE_KEY} \ - 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E \ + ${BATCH_POSTER_ADDRESS} \ --value 1 2>&1 || true sleep 2 done diff --git a/espresso_e2e/nitro/l1-config/genesis.json b/espresso_e2e/nitro/l1-config/genesis.json new file mode 100644 index 0000000..1900f35 --- /dev/null +++ b/espresso_e2e/nitro/l1-config/genesis.json @@ -0,0 +1,193 @@ +{ + "alloc": { + "0x0165878a594ca255338adfa4d48449f69242eb8f": { + "balance": "0x0", + "code": "0x6080604052600436106100aa575f3560e01c80638da5cb5b116100635780638da5cb5b1461019c5780638ed83271146101e2578063ad3cb1cc146101f6578063c4d66de814610233578063f2fde38b14610252578063f340fa0114610271576100c8565b80630d8e6e2c146100e157806327e235e3146101115780634f1ef2861461014a57806352d1902d1461015f578063645006ca14610173578063715018a614610188576100c8565b366100c85760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100ec575f5ffd5b5060408051600181525f60208201819052918101919091526060015b60405180910390f35b34801561011c575f5ffd5b5061013c61012b366004610a40565b60026020525f908152604090205481565b604051908152602001610108565b61015d610158366004610a6d565b610284565b005b34801561016a575f5ffd5b5061013c6102a3565b34801561017e575f5ffd5b5061013c60015481565b348015610193575f5ffd5b5061015d6102be565b3480156101a7575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610108565b3480156101ed575f5ffd5b5061013c5f5481565b348015610201575f5ffd5b50610226604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101089190610b31565b34801561023e575f5ffd5b5061015d61024d366004610a40565b6102df565b34801561025d575f5ffd5b5061015d61026c366004610a40565b61040b565b61015d61027f366004610a40565b61044d565b61028c610526565b610295826105cc565b61029f8282610613565b5050565b5f6102ac6106d4565b505f516020610bb35f395f51905f5290565b6102c661071d565b6040516317d5c96560e11b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103245750825b90505f8267ffffffffffffffff1660011480156103405750303b155b90508115801561034e575080155b1561036c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039657845460ff60401b1916600160401b1785555b61039f86610778565b6103a7610789565b670de0b6b3a76400005f5566038d7ea4c68000600155831561040357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61041361071d565b6001600160a01b03811661044157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61044a81610791565b50565b60015434101561047057604051636ba4a1c760e01b815260040160405180910390fd5b5f543411156104925760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b0381166104b957604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b0381165f90815260026020526040812080543492906104e0908490610b66565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f1614806105ac57507f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f6001600160a01b03166105a05f516020610bb35f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156105ca5760405163703e46dd60e11b815260040160405180910390fd5b565b6105d461071d565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200160405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066d575060408051601f3d908101601f1916820190925261066a91810190610b85565b60015b61069557604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610438565b5f516020610bb35f395f51905f5281146106c557604051632a87526960e21b815260048101829052602401610438565b6106cf8383610801565b505050565b306001600160a01b037f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f16146105ca5760405163703e46dd60e11b815260040160405180910390fd5b3361074f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105ca5760405163118cdaa760e01b8152336004820152602401610438565b610780610856565b61044a8161089f565b6105ca610856565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61080a826108a7565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561084e576106cf828261090a565b61029f61097e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166105ca57604051631afcd79f60e31b815260040160405180910390fd5b610413610856565b806001600160a01b03163b5f036108dc57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610438565b5f516020610bb35f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516109269190610b9c565b5f60405180830381855af49150503d805f811461095e576040519150601f19603f3d011682016040523d82523d5f602084013e610963565b606091505b509150915061097385838361099d565b925050505b92915050565b34156105ca5760405163b398979f60e01b815260040160405180910390fd5b6060826109b2576109ad826109fc565b6109f5565b81511580156109c957506001600160a01b0384163b155b156109f257604051639996b31560e01b81526001600160a01b0385166004820152602401610438565b50805b9392505050565b805115610a0c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a3b575f5ffd5b919050565b5f60208284031215610a50575f5ffd5b6109f582610a25565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610a7e575f5ffd5b610a8783610a25565b9150602083013567ffffffffffffffff811115610aa2575f5ffd5b8301601f81018513610ab2575f5ffd5b803567ffffffffffffffff811115610acc57610acc610a59565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610afb57610afb610a59565b604052818152828201602001871015610b12575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8082018082111561097857634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610b95575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6": { + "balance": "0x0", + "code": "0x6080604052600436106100fa575f3560e01c806370a08231116100925780639ab8367e116100625780639ab8367e146102d0578063a9059cbb146102ef578063ad3cb1cc1461030e578063dd62ed3e1461033e578063f2fde38b1461035d575f5ffd5b806370a0823114610222578063715018a6146102625780638da5cb5b1461027657806395d89b41146102bc575f5ffd5b806323b872dd116100cd57806323b872dd146101bf578063313ce567146101de5780634f1ef286146101f957806352d1902d1461020e575f5ffd5b806306fdde03146100fe578063095ea7b3146101285780630d8e6e2c1461015757806318160ddd14610182575b5f5ffd5b348015610109575f5ffd5b5061011261037c565b60405161011f9190610f2c565b60405180910390f35b348015610133575f5ffd5b50610147610142366004610f7c565b61043c565b604051901515815260200161011f565b348015610162575f5ffd5b5060408051600181525f602082018190529181019190915260600161011f565b34801561018d575f5ffd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b60405190815260200161011f565b3480156101ca575f5ffd5b506101476101d9366004610fa4565b610455565b3480156101e9575f5ffd5b506040516012815260200161011f565b61020c610207366004611069565b61047a565b005b348015610219575f5ffd5b506101b1610499565b34801561022d575f5ffd5b506101b161023c3660046110c7565b6001600160a01b03165f9081525f5160206114515f395f51905f52602052604090205490565b34801561026d575f5ffd5b5061020c6104b4565b348015610281575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161011f565b3480156102c7575f5ffd5b506101126104d5565b3480156102db575f5ffd5b5061020c6102ea3660046110fe565b610513565b3480156102fa575f5ffd5b50610147610309366004610f7c565b610659565b348015610319575f5ffd5b50610112604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610349575f5ffd5b506101b161035836600461118c565b610666565b348015610368575f5ffd5b5061020c6103773660046110c7565b6106af565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f5160206114515f395f51905f52916103ba906111bd565b80601f01602080910402602001604051908101604052809291908181526020018280546103e6906111bd565b80156104315780601f1061040857610100808354040283529160200191610431565b820191905f5260205f20905b81548152906001019060200180831161041457829003601f168201915b505050505091505090565b5f336104498185856106f1565b60019150505b92915050565b5f33610462858285610703565b61046d858585610766565b60019150505b9392505050565b6104826107c3565b61048b82610869565b6104958282610871565b5050565b5f6104a261092d565b505f5160206114715f395f51905f5290565b6104bc610976565b6040516317d5c96560e11b815260040160405180910390fd5b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f5160206114515f395f51905f52916103ba906111bd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156105585750825b90505f8267ffffffffffffffff1660011480156105745750303b155b905081158015610582575080155b156105a05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ca57845460ff60401b1916600160401b1785555b6105d487876109d1565b6105dd8a6109e3565b6105e56109f4565b6105f16012600a6112ec565b6105fb90896112fa565b975061060789896109fc565b831561064d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f33610449818585610766565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6106b7610976565b6001600160a01b0381166106e557604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106ee81610a30565b50565b6106fe8383836001610aa0565b505050565b5f61070e8484610666565b90505f198114610760578181101561075257604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106dc565b61076084848484035f610aa0565b50505050565b6001600160a01b03831661078f57604051634b637e8f60e11b81525f60048201526024016106dc565b6001600160a01b0382166107b85760405163ec442f0560e01b81525f60048201526024016106dc565b6106fe838383610b84565b306001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616148061084957507f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe66001600160a01b031661083d5f5160206114715f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156108675760405163703e46dd60e11b815260040160405180910390fd5b565b6106ee610976565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108cb575060408051601f3d908101601f191682019092526108c891810190611311565b60015b6108f357604051634c9c8ce360e01b81526001600160a01b03831660048201526024016106dc565b5f5160206114715f395f51905f52811461092357604051632a87526960e21b8152600481018290526024016106dc565b6106fe8383610cbd565b306001600160a01b037f0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe616146108675760405163703e46dd60e11b815260040160405180910390fd5b336109a87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108675760405163118cdaa760e01b81523360048201526024016106dc565b6109d9610d12565b6104958282610d5b565b6109eb610d12565b6106ee81610dab565b610867610d12565b6001600160a01b038216610a255760405163ec442f0560e01b81525f60048201526024016106dc565b6104955f8383610b84565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5160206114515f395f51905f526001600160a01b038516610ad75760405163e602df0560e01b81525f60048201526024016106dc565b6001600160a01b038416610b0057604051634a1406b160e11b81525f60048201526024016106dc565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610b7d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b7491815260200190565b60405180910390a35b5050505050565b5f5160206114515f395f51905f526001600160a01b038416610bbe5781816002015f828254610bb39190611328565b90915550610c2e9050565b6001600160a01b0384165f9081526020829052604090205482811015610c105760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106dc565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610c4c576002810180548390039055610c6a565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610caf91815260200190565b60405180910390a350505050565b610cc682610db3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610d0a576106fe8282610e16565b610495610e88565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661086757604051631afcd79f60e31b815260040160405180910390fd5b610d63610d12565b5f5160206114515f395f51905f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d9c848261137f565b5060048101610760838261137f565b6106b7610d12565b806001600160a01b03163b5f03610de857604051634c9c8ce360e01b81526001600160a01b03821660048201526024016106dc565b5f5160206114715f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610e32919061143a565b5f60405180830381855af49150503d805f8114610e6a576040519150601f19603f3d011682016040523d82523d5f602084013e610e6f565b606091505b5091509150610e7f858383610ea7565b95945050505050565b34156108675760405163b398979f60e01b815260040160405180910390fd5b606082610ebc57610eb782610f03565b610473565b8151158015610ed357506001600160a01b0384163b155b15610efc57604051639996b31560e01b81526001600160a01b03851660048201526024016106dc565b5080610473565b805115610f135780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610f77575f5ffd5b919050565b5f5f60408385031215610f8d575f5ffd5b610f9683610f61565b946020939093013593505050565b5f5f5f60608486031215610fb6575f5ffd5b610fbf84610f61565b9250610fcd60208501610f61565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff84111561100c5761100c610fde565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561103b5761103b610fde565b604052838152905080828401851015611052575f5ffd5b838360208301375f60208583010152509392505050565b5f5f6040838503121561107a575f5ffd5b61108383610f61565b9150602083013567ffffffffffffffff81111561109e575f5ffd5b8301601f810185136110ae575f5ffd5b6110bd85823560208401610ff2565b9150509250929050565b5f602082840312156110d7575f5ffd5b61047382610f61565b5f82601f8301126110ef575f5ffd5b61047383833560208501610ff2565b5f5f5f5f5f60a08688031215611112575f5ffd5b61111b86610f61565b945061112960208701610f61565b935060408601359250606086013567ffffffffffffffff81111561114b575f5ffd5b611157888289016110e0565b925050608086013567ffffffffffffffff811115611173575f5ffd5b61117f888289016110e0565b9150509295509295909350565b5f5f6040838503121561119d575f5ffd5b6111a683610f61565b91506111b460208401610f61565b90509250929050565b600181811c908216806111d157607f821691505b6020821081036111ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561124457808504811115611228576112286111f5565b600184161561123657908102905b60019390931c92800261120d565b935093915050565b5f8261125a5750600161044f565b8161126657505f61044f565b816001811461127c5760028114611286576112a2565b600191505061044f565b60ff841115611297576112976111f5565b50506001821b61044f565b5060208310610133831016604e8410600b84101617156112c5575081810a61044f565b6112d15f198484611209565b805f19048211156112e4576112e46111f5565b029392505050565b5f61047360ff84168361124c565b808202811582820484141761044f5761044f6111f5565b5f60208284031215611321575f5ffd5b5051919050565b8082018082111561044f5761044f6111f5565b601f8211156106fe57805f5260205f20601f840160051c810160208510156113605750805b601f840160051c820191505b81811015610b7d575f815560010161136c565b815167ffffffffffffffff81111561139957611399610fde565b6113ad816113a784546111bd565b8461133b565b6020601f8211600181146113df575f83156113c85750848201515b5f19600385901b1c1916600184901b178455610b7d565b5f84815260208120601f198516915b8281101561140e57878501518255602094850194600190920191016113ee565b508482101561142b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82518060208501845e5f92019182525091905056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x4e59b44847b379578588920ca78fbf26c0b4956c": { + "balance": "0x0", + "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", + "nonce": "1", + "storage": {} + }, + "0x5fbdb2315678afecb367f032d93f642f64180aa3": { + "balance": "0x0", + "code": "0x608060405260043610610109575f3560e01c8063860f7cda116100a157806399a88ec411610071578063b794726211610057578063b794726214610314578063f2fde38b1461034e578063f3b7dead1461036d575f80fd5b806399a88ec4146102d65780639b2ea4bd146102f5575f80fd5b8063860f7cda1461025c5780638d52d4a01461027b5780638da5cb5b1461029a5780639623609d146102c3575f80fd5b80633ab76e9f116100dc5780633ab76e9f146101c25780636bd9f516146101ee578063715018a6146102295780637eff275e1461023d575f80fd5b80630652b57a1461010d57806307c8f7b01461012e578063204e1c7a1461014d578063238181ae14610196575b5f80fd5b348015610118575f80fd5b5061012c6101273660046111ab565b61038c565b005b348015610139575f80fd5b5061012c6101483660046111c6565b6103db565b348015610158575f80fd5b5061016c6101673660046111ab565b61042d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a1575f80fd5b506101b56101b03660046111ab565b61064b565b60405161018d9190611231565b3480156101cd575f80fd5b5060035461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101f9575f80fd5b5061021c6102083660046111ab565b60016020525f908152604090205460ff1681565b60405161018d9190611270565b348015610234575f80fd5b5061012c6106e2565b348015610248575f80fd5b5061012c6102573660046112af565b6106f5565b348015610267575f80fd5b5061012c610276366004611400565b6108a2565b348015610286575f80fd5b5061012c61029536600461144d565b6108d8565b3480156102a5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661016c565b61012c6102d136600461147c565b61094b565b3480156102e1575f80fd5b5061012c6102f03660046112af565b610b59565b348015610300575f80fd5b5061012c61030f3660046114ed565b610de0565b34801561031f575f80fd5b5060035474010000000000000000000000000000000000000000900460ff16604051901515815260200161018d565b348015610359575f80fd5b5061012c6103683660046111ab565b610e71565b348015610378575f80fd5b5061016c6103873660046111ab565b610f28565b610394611096565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103e3611096565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff168181600281111561046857610468611243565b036104e1578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104da9190611531565b9392505050565b60018160028111156104f5576104f5611243565b03610543578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561055757610557611243565b036105de5760035473ffffffffffffffffffffffffffffffffffffffff8481165f908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105c39190600401611597565b602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020525f9081526040902080546106639061154c565b80601f016020809104026020016040519081016040528092919081815260200182805461068f9061154c565b80156106da5780601f106106b1576101008083540402835291602001916106da565b820191905f5260205f20905b8154815290600101906020018083116106bd57829003601f168201915b505050505081565b6106ea611096565b6106f35f611116565b565b6106fd611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff169081600281111561073857610738611243565b036107bf576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b5f604051808303815f87803b1580156107a4575f80fd5b505af11580156107b6573d5f803e3d5ffd5b50505050505050565b60018160028111156107d3576107d3611243565b0361082c576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af40359060240161078d565b600281600281111561084057610840611243565b036105de576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b9060240161078d565b505050565b6108aa611096565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260026020526040902061089d8282611683565b6108e0611096565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561094257610942611243565b02179055505050565b610953611096565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604081205460ff169081600281111561098e5761098e611243565b03610a50576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef2869034906109e9908790879060040161179b565b5f6040518083038185885af1158015610a04573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a4a91908101906117d1565b50610b53565b610a5a8484610b59565b5f8473ffffffffffffffffffffffffffffffffffffffff163484604051610a819190611846565b5f6040518083038185875af1925050503d805f8114610abb576040519150601f19603f3d011682016040523d82523d5f602084013e610ac0565b606091505b5050905080610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161063c565b505b50505050565b610b61611096565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081205460ff1690816002811115610b9c57610b9c611243565b03610bf5576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe69060240161078d565b6001816002811115610c0957610c09611243565b03610c88576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda9060440161078d565b6002816002811115610c9c57610c9c611243565b03610dd85773ffffffffffffffffffffffffffffffffffffffff83165f9081526002602052604081208054610cd09061154c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc9061154c565b8015610d475780601f10610d1e57610100808354040283529160200191610d47565b820191905f5260205f20905b815481529060010190602001808311610d2a57829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610da59250859150879060040161185c565b5f604051808303815f87803b158015610dbc575f80fd5b505af1158015610dce573d5f803e3d5ffd5b5050505050505050565b61089d611893565b610de8611096565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e40908590859060040161185c565b5f604051808303815f87803b158015610e57575f80fd5b505af1158015610e69573d5f803e3d5ffd5b505050505050565b610e79611096565b73ffffffffffffffffffffffffffffffffffffffff8116610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161063c565b610f2581611116565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205460ff1681816002811115610f6357610f63611243565b03610fb1578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b6001816002811115610fc557610fc5611243565b03611013578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b600281600281111561102757611027611243565b036105de5760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b6573d5f803e3d5ffd5b5f5473ffffffffffffffffffffffffffffffffffffffff1633146106f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063c565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f25575f80fd5b5f602082840312156111bb575f80fd5b81356104da8161118a565b5f602082840312156111d6575f80fd5b813580151581146104da575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104da60208301846111e5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600383106112a9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f80604083850312156112c0575f80fd5b82356112cb8161118a565b915060208301356112db8161118a565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561135a5761135a6112e6565b604052919050565b5f67ffffffffffffffff82111561137b5761137b6112e6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f6113b96113b484611362565b611313565b90508281528383830111156113cc575f80fd5b828260208301375f602084830101529392505050565b5f82601f8301126113f1575f80fd5b6104da838335602085016113a7565b5f8060408385031215611411575f80fd5b823561141c8161118a565b9150602083013567ffffffffffffffff811115611437575f80fd5b611443858286016113e2565b9150509250929050565b5f806040838503121561145e575f80fd5b82356114698161118a565b91506020830135600381106112db575f80fd5b5f805f6060848603121561148e575f80fd5b83356114998161118a565b925060208401356114a98161118a565b9150604084013567ffffffffffffffff8111156114c4575f80fd5b8401601f810186136114d4575f80fd5b6114e3868235602084016113a7565b9150509250925092565b5f80604083850312156114fe575f80fd5b823567ffffffffffffffff811115611514575f80fd5b611520858286016113e2565b92505060208301356112db8161118a565b5f60208284031215611541575f80fd5b81516104da8161118a565b600181811c9082168061156057607f821691505b602082108103610645577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208083525f84546115a98161154c565b806020870152604060018084165f81146115ca576001811461160457611631565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550611631565b895f5260205f205f5b858110156116285781548b820186015290830190880161160d565b8a016040019650505b509398975050505050505050565b601f82111561089d57805f5260205f20601f840160051c810160208510156116645750805b601f840160051c820191505b81811015610b51575f8155600101611670565b815167ffffffffffffffff81111561169d5761169d6112e6565b6116b1816116ab845461154c565b8461163f565b602080601f831160018114611703575f84156116cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e69565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561174f57888601518255948401946001909101908401611730565b508582101561178b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6117c960408301846111e5565b949350505050565b5f602082840312156117e1575f80fd5b815167ffffffffffffffff8111156117f7575f80fd5b8201601f81018413611807575f80fd5b80516118156113b482611362565b818152856020838501011115611829575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f82518060208501845e5f920191825250919050565b604081525f61186e60408301856111e5565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea164736f6c6343000819000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x685d256e9be7152506222a87b2d2d582926a289249af3bc94a19432f63c6720e": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0xb689b7fb27041302cb3f75ab02fdfc43b274e2d4faa9d0959400e9b9af08e7ee": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0x610178da211fef7d417bc0e6fed39f05609ad788": { + "balance": "0x0", + "code": "0x608060405260043610610161575f3560e01c80639b30a5e6116100cd578063b5700e6811610087578063c64814dd11610062578063c64814dd1461047c578063f2fde38b146104b2578063fa52c7d8146104d1578063fc0c546a14610514575f5ffd5b8063b5700e6814610413578063b5ecb34414610432578063be2030941461045d575f5ffd5b80639b30a5e6146102f35780639e9a8f3114610312578063a2d78dd514610327578063a3066aab14610379578063ad3cb1cc14610398578063b3e6ebd5146103d5575f5ffd5b80634f1ef2861161011e5780634f1ef2861461023557806352d1902d146102485780635544c2f11461025c5780636a911ccf1461027b578063715018a61461028f5780638da5cb5b146102a3575f5ffd5b8063026e402b146101655780630d8e6e2c1461018657806313b9057a146101b65780632140fecd146101d55780633e9df9b5146101f45780634d99dd1614610216575b5f5ffd5b348015610170575f5ffd5b5061018461017f366004612346565b610533565b005b348015610191575f5ffd5b5060408051600181525f60208201819052918101919091526060015b60405180910390f35b3480156101c1575f5ffd5b506101846101d036600461246c565b6106d6565b3480156101e0575f5ffd5b506101846101ef3660046124ca565b610869565b3480156101ff575f5ffd5b506102085f5481565b6040519081526020016101ad565b348015610221575f5ffd5b50610184610230366004612346565b61098a565b6101846102433660046124e3565b610b3c565b348015610253575f5ffd5b50610208610b5b565b348015610267575f5ffd5b50610184610276366004612588565b610b76565b348015610286575f5ffd5b50610184610c3f565b34801561029a575f5ffd5b50610184610ccd565b3480156102ae575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016101ad565b3480156102fe575f5ffd5b5061020861030d3660046125cc565b610cee565b34801561031d575f5ffd5b5061020860085481565b348015610332575f5ffd5b506103646103413660046125e6565b600760209081525f92835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101ad565b348015610384575f5ffd5b506101846103933660046124ca565b610d48565b3480156103a3575f5ffd5b506103c8604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101ad9190612617565b3480156103e0575f5ffd5b506104036103ef36600461264c565b60046020525f908152604090205460ff1681565b60405190151581526020016101ad565b34801561041e575f5ffd5b506001546102db906001600160a01b031681565b34801561043d575f5ffd5b5061020861044c3660046124ca565b60056020525f908152604090205481565b348015610468575f5ffd5b50610184610477366004612663565b610e58565b348015610487575f5ffd5b506102086104963660046125e6565b600660209081525f928352604080842090915290825290205481565b3480156104bd575f5ffd5b506101846104cc3660046124ca565b610f84565b3480156104dc575f5ffd5b506105066104eb3660046124ca565b60036020525f90815260409020805460019091015460ff1682565b6040516101ad9291906126c1565b34801561051f575f5ffd5b506002546102db906001600160a01b031681565b61053c82610fc1565b335f82900361055e57604051631f2a200560e01b815260040160405180910390fd5b600254604051636eb1769f60e11b81526001600160a01b0383811660048301523060248301525f92169063dd62ed3e90604401602060405180830381865afa1580156105ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d091906126f1565b9050828110156106025760405163054365bb60e31b815260048101829052602481018490526044015b60405180910390fd5b60025461061a906001600160a01b0316833086611042565b6001600160a01b0384165f908152600360205260408120805485929061064190849061271c565b90915550506001600160a01b038085165f9081526006602090815260408083209386168352929052908120805485929061067c90849061271c565b92505081905550836001600160a01b0316826001600160a01b03167fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b856040516106c891815260200190565b60405180910390a350505050565b336106e0816110e6565b6106e984611133565b6106f28561116e565b604080516001600160a01b03831660208201525f910160405160208183030381529060405290506107248185886111aa565b6127108361ffff16111561074b5760405163dc81db8560e01b815260040160405180910390fd5b600160045f61075989610cee565b81526020019081526020015f205f6101000a81548160ff02191690831515021790555060405180604001604052805f8152602001600160028111156107a0576107a06126ad565b90526001600160a01b0383165f908152600360209081526040909120825181559082015160018083018054909160ff19909116908360028111156107e6576107e66126ad565b02179055505060408051885181526020808a01518183015289830151828401526060808b0151908301528851608083015288015160a082015261ffff861660c082015290516001600160a01b03851692507ff6e8359c57520b469634736bfc3bb7ec5cbd1a0bd28b10a8275793bb730b797f9181900360e00190a2505050505050565b6001600160a01b0381165f9081526005602052604081205433918190036108a3576040516379298a5360e11b815260040160405180910390fd5b804210156108c457604051635a77435760e01b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209386168352929052908120549081900361090c57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038085165f90815260066020908152604080832087851684529091528120556002546109419116848361123f565b826001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658260405161097c91815260200190565b60405180910390a250505050565b61099382610fc1565b335f8290036109b557604051631f2a200560e01b815260040160405180910390fd5b6001600160a01b038084165f90815260076020908152604080832093851683529290522054156109f85760405163d423a4f160e01b815260040160405180910390fd5b6001600160a01b038084165f9081526006602090815260408083209385168352929052205482811015610a4157604051639266535160e01b8152600481018290526024016105f9565b6001600160a01b038085165f90815260066020908152604080832093861683529290529081208054859290610a7790849061272f565b92505081905550604051806040016040528084815260200160085442610a9d919061271c565b90526001600160a01b038086165f81815260076020908152604080832094881683529381528382208551815594810151600190950194909455908152600390925281208054859290610af090849061272f565b92505081905550836001600160a01b0316826001600160a01b03167f4d10bd049775c77bd7f255195afba5088028ecb3c7c277d393ccff7934f2f92c856040516106c891815260200190565b610b446112ce565b610b4d82611374565b610b57828261137c565b5050565b5f610b6461143d565b505f516020612a1c5f395f51905f5290565b33610b8081610fc1565b610b8983611133565b610b928461116e565b604080516001600160a01b03831660208201525f91016040516020818303038152906040529050610bc48184876111aa565b600160045f610bd288610cee565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550816001600160a01b03167f80d8a4a1663328a998d4555ba21d8bba6ef1576a8c5e9d27f9c545f1a3d52b1d8686604051610c30929190612742565b60405180910390a25050505050565b33610c4981610fc1565b6001600160a01b0381165f908152600360205260409020600101805460ff19166002179055600854610c7b904261271c565b6001600160a01b0382165f8181526005602090815260408083209490945560039052828120819055915190917ffb24305354c87762d557487ae4a564e8d03ecbb9a97dd8afff8e1f6fcaf0dd1691a250565b610cd5611486565b6040516317d5c96560e11b815260040160405180910390fd5b5f815f0151826020015183604001518460600151604051602001610d2b949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381165f9081526007602090815260408083203380855292528220549091819003610d8d57604051630686827b60e51b815260040160405180910390fd5b6001600160a01b038084165f90815260076020908152604080832093861683529290522060010154421015610dd557604051635a77435760e01b815260040160405180910390fd5b6001600160a01b038084165f9081526007602090815260408083208685168452909152812081815560010155600254610e109116838361123f565b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610e4b91815260200190565b60405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610e9d5750825b90505f8267ffffffffffffffff166001148015610eb95750303b155b905081158015610ec7575080155b15610ee55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f0f57845460ff60401b1916600160401b1785555b610f18866114e1565b610f206114f2565b610f286114fa565b610f33898989611600565b8315610f7957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610f8c611486565b6001600160a01b038116610fb557604051631e4fbdf760e01b81525f60048201526024016105f9565b610fbe816116ab565b50565b6001600160a01b0381165f9081526003602052604081206001015460ff1690816002811115610ff257610ff26126ad565b036110105760405163508a793f60e01b815260040160405180910390fd5b6002816002811115611024576110246126ad565b03610b575760405163eab4a96360e01b815260040160405180910390fd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af191505080601f3d1160015f51141615161561109b5750833b153d17155b806110df5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016105f9565b5050505050565b6001600160a01b0381165f9081526003602052604081206001015460ff166002811115611115576111156126ad565b14610fbe5760405163132e7efb60e31b815260040160405180910390fd5b604080518082019091525f8082526020820152611150828261171b565b15610b57576040516306cf438f60e01b815260040160405180910390fd5b60045f61117a83610cee565b815260208101919091526040015f205460ff1615610fbe5760405162da8a5760e11b815260040160405180910390fd5b6111b38261173e565b5f6040518060600160405280602481526020016129d86024913990505f84826040516020016111e3929190612793565b60405160208183030381529060405290505f6111fe826117a5565b905061121b818561120e88611892565b611216611909565b6119d6565b6112375760405162ced3e560e41b815260040160405180910390fd5b505050505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af191505080601f3d1160015f5114161516156112895750823b153d17155b806112c85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016105f9565b50505050565b306001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816148061135457507f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad7886001600160a01b03166113485f516020612a1c5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156113725760405163703e46dd60e11b815260040160405180910390fd5b565b610fbe611486565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d6575060408051601f3d908101601f191682019092526113d3918101906126f1565b60015b6113fe57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016105f9565b5f516020612a1c5f395f51905f52811461142e57604051632a87526960e21b8152600481018290526024016105f9565b6114388383611a85565b505050565b306001600160a01b037f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816146113725760405163703e46dd60e11b815260040160405180910390fd5b336114b87f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146113725760405163118cdaa760e01b81523360048201526024016105f9565b6114e9611ada565b610fbe81611b23565b611372611ada565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561153f5750825b90505f8267ffffffffffffffff16600114801561155b5750303b155b905081158015611569575080155b156115875760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156115b157845460ff60401b1916600160401b1785555b435f5583156110df57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b6001600160a01b0383166116275760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03821661164e5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b038086166001600160a01b03199283161790925560018054928516929091169190911790556202a300808210156116a35760405163b57e21df60e01b815260040160405180910390fd5b506008555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b805182515f91148015611735575081602001518360200151145b90505b92915050565b805160208201515f915f5160206129fc5f395f51905f5291159015161561176457505050565b8251602084015182600384858586098509088382830914838210848410161693505050816114385760405163279e345360e21b815260040160405180910390fd5b604080518082019091525f80825260208201525f6117c283611b2b565b90505f5160206129fc5f395f51905f5260035f82848509905082806117e9576117e96127af565b848209905082806117fc576117fc6127af565b82820890505f5f61180c83611d34565b925090505b80611875578480611824576118246127af565b6001870895508480611838576118386127af565b8687099250848061184b5761184b6127af565b8684099250848061185e5761185e6127af565b848408925061186c83611d34565b92509050611811565b506040805180820190915294855260208501525091949350505050565b604080518082019091525f80825260208201528151602083015115901516156118b9575090565b6040518060400160405280835f015181526020015f5160206129fc5f395f51905f5284602001516118ea91906127c3565b611901905f5160206129fc5f395f51905f5261272f565b905292915050565b61193060405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f51915080611a795760405163c206334f60e01b815260040160405180910390fd5b50151595945050505050565b611a8e82611dfc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611ad2576114388282611e5f565b610b57611ed1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661137257604051631afcd79f60e31b815260040160405180910390fd5b610f8c611ada565b5f5f611b3683611ef0565b805190915060308114611b4b57611b4b6127e2565b5f8167ffffffffffffffff811115611b6557611b6561236e565b6040519080825280601f01601f191660200182016040528015611b8f576020820181803683370190505b5090505f5b82811015611bfe57836001611ba9838661272f565b611bb3919061272f565b81518110611bc357611bc36127f6565b602001015160f81c60f81b828281518110611be057611be06127f6565b60200101906001600160f81b03191690815f1a905350600101611b94565b5060408051601f80825261040082019092525f9082602082016103e0803683370190505090505f5b82811015611c8e578381611c3a858861272f565b611c44919061271c565b81518110611c5457611c546127f6565b602001015160f81c60f81b60f81c828281518110611c7457611c746127f6565b60ff90921660209283029190910190910152600101611c26565b505f611c998261223c565b90506101005f5160206129fc5f395f51905f525f611cb7868961272f565b90505f5b81811015611d24575f886001611cd1848661272f565b611cdb919061272f565b81518110611ceb57611ceb6127f6565b016020015160f81c90508380611d0357611d036127af565b85870995508380611d1657611d166127af565b818708955050600101611cbb565b50929a9950505050505050505050565b5f5f5f5f5f7f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5290505f5f5160206129fc5f395f51905f52905060405160208152602080820152602060408201528760608201528260808201528160a082015260205f60c08360055afa9450505f51925083611dc257604051630c9d3e9960e21b815260040160405180910390fd5b80600184901b1115611ddb57611dd8838261272f565b92505b8080611de957611de96127af565b8384099690961496919550909350505050565b806001600160a01b03163b5f03611e3157604051634c9c8ce360e01b81526001600160a01b03821660048201526024016105f9565b5f516020612a1c5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611e7b919061280a565b5f60405180830381855af49150503d805f8114611eb3576040519150601f19603f3d011682016040523d82523d5f602084013e611eb8565b606091505b5091509150611ec88583836122a3565b95945050505050565b34156113725760405163b398979f60e01b815260040160405180910390fd5b604080516030808252606082810190935290602090600160f91b905f90846020820181803683370190505090508086604051602001611f30929190612793565b6040516020818303038152906040529050808460f81b604051602001611f57929190612815565b604051602081830303815290604052905080604051602001611f79919061283f565b60408051601f1981840301815290829052915061010160f01b90611fa39083908390602001612857565b60408051808303601f190181528282528051602091820120818401819052600160f81b848401526001600160f01b031985166041850152825160238186030181526043909401909252825190830120919350905f60ff881667ffffffffffffffff8111156120135761201361236e565b6040519080825280601f01601f19166020018201604052801561203d576020820181803683370190505b5090505f8260405160200161205491815260200190565b60408051601f1981840301815291905290505f5b81518110156120be57818181518110612083576120836127f6565b602001015160f81c60f81b8382815181106120a0576120a06127f6565b60200101906001600160f81b03191690815f1a905350600101612068565b505f846040516020016120d391815260200190565b60408051601f19818403018152602083019091525f80835291985091505b89811015612165575f83828151811061210c5761210c6127f6565b602001015160f81c60f81b838381518110612129576121296127f6565b602001015160f81c60f81b189050888160405160200161214a92919061287b565b60408051601f198184030181529190529850506001016120f1565b5086888760405160200161217b9392919061289f565b604051602081830303815290604052965086805190602001209350836040516020016121a991815260200190565b60408051601f1981840301815291905291505f5b6121ca8a60ff8d1661272f565b81101561222b578281815181106121e3576121e36127f6565b01602001516001600160f81b031916846121fd838d61271c565b8151811061220d5761220d6127f6565b60200101906001600160f81b03191690815f1a9053506001016121bd565b50919b9a5050505050505050505050565b5f80805b835181101561229c5783818151811061225b5761225b6127f6565b602002602001015160ff1681600861227391906128d2565b61227e9060026129cc565b61228891906128d2565b612292908361271c565b9150600101612240565b5092915050565b6060826122b8576122b382612302565b6122fb565b81511580156122cf57506001600160a01b0384163b155b156122f857604051639996b31560e01b81526001600160a01b03851660048201526024016105f9565b50805b9392505050565b8051156123125780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114612341575f5ffd5b919050565b5f5f60408385031215612357575f5ffd5b6123608361232b565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156123a5576123a561236e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156123d4576123d461236e565b604052919050565b5f608082840312156123ec575f5ffd5b6040516080810167ffffffffffffffff8111828210171561240f5761240f61236e565b6040908152833582526020808501359083015283810135908201526060928301359281019290925250919050565b5f6040828403121561244d575f5ffd5b612455612382565b823581526020928301359281019290925250919050565b5f5f5f5f6101208587031215612480575f5ffd5b61248a86866123dc565b9350612499866080870161243d565b92506124a88660c0870161243d565b915061010085013561ffff811681146124bf575f5ffd5b939692955090935050565b5f602082840312156124da575f5ffd5b6117358261232b565b5f5f604083850312156124f4575f5ffd5b6124fd8361232b565b9150602083013567ffffffffffffffff811115612518575f5ffd5b8301601f81018513612528575f5ffd5b803567ffffffffffffffff8111156125425761254261236e565b612555601f8201601f19166020016123ab565b818152866020838501011115612569575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f610100848603121561259b575f5ffd5b6125a585856123dc565b92506125b4856080860161243d565b91506125c38560c0860161243d565b90509250925092565b5f608082840312156125dc575f5ffd5b61173583836123dc565b5f5f604083850312156125f7575f5ffd5b6126008361232b565b915061260e6020840161232b565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561265c575f5ffd5b5035919050565b5f5f5f5f60808587031215612676575f5ffd5b61267f8561232b565b935061268d6020860161232b565b9250604085013591506126a26060860161232b565b905092959194509250565b634e487b7160e01b5f52602160045260245ffd5b82815260408101600383106126e457634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f60208284031215612701575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561173857611738612708565b8181038181111561173857611738612708565b825181526020808401518183015260408085015190830152606080850151908301528251608083015282015160a082015260c081016122fb565b5f81518060208401855e5f93019283525090919050565b5f6127a76127a1838661277c565b8461277c565b949350505050565b634e487b7160e01b5f52601260045260245ffd5b5f826127dd57634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f611735828461277c565b5f612820828561277c565b5f81526001600160f81b03199390931660018401525050600201919050565b5f61284a828461277c565b5f81526001019392505050565b5f612862828561277c565b6001600160f01b03199390931683525050600201919050565b5f612886828561277c565b6001600160f81b03199390931683525050600101919050565b5f6128aa828661277c565b6001600160f81b031994909416845250506001600160f01b0319166001820152600301919050565b808202811582820484141761173857611738612708565b6001815b60018411156129245780850481111561290857612908612708565b600184161561291657908102905b60019390931c9280026128ed565b935093915050565b5f8261293a57506001611738565b8161294657505f611738565b816001811461295c576002811461296657612982565b6001915050611738565b60ff84111561297757612977612708565b50506001821b611738565b5060208310610133831016604e8410600b84101617156129a5575081810a611738565b6129b15f1984846128e9565b805f19048211156129c4576129c4612708565b029392505050565b5f611735838361292c56fe424c535f5349475f424e32353447315f584d443a4b454343414b5f4e4354485f4e554c5f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" + } + }, + "0x8a791620dd6260079bf849dc5567adc3f2fdc318": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x03b401b7b39ad5148aeb9ef28bef316a982c01bdaadee32abc45fed3bc7f4746": "0x00000000000000000000000000000000000000000b9993a58a7a70d408c00000", + "0x2167eff7539e891c54e98b32937b10a4f6269ef4c2975ae5edbcdc76e7da9ebf": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x25a12f267ec5c0c6bc157bd9f2a5f8853928b268c69df0f4f481a5b93de807bc": "0x00000000000000000000000000000000000000000000002b5e3af16b18800000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6", + "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02": "0x00000000000000000000000000000000000000000b999411f60dcc5fc6000000", + "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03": "0x457370726573736f000000000000000000000000000000000000000000000010", + "0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04": "0x4553500000000000000000000000000000000000000000000000000000000006", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xa723b6812b36513a13b880a4cb14668a0e53064052b338092d0622774b736bae": "0x000000000000000000000000000000000000000000000030ca024f987b900000", + "0xeb3cf0b3fdb786328dc87f4ae2f6ff264030822d601983cfa90e9c396887ec91": "0x00000000000000000000000000000000000000000000001043561a8829300000", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf2d351354d16d58033c2b6b59a768e7acfc5d94d06391b408a001f1980ef2bcb": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0e28d2d3671776a08300039b18dd065a1acdb6282aee49e329b4085ac511e1a0", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x02d4b4bf8826b33f87f986dde73bb311d77e297f55b133dad21288833be1b8b4", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x2dfcb5714318766addfd9e7cbdda0321b7e8bbf57e42fd4fc546d314f312b6db", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000d2f000000000000000000000000000000000000000000", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x000000000000000000000000000000010000000000000001000000000000012c", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x0e28d2d3671776a08300039b18dd065a1acdb6282aee49e329b4085ac511e1a0", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x02d4b4bf8826b33f87f986dde73bb311d77e297f55b133dad21288833be1b8b4", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x2dfcb5714318766addfd9e7cbdda0321b7e8bbf57e42fd4fc546d314f312b6db", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000002" + } + }, + "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000038d7ea4c68000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e": { + "balance": "0x0", + "code": "0x6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea164736f6c634300081c000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc318", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000002a300", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x65988aaab6fee60b915a7c6b43c7588db33087a016180dd1a794699707697e08": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x7f159dfb2339d762a397026e6cfea24f9ddfa67757f734cbde60a0a04c80d411": "0x00000000000000000000000000000000000000000000000ad78ebc5ac6200000", + "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0xa4aaa97df7f6bcdc97da4ca9e4116885d4a807ec2b5ad4a9b130b094dc97a171": "0x00000000000000000000000000000000000000000000000ad78ebc5ac6200000", + "0xa4aaa97df7f6bcdc97da4ca9e4116885d4a807ec2b5ad4a9b130b094dc97a172": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb0f3cc9fe3f537bf629d5d8b7774df4118bac03cf980517e5bd1c420d6326395": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "0xc8108b74fd3c6b13a7516728f2f1252673903e850abc5c5f03033fce78ec2501": "0x0000000000000000000000000000000000000000000000056bc75e2d63100000", + "0xc8108b74fd3c6b13a7516728f2f1252673903e850abc5c5f03033fce78ec2502": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xfbbe536cce17c94bdd99c5535667338ecd0323409ac4888e1f8a7e808f3c1d66": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9": { + "balance": "0x0", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "nonce": 1, + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660002", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000b08cc720f511062537ca78bdb0ae691f04f5a957", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa3" + } + }, + "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000", + "code": "0x", + "nonce": 46, + "storage": {} + }, + "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "0xfb2293ba4f5b2d78c3b330951f5e2dbd362ff816": { + "balance": "0x21e19e0c9bab2400000" + }, + "0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e": { + "balance": "0x21e19e0c9bab2400000" + } + }, + "config": { + "chainId": 11155111, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "shanghaiTime": 0, + "cancunTime": 0, + "pragueTime": 0, + "terminalTotalDifficulty": 0, + "terminalTotalDifficultyPassed": true, + "depositContractAddress": "0x0000000000000000000000000000000000000000", + "blobSchedule": { + "cancun": { + "target": 3, + "max": 6, + "baseFeeUpdateFraction": 3338477 + }, + "prague": { + "target": 6, + "max": 9, + "baseFeeUpdateFraction": 5007716 + } + } + }, + "nonce": "0x0", + "timestamp": "0x685c6a58", + "extraData": "0x", + "gasLimit": "0x2aea540", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": "0x3b9aca00", + "excessBlobGas": null, + "blobGasUsed": null +} \ No newline at end of file diff --git a/espresso_e2e/nitro_e2e_test.go b/espresso_e2e/nitro_e2e_test.go new file mode 100644 index 0000000..d6cf914 --- /dev/null +++ b/espresso_e2e/nitro_e2e_test.go @@ -0,0 +1,162 @@ +package espresso_e2e + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestNitroE2ERollupEspressoProxy(t *testing.T) { + t.Log("Starting Nitro rollup nodes") + shutdown := runDockerCompose(nitroWorkingDir) + defer shutdown() + + t.Log("Waiting for Nitro services to be ready") + waitForNitroServicesReady(t) + + espressoStore := newTestStore(t, "nitro-espresso-state", 0) + + ctx := context.Background() + t.Log("Starting in-process proxy") + proxyURL, shutdownProxy := startTestProxy(ctx, t, nitroFullNodeURL, espressoStore, espressoTag) + defer shutdownProxy() + + t.Run("basic proxy advances", func(t *testing.T) { + t.Log("Starting Nitro verifier") + v := startNitroVerifier(ctx, t, espressoStore) + defer v.Stop() + + const targetBlock = uint64(20) + + t.Log("Waiting for block 10 on Nitro full node") + pollUntil(t, 3*time.Minute, "block 10 not produced on Nitro full node within timeout", func() bool { + result := jsonRPCCall(t, nitroFullNodeURL, "eth_getBlockByNumber", jsonMarshal(t, []any{"0xa", false})) + return string(result) != "null" + }) + + t.Log("Waiting for Nitro verifier to advance store past block 10") + pollUntil(t, 2*time.Minute, "Nitro verifier did not reach block 10 within timeout", func() bool { + return getStoredBlock(t, espressoStore) >= targetBlock + }) + + verifiedBlock := getStoredBlock(t, espressoStore) + t.Logf("Espresso store at block %d", verifiedBlock) + + proxyResult := jsonRPCCall(t, proxyURL, "eth_getBlockByNumber", jsonMarshal(t, []any{espressoTag, false})) + directResult := jsonRPCCall(t, nitroFullNodeURL, "eth_getBlockByNumber", jsonMarshal(t, []any{fmt.Sprintf("0x%x", verifiedBlock), false})) + require.JSONEq(t, string(directResult), string(proxyResult)) + t.Log("Proxy espresso tag response matches direct Nitro full node response") + }) + + t.Run("rpc compatibility", func(t *testing.T) { + t.Log("Starting Nitro Verifier") + v := startNitroVerifier(ctx, t, espressoStore) + defer v.Stop() + + userAddr := "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + hash := "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + + methodsWithNoEspressoTag := []struct { + method string + params any + }{ + {"eth_blockNumber", nil}, + {"eth_chainId", nil}, + {"eth_syncing", nil}, + {"eth_gasPrice", nil}, + {"eth_maxPriorityFeePerGas", nil}, + {"eth_accounts", nil}, + {"eth_getBlockByHash", []any{hash, false}}, + {"eth_getBlockTransactionCountByHash", []any{hash}}, + {"eth_getUncleCountByBlockHash", []any{hash}}, + {"eth_getTransactionByHash", []any{hash}}, + {"eth_getTransactionReceipt", []any{hash}}, + {"eth_getTransactionByBlockHashAndIndex", []any{hash, "0x0"}}, + {"eth_getUncleByBlockHashAndIndex", []any{hash, "0x0"}}, + {"eth_getHeaderByHash", []any{hash}}, + {"net_version", nil}, + {"net_listening", nil}, + {"net_peerCount", nil}, + {"web3_clientVersion", nil}, + {"web3_sha3", []any{"0x68656c6c6f"}}, + {"txpool_content", nil}, + {"txpool_status", nil}, + {"txpool_inspect", nil}, + {"eth_sendRawTransaction", []any{"0x00"}}, + {"eth_subscribe", []any{"newHeads"}}, + {"eth_unsubscribe", []any{"0x1"}}, + } + + for _, tc := range methodsWithNoEspressoTag { + t.Run(tc.method, func(t *testing.T) { + proxyResp := jsonRPCCallRaw(t, proxyURL, tc.method, jsonMarshal(t, tc.params)) + directResp := jsonRPCCallRaw(t, nitroFullNodeURL, tc.method, jsonMarshal(t, tc.params)) + requireJSONRPCEqual(t, directResp, proxyResp, tc.method) + }) + } + + espressoTagMethods := []struct { + method string + params []any + }{ + {"eth_getBalance", []any{userAddr, espressoTag}}, + {"eth_getCode", []any{userAddr, espressoTag}}, + {"eth_getStorageAt", []any{userAddr, "0x0", espressoTag}}, + {"eth_getTransactionCount", []any{userAddr, espressoTag}}, + {"eth_call", []any{map[string]any{"to": userAddr, "data": "0x"}, espressoTag}}, + {"eth_getBlockByNumber", []any{espressoTag, false}}, + {"eth_getBlockTransactionCountByNumber", []any{espressoTag}}, + {"eth_getUncleCountByBlockNumber", []any{espressoTag}}, + {"eth_getTransactionByBlockNumberAndIndex", []any{espressoTag, "0x0"}}, + {"eth_getUncleByBlockNumberAndIndex", []any{espressoTag, "0x0"}}, + {"eth_getLogs", []any{map[string]any{"fromBlock": espressoTag, "toBlock": espressoTag}}}, + {"eth_feeHistory", []any{"0x4", espressoTag, []any{25, 75}}}, + {"eth_getHeaderByNumber", []any{espressoTag}}, + {"eth_createAccessList", []any{map[string]any{"from": userAddr, "to": userAddr, "data": "0x"}, espressoTag}}, + {"eth_simulateV1", []any{map[string]any{"blockStateCalls": []any{}}, espressoTag}}, + } + // freeze store so espresso tag resolves to a stable block + v.Stop() + verifiedBlock := getStoredBlock(t, espressoStore) + blockHex := fmt.Sprintf("0x%x", verifiedBlock) + + for _, tc := range espressoTagMethods { + t.Run(tc.method, func(t *testing.T) { + proxyParams := jsonMarshal(t, tc.params) + directParams := replaceTag(proxyParams, espressoTag, blockHex) + proxyResp := jsonRPCCallRaw(t, proxyURL, tc.method, proxyParams) + directResp := jsonRPCCallRaw(t, nitroFullNodeURL, tc.method, directParams) + requireJSONRPCEqual(t, directResp, proxyResp, tc.method) + }) + } + + t.Run("batch_request", func(t *testing.T) { + proxyBatch := []batchEntry{ + {"eth_chainId", nil}, + {"eth_blockNumber", nil}, + {"eth_getBalance", jsonMarshal(t, []any{userAddr, espressoTag})}, + {"eth_getBlockByNumber", jsonMarshal(t, []any{espressoTag, false})}, + {"eth_gasPrice", nil}, + {"eth_getTransactionCount", jsonMarshal(t, []any{userAddr, espressoTag})}, + } + + directBatch := make([]batchEntry, len(proxyBatch)) + for i, e := range proxyBatch { + directBatch[i] = batchEntry{method: e.method} + if e.params != nil { + directBatch[i].params = replaceTag(e.params, espressoTag, blockHex) + } + } + + proxyResps := jsonRPCBatchCallRaw(t, proxyURL, proxyBatch) + directResps := jsonRPCBatchCallRaw(t, nitroFullNodeURL, directBatch) + + for i, entry := range proxyBatch { + requireJSONRPCEqual(t, directResps[i], proxyResps[i], entry.method) + } + }) + }) +} diff --git a/go.mod b/go.mod index 260a556..c42273c 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.25.1 require ( github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 - github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f + github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260514140306-de351af76254 github.com/ethereum-optimism/optimism v1.16.7 github.com/ethereum/go-ethereum v1.17.1 github.com/spf13/pflag v1.0.6 diff --git a/go.sum b/go.sum index 80cee6c..2756fc8 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f h1:fuzJCq1qEPErOMHJ87lgaOtEGiNZYydrncurWES3Y4o= github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260514140306-de351af76254 h1:P4J2fyGfXQBVO+UNrc0Ejc6Ys+1K8TXZoWB48vDdWm4= +github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260514140306-de351af76254/go.mod h1:XIgEOJXiZmtF7QKda2u8rALuK48XYI3LphJuyDl+StE= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= diff --git a/justfile b/justfile index d89f96f..c84ef3e 100644 --- a/justfile +++ b/justfile @@ -5,11 +5,17 @@ build: go build ./... test *args: - go test -skip TestOPE2E ./... {{ args }} + go test -skip 'TestOPE2E|TestNitroE2E' ./... {{ args }} e2e *args: go test -timeout 15m ./espresso_e2e/... {{ args }} +e2e-op *args: + go test -timeout 15m -run TestOPE2E ./espresso_e2e/... {{ args }} + +e2e-nitro *args: + go test -timeout 15m -run TestNitroE2E ./espresso_e2e/... {{ args }} + fmt: gofmt -w . diff --git a/verifier/nitro/feed_client/client.go b/verifier/nitro/feed_client/client.go index 62e3c3a..d055774 100644 --- a/verifier/nitro/feed_client/client.go +++ b/verifier/nitro/feed_client/client.go @@ -19,12 +19,12 @@ var ErrIncorrectChainId = errors.New("incorrect chain id") var ErrMissingChainId = errors.New("missing chain id") type FeedClient struct { - feedWSURL string - chainID uint64 - nextSeqNum uint64 - mu sync.RWMutex - messages map[uint64]*BroadcastFeedMessage - logger log.Logger + feedWSURL string + chainID uint64 + nextSeqNum uint64 + mu sync.RWMutex + messages map[uint64]*BroadcastFeedMessage + logger log.Logger } const ( @@ -99,8 +99,11 @@ func (fc *FeedClient) readLoop(ctx context.Context) { } if err := fc.verifyChainID(resp); errors.Is(err, ErrIncorrectChainId) || errors.Is(err, ErrMissingChainId) { - conn.Close() - fc.logger.Crit("feed chain id verification failed", "url", fc.feedWSURL, "error", err) + closeErr := conn.Close() + if closeErr != nil { + fc.logger.Warn("error closing connection to feed", "error", closeErr) + } + fc.logger.Crit("feed chain id verification failed", "url", fc.feedWSURL, "error", err, "") return } diff --git a/verifier/nitro/nitro_verifier.go b/verifier/nitro/nitro_verifier.go index 242709b..be91ac3 100644 --- a/verifier/nitro/nitro_verifier.go +++ b/verifier/nitro/nitro_verifier.go @@ -16,21 +16,26 @@ import ( espressoClient "github.com/EspressoSystems/espresso-network/sdks/go/client" nitroStreamer "github.com/EspressoSystems/espresso-streamers/nitro" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" ) +type BatcherAddressConfig struct { + Address string `json:"address"` + From uint64 `json:"from"` + To uint64 `json:"to"` +} + type NitroEspressoBatchVerifierConfig struct { - FeedURL string `json:"feed_url"` - FullNodeExecutionRPC string `json:"full_node_execution_rpc"` - VerificationInterval time.Duration `json:"verification_interval"` - QueryServiceURL string `json:"query_service_url"` - Namespace uint64 `json:"namespace"` - InitialHotshotBlock uint64 `json:"initial_hotshot_block"` - ValidBatcherAddresses []string `json:"valid_batcher_addresses"` + FeedURL string `json:"feed_url"` + FullNodeExecutionRPC string `json:"full_node_execution_rpc"` + VerificationInterval time.Duration `json:"verification_interval"` + QueryServiceURL string `json:"query_service_url"` + Namespace uint64 `json:"namespace"` + InitialHotshotBlock uint64 `json:"initial_hotshot_block"` + ValidBatcherAddresses []BatcherAddressConfig `json:"valid_batcher_addresses"` } // NitroEspressoBatchVerifier verifies that messages from the Nitro sequencer feed @@ -85,9 +90,13 @@ func NewNitroEspressoBatchVerifier( } logger.Info("chain ID verified", "chain_id", chainID.Uint64()) - batcherAddrs := make([]common.Address, 0, len(config.ValidBatcherAddresses)) - for _, addr := range config.ValidBatcherAddresses { - batcherAddrs = append(batcherAddrs, common.HexToAddress(addr)) + addrRanges := make([]nitroStreamer.AddressValidRangeConfig, 0, len(config.ValidBatcherAddresses)) + for _, a := range config.ValidBatcherAddresses { + addrRanges = append(addrRanges, nitroStreamer.AddressValidRangeConfig{ + Address: a.Address, + From: a.From, + To: a.To, + }) } espressoState := store.GetState() @@ -111,7 +120,7 @@ func NewNitroEspressoBatchVerifier( config.Namespace, startHotshotBlock, client, - batcherAddrs, + addrRanges, time.Second, startNitroBlock+1, logger, From 3ebd246b2762738b8ac5d60f38e2ddb01ff15c6e Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Thu, 14 May 2026 14:24:06 -0400 Subject: [PATCH 12/21] refactor configs --- README.md | 88 ++++++++++++++++++++++++++++++++------------- config.go | 96 ++++++++++++++++++++++++-------------------------- config_test.go | 68 +++++++++++++++++++++++++++-------- main.go | 8 ++--- 4 files changed, 169 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index 5b5367a..bca640f 100644 --- a/README.md +++ b/README.md @@ -34,24 +34,45 @@ go build -o espresso-rollup-node-proxy . The proxy is configured via CLI flags or a JSON config file (or both — flags override file values). Pass `--config ` to load a file first, then apply any additional flags on top. -**Example config file:** +**Example config file (OP Stack):** ```json { "full_node_execution_rpc": "", - "l1_rpc": "", + "mode": "op", "listen_addr": ":8080", "espresso_tag": "espresso", "store_file_path": "/data/espresso_store.json", + "query_service_url": "", + "verification_interval": "250ms", "initial_hotshot_height": 0, "op": { - "enable": true, + "l1_rpc": "", "full_node_consensus_rpc": "", - "query_service_url": "", "light_client_address": "", "batcher_address": "", - "batch_authenticator_address": "", - "verification_interval": "250ms" + "batch_authenticator_address": "" + } +} +``` + +**Example config file (Nitro):** + +```json +{ + "full_node_execution_rpc": "", + "mode": "nitro", + "listen_addr": ":8080", + "espresso_tag": "espresso", + "store_file_path": "/data/espresso_store.json", + "query_service_url": "", + "verification_interval": "250ms", + "nitro": { + "feed_url": "", + "namespace": 0, + "valid_batcher_addresses": [ + {"address": "", "from": 0, "to": 18446744073709551615} + ] } } ``` @@ -62,23 +83,38 @@ The proxy is configured via CLI flags or a JSON config file (or both — flags o ./espresso-rollup-node-proxy --config config.json ``` -**Run with flags only:** +**Run with flags only (OP Stack):** ```sh ./espresso-rollup-node-proxy \ --full-node-execution-rpc \ - --l1-rpc \ + --mode op \ --listen-addr :8080 \ --espresso-tag espresso \ --store-file-path /data/espresso_store.json \ - --op.enable \ + --query-service-url \ + --op.l1-rpc \ --op.full-node-consensus-rpc \ - --op.query-service-url \ --op.light-client-address \ --op.batcher-address \ --op.batch-authenticator-address ``` +**Run with flags only (Nitro):** + +```sh +./espresso-rollup-node-proxy \ + --full-node-execution-rpc \ + --mode nitro \ + --listen-addr :8080 \ + --espresso-tag espresso \ + --store-file-path /data/espresso_store.json \ + --query-service-url \ + --nitro.feed-url \ + --nitro.namespace \ + --nitro.valid-batcher-addresses +``` + ### Docker **Run with a config file:** @@ -100,11 +136,11 @@ docker run --rm \ -p 8080:8080 \ ghcr.io/espressosystems/espresso-rollup-node-proxy:latest \ --full-node-execution-rpc \ - --l1-rpc \ + --mode op \ --store-file-path /data/espresso_store.json \ - --op.enable \ + --query-service-url \ + --op.l1-rpc \ --op.full-node-consensus-rpc \ - --op.query-service-url \ --op.light-client-address \ --op.batcher-address \ --op.batch-authenticator-address @@ -125,12 +161,12 @@ services: - proxy-data:/data command: - --full-node-execution-rpc=http://op-geth:8545 - - --l1-rpc= + - --mode=op - --listen-addr=:8080 - --store-file-path=/data/espresso_store.json - - --op.enable + - --query-service-url= + - --op.l1-rpc= - --op.full-node-consensus-rpc=http://op-node:9545 - - --op.query-service-url= - --op.light-client-address= - --op.batcher-address= - --op.batch-authenticator-address= @@ -158,24 +194,28 @@ Clients should point at the proxy (`http://localhost:8080`) rather than directly | Flag | JSON key | Default | Description | |------|----------|---------|-------------| -| `--full-node-execution-rpc` | `full_node_execution_rpc` | — | OP execution layer RPC URL (required) | -| `--l1-rpc` | `l1_rpc` | — | L1 RPC URL (required) | +| `--full-node-execution-rpc` | `full_node_execution_rpc` | — | Rollup execution layer RPC URL (required) | +| `--mode` | `mode` | — | Verifier mode: `op` or `nitro` (required) | | `--listen-addr` | `listen_addr` | `:8080` | Address the proxy listens on | | `--espresso-tag` | `espresso_tag` | `espresso` | JSON-RPC block tag to intercept; set to `finalized` to back the standard finality tag with Espresso | | `--store-file-path` | `store_file_path` | `espresso_store.json` | Path to the state persistence file | +| `--query-service-url` | `query_service_url` | — | Espresso query service URL (required) | +| `--verification-interval` | `verification_interval` | `10ms` | How often the verifier polls for new confirmed batches | | `--initial-hotshot-height` | `initial_hotshot_height` | `0` | HotShot block height to start streaming from on first run | | `--max-batch-size` | `max_batch_size` | `1000` | Maximum requests in a JSON-RPC batch (0 = unlimited) | | `--max-request-body-size` | `max_request_body_size` | `5242880` | Maximum request body size in bytes (0 = unlimited) | -| `--op.enable` | `op.enable` | `false` | Enable OP stack mode | +| `--log-level` | `log_level` | `info` | Log level (`debug`, `info`, `warn`, `error`) | +| `--log-format` | `log_format` | `json` | Log output format (`text` or `json`) | +| `--track-batch-latency` | `track_batch_latency` | `false` | Log per-batch and average latency from HotShot finalization to verification | +| `--op.l1-rpc` | `op.l1_rpc` | — | L1 RPC URL (OP mode, required) | | `--op.full-node-consensus-rpc` | `op.full_node_consensus_rpc` | — | OP consensus layer (op-node) RPC URL | -| `--op.query-service-url` | `op.query_service_url` | — | Espresso query service URL | | `--op.light-client-address` | `op.light_client_address` | — | Espresso light client contract address on L1 | | `--op.batcher-address` | `op.batcher_address` | — | OP batcher address | | `--op.batch-authenticator-address` | `op.batch_authenticator_address` | — | Batch Authenticator contract address on L1 | -| `--op.verification-interval` | `op.verification_interval` | `10ms` | How often the verifier polls for new confirmed batches | -| `--log-level` | `log_level` | `info` | Log level (`debug`, `info`, `warn`, `error`) | -| `--log-format` | `log_format` | `json` | Log output format (`text` or `json`) | -| `--track-batch-latency` | `track_batch_latency` | `false` | Log per-batch and average latency from HotShot finalization to verification | +| `--nitro.feed-url` | `nitro.feed_url` | — | Nitro full node feed WebSocket URL (Nitro mode, required) | +| `--nitro.namespace` | `nitro.namespace` | — | Nitro Chain Id (Nitro mode, required) | +| `--nitro.initial-hotshot-block` | `nitro.initial_hotshot_block` | `0` | Initial HotShot block for the Nitro streamer | +| `--nitro.valid-batcher-addresses` | `nitro.valid_batcher_addresses` | — | Valid batcher addresses (Nitro mode, at least one required) | ## E2E Tests diff --git a/config.go b/config.go index 38fec15..29985b5 100644 --- a/config.go +++ b/config.go @@ -17,6 +17,11 @@ import ( "github.com/spf13/pflag" ) +const ( + ModeOP = "op" + ModeNitro = "nitro" +) + type Duration struct{ time.Duration } func (d *Duration) UnmarshalJSON(b []byte) error { @@ -33,31 +38,28 @@ func (d *Duration) UnmarshalJSON(b []byte) error { } type OPConfig struct { - Enable bool `json:"enable"` - FullNodeConsensusRPC string `json:"full_node_consensus_rpc"` - VerificationInterval Duration `json:"verification_interval"` - QueryServiceURL string `json:"query_service_url"` - LightClientAddress string `json:"light_client_address"` - BatcherAddress string `json:"batcher_address"` - BatchAuthenticatorAddress string `json:"batch_authenticator_address"` + L1RPC string `json:"l1_rpc"` + FullNodeConsensusRPC string `json:"full_node_consensus_rpc"` + LightClientAddress string `json:"light_client_address"` + BatcherAddress string `json:"batcher_address"` + BatchAuthenticatorAddress string `json:"batch_authenticator_address"` } type NitroConfig struct { - Enable bool `json:"enable"` - FeedURL string `json:"feed_url"` - VerificationInterval time.Duration `json:"verification_interval"` - QueryServiceURL string `json:"query_service_url"` - Namespace uint64 `json:"namespace"` - InitialHotshotBlock uint64 `json:"initial_hotshot_block"` - ValidBatcherAddresses []nitroVerifier.BatcherAddressConfig `json:"valid_batcher_addresses"` + FeedURL string `json:"feed_url"` + Namespace uint64 `json:"namespace"` + InitialHotshotBlock uint64 `json:"initial_hotshot_block"` + ValidBatcherAddresses []nitroVerifier.BatcherAddressConfig `json:"valid_batcher_addresses"` } type Config struct { FullNodeExecutionRPC string `json:"full_node_execution_rpc"` - L1RPC string `json:"l1_rpc"` + Mode string `json:"mode"` ListenAddr string `json:"listen_addr"` EspressoTag string `json:"espresso_tag"` StoreFilePath string `json:"store_file_path"` + QueryServiceURL string `json:"query_service_url"` + VerificationInterval Duration `json:"verification_interval"` InitialHotshotHeight uint64 `json:"initial_hotshot_height"` MaxBatchSize int `json:"max_batch_size"` MaxRequestBodySize int `json:"max_request_body_size"` @@ -70,19 +72,14 @@ type Config struct { func defaultConfig() *Config { return &Config{ - ListenAddr: ":8080", - EspressoTag: "espresso", - StoreFilePath: "espresso_store.json", - MaxBatchSize: proxy.DefaultMaxBatchSize, - MaxRequestBodySize: proxy.DefaultMaxRequestBodySize, - LogLevel: "info", - LogFormat: "json", - OPConfig: OPConfig{ - VerificationInterval: Duration{10 * time.Millisecond}, - }, - NitroConfig: NitroConfig{ - VerificationInterval: 10 * time.Millisecond, - }, + ListenAddr: ":8080", + EspressoTag: "espresso", + StoreFilePath: "espresso_store.json", + MaxBatchSize: proxy.DefaultMaxBatchSize, + MaxRequestBodySize: proxy.DefaultMaxRequestBodySize, + LogLevel: "info", + LogFormat: "json", + VerificationInterval: Duration{10 * time.Millisecond}, } } @@ -109,7 +106,7 @@ func parseConfig() *Config { pflag.StringVar(&cfg.LogFormat, "log-format", cfg.LogFormat, "log output format (text or json)") pflag.StringVar(&cfg.ListenAddr, "listen-addr", cfg.ListenAddr, "proxy listen address") pflag.StringVar(&cfg.FullNodeExecutionRPC, "full-node-execution-rpc", cfg.FullNodeExecutionRPC, "full node execution RPC URL") - pflag.StringVar(&cfg.L1RPC, "l1-rpc", cfg.L1RPC, "L1 RPC URL") + pflag.StringVar(&cfg.OPConfig.L1RPC, "op.l1-rpc", cfg.OPConfig.L1RPC, "L1 RPC URL") pflag.StringVar(&cfg.EspressoTag, "espresso-tag", cfg.EspressoTag, "espresso tag") pflag.StringVar(&cfg.StoreFilePath, "store-file-path", cfg.StoreFilePath, "path to state persistence file") pflag.Uint64Var(&cfg.InitialHotshotHeight, "initial-hotshot-height", cfg.InitialHotshotHeight, "initial hotshot height") @@ -117,18 +114,16 @@ func parseConfig() *Config { pflag.IntVar(&cfg.MaxBatchSize, "max-batch-size", cfg.MaxBatchSize, "maximum number of requests in a JSON-RPC batch (0 = no limit)") pflag.IntVar(&cfg.MaxRequestBodySize, "max-request-body-size", cfg.MaxRequestBodySize, "maximum request body size in bytes (0 = no limit)") - pflag.BoolVar(&cfg.OPConfig.Enable, "op.enable", cfg.OPConfig.Enable, "enable OP mode") + pflag.StringVar(&cfg.QueryServiceURL, "query-service-url", cfg.QueryServiceURL, "Espresso query service URL") + pflag.DurationVar(&cfg.VerificationInterval.Duration, "verification-interval", cfg.VerificationInterval.Duration, "verification interval") + + pflag.StringVar(&cfg.Mode, "mode", cfg.Mode, "verifier mode: op or nitro") pflag.StringVar(&cfg.OPConfig.FullNodeConsensusRPC, "op.full-node-consensus-rpc", cfg.OPConfig.FullNodeConsensusRPC, "OP full node consensus RPC URL") - pflag.DurationVar(&cfg.OPConfig.VerificationInterval.Duration, "op.verification-interval", cfg.OPConfig.VerificationInterval.Duration, "OP verification interval") - pflag.StringVar(&cfg.OPConfig.QueryServiceURL, "op.query-service-url", cfg.OPConfig.QueryServiceURL, "Espresso query service URL") pflag.StringVar(&cfg.OPConfig.LightClientAddress, "op.light-client-address", cfg.OPConfig.LightClientAddress, "Espresso light client contract address") pflag.StringVar(&cfg.OPConfig.BatcherAddress, "op.batcher-address", cfg.OPConfig.BatcherAddress, "OP batcher address") pflag.StringVar(&cfg.OPConfig.BatchAuthenticatorAddress, "op.batch-authenticator-address", cfg.OPConfig.BatchAuthenticatorAddress, "Espresso batch authenticator contract address") - pflag.BoolVar(&cfg.NitroConfig.Enable, "nitro.enable", cfg.NitroConfig.Enable, "enable Nitro mode") pflag.StringVar(&cfg.NitroConfig.FeedURL, "nitro.feed-url", cfg.NitroConfig.FeedURL, "Nitro sequencer feed WebSocket URL") - pflag.DurationVar(&cfg.NitroConfig.VerificationInterval, "nitro.verification-interval", cfg.NitroConfig.VerificationInterval, "Nitro verification interval") - pflag.StringVar(&cfg.NitroConfig.QueryServiceURL, "nitro.query-service-url", cfg.NitroConfig.QueryServiceURL, "Espresso query service URL for Nitro") pflag.Uint64Var(&cfg.NitroConfig.Namespace, "nitro.namespace", cfg.NitroConfig.Namespace, "Nitro namespace") pflag.Uint64Var(&cfg.NitroConfig.InitialHotshotBlock, "nitro.initial-hotshot-block", cfg.NitroConfig.InitialHotshotBlock, "initial HotShot block for Nitro streamer") var batcherAddressFlags []string @@ -183,28 +178,30 @@ func (c *Config) validate() error { errs = append(errs, validateURL("full-node-execution-rpc", c.FullNodeExecutionRPC)) - if c.OPConfig.Enable && c.NitroConfig.Enable { - errs = append(errs, fmt.Errorf("cannot enable both op and nitro verifiers simultaneously")) + switch c.Mode { + case ModeOP, ModeNitro: + default: + errs = append(errs, fmt.Errorf("mode: must be %q or %q, got %q", ModeOP, ModeNitro, c.Mode)) } - if c.OPConfig.Enable { - errs = append(errs, validateURL("l1-rpc", c.L1RPC)) + errs = append(errs, validateURL("query-service-url", c.QueryServiceURL)) + if c.VerificationInterval.Duration <= 0 { + errs = append(errs, fmt.Errorf("verification-interval: must not be zero")) + } + + if c.Mode == ModeOP { + errs = append(errs, validateURL("op.l1-rpc", c.OPConfig.L1RPC)) errs = append(errs, validateURL("op.full-node-consensus-rpc", c.OPConfig.FullNodeConsensusRPC)) - errs = append(errs, validateURL("op.query-service-url", c.OPConfig.QueryServiceURL)) errs = append(errs, validateAddress("op.light-client-address", c.OPConfig.LightClientAddress)) errs = append(errs, validateAddress("op.batcher-address", c.OPConfig.BatcherAddress)) errs = append(errs, validateAddress("op.batch-authenticator-address", c.OPConfig.BatchAuthenticatorAddress)) } - if c.NitroConfig.Enable { + if c.Mode == ModeNitro { errs = append(errs, validateURL("nitro.feed-url", c.NitroConfig.FeedURL)) - errs = append(errs, validateURL("nitro.query-service-url", c.NitroConfig.QueryServiceURL)) if c.NitroConfig.Namespace == 0 { errs = append(errs, fmt.Errorf("nitro.namespace: must not be zero")) } - if c.NitroConfig.VerificationInterval <= 0 { - errs = append(errs, fmt.Errorf("nitro.verification-interval: must not be zero")) - } if len(c.NitroConfig.ValidBatcherAddresses) == 0 { errs = append(errs, fmt.Errorf("nitro.valid-batcher-addresses: at least one address required")) } @@ -241,9 +238,10 @@ func (c *Config) toProxyConfig() *proxy.ProxyConfig { func (c *Config) toOPVerifierConfig() *opVerifier.OPEspressoBatchVerifierConfig { return &opVerifier.OPEspressoBatchVerifierConfig{ FullNodeExecutionRPC: c.FullNodeExecutionRPC, + L1RPC: c.OPConfig.L1RPC, FullNodeConsensusRPC: c.OPConfig.FullNodeConsensusRPC, - VerificationInterval: c.OPConfig.VerificationInterval.Duration, - QueryServiceURL: c.OPConfig.QueryServiceURL, + VerificationInterval: c.VerificationInterval.Duration, + QueryServiceURL: c.QueryServiceURL, BatcherAddress: c.OPConfig.BatcherAddress, BatchAuthenticatorAddress: c.OPConfig.BatchAuthenticatorAddress, TrackBatchLatency: c.TrackBatchLatency, @@ -254,8 +252,8 @@ func (c *Config) toNitroVerifierConfig() *nitroVerifier.NitroEspressoBatchVerifi return &nitroVerifier.NitroEspressoBatchVerifierConfig{ FeedURL: c.NitroConfig.FeedURL, FullNodeExecutionRPC: c.FullNodeExecutionRPC, - VerificationInterval: c.NitroConfig.VerificationInterval, - QueryServiceURL: c.NitroConfig.QueryServiceURL, + VerificationInterval: c.VerificationInterval.Duration, + QueryServiceURL: c.QueryServiceURL, Namespace: c.NitroConfig.Namespace, InitialHotshotBlock: c.NitroConfig.InitialHotshotBlock, ValidBatcherAddresses: c.NitroConfig.ValidBatcherAddresses, diff --git a/config_test.go b/config_test.go index 9e7fc68..af0fb74 100644 --- a/config_test.go +++ b/config_test.go @@ -7,6 +7,8 @@ import ( "github.com/spf13/pflag" "github.com/stretchr/testify/require" + + nitroVerifier "proxy/verifier/nitro" ) func TestDurationPflag(t *testing.T) { @@ -41,25 +43,25 @@ func TestDurationUnmarshalJSON(t *testing.T) { t.Run("full config json", func(t *testing.T) { raw := []byte(`{"verification_interval": "250ms"}`) - var op OPConfig - require.NoError(t, json.Unmarshal(raw, &op)) - require.Equal(t, 250*time.Millisecond, op.VerificationInterval.Duration) + var cfg Config + require.NoError(t, json.Unmarshal(raw, &cfg)) + require.Equal(t, 250*time.Millisecond, cfg.VerificationInterval.Duration) }) } func TestConfigValidate(t *testing.T) { valid := Config{ FullNodeExecutionRPC: "http://localhost:8545", - L1RPC: "ws://localhost:8546", + Mode: ModeOP, ListenAddr: ":8080", EspressoTag: "espresso", StoreFilePath: "espresso_store.json", LogLevel: "info", + QueryServiceURL: "https://query.espresso.network", + VerificationInterval: Duration{1 * time.Millisecond}, OPConfig: OPConfig{ - Enable: true, + L1RPC: "ws://localhost:8546", FullNodeConsensusRPC: "http://localhost:9545", - VerificationInterval: Duration{1 * time.Millisecond}, - QueryServiceURL: "https://query.espresso.network", LightClientAddress: "0x1234567890abcdef1234567890abcdef12345678", BatcherAddress: "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd", BatchAuthenticatorAddress: "0x1111111111111111111111111111111111111111", @@ -67,22 +69,22 @@ func TestConfigValidate(t *testing.T) { } require.NoError(t, valid.validate()) - opEnabled := Config{OPConfig: OPConfig{Enable: true}} - err := opEnabled.validate() + opEmpty := Config{Mode: ModeOP} + err := opEmpty.validate() require.Error(t, err) for _, field := range []string{ - "full-node-execution-rpc", "l1-rpc", - "op.full-node-consensus-rpc", "op.query-service-url", + "full-node-execution-rpc", "op.l1-rpc", + "op.full-node-consensus-rpc", "query-service-url", "op.light-client-address", "op.batcher-address", "op.batch-authenticator-address", "listen-addr", "espresso-tag", "store-file-path", } { require.Contains(t, err.Error(), field) } - opDisabled := Config{} - err = opDisabled.validate() + noMode := Config{} + err = noMode.validate() require.Error(t, err) - require.Contains(t, err.Error(), "full-node-execution-rpc") + require.Contains(t, err.Error(), "mode") require.NotContains(t, err.Error(), "op.full-node-consensus-rpc") require.NotContains(t, err.Error(), "op.light-client-address") @@ -105,4 +107,42 @@ func TestConfigValidate(t *testing.T) { goodLogFormat.LogFormat = goodFormat require.NoError(t, goodLogFormat.validate(), "log format %q should be valid", goodFormat) } + + validNitro := Config{ + FullNodeExecutionRPC: "http://localhost:8547", + Mode: ModeNitro, + ListenAddr: ":8080", + EspressoTag: "espresso", + StoreFilePath: "espresso_store.json", + LogLevel: "info", + QueryServiceURL: "https://query.espresso.network", + VerificationInterval: Duration{1 * time.Millisecond}, + NitroConfig: NitroConfig{ + FeedURL: "ws://localhost:9642", + Namespace: 412346, + ValidBatcherAddresses: []nitroVerifier.BatcherAddressConfig{ + {Address: "0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E"}, + }, + }, + } + require.NoError(t, validNitro.validate()) + + nitroEmpty := Config{Mode: ModeNitro} + err = nitroEmpty.validate() + require.Error(t, err) + for _, field := range []string{ + "full-node-execution-rpc", "nitro.feed-url", + "nitro.namespace", "nitro.valid-batcher-addresses", + "query-service-url", "listen-addr", "espresso-tag", "store-file-path", + } { + require.Contains(t, err.Error(), field) + } + + nitroBadAddr := validNitro + nitroBadAddr.NitroConfig.ValidBatcherAddresses = []nitroVerifier.BatcherAddressConfig{ + {Address: "0xNOTANADDR"}, + } + err = nitroBadAddr.validate() + require.Error(t, err) + require.Contains(t, err.Error(), "nitro.valid-batcher-addresses[0].address") } diff --git a/main.go b/main.go index f7cca31..f8222fc 100644 --- a/main.go +++ b/main.go @@ -97,9 +97,9 @@ func main() { var fullNodeVerifier batchVerifier - switch { - case cfg.OPConfig.Enable: - l1Client, err := ethclient.DialContext(ctx, cfg.L1RPC) + switch cfg.Mode { + case ModeOP: + l1Client, err := ethclient.DialContext(ctx, cfg.OPConfig.L1RPC) if err != nil { logger.Crit("failed to create L1 client", "error", err) } @@ -115,7 +115,7 @@ func main() { fullNodeVerifier = v logger.Info("OP verifier enabled") - case cfg.NitroConfig.Enable: + case ModeNitro: v := nitroVerifier.NewNitroEspressoBatchVerifier(ctx, logger, espressoStore, cfg.toNitroVerifierConfig()) if v == nil { logger.Crit("failed to create Nitro verifier") From ce2bd9abaadffb88034fb542f66fb4cb489ad1af Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Thu, 14 May 2026 14:33:16 -0400 Subject: [PATCH 13/21] fix proxyd tests --- espresso_e2e/op/docker-compose.proxyd.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/espresso_e2e/op/docker-compose.proxyd.yml b/espresso_e2e/op/docker-compose.proxyd.yml index 51c2b98..49e37cd 100644 --- a/espresso_e2e/op/docker-compose.proxyd.yml +++ b/espresso_e2e/op/docker-compose.proxyd.yml @@ -352,10 +352,10 @@ services: - "8557:8080" command: - --full-node-execution-rpc=http://op-geth-fullnode:${OP_HTTP_PORT} + - --mode=op - --op.full-node-consensus-rpc=http://op-node-fullnode:9548 - - --l1-rpc=http://l1-anvil:${L1_HTTP_PORT} - - --op.enable=true - - --op.query-service-url=http://espresso-dev-node:${ESPRESSO_SEQUENCER_API_PORT} + - --op.l1-rpc=http://l1-anvil:${L1_HTTP_PORT} + - --query-service-url=http://espresso-dev-node:${ESPRESSO_SEQUENCER_API_PORT} - --op.light-client-address=${ESPRESSO_SEQUENCER_LIGHT_CLIENT_PROXY_ADDRESS} - --op.batcher-address=${TEE_BATCHER_ADDRESS} - --op.batch-authenticator-address=${BATCH_AUTH_ADDR} @@ -376,10 +376,10 @@ services: - "8558:8080" command: - --full-node-execution-rpc=http://op-geth-fullnode-2:${OP_HTTP_PORT} + - --mode=op - --op.full-node-consensus-rpc=http://op-node-fullnode-2:9548 - - --l1-rpc=http://l1-anvil:${L1_HTTP_PORT} - - --op.enable=true - - --op.query-service-url=http://espresso-dev-node:${ESPRESSO_SEQUENCER_API_PORT} + - --op.l1-rpc=http://l1-anvil:${L1_HTTP_PORT} + - --query-service-url=http://espresso-dev-node:${ESPRESSO_SEQUENCER_API_PORT} - --op.light-client-address=${ESPRESSO_SEQUENCER_LIGHT_CLIENT_PROXY_ADDRESS} - --op.batcher-address=${TEE_BATCHER_ADDRESS} - --op.batch-authenticator-address=${BATCH_AUTH_ADDR} @@ -400,10 +400,10 @@ services: - "8559:8080" command: - --full-node-execution-rpc=http://op-geth-fullnode-3:${OP_HTTP_PORT} + - --mode=op - --op.full-node-consensus-rpc=http://op-node-fullnode-3:9548 - - --l1-rpc=http://l1-anvil:${L1_HTTP_PORT} - - --op.enable=true - - --op.query-service-url=http://espresso-dev-node:${ESPRESSO_SEQUENCER_API_PORT} + - --op.l1-rpc=http://l1-anvil:${L1_HTTP_PORT} + - --query-service-url=http://espresso-dev-node:${ESPRESSO_SEQUENCER_API_PORT} - --op.light-client-address=${ESPRESSO_SEQUENCER_LIGHT_CLIENT_PROXY_ADDRESS} - --op.batcher-address=${TEE_BATCHER_ADDRESS} - --op.batch-authenticator-address=${BATCH_AUTH_ADDR} From 0212c16a189324691cf87de37fa53edff1a0c146 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 09:36:10 -0400 Subject: [PATCH 14/21] update streamer --- go.mod | 4 ++-- go.sum | 10 ++-------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index c42273c..af5a28a 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,10 @@ go 1.25.1 require ( github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 - github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260514140306-de351af76254 + github.com/EspressoSystems/espresso-streamers v1.1.0 github.com/ethereum-optimism/optimism v1.16.7 github.com/ethereum/go-ethereum v1.17.1 + github.com/gorilla/websocket v1.5.3 github.com/spf13/pflag v1.0.6 github.com/stretchr/testify v1.11.1 ) @@ -55,7 +56,6 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/websocket v1.5.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-bexpr v0.1.11 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect diff --git a/go.sum b/go.sum index 2756fc8..6b9470d 100644 --- a/go.sum +++ b/go.sum @@ -4,14 +4,8 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 h1:1hf/k2rGqIGEGQW8O3fQFltPIyxSmumph8aKIa6AjCk= github.com/EspressoSystems/espresso-network/sdks/go v0.3.4/go.mod h1:kaxR08mJb5Mijy7a2RhWCIWOevFI4PcXwDkzoEbsVTk= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b h1:uwJlK4OxQRjUM67cULaaFo1BVZ+T9LEZu6Xu98EImps= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260430130129-62ec38b5d96b/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f h1:JOHzrvN/fMGMBG1WB1C4zi3qKMMYQ2GHsO2MNgE14ek= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260505223424-a535b67f2d7f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f h1:fuzJCq1qEPErOMHJ87lgaOtEGiNZYydrncurWES3Y4o= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260511200507-aac1b489ff4f/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260514140306-de351af76254 h1:P4J2fyGfXQBVO+UNrc0Ejc6Ys+1K8TXZoWB48vDdWm4= -github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260514140306-de351af76254/go.mod h1:XIgEOJXiZmtF7QKda2u8rALuK48XYI3LphJuyDl+StE= +github.com/EspressoSystems/espresso-streamers v1.1.0 h1:+35Y9I3BCMyVIyFX6DNO6tq8ZKeuyOAve4DrgIhaY2s= +github.com/EspressoSystems/espresso-streamers v1.1.0/go.mod h1:eDGUEvlyxNey9gdpQhKaswAOp5ZWHPVbhNtWfHkpJvU= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4= github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= From af53c79d5457550c99b6bec5917d46ffa57b22ff Mon Sep 17 00:00:00 2001 From: lukeiannucci Date: Mon, 18 May 2026 10:37:42 -0400 Subject: [PATCH 15/21] target nitro --- espresso_e2e/nitro/docker-compose.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/espresso_e2e/nitro/docker-compose.yml b/espresso_e2e/nitro/docker-compose.yml index 08654df..387c921 100644 --- a/espresso_e2e/nitro/docker-compose.yml +++ b/espresso_e2e/nitro/docker-compose.yml @@ -32,6 +32,7 @@ services: rollup-creator: image: ${ROLLUP_CREATOR_IMAGE} + platform: linux/amd64 volumes: - "config:/config" - "./nitro-config:/nitro-config" @@ -57,6 +58,7 @@ services: sequencer: image: ${NITRO_IMAGE} + platform: linux/amd64 entrypoint: /usr/local/bin/nitro ports: - "8547:8547" @@ -98,6 +100,7 @@ services: batch-poster: image: ${NITRO_IMAGE} + platform: linux/amd64 entrypoint: /usr/local/bin/nitro volumes: - "nitro-batch-poster:/home/user/.arbitrum/local/nitro" @@ -115,6 +118,7 @@ services: full-node: image: ${NITRO_IMAGE} + platform: linux/amd64 entrypoint: /usr/local/bin/nitro ports: - "8549:8547" From 7fd4ad1a40e575223f17985d3248f03d438e56f6 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 18:44:47 -0400 Subject: [PATCH 16/21] Update espresso_e2e/e2e_utils.go Co-authored-by: Theodore Schnepper --- espresso_e2e/e2e_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/espresso_e2e/e2e_utils.go b/espresso_e2e/e2e_utils.go index 03db05c..46343d7 100644 --- a/espresso_e2e/e2e_utils.go +++ b/espresso_e2e/e2e_utils.go @@ -63,7 +63,7 @@ func (m *mockLightClient) FinalizedState(_ *bind.CallOpts) (opStreamer.Finalized // OP const ( - rollupWorkingDir = "./op" + opWorkingDir = "./op" l1GethURL = "http://127.0.0.1:8545" espressoURL = "http://127.0.0.1:24000" opGethSeqURL = "http://127.0.0.1:8546" From 84bf593bdabbf5e4047f78efd19718cf19c54733 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 18:44:57 -0400 Subject: [PATCH 17/21] Update espresso_e2e/e2e_utils.go Co-authored-by: Theodore Schnepper --- espresso_e2e/e2e_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/espresso_e2e/e2e_utils.go b/espresso_e2e/e2e_utils.go index 46343d7..3de83e1 100644 --- a/espresso_e2e/e2e_utils.go +++ b/espresso_e2e/e2e_utils.go @@ -92,7 +92,7 @@ const ( nitroBatchPoster = "0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E" ) -func startVerifier(ctx context.Context, t *testing.T, logger log.Logger, store *espressostore.EspressoStore) *verifier.OPEspressoBatchVerifier { +func startOpVerifier(ctx context.Context, t *testing.T, logger log.Logger, store *espressostore.EspressoStore) *verifier.OPEspressoBatchVerifier { t.Helper() l1Client, err := ethclient.DialContext(ctx, l1GethURL) if err != nil { From bc6fe248ad26c9b46ba577a23507768ac69781a9 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 18:45:06 -0400 Subject: [PATCH 18/21] Update espresso_e2e/nitro_e2e_test.go Co-authored-by: Theodore Schnepper --- espresso_e2e/nitro_e2e_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/espresso_e2e/nitro_e2e_test.go b/espresso_e2e/nitro_e2e_test.go index d6cf914..d6d8931 100644 --- a/espresso_e2e/nitro_e2e_test.go +++ b/espresso_e2e/nitro_e2e_test.go @@ -29,7 +29,7 @@ func TestNitroE2ERollupEspressoProxy(t *testing.T) { v := startNitroVerifier(ctx, t, espressoStore) defer v.Stop() - const targetBlock = uint64(20) + const targetBlock = 20 t.Log("Waiting for block 10 on Nitro full node") pollUntil(t, 3*time.Minute, "block 10 not produced on Nitro full node within timeout", func() bool { From de929452eff60612805a2602c15fbb2f4d8111bf Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 19:18:06 -0400 Subject: [PATCH 19/21] address comments --- espresso_e2e/nitro/.env | 8 ++-- espresso_e2e/nitro/l1-config/genesis.json | 3 -- espresso_e2e/op_rollup_e2e_l2_reorg_test.go | 8 ++-- espresso_e2e/op_rollup_e2e_proxyd_test.go | 6 +-- espresso_e2e/op_rollup_e2e_reorg_test.go | 4 +- espresso_e2e/op_rollup_e2e_test.go | 50 ++++++++++----------- main.go | 50 ++++++++++++--------- 7 files changed, 67 insertions(+), 62 deletions(-) diff --git a/espresso_e2e/nitro/.env b/espresso_e2e/nitro/.env index e9eded2..a7f83bc 100644 --- a/espresso_e2e/nitro/.env +++ b/espresso_e2e/nitro/.env @@ -14,7 +14,6 @@ ESPRESSO_SEQUENCER_LIGHT_CLIENT_PROXY_ADDRESS=0x9fe46736679d2d9a65f0992f2272de9f ESPRESSO_SEQUENCER_FEE_CONTRACT_PROXY_ADDRESS=0xa513e6e4b8f2a923d98304ec87f64353c4d5c853 ESPRESSO_SEQUENCER_STAKE_TABLE_PROXY_ADDRESS=0xb7f8bc63bbcad18155201308c8f3540b07f84f5e ESPRESSO_SEQUENCER_PLONK_VERIFIER_V2_ADDRESS=0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9 -ESPRESSO_SEQUENCER_ETH_MNEMONIC=giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete L1_GETH_IMAGE=ghcr.io/espressosystems/geth-l1:main LIGHTHOUSE_IMAGE=sigp/lighthouse:v7.1.0 @@ -24,11 +23,12 @@ L1_ENGINE_PORT=8551 L1_BEACON_PORT=5052 L1_CHAIN_ID=11155111 +# https://docs.arbitrum.io/run-arbitrum-node/run-nitro-dev-node#development-account-used-by-default BATCH_POSTER_ADDRESS=0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E -OPERATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -OPERATOR_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 BATCH_POSTER_PRIVATE_KEY=b6b15c8cb491557369f3c7d2c287b053eb229daa9c22138887752191c9520659 -DEPLOYER_PRIVATE_KEY=0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff + +# https://v2.hardhat.org/hardhat-network/docs/reference#initial-state +DEPLOYER_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 NITRO_IMAGE=ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:v3.9.8-espresso-v1.1.1 ROLLUP_CREATOR_IMAGE=ghcr.io/espressosystems/timeboost/rollup-creator:v2.1.3-legacy \ No newline at end of file diff --git a/espresso_e2e/nitro/l1-config/genesis.json b/espresso_e2e/nitro/l1-config/genesis.json index 1900f35..76a5a64 100644 --- a/espresso_e2e/nitro/l1-config/genesis.json +++ b/espresso_e2e/nitro/l1-config/genesis.json @@ -136,9 +136,6 @@ "0x8943545177806ed17b9f23f0a21ee5948ecaa776": { "balance": "0x200000000000000000000000000000000000000000000000000000000000000" }, - "0xfb2293ba4f5b2d78c3b330951f5e2dbd362ff816": { - "balance": "0x21e19e0c9bab2400000" - }, "0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e": { "balance": "0x21e19e0c9bab2400000" } diff --git a/espresso_e2e/op_rollup_e2e_l2_reorg_test.go b/espresso_e2e/op_rollup_e2e_l2_reorg_test.go index 1cdcbea..bab172c 100644 --- a/espresso_e2e/op_rollup_e2e_l2_reorg_test.go +++ b/espresso_e2e/op_rollup_e2e_l2_reorg_test.go @@ -12,7 +12,7 @@ import ( func TestOPE2EL2Reorg(t *testing.T) { t.Log("Starting rollup nodes") - shutdown := runDockerComposeFile(rollupWorkingDir, "docker-compose.yml", []string{"verifier"}) + shutdown := runDockerComposeFile(opWorkingDir, "docker-compose.yml", []string{"verifier"}) defer shutdown() // Wait for services to come up @@ -28,7 +28,7 @@ func TestOPE2EL2Reorg(t *testing.T) { defer shutdownProxy() t.Log("Starting OP Verifier") - v := startVerifier(ctx, t, newDefaultLogger(), espressoStore) + v := startOpVerifier(ctx, t, newDefaultLogger(), espressoStore) defer v.Stop() const reorgBlocks = uint64(8) @@ -50,7 +50,7 @@ func TestOPE2EL2Reorg(t *testing.T) { // Stop sequencer node t.Log("Stopping op-node-sequencer") - dockerComposeStop(t, rollupWorkingDir, "op-node-sequencer") + dockerComposeStop(t, opWorkingDir, "op-node-sequencer") // rewind sequencer geth while op sequencer is offline t.Logf("Rewinding op-geth-sequencer from block %d to %d", currentSeqBlock, reorgTarget) @@ -65,7 +65,7 @@ func TestOPE2EL2Reorg(t *testing.T) { // bring back up t.Log("Restarting op-node-sequencer") - dockerComposeStart(t, rollupWorkingDir, nil, "op-node-sequencer") + dockerComposeStart(t, opWorkingDir, nil, "op-node-sequencer") // Wait for sequencer to rebuild past the original block t.Logf("Waiting for sequencer to reach block %d again", currentSeqBlock) diff --git a/espresso_e2e/op_rollup_e2e_proxyd_test.go b/espresso_e2e/op_rollup_e2e_proxyd_test.go index 63c5f70..7580105 100644 --- a/espresso_e2e/op_rollup_e2e_proxyd_test.go +++ b/espresso_e2e/op_rollup_e2e_proxyd_test.go @@ -40,7 +40,7 @@ func getEspressoBlockFromProxyd(t *testing.T, url string) (uint64, bool) { func TestOPE2EProxyd(t *testing.T) { t.Log("Starting OP stack + proxyd") - shutdown := runDockerComposeFile(rollupWorkingDir, proxydComposeFile, nil) + shutdown := runDockerComposeFile(opWorkingDir, proxydComposeFile, nil) defer shutdown() t.Log("Waiting for OP stack services to be ready") @@ -60,7 +60,7 @@ func TestOPE2EProxyd(t *testing.T) { require.Greater(t, initialBlock, uint64(0), "expected initial block from proxyd to be greater than 0") t.Logf("Proxyd espresso tag at block %d, shutting down fullnode-proxy-1", initialBlock) - dockerComposeFileStop(t, rollupWorkingDir, proxydComposeFile, "fullnode-proxy-1") + dockerComposeFileStop(t, opWorkingDir, proxydComposeFile, "fullnode-proxy-1") t.Log("fullnode-proxy-1 stopped") previous := initialBlock @@ -80,7 +80,7 @@ func TestOPE2EProxyd(t *testing.T) { blockBeforeRestart := previous t.Logf("Restarting fullnode-proxy-1, espresso tag was at block %d", blockBeforeRestart) - dockerComposeFileStart(t, rollupWorkingDir, proxydComposeFile, "fullnode-proxy-1") + dockerComposeFileStart(t, opWorkingDir, proxydComposeFile, "fullnode-proxy-1") t.Log("fullnode-proxy-1 restarted") pollUntil(t, 2*time.Minute, fmt.Sprintf("proxyd espresso tag did not advance 15 blocks past %d after proxy-1 restart", blockBeforeRestart), func() bool { diff --git a/espresso_e2e/op_rollup_e2e_reorg_test.go b/espresso_e2e/op_rollup_e2e_reorg_test.go index 6a13e94..e5d2283 100644 --- a/espresso_e2e/op_rollup_e2e_reorg_test.go +++ b/espresso_e2e/op_rollup_e2e_reorg_test.go @@ -14,7 +14,7 @@ import ( func TestOPE2ERollupEspressoProxyReorg(t *testing.T) { t.Log("Starting rollup nodes") - shutdown := runDockerComposeFile(rollupWorkingDir, "docker-compose.reorg.yml", nil) + shutdown := runDockerComposeFile(opWorkingDir, "docker-compose.reorg.yml", nil) defer shutdown() // Wait for services to come up @@ -30,7 +30,7 @@ func TestOPE2ERollupEspressoProxyReorg(t *testing.T) { t.Log("Starting OP Verifier") verifierLogger, defaultCapturer := newCapturingLogger() - v := startVerifier(ctx, t, verifierLogger, espressoStore) + v := startOpVerifier(ctx, t, verifierLogger, espressoStore) defer v.Stop() t.Run("proxy does not go backwords in case of l1 reorg", func(t *testing.T) { diff --git a/espresso_e2e/op_rollup_e2e_test.go b/espresso_e2e/op_rollup_e2e_test.go index f65c286..1d0f365 100644 --- a/espresso_e2e/op_rollup_e2e_test.go +++ b/espresso_e2e/op_rollup_e2e_test.go @@ -13,7 +13,7 @@ import ( func TestOPE2ERollupEspressoProxy(t *testing.T) { t.Log("Starting rollup nodes") - shutdown := runDockerCompose(rollupWorkingDir) + shutdown := runDockerCompose(opWorkingDir) defer shutdown() // Wait for services to come up @@ -31,7 +31,7 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { t.Run("basic proxy advances", func(t *testing.T) { t.Log("Starting OP Verifier") - v := startVerifier(ctx, t, newDefaultLogger(), espressoStore) + v := startOpVerifier(ctx, t, newDefaultLogger(), espressoStore) defer v.Stop() const targetBlockNum = uint64(10) @@ -57,7 +57,7 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { t.Run("rpc compatibility", func(t *testing.T) { t.Log("Starting OP Verifier") - v := startVerifier(ctx, t, newDefaultLogger(), espressoStore) + v := startOpVerifier(ctx, t, newDefaultLogger(), espressoStore) defer v.Stop() userAddr := "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" @@ -166,7 +166,7 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { t.Run("proxy restart resumes from persisted state", func(t *testing.T) { t.Log("Starting OP Verifier") - v := startVerifier(ctx, t, newDefaultLogger(), espressoStore) + v := startOpVerifier(ctx, t, newDefaultLogger(), espressoStore) defer v.Stop() const initialHotshotHeight = uint64(1) const targetBlockNum = uint64(10) @@ -183,7 +183,7 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { proxyURL, shutdownProxy := startTestProxy(ctx, t, opGethFullNode, initialStore, espressoTag) // Now we start the verifier and check if it starts with finalizedL2Block and initialHotshotHeight, and that it advances the store past block 10. - verifier := startVerifier(ctx, t, log.NewLogger(firstCapturer), initialStore) + verifier := startOpVerifier(ctx, t, log.NewLogger(firstCapturer), initialStore) requireLogAttrs(t, firstCapturer, "Starting OP Verifier", map[string]uint64{ "start block number": finalizedL2Block, "starting fallback_hotshot_height": initialHotshotHeight, @@ -229,7 +229,7 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { require.JSONEq(t, string(directResult), string(proxyResult), "espresso tag should resolve to preRestartBlock") secondCapturer := &logCapturer{} - verifier = startVerifier(ctx, t, log.NewLogger(secondCapturer), newStore) + verifier = startOpVerifier(ctx, t, log.NewLogger(secondCapturer), newStore) defer verifier.Stop() // Check that the verifier starts with the block number and hotshot height from before the restart requireLogAttrs(t, secondCapturer, "Starting OP Verifier", map[string]uint64{ @@ -244,17 +244,17 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { // Switch to fallback batcher so there is no espresso state. t.Log("Stopping espresso batcher and activating fallback batcher") - dockerComposeStop(t, rollupWorkingDir, "op-batcher") + dockerComposeStop(t, opWorkingDir, "op-batcher") switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, []string{"fallback"}, "op-batcher-fallback") + dockerComposeStart(t, opWorkingDir, []string{"fallback"}, "op-batcher-fallback") // Cleanup: if the test fails while in fallback mode, restore espresso batcher. fallbackMode := true defer func() { if fallbackMode { - dockerComposeStop(t, rollupWorkingDir, "op-batcher-fallback") + dockerComposeStop(t, opWorkingDir, "op-batcher-fallback") switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, nil, "op-batcher") + dockerComposeStart(t, opWorkingDir, nil, "op-batcher") } }() @@ -280,15 +280,15 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { // Switch to espresso batcher. t.Log("Stopping fallback batcher and activating espresso batcher") - dockerComposeStop(t, rollupWorkingDir, "op-batcher-fallback") + dockerComposeStop(t, opWorkingDir, "op-batcher-fallback") switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, nil, "op-batcher") + dockerComposeStart(t, opWorkingDir, nil, "op-batcher") fallbackMode = false // Start the verifier — it reads FallbackHotshotHeight from the store // (captured before the switch) and immediately picks up new espresso batches. t.Log("Starting verifier to sync from Espresso") - v := startVerifier(ctx, t, newDefaultLogger(), store) + v := startOpVerifier(ctx, t, newDefaultLogger(), store) defer v.Stop() t.Log("Waiting for espresso finalized block to exceed ethereum finalized block") @@ -312,16 +312,16 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { hotshotHeight := uint64(1) t.Log("Stopping espresso batcher and activating fallback batcher") - dockerComposeStop(t, rollupWorkingDir, "op-batcher") + dockerComposeStop(t, opWorkingDir, "op-batcher") switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, []string{"fallback"}, "op-batcher-fallback") + dockerComposeStart(t, opWorkingDir, []string{"fallback"}, "op-batcher-fallback") fallbackMode := true defer func() { if fallbackMode { - dockerComposeStop(t, rollupWorkingDir, "op-batcher-fallback") + dockerComposeStop(t, opWorkingDir, "op-batcher-fallback") switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, nil, "op-batcher") + dockerComposeStart(t, opWorkingDir, nil, "op-batcher") } }() @@ -349,13 +349,13 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { // Switch to espresso batcher. t.Log("Stopping fallback batcher and activating espresso batcher") - dockerComposeStop(t, rollupWorkingDir, "op-batcher-fallback") + dockerComposeStop(t, opWorkingDir, "op-batcher-fallback") switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, nil, "op-batcher") + dockerComposeStart(t, opWorkingDir, nil, "op-batcher") fallbackMode = false t.Log("Starting verifier to sync from Espresso") - v := startVerifier(ctx, t, newDefaultLogger(), store) + v := startOpVerifier(ctx, t, newDefaultLogger(), store) defer v.Stop() t.Log("Waiting for espresso finalized block to exceed ethereum finalized block") @@ -386,7 +386,7 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { defer shutdownProxy() capturer := &logCapturer{} - v := startVerifier(ctx, t, log.NewLogger(capturer), store) + v := startOpVerifier(ctx, t, log.NewLogger(capturer), store) defer v.Stop() t.Log("Waiting for espresso verifier to advance past block 5") @@ -396,18 +396,18 @@ func TestOPE2ERollupEspressoProxy(t *testing.T) { preStopBlock := getStoredBlock(t, store) t.Logf("Espresso advanced to block %d, stopping espresso batcher", preStopBlock) - dockerComposeStop(t, rollupWorkingDir, "op-batcher") + dockerComposeStop(t, opWorkingDir, "op-batcher") t.Log("Switching BatchAuthenticator to activate fallback batcher") switchBatcher(t) defer func() { switchBatcher(t) - dockerComposeStart(t, rollupWorkingDir, nil, "op-batcher") + dockerComposeStart(t, opWorkingDir, nil, "op-batcher") }() t.Log("Starting fallback batcher (espresso disabled)") - dockerComposeStart(t, rollupWorkingDir, []string{"fallback"}, "op-batcher-fallback") - defer dockerComposeStop(t, rollupWorkingDir, "op-batcher-fallback") + dockerComposeStart(t, opWorkingDir, []string{"fallback"}, "op-batcher-fallback") + defer dockerComposeStop(t, opWorkingDir, "op-batcher-fallback") t.Log("Waiting for L2 full node to finalize blocks beyond the pre-stop espresso block") var ethFinalized uint64 diff --git a/main.go b/main.go index f8222fc..b7d1ab4 100644 --- a/main.go +++ b/main.go @@ -63,6 +63,33 @@ func recoveryMiddleware(next http.Handler, logger log.Logger) http.Handler { }) } +func newOPVerifier(ctx context.Context, logger log.Logger, cfg *Config, espressoStore *store.EspressoStore) batchVerifier { + l1Client, err := ethclient.DialContext(ctx, cfg.OPConfig.L1RPC) + if err != nil { + logger.Crit("failed to create L1 client", "error", err) + } + lightClientAddr := common.HexToAddress(cfg.OPConfig.LightClientAddress) + lc, err := espressoLightClient.NewLightclientCaller(lightClientAddr, l1Client) + if err != nil || lc == nil { + logger.Crit("failed to create light client") + } + v := opVerifier.NewOPEspressoBatchVerifier(ctx, logger, espressoStore, l1Client, lc, cfg.toOPVerifierConfig()) + if v == nil { + logger.Crit("failed to create OP verifier") + } + logger.Info("OP verifier enabled") + return v +} + +func newNitroVerifier(ctx context.Context, logger log.Logger, cfg *Config, espressoStore *store.EspressoStore) batchVerifier { + v := nitroVerifier.NewNitroEspressoBatchVerifier(ctx, logger, espressoStore, cfg.toNitroVerifierConfig()) + if v == nil { + logger.Crit("failed to create Nitro verifier") + } + logger.Info("Nitro verifier enabled") + return v +} + func main() { cfg := parseConfig() @@ -99,29 +126,10 @@ func main() { switch cfg.Mode { case ModeOP: - l1Client, err := ethclient.DialContext(ctx, cfg.OPConfig.L1RPC) - if err != nil { - logger.Crit("failed to create L1 client", "error", err) - } - lightClientAddr := common.HexToAddress(cfg.OPConfig.LightClientAddress) - lc, err := espressoLightClient.NewLightclientCaller(lightClientAddr, l1Client) - if err != nil || lc == nil { - logger.Crit("failed to create light client") - } - v := opVerifier.NewOPEspressoBatchVerifier(ctx, logger, espressoStore, l1Client, lc, cfg.toOPVerifierConfig()) - if v == nil { - logger.Crit("failed to create OP verifier") - } - fullNodeVerifier = v - logger.Info("OP verifier enabled") + fullNodeVerifier = newOPVerifier(ctx, logger, cfg, espressoStore) case ModeNitro: - v := nitroVerifier.NewNitroEspressoBatchVerifier(ctx, logger, espressoStore, cfg.toNitroVerifierConfig()) - if v == nil { - logger.Crit("failed to create Nitro verifier") - } - fullNodeVerifier = v - logger.Info("Nitro verifier enabled") + fullNodeVerifier = newNitroVerifier(ctx, logger, cfg, espressoStore) default: logger.Crit("no verifier enabled: set --op.enable or --nitro.enable") From f70cb3cb46b8600be509c29a32c16741d1c16ddf Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 19:20:30 -0400 Subject: [PATCH 20/21] add back cap --- espresso_e2e/mock-l1-beacon/main.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/espresso_e2e/mock-l1-beacon/main.go b/espresso_e2e/mock-l1-beacon/main.go index 2c8ccff..26a6cda 100644 --- a/espresso_e2e/mock-l1-beacon/main.go +++ b/espresso_e2e/mock-l1-beacon/main.go @@ -306,6 +306,10 @@ func (fb *FakeBeacon) recordBlock(block blockInfo) { fb.mu.Lock() defer fb.mu.Unlock() fb.history = append(fb.history, block) + // cap entries to 2000 + if len(fb.history) > 2000 { + fb.history = fb.history[len(fb.history)-2000:] + } } func (fb *FakeBeacon) advance() error { From 14c16638804471e24b5fa0189fa7cbefc71bd8f8 Mon Sep 17 00:00:00 2001 From: Luke Iannucci Date: Mon, 18 May 2026 19:34:05 -0400 Subject: [PATCH 21/21] fix duration parsing --- config.go | 16 ++++++++-------- config_test.go | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/config.go b/config.go index 29985b5..8f3007d 100644 --- a/config.go +++ b/config.go @@ -22,7 +22,7 @@ const ( ModeNitro = "nitro" ) -type Duration struct{ time.Duration } +type Duration time.Duration func (d *Duration) UnmarshalJSON(b []byte) error { var s string @@ -31,10 +31,10 @@ func (d *Duration) UnmarshalJSON(b []byte) error { if err != nil { return err } - d.Duration = parsed + *d = Duration(parsed) return nil } - return json.Unmarshal(b, &d.Duration) + return json.Unmarshal(b, (*time.Duration)(d)) } type OPConfig struct { @@ -79,7 +79,7 @@ func defaultConfig() *Config { MaxRequestBodySize: proxy.DefaultMaxRequestBodySize, LogLevel: "info", LogFormat: "json", - VerificationInterval: Duration{10 * time.Millisecond}, + VerificationInterval: Duration(10 * time.Millisecond), } } @@ -115,7 +115,7 @@ func parseConfig() *Config { pflag.IntVar(&cfg.MaxRequestBodySize, "max-request-body-size", cfg.MaxRequestBodySize, "maximum request body size in bytes (0 = no limit)") pflag.StringVar(&cfg.QueryServiceURL, "query-service-url", cfg.QueryServiceURL, "Espresso query service URL") - pflag.DurationVar(&cfg.VerificationInterval.Duration, "verification-interval", cfg.VerificationInterval.Duration, "verification interval") + pflag.DurationVar((*time.Duration)(&cfg.VerificationInterval), "verification-interval", time.Duration(cfg.VerificationInterval), "verification interval") pflag.StringVar(&cfg.Mode, "mode", cfg.Mode, "verifier mode: op or nitro") pflag.StringVar(&cfg.OPConfig.FullNodeConsensusRPC, "op.full-node-consensus-rpc", cfg.OPConfig.FullNodeConsensusRPC, "OP full node consensus RPC URL") @@ -185,7 +185,7 @@ func (c *Config) validate() error { } errs = append(errs, validateURL("query-service-url", c.QueryServiceURL)) - if c.VerificationInterval.Duration <= 0 { + if time.Duration(c.VerificationInterval) <= 0 { errs = append(errs, fmt.Errorf("verification-interval: must not be zero")) } @@ -240,7 +240,7 @@ func (c *Config) toOPVerifierConfig() *opVerifier.OPEspressoBatchVerifierConfig FullNodeExecutionRPC: c.FullNodeExecutionRPC, L1RPC: c.OPConfig.L1RPC, FullNodeConsensusRPC: c.OPConfig.FullNodeConsensusRPC, - VerificationInterval: c.VerificationInterval.Duration, + VerificationInterval: time.Duration(c.VerificationInterval), QueryServiceURL: c.QueryServiceURL, BatcherAddress: c.OPConfig.BatcherAddress, BatchAuthenticatorAddress: c.OPConfig.BatchAuthenticatorAddress, @@ -252,7 +252,7 @@ func (c *Config) toNitroVerifierConfig() *nitroVerifier.NitroEspressoBatchVerifi return &nitroVerifier.NitroEspressoBatchVerifierConfig{ FeedURL: c.NitroConfig.FeedURL, FullNodeExecutionRPC: c.FullNodeExecutionRPC, - VerificationInterval: c.VerificationInterval.Duration, + VerificationInterval: time.Duration(c.VerificationInterval), QueryServiceURL: c.QueryServiceURL, Namespace: c.NitroConfig.Namespace, InitialHotshotBlock: c.NitroConfig.InitialHotshotBlock, diff --git a/config_test.go b/config_test.go index af0fb74..844682c 100644 --- a/config_test.go +++ b/config_test.go @@ -14,26 +14,26 @@ import ( func TestDurationPflag(t *testing.T) { var d Duration fs := pflag.NewFlagSet("test", pflag.ContinueOnError) - fs.DurationVar(&d.Duration, "interval", 0, "test interval") + fs.DurationVar((*time.Duration)(&d), "interval", 0, "test interval") require.NoError(t, fs.Parse([]string{"--interval=250ms"})) - require.Equal(t, 250*time.Millisecond, d.Duration) + require.Equal(t, 250*time.Millisecond, time.Duration(d)) require.NoError(t, fs.Parse([]string{"--interval", "1m"})) - require.Equal(t, time.Minute, d.Duration) + require.Equal(t, time.Minute, time.Duration(d)) } func TestDurationUnmarshalJSON(t *testing.T) { t.Run("string duration", func(t *testing.T) { var d Duration require.NoError(t, json.Unmarshal([]byte(`"250ms"`), &d)) - require.Equal(t, 250*time.Millisecond, d.Duration) + require.Equal(t, 250*time.Millisecond, time.Duration(d)) }) t.Run("integer nanoseconds", func(t *testing.T) { var d Duration require.NoError(t, json.Unmarshal([]byte(`250000000`), &d)) - require.Equal(t, 250*time.Millisecond, d.Duration) + require.Equal(t, 250*time.Millisecond, time.Duration(d)) }) t.Run("invalid string", func(t *testing.T) { @@ -45,7 +45,7 @@ func TestDurationUnmarshalJSON(t *testing.T) { raw := []byte(`{"verification_interval": "250ms"}`) var cfg Config require.NoError(t, json.Unmarshal(raw, &cfg)) - require.Equal(t, 250*time.Millisecond, cfg.VerificationInterval.Duration) + require.Equal(t, 250*time.Millisecond, time.Duration(cfg.VerificationInterval)) }) } @@ -58,7 +58,7 @@ func TestConfigValidate(t *testing.T) { StoreFilePath: "espresso_store.json", LogLevel: "info", QueryServiceURL: "https://query.espresso.network", - VerificationInterval: Duration{1 * time.Millisecond}, + VerificationInterval: Duration(1 * time.Millisecond), OPConfig: OPConfig{ L1RPC: "ws://localhost:8546", FullNodeConsensusRPC: "http://localhost:9545", @@ -116,7 +116,7 @@ func TestConfigValidate(t *testing.T) { StoreFilePath: "espresso_store.json", LogLevel: "info", QueryServiceURL: "https://query.espresso.network", - VerificationInterval: Duration{1 * time.Millisecond}, + VerificationInterval: Duration(1 * time.Millisecond), NitroConfig: NitroConfig{ FeedURL: "ws://localhost:9642", Namespace: 412346,