From 345e11cc788ab42a8226504f42674c9db4e702a9 Mon Sep 17 00:00:00 2001 From: buddh0 Date: Tue, 7 Nov 2023 15:28:27 +0800 Subject: [PATCH] core/systemcontracts: include BEP-319 on kepler hardfork --- consensus/parlia/parlia.go | 3 +- core/chain_makers.go | 2 +- core/state_processor.go | 6 +++- core/systemcontracts/upgrade.go | 57 +++++++++++++++++++++++++++++++-- miner/worker.go | 2 +- params/config.go | 29 +++++++++++++++-- 6 files changed, 91 insertions(+), 8 deletions(-) diff --git a/consensus/parlia/parlia.go b/consensus/parlia/parlia.go index 9de8c28a99..f6be4a3199 100644 --- a/consensus/parlia/parlia.go +++ b/consensus/parlia/parlia.go @@ -1570,7 +1570,8 @@ func (p *Parlia) distributeIncoming(val common.Address, state *state.StateDB, he state.SetBalance(consensus.SystemAddress, big.NewInt(0)) state.AddBalance(coinbase, balance) - doDistributeSysReward := state.GetBalance(common.HexToAddress(systemcontracts.SystemRewardContract)).Cmp(maxSystemBalance) < 0 + doDistributeSysReward := !p.chainConfig.IsKepler(header.Number, header.Time) && + state.GetBalance(common.HexToAddress(systemcontracts.SystemRewardContract)).Cmp(maxSystemBalance) < 0 if doDistributeSysReward { var rewards = new(big.Int) rewards = rewards.Rsh(balance, systemRewardPercent) diff --git a/core/chain_makers.go b/core/chain_makers.go index f0026089ac..cc17cd74cd 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -308,7 +308,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse if config.DAOForkSupport && config.DAOForkBlock != nil && config.DAOForkBlock.Cmp(b.header.Number) == 0 { misc.ApplyDAOHardFork(statedb) } - systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, statedb) + systemcontracts.UpgradeBuildInSystemContract(config, b.header.Number, parent.Time(), b.header.Time, statedb) // Execute any user modifications to the block if gen != nil { gen(i, b) diff --git a/core/state_processor.go b/core/state_processor.go index 5b6411d80f..25cb7df409 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -74,7 +74,11 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg misc.ApplyDAOHardFork(statedb) } // Handle upgrade build-in system contract code - systemcontracts.UpgradeBuildInSystemContract(p.config, block.Number(), statedb) + lastBlock := p.bc.GetBlockByHash(block.ParentHash()) + if lastBlock == nil { + return statedb, nil, nil, 0, fmt.Errorf("could not get parent block") + } + systemcontracts.UpgradeBuildInSystemContract(p.config, blockNumber, lastBlock.Time(), block.Time(), statedb) var ( context = NewEVMBlockContext(header, p.bc, nil) diff --git a/core/systemcontracts/upgrade.go b/core/systemcontracts/upgrade.go index d644533a39..b6badc4af0 100644 --- a/core/systemcontracts/upgrade.go +++ b/core/systemcontracts/upgrade.go @@ -56,7 +56,9 @@ var ( platoUpgrade = make(map[string]*Upgrade) - latestUpgrade = platoUpgrade + keplerUpgrade = make(map[string]*Upgrade) + + latestUpgrade = keplerUpgrade ) func init() { @@ -697,10 +699,58 @@ func init() { }, } + keplerUpgrade[mainNet] = &Upgrade{ + UpgradeName: "kepler", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/84551b51424be411b80580b299bd5eda06815545", + Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617693565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bd565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a62565b34801561054157600080fd5b50610555610550366004616948565b610d1d565b6040516104e89190616bd9565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bce565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d2565b610f69565b3480156105da57600080fd5b506105776105e93660046168f5565b6112b2565b3480156105fa57600080fd5b506105776106093660046168f5565b611381565b34801561061a57600080fd5b506104c46106293660046167ab565b611432565b34801561063a57600080fd5b5061064361158b565b6040516104e8929190616ae4565b34801561065d57600080fd5b506104db611867565b34801561067257600080fd5b5061067b61186d565b6040516104e891906176ce565b34801561069457600080fd5b50610528611872565b3480156106a957600080fd5b506104db611878565b3480156106be57600080fd5b506106c761187e565b6040516104e89190617684565b3480156106e057600080fd5b5061067b611883565b3480156106f557600080fd5b50610643611888565b34801561070a57600080fd5b506104db611a06565b34801561071f57600080fd5b50610528611a0c565b34801561073457600080fd5b506105776107433660046167ab565b611a12565b34801561075457600080fd5b506104db6107633660046167ab565b611a47565b34801561077457600080fd5b5061067b611a98565b34801561078957600080fd5b50610506611a9d565b34801561079e57600080fd5b506104db611aa2565b3480156107b357600080fd5b506105556107c23660046168f5565b611aa8565b3480156107d357600080fd5b506104db611b4e565b3480156107e857600080fd5b506107fc6107f73660046168f5565b611b54565b6040516104e896959493929190616a8f565b34801561081a57600080fd5b50610528611bb8565b34801561082f57600080fd5b5061067b611bbe565b34801561084457600080fd5b5061067b611bc3565b34801561085957600080fd5b50610528611bc8565b34801561086e57600080fd5b506104db611bce565b34801561088357600080fd5b5061067b611bd4565b34801561089857600080fd5b506104db611bd9565b3480156108ad57600080fd5b50610506611bdf565b3480156108c257600080fd5b506104c46108d1366004616948565b611be4565b3480156108e257600080fd5b506104db611c45565b3480156108f757600080fd5b506104db611c4b565b34801561090c57600080fd5b50610577611c51565b34801561092157600080fd5b506104db611c5a565b34801561093657600080fd5b506104db6109453660046167ab565b611c60565b34801561095657600080fd5b506104c4611ca0565b34801561096b57600080fd5b5061067b611db4565b34801561098057600080fd5b50610528611db9565b34801561099557600080fd5b506104db611dbf565b3480156109aa57600080fd5b506104db611dc4565b3480156109bf57600080fd5b50610528611dc9565b3480156109d457600080fd5b50610555611dcf565b3480156109e957600080fd5b50610577611dee565b3480156109fe57600080fd5b506104db611df7565b348015610a1357600080fd5b50610506611a98565b348015610a2857600080fd5b506104c4610a37366004616899565b611e00565b348015610a4857600080fd5b506104db610a573660046167ab565b61269e565b348015610a6857600080fd5b506104db6126b0565b348015610a7d57600080fd5b50610a866126bd565b6040516104e89190616ad1565b348015610a9f57600080fd5b506104db6127a9565b348015610ab457600080fd5b506104db6127ae565b348015610ac957600080fd5b506104db611bbe565b348015610ade57600080fd5b506105286127b4565b348015610af357600080fd5b50610555610b023660046168f5565b6127ba565b348015610b1357600080fd5b506104db6127c7565b348015610b2857600080fd5b506104db612806565b348015610b3d57600080fd5b506104db612812565b348015610b5257600080fd5b50610528612818565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281e565b348015610b9157600080fd5b506104db6129cd565b348015610ba657600080fd5b50610577610bb536600461685a565b6129d3565b348015610bc657600080fd5b506104c4610bd53660046167ab565b612b59565b348015610be657600080fd5b50610506612c61565b6104c4610bfd3660046167ab565b612c66565b348015610c0e57600080fd5b506104db612fce565b348015610c2357600080fd5b50610528612fd4565b348015610c3857600080fd5b5061067b611dbf565b348015610c4d57600080fd5b50610528612fda565b348015610c6257600080fd5b50610c76610c713660046168f5565b612fe0565b6040516104e89392919061769c565b348015610c9157600080fd5b506105286130a2565b6000610ca533611c60565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733e565b60405180910390fd5b6000610cfa6127c7565b9050610d073383836130a8565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d98565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d7565b600b54610e2157610d72616497565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206177468339815191526016909202918201908155602080860151600080516020617d758339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206177668339815191529091019201906164c6565b506060820151610e0f9060038301906013616540565b505050806001019050610d78565b5050505b610e2961656d565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329492505050565b9150915080610e8657610e7d6064613450565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134b1565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef057600080516020617726833981519152604051610ee0906171f7565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614105565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f4881613450565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617526565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef4565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727d565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d98565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427c16565b9150611027565b50506112a8565b6040516309a99b4f60e41b815261100290639a99b4f09061104e9030908690600401616a76565b602060405180830381600087803b15801561106857600080fd5b505af115801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a0919061690d565b9150816110ae5750506112a8565b6000805b848110156110dc578585828181106110c657fe5b90506020020135820191508060010190506110b2565b50806110ea575050506112a8565b6000806000805b898110156112a0578489898381811061110657fe5b9050602002013588028161111657fe5b0493508a8a8281811061112557fe5b905060200201602081019061113a91906167ab565b6001600160a01b0381166000908152600460205260409020549093509150811561125657600060018084038154811061116f57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111dc57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cf9190617693565b60405180910390a2611250565b6003546111ef908663ffffffff6142be16565b6003908155810154611207908663ffffffff6142be16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611247908890617693565b60405180910390a25b50611298565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128f9190617693565b60405180910390a25b6001016110f1565b505050505050505b5050436010555050565b60015460009082106112c65750600061137c565b60006001600160a01b0316600183815481106112de57fe5b60009182526020909120600490910201546001600160a01b0316148061130e5750600854158061130e5750600a54155b8061131d575060085460095410155b8061132e575061132c82611381565b155b8061135757506000600b838154811061134357fe5b906000526020600020906016020160000154115b8061136b575060016113676126bd565b5111155b156113785750600061137c565b5060015b919050565b60015460009082106113955750600061137c565b600b5482106113d257600182815481106113ab57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137c565b600182815481106113df57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142c5750600b828154811061141357fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114535760405162461bcd60e51b8152600401610ce79061763b565b600b5461151157611462616497565b60015460005b8181101561150d57600b805460018101825560009190915283516000805160206177468339815191526016909202918201908155602080860151600080516020617d758339815191528401805460ff19169115159190911790556040860151805187946114e9936000805160206177668339815191529091019201906164c6565b5060608201516114ff9060038301906013616540565b505050806001019050611468565b5050505b6001600160a01b038116600090815260046020526040902054806115355750611588565b6001810390506000600b828154811061154a57fe5b600091825260209091206001601690920201015460ff16905061156d83836142e3565b80156115765750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115de57600181815481106115ac57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d6576001909101905b600101611597565b5060608160405190808252806020026020018201604052801561160b578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164457816020015b606081526020019060019003908161162f5790505b50600b54600094509091508414156117bf5760005b848110156117b9576001818154811061166e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117b1576001818154811061169e57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f657fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b505050505082858151811061179f57fe5b60209081029190910101526001909301925b600101611659565b5061185b565b60005b8481101561185957600181815481106117d757fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611851576001818154811061180757fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183257fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c2565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b603881565b600881565b600e54600c5460609182918061189c575060155b60606118a66126bd565b905060606118b382614696565b9050828251116118ca579094509250611863915050565b838383510310156118dc578282510393505b83156119125760c843046118f883838388880360008a8a614804565b6119108383838888038989038a8b8b8b510301614804565b505b60608360405190808252806020026020018201604052801561193e578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197757816020015b60608152602001906001900390816119625790505b50905060005b858110156119f85784818151811061199157fe5b60200260200101518382815181106119a557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119d157fe5b60200260200101518282815181106119e557fe5b602090810291909101015260010161197d565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3a57600091505061137c565b60001901610f4e81611381565b6001600160a01b03811660009081526004602052604081205480611a6f57600091505061137c565b600180820381548110611a7e57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab557fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b465780601f10611b1b57610100808354040283529160200191611b46565b820191906000526020600020905b815481529060010190602001808311611b2957829003601f168201915b505050505081565b60105481565b60018181548110611b6157fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c055760405162461bcd60e51b8152600401610ce7906174d7565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c38939291906176dc565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c965760405162461bcd60e51b8152600401610ce79061745f565b6000190192915050565b600b54611d5e57611caf616497565b60015460005b81811015611d5a57600b805460018101825560009190915283516000805160206177468339815191526016909202918201908155602080860151600080516020617d758339815191528401805460ff1916911515919091179055604086015180518794611d36936000805160206177668339815191529091019201906164c6565b506060820151611d4c9060038301906013616540565b505050806001019050611cb5565b5050505b600854611d6b5760036008555b600a54611d78576002600a555b6000611d8333611c60565b9050611d8e816112b2565b611daa5760405162461bcd60e51b8152600401610ce7906171b4565b611588338261495b565b600981565b61100781565b600381565b60c881565b61100681565b6040518061062001604052806105ef81526020016177866105ef913981565b60005460ff1681565b6402540be40081565b60005460ff16611e225760405162461bcd60e51b8152600401610ce790616d98565b3361100714611e435760405162461bcd60e51b8152600401610ce7906172ab565b611ead84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f39050565b15611f4a5760208114611ed25760405162461bcd60e51b8152600401610ce790617419565b604080516020601f8401819004810282018101909252828152600091611f1091858580838501838280828437600092019190915250614a4c92505050565b905060648110158015611f265750620186a08111155b611f425760405162461bcd60e51b8152600401610ce7906170a4565b60025561265b565b611faa84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f39050565b156120395760208114611fcf5760405162461bcd60e51b8152600401610ce790616c1e565b604080516020601f840181900481028201810190925282815260009161200d91858580838501838280828437600092019190915250614a4c92505050565b90506127108111156120315760405162461bcd60e51b8152600401610ce790616f36565b60065561265b565b6120a384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f39050565b1561213d57602081146120c85760405162461bcd60e51b8152600401610ce790616c55565b604080516020601f840181900481028201810190925282815260009161210691858580838501838280828437600092019190915250614a4c92505050565b600c5490915080612115575060155b8082106121345760405162461bcd60e51b8152600401610ce790616fa9565b5060085561265b565b6121a684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f39050565b1561223f57602081146121cb5760405162461bcd60e51b8152600401610ce790616d1e565b604080516020601f840181900481028201810190925282815260009161220991858580838501838280828437600092019190915250614a4c92505050565b905060008111801561221b5750600a81105b6122375760405162461bcd60e51b8152600401610ce7906175b7565b600a5561265b565b6122b384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f39050565b1561234257602081146122d85760405162461bcd60e51b8152600401610ce790616cd2565b604080516020601f840181900481028201810190925282815260009161231691858580838501838280828437600092019190915250614a4c92505050565b9050600d5481111561233a5760405162461bcd60e51b8152600401610ce79061711a565b600e5561265b565b6123ab84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f39050565b1561242d57602081146123d05760405162461bcd60e51b8152600401610ce7906172f9565b604080516020601f840181900481028201810190925282815260009161240e91858580838501838280828437600092019190915250614a4c92505050565b600d819055600e5490915081101561242757600d54600e555b5061265b565b61249184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f39050565b1561253f57602081146124b65760405162461bcd60e51b8152600401610ce790616d63565b604080516020601f84018190048102820181019092528281526000916124f491858580838501838280828437600092019190915250614a4c92505050565b9050600081116125165760405162461bcd60e51b8152600401610ce790616e06565b60648111156125375760405162461bcd60e51b8152600401610ce790616e4e565b600c5561265b565b6125a784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f39050565b1561264357602081146125cc5760405162461bcd60e51b8152600401610ce790617573565b604080516020601f840181900481028201810190925282815260009161260a91858580838501838280828437600092019190915250614a4c92505050565b90506001811015801561261f57506127108111155b61263b5760405162461bcd60e51b8152600401610ce790617051565b600f5561265b565b60405162461bcd60e51b8152600401610ce790617614565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040516126909493929190616bec565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ec576126d881611381565b156126e4578160010191505b6001016126c7565b50606081604051908082528060200260200182016040528015612719578160200160208202803683370190505b5090506000915060005b838110156127a05761273481611381565b15612798576001818154811061274657fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061277157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612723565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab557fe5b60006127d16126bd565b519050600080600c54116127e65760156127ea565b600c545b9050808211156127f8578091505b8161280257600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff16156128415760405162461bcd60e51b8152600401610ce7906173ab565b61284961656d565b600061286f6040518061062001604052806105ef81526020016177866105ef9139613294565b91509150806128905760405162461bcd60e51b8152600401610ce790617496565b60005b8260200151518110156129b5576001836020015182815181106128b257fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298857fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612893565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612adc57612ac485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2c57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612aba5780601f10612a8f57610100808354040283529160200191612aba565b820191906000526020600020905b815481529060010190602001808311612a9d57829003601f168201915b5050505050614a51565b15612ad45760019250505061142c565b6001016129db565b5060125460005b81811015612b4d57612b3486868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2c57fe5b15612b45576001935050505061142c565b600101612ae3565b50600095945050505050565b3361100114612b7a5760405162461bcd60e51b8152600401610ce79061763b565b600b54612c3857612b89616497565b60015460005b81811015612c3457600b805460018101825560009190915283516000805160206177468339815191526016909202918201908155602080860151600080516020617d758339815191528401805460ff1916911515919091179055604086015180518794612c10936000805160206177668339815191529091019201906164c6565b506060820151612c269060038301906013616540565b505050806001019050612b8f565b5050505b6000612c4382614ab5565b9050612c4e816112b2565b15612c5d57612c5d828261495b565b5050565b606581565b334114612c855760405162461bcd60e51b8152600401610ce790617526565b60005460ff16612ca75760405162461bcd60e51b8152600401610ce790616d98565b60003411612cc75760405162461bcd60e51b8152600401610ce7906170eb565b3a15612ce55760405162461bcd60e51b8152600401610ce79061727d565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2557610271600f556103aa6006556014805460ff191660011790555b6000612d4e612710612d42600f5486614c5890919063ffffffff16565b9063ffffffff614c9216565b90508015612dbe576040516110029082156108fc029083906000818181858888f19350505050158015612d85573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db59190617693565b60405180910390a15b600083118015612dd057506000600654115b15612e76576000612df2612710612d4260065487614c5890919063ffffffff16565b90508015612e745760405161dead9082156108fc029083906000818181858888f19350505050158015612e29573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e599190617693565b60405180910390a1612e71848263ffffffff61427c16565b93505b505b612e86838263ffffffff61427c16565b92508115612f86576000600180840381548110612e9f57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0c57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612eff9190617693565b60405180910390a2612f80565b600354612f1f908563ffffffff6142be16565b6003908155810154612f37908563ffffffff6142be16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f77908790617693565b60405180910390a25b50612fc8565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbf9190617693565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612fed57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130985780601f1061306d57610100808354040283529160200191613098565b820191906000526020600020905b81548152906001019060200180831161307b57829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b9575081155b806130c45750600954155b156130d157506000610f4e565b6009600081546001900391905081905550600061311c600a54612d4285612d42600b89815481106130fe57fe5b6000918252602090912060169091020154439063ffffffff61427c16565b90506000600b858154811061312d57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319257600080fd5b505afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190616925565b9150915060009350808310613244576131e387876142e3565b506040516305bfb49960e41b815261100190635bfb499090613209908a90600401616a62565b600060405180830381600087803b15801561322357600080fd5b505af1158015613237573d6000803e3d6000fd5b5050505060019350613256565b8183106132565761325487614ab5565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329c61656d565b60006132a661656d565b6132ae616591565b6132bf6132ba86614cd4565b614cf9565b90506000805b6132ce83614d43565b1561344257806132f3576132e96132e484614d64565b614db2565b60ff16845261343a565b806001141561343557606061330f61330a85614d64565b614e32565b9050805160405190808252806020026020018201604052801561334c57816020015b6133396165b1565b8152602001906001900390816133315790505b508560200181905250805160405190808252806020026020018201604052801561338a57816020015b60608152602001906001900390816133755790505b50604086015260005b815181101561342a576133a46165b1565b606060006133c48585815181106133b757fe5b6020026020010151614f03565b925092509250806133e4578860009a509a5050505050505050505061344b565b82896020015185815181106133f557fe5b6020026020010181905250818960400151858151811061341157fe5b6020026020010181905250505050806001019050613393565b50600192505061343a565b613442565b6001016132c5565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346a5790505090506134908363ffffffff1661501d565b8160008151811061349d57fe5b6020026020010181905250610f4e81615030565b60006064835111156134e8576000805160206177268339815191526040516134d890616eab565b60405180910390a150606661142c565b60005b83518110156135865760005b8181101561357d5784818151811061350b57fe5b6020026020010151600001516001600160a01b031685838151811061352c57fe5b6020026020010151600001516001600160a01b031614156135755760008051602061772683398151915260405161356290617006565b60405180910390a160669250505061142c565b6001016134f7565b506001016134eb565b5060608061359485856150ba565b60015491935091506000908190815b818110156136195767016345785d8a0000600182815481106135c157fe5b906000526020600020906004020160030154106135e357836001019350613611565b6000600182815481106135f257fe5b9060005260206000209060040201600301541115613611578260010192505b6001016135a3565b50606083604051908082528060200260200182016040528015613646578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613675578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a4578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d3578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613704578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613733578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377b57600080fd5b505afa15801561378f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b3919061690d565b905067016345785d8a00008111156137fe576000805160206177268339815191526040516137e09061736a565b60405180910390a160689d505050505050505050505050505061142c565b60005b89811015613a6f5767016345785d8a00006001828154811061381f57fe5b906000526020600020906004020160030154106139a4576001818154811061384357fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a957fe5b906000526020600020906004020160030154816138c257fe5b06600183815481106138d057fe5b9060005260206000209060040201600301540390506138f8838261427c90919063ffffffff16565b898e8151811061390457fe5b6020026020010181815250506001828154811061391d57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397b57fe5b6020908102919091010152613996868263ffffffff6142be16565b95508c6001019c5050613a67565b6000600182815481106139b357fe5b9060005260206000209060040201600301541115613a6757600181815481106139d857fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3657fe5b906000526020600020906004020160030154838c81518110613a5457fe5b6020026020010181815250508a6001019a505b600101613801565b5060008415613ce5576002546040516303702b2960e51b815261100491636e056520918891613aa9918e918e918d91420190600401616b54565b6020604051808303818588803b158015613ac257600080fd5b505af193505050508015613af3575060408051601f3d908101601f19168201909252613af09181019061683a565b60015b613c6a576040516000815260443d1015613b0f57506000613baa565b60046000803e60005160e01c6308c379a08114613b30576000915050613baa565b60043d036004833e81513d60248201116001600160401b0382111715613b5b57600092505050613baa565b80830180516001600160401b03811115613b7c576000945050505050613baa565b8060208301013d8601811115613b9a57600095505050505050613baa565b601f01601f191660405250925050505b80613bb55750613bf7565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be99190616bd9565b60405180910390a250613c65565b3d808015613c21576040519150601f19603f3d011682016040523d82523d6000602084013e613c26565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c5b9190616bd9565b60405180910390a2505b613ce5565b8015613cac577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9f9190617693565b60405180910390a1613ce3565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cda90616c9b565b60405180910390a25b505b8015613e9b5760005b8751811015613e99576000888281518110613d0557fe5b60200260200101519050600060018281548110613d1e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4f57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e0b5760018281548110613d9057fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ddf57fe5b906000526020600020906004020160030154604051613dfe9190617693565b60405180910390a2613e8f565b60018281548110613e1857fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6757fe5b906000526020600020906004020160030154604051613e869190617693565b60405180910390a25b5050600101613cee565b505b835115613fe55760005b8451811015613fe3576000858281518110613ebc57fe5b60200260200101516001600160a01b03166108fc868481518110613edc57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7257858281518110613f1257fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f5057fe5b6020026020010151604051613f659190617693565b60405180910390a2613fda565b858281518110613f7e57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fbc57fe5b6020026020010151604051613fd19190617693565b60405180910390a25b50600101613ea5565b505b5050505050505050505050506000471115614061577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140299190617693565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405f573d6000803e3d6000fd5b505b6000600381905560055581511561407c5761407c82826152f3565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b957600080fd5b505af11580156140cd573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614156575060018082038154811061413657fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419c5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137c565b6001546005546000198201118015906141f25784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137c565b60058054600190810190915580548190600019860190811061421057fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aad565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dcf565b600080600183815481106142f357fe5b9060005260206000209060040201600301549050600060018080549050039050600161431d6126bd565b51116143525760006001858154811061433257fe5b90600052602060002090600402016003018190555060009250505061142c565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161438b9190617693565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457857600181600101815481106143cc57fe5b9060005260206000209060040201600182815481106143e757fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a857fe5b9060005260206000209060160201600b82815481106144c357fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff199092169190911790556002808401805461451a9383860193908216156101000260001901909116046165e6565b5061452d6003828101908401601361665b565b5090505080600101600460006001848154811061454657fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ae565b50600180548061458457fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d757fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146096002830182616685565b6146176003830160006166c9565b50509055600081838161462657fe5b049050801561468a5760015460005b8181101561468757826001828154811061464b57fe5b906000526020600020906004020160030154016001828154811061466b57fe5b6000918252602090912060036004909202010155600101614635565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d557816020015b60608152602001906001900390816146c05790505b50600b5490915083146146ec57925061137c915050565b60005b828110156147fb57600b60016004600089858151811061470b57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473f57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d75780601f106147ac576101008083540402835291602001916147d7565b820191906000526020600020905b8154815290600101906020018083116147ba57829003601f168201915b50505050508282815181106147e857fe5b60209081029190910101526001016146ef565b50949350505050565b60005b828110156149515760008287838801604051602001614827929190616a54565b6040516020818303038152906040528051906020012060001c8161484757fe5b06905080850182870114614948576000898388018151811061486557fe5b602002602001015190506060898489018151811061487f57fe5b602002602001015190508a8388018151811061489757fe5b60200260200101518b858a01815181106148ad57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148dc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490a57fe5b60200260200101518a858a018151811061492057fe5b6020026020010181905250808a8489018151811061493a57fe5b602002602001018190525050505b50600101614807565b5050505050505050565b600980546001908101909155600b80548390811061497557fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149ab57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a069190616a38565b6040516020818303038152906040528051906020012083604051602001614a2d9190616a38565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6d5760009250614aab565b600160208701838101602088015b600284838510011415614aa6578051835114614a9a5760009650600093505b60209283019201614a7b565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614ade5750600019905061137c565b600181039050600060018281548110614af357fe5b9060005260206000209060040201600301549050600060018381548110614b1657fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6f908590617693565b60405180910390a280614b875782935050505061137c565b6000818381614b9257fe5b0490508015614c4e5760005b84811015614bf0578160018281548110614bb457fe5b9060005260206000209060040201600301540160018281548110614bd457fe5b6000918252602090912060036004909202010155600101614b9e565b50600180549085015b81811015614c4b578260018281548110614c0f57fe5b9060005260206000209060040201600301540160018281548110614c2f57fe5b6000918252602090912060036004909202010155600101614bf9565b50505b5091949350505050565b600082614c675750600061142c565b82820282848281614c7457fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723c565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad9565b614cdc6166d8565b506040805180820190915281518152602082810190820152919050565b614d01616591565b614d0a82615b10565b614d1357600080fd5b6000614d228360200151615b4a565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4d6166d8565b505080518051602091820151919092015191011190565b614d6c6166d8565b614d7582614d43565b614d7e57600080fd5b60208201516000614d8e82615bad565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc757508151602110155b614dd057600080fd5b6000614ddf8360200151615b4a565b90508083600001511015614e055760405162461bcd60e51b8152600401610ce7906173e2565b8251602080850151830180519284900392918310156147fb57506020919091036101000a90049392505050565b6060614e3d82615b10565b614e4657600080fd5b6000614e5183615c8e565b9050606081604051908082528060200260200182016040528015614e8f57816020015b614e7c6166d8565b815260200190600190039081614e745790505b5090506000614ea18560200151615b4a565b60208601510190506000805b84811015614ef857614ebe83615bad565b9150604051806040016040528083815260200184815250848281518110614ee157fe5b602090810291909101015291810191600101614ead565b509195945050505050565b614f0b6165b1565b60606000614f176165b1565b6060614f21616591565b614f2a87614cf9565b90506000805b614f3983614d43565b1561500e5780614f6457614f54614f4f84614d64565b615cea565b6001600160a01b03168552615006565b8060011415614f8c57614f79614f4f84614d64565b6001600160a01b03166020860152615006565b8060021415614fb457614fa1614f4f84614d64565b6001600160a01b03166040860152615006565b8060031415614fe057614fc96132e484614d64565b6001600160401b0316606086015260019150615006565b806004141561500157614ffa614ff584614d64565b615d04565b9350615006565b61500e565b600101614f30565b50929791965091945092505050565b606061142c61502b83615d74565b615e5a565b6060815160001415615051575060408051600081526020810190915261137c565b60608260008151811061506057fe5b602002602001015190506000600190505b83518110156150a1576150978285838151811061508a57fe5b6020026020010151615eac565b9150600101615071565b50610f4e6150b4825160c060ff16615f29565b82615eac565b6060806000808080806150cb6127c7565b6001549091505b80156151d957600181039250600b83815481106150eb57fe5b600091825260209091206001601690920201015460ff1661510b576151d0565b6001838154811061511857fe5b60009182526020909120600490910201546001600160a01b0316945061513f8584846130a8565b9350831580615152575060018a51038610155b1561515c576151d0565b60005b8a518110156151ce57856001600160a01b03168b828151811061517e57fe5b6020026020010151600001516001600160a01b031614156151c65760018b82815181106151a757fe5b60209081029190910101519015156080909101526001909601956151ce565b60010161515f565b505b600019016150d2565b508489510360405190808252806020026020018201604052801561521757816020015b6152046165b1565b8152602001906001900390816151fc5790505b5096508489510360405190808252806020026020018201604052801561525157816020015b606081526020019060019003908161523c5790505b5095506000915060005b89518110156152e55789818151811061527057fe5b6020026020010151608001516152dd5789818151811061528c57fe5b60200260200101518884815181106152a057fe5b60200260200101819052508881815181106152b757fe5b60200260200101518784815181106152cb57fe5b60200260200101819052508260010192505b60010161525b565b5050505050505b9250929050565b600154825160005b8281101561541057600161530d6165b1565b6001838154811061531a57fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e4578781815181106153aa57fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153dc57600092506153e4565b600101615396565b5081156154065780516001600160a01b03166000908152600460205260408120555b50506001016152fb565b50808211156154cf57805b828110156154cd57600180548061542e57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061548157fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b36002830182616685565b6154c16003830160006166c9565b5050905560010161541b565b505b60008183106154de57816154e0565b825b905060005b8181101561584f576155928682815181106154fc57fe5b60200260200101516001838154811061551157fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ffb565b6157465780600101600460008884815181106155aa57fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e657fe5b6020026020010151600182815481106155fb57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b657fe5b6020026020010151600b82815481106156cb57fe5b906000526020600020906016020160020190805190602001906156ef9291906164c6565b506000600b82815481106156ff57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061573057fe5b6000918252602090912060169091020155615847565b6157d785828151811061575557fe5b6020026020010151600b838154811061576a57fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612aba5780601f10612a8f57610100808354040283529160200191612aba565b615822578481815181106157e757fe5b6020026020010151600b82815481106157fc57fe5b906000526020600020906016020160020190805190602001906158209291906164c6565b505b60006001828154811061583157fe5b9060005260206000209060040201600301819055505b6001016154e5565b5082821115615a2757615860616497565b835b83811015615a245785818151811061587657fe5b60200260200101518260400181905250600187828151811061589457fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b8054928301815590935284516016909102600080516020617746833981519152810191825585830151600080516020617d758339815191528201805491151560ff19909216919091179055928501518051869492936159ca93600080516020617766833981519152019201906164c6565b5060608201516159e09060038301906013616540565b50505080600101600460008984815181106159f757fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615862565b50505b615a2f61607c565b615a3761625e565b6000600981905560015493505b83811015615aa5576000600b8281548110615a5b57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8c57fe5b6000918252602090912060169091020155600101615a44565b505050505050565b60008184841115615ad15760405162461bcd60e51b8152600401610ce79190616bd9565b505050900390565b60008183615afa5760405162461bcd60e51b8152600401610ce79190616bd9565b506000838581615b0657fe5b0495945050505050565b8051600090615b215750600061137c565b6020820151805160001a9060c0821015615b405760009250505061137c565b5060019392505050565b8051600090811a6080811015615b6457600091505061137c565b60b8811080615b7f575060c08110801590615b7f575060f881105b15615b8e57600191505061137c565b60c0811015615ba25760b51901905061137c565b60f51901905061137c565b80516000908190811a6080811015615bc85760019150615c87565b60b8811015615bdd57607e1981019150615c87565b60c0811015615c2e57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c285760405162461bcd60e51b8152600401610ce790617189565b50615c87565b60f8811015615c435760be1981019150615c87565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c855760405162461bcd60e51b8152600401610ce790617189565b505b5092915050565b8051600090615c9f5750600061137c565b60008090506000615cb38460200151615b4a565b602085015185519181019250015b80821015615ce157615cd282615bad565b82019150826001019250615cc1565b50909392505050565b8051600090601514615cfb57600080fd5b61142c82614db2565b8051606090615d1257600080fd5b6000615d218360200151615b4a565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d58576020820181803683370190505b50905060008160200190506147fb84876020015101828561644c565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db857506018615ddc565b6fffffffffffffffffffffffffffffffff198416615dd857506010615ddc565b5060005b6020811015615e1257818181518110615df157fe5b01602001516001600160f81b03191615615e0a57615e12565b600101615ddc565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e47576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8c5750607f60f81b82600081518110615e7a57fe5b01602001516001600160f81b03191611155b15615e9857508061137c565b61142c615eaa8351608060ff16615f29565b835b6060806040519050835180825260208201818101602087015b81831015615edd578051835260209283019201615ec5565b50855184518101855292509050808201602086015b81831015615f0a578051835260209283019201615ef2565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f535760405162461bcd60e51b8152600401610ce790616f81565b60408051600180825281830190925260609160208201818036833701905050905060378411615fad5782840160f81b81600081518110615f8f57fe5b60200101906001600160f81b031916908160001a905350905061142c565b6060615fb885615d74565b90508381510160370160f81b82600081518110615fd157fe5b60200101906001600160f81b031916908160001a905350615ff28282615eac565b95945050505050565b805182516000916001600160a01b039182169116148015616035575081602001516001600160a01b031683602001516001600160a01b0316145b801561605a575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c757805b828110156160c557601280548061609f57fe5b6001900381819060005260206000200160006160bb9190616685565b905560010161608c565b505b60008183106160d657816160d8565b825b905060005b818110156161f057616195601282815481106160f557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161835780601f1061615857610100808354040283529160200191616183565b820191906000526020600020905b81548152906001019060200180831161616657829003601f168201915b505050505060138381548110612a2c57fe5b6161e857601381815481106161a657fe5b90600052602060002001601282815481106161bd57fe5b9060005260206000200190805460018160011615610100020316600290046161e69291906165e6565b505b6001016160dd565b5082821115610d0757825b82811015612fc85760126013828154811061621257fe5b60009182526020808320845460018181018755958552919093209290910180546162559493909201929091600261010092821615929092026000190116046165e6565b506001016161fb565b601354600b54808211156162a957805b828110156162a757601380548061628157fe5b60019003818190600052602060002001600061629d9190616685565b905560010161626e565b505b60008183106162b857816162ba565b825b905060005b818110156163d957616377601382815481106162d757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163655780601f1061633a57610100808354040283529160200191616365565b820191906000526020600020905b81548152906001019060200180831161634857829003601f168201915b5050505050600b838154811061576a57fe5b6163d157600b818154811061638857fe5b9060005260206000209060160201600201601382815481106163a657fe5b9060005260206000200190805460018160011615610100020316600290046163cf9291906165e6565b505b6001016162bf565b5082821115610d0757825b82811015612fc8576013600b82815481106163fb57fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616443959390940193909260001990821615610100020116046165e6565b506001016163e4565b8061645657610d07565b5b60208110616476578251825260209283019290910190601f1901616457565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164c16166f2565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650757805160ff1916838001178555616534565b82800160010185558215616534579182015b82811115616534578251825591602001919060010190616519565b50612802929150616711565b82601381019282156165345791602002820182811115616534578251825591602001919060010190616519565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a46166d8565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661f5780548555616534565b8280016001018555821561653457600052602060002091601f016020900482015b82811115616534578254825591600101919060010190616640565b82601381019282156165345791820182811115616534578254825591600101919060010190616640565b50805460018160011615610100020316600290046000825580601f106166ab5750611588565b601f0160209004906000526020600020908101906115889190616711565b50611588906013810190616711565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a691905b808211156128025760008155600101616717565b60008083601f84011261673c578182fd5b5081356001600160401b03811115616752578182fd5b60208301915083602080830285010111156152ec57600080fd5b60008083601f84011261677d578182fd5b5081356001600160401b03811115616793578182fd5b6020830191508360208285010111156152ec57600080fd5b6000602082840312156167bc578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e7578283fd5b84356001600160401b03808211156167fd578485fd5b6168098883890161672b565b90965094506020870135915080821115616821578384fd5b5061682e8782880161672b565b95989497509550505050565b60006020828403121561684b578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686c578182fd5b82356001600160401b03811115616881578283fd5b61688d8582860161676c565b90969095509350505050565b600080600080604085870312156168ae578384fd5b84356001600160401b03808211156168c4578586fd5b6168d08883890161676c565b909650945060208701359150808211156168e8578384fd5b5061682e8782880161676c565b600060208284031215616906578081fd5b5035919050565b60006020828403121561691e578081fd5b5051919050565b60008060408385031215616937578182fd5b505080516020909101519092909150565b60008060006040848603121561695c578283fd5b833560ff8116811461696c578384fd5b925060208401356001600160401b03811115616986578283fd5b6169928682870161676c565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d75781516001600160a01b0316875295820195908201906001016169b2565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a248160208601602086016176f9565b601f01601f19169290920160200192915050565b60008251616a4a8184602087016176f9565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699f565b600060408252616af7604083018561699f565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4557601f19878403018552616b33838351616a0c565b94860194925090850190600101616b17565b50909998505050505050505050565b600060808252616b67608083018761699f565b828103602084810191909152865180835287820192820190845b81811015616b9d57845183529383019391830191600101616b81565b50508481036040860152616bb1818861699f565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0c565b600060408252616c006040830186886169e2565b8281036020840152616c138185876169e2565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff26060830184616a0c565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff26040830184866169e2565b60005b838110156177145781810151838201526020016176fc565b83811115612fc8575050600091015256fe70e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbbf905ec80f905e8f846942a7cdd959bfe8d9487b2a43b33565295a698f7e294b6a7edd747c0554875d3fc531d19ba1497992c5e941ff80f3f7f110ffd8920a3ac38fdef318fe94a3f86048c27395000f846946488aa4d1955ee33403f8ccb1d4de5fb97c7ade294220f003d8bdfaadf52aa1e55ae4cc485e6794875941a87e90e440a39c99aa9cb5cea0ad6a3f0b2407b86048c27395000f846949ef9f4360c606c7ab4db26b016007d3ad0ab86a0946103af86a874b705854033438383c82575f25bc29418e2db06cbff3e3c5f856410a1838649e760175786048c27395000f84694ee01c3b1283aa067c58eab4709f85e99d46de5fe94ee4b9bfb1871c64e2bcabb1dc382dc8b7c4218a29415904ab26ab0e99d70b51c220ccdcccabee6e29786048c27395000f84694685b1ded8013785d6623cc18d214320b6bb6475994a20ef4e5e4e7e36258dbf51f4d905114cb1b34bc9413e39085dc88704f4394d35209a02b1a9520320c86048c27395000f8469478f3adfc719c99674c072166708589033e2d9afe9448a30d5eaa7b64492a160f139e2da2800ec3834e94055838358c29edf4dcc1ba1985ad58aedbb6be2b86048c27395000f84694c2be4ec20253b8642161bc3f444f53679c1f3d479466f50c616d737e60d7ca6311ff0d9c434197898a94d1d678a2506eeaa365056fe565df8bc8659f28b086048c27395000f846942f7be8361c80a4c1e7e9aaf001d0877f1cfde218945f93992ac37f3e61db2ef8a587a436a161fd210b94ecbc4fb1a97861344dad0867ca3cba2b860411f086048c27395000f84694ce2fd7544e0b2cc94692d4a704debef7bcb613289444abc67b4b2fba283c582387f54c9cba7c34bafa948acc2ab395ded08bb75ce85bf0f95ad2abc51ad586048c27395000f84694b8f7166496996a7da21cf1f1b04d9b3e26a3d077946770572763289aac606e4f327c2f6cc1aa3b3e3b94882d745ed97d4422ca8da1c22ec49d880c4c097286048c27395000f846942d4c407bbe49438ed859fe965b140dcf1aab71a9943ad0939e120f33518fbba04631afe7a3ed6327b194b2bbb170ca4e499a2b0f3cc85ebfa6e8c4dfcbea86048c27395000f846946bbad7cf34b5fa511d8e963dbba288b1960e75d694853b0f6c324d1f4e76c8266942337ac1b0af1a229442498946a51ca5924552ead6fc2af08b94fcba648601d1a94a2000f846944430b3230294d12c6ab2aac5c2cd68e80b16b581947b107f4976a252a6939b771202c28e64e03f52d694795811a7f214084116949fc4f53cedbf189eeab28601d1a94a2000f84694ea0a6e3c511bbd10f4519ece37dc24887e11b55d946811ca77acfb221a49393c193f3a22db829fcc8e9464feb7c04830dd9ace164fc5c52b3f5a29e5018a8601d1a94a2000f846947ae2f5b9e386cd1b50a4550696d957cb4900f03a94e83bcc5077e6b873995c24bac871b5ad856047e19464e48d4057a90b233e026c1041e6012ada897fe88601d1a94a2000f8469482012708dafc9e1b880fd083b32182b869be8e09948e5adc73a2d233a1b496ed3115464dd6c7b887509428b383d324bc9a37f4e276190796ba5a8947f5ed8601d1a94a2000f8469422b81f8e175ffde54d797fe11eb03f9e3bf75f1d94a1c3ef7ca38d8ba80cce3bfc53ebd2903ed21658942767f7447f7b9b70313d4147b795414aecea54718601d1a94a2000f8469468bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d94675cfe570b7902623f47e7f59c9664b5f5065dcf94d84f0d2e50bcf00f2fc476e1c57f5ca2d57f625b8601d1a94a2000f846948c4d90829ce8f72d0163c1d5cf348a862d5506309485c42a7b34309bee2ed6a235f86d16f059deec5894cc2cedc53f0fa6d376336efb67e43d167169f3b78601d1a94a2000f8469435e7a025f4da968de7e4d7e4004197917f4070f194b1182abaeeb3b4d8eba7e6a4162eac7ace23d57394c4fd0d870da52e73de2dd8ded19fe3d26f43a1138601d1a94a2000f84694d6caa02bbebaebb5d7e581e4b66559e635f805ff94c07335cf083c1c46a487f0325769d88e163b653694efaff03b42e41f953a925fc43720e45fb61a19938601d1a94a20000175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/84551b51424be411b80580b299bd5eda06815545", + Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af9190613550565b60405180910390f35b6102c0610508565b6040516102af9190612d6c565b6102e06102db366004612ca2565b61050e565b6040516102af9190612da4565b6102f5610574565b6040516102af9190612d99565b610315610310366004612a50565b61057d565b6040516102af93929190613538565b6102c0610332366004612c72565b6105a0565b61034a610345366004612a50565b6105c7565b6040516102af92919061352a565b61036061061e565b6040516102af9190613500565b610360610624565b61037d61062a565b6040516102af9190613561565b6102c061062f565b61039a610635565b6040516102af91906134f1565b61037d61063a565b6102c061063f565b610360610645565b6103d26103cd366004612a50565b61064b565b005b6103606106f6565b6102c06106fc565b61037d610702565b61037d610707565b6102c061070c565b610360610712565b61037d610717565b61034a61071c565b6103d2610422366004612ca2565b610726565b61037d610838565b61036061083d565b6102c0610848565b6102c061084e565b6102f5610854565b6102a261085d565b610360610862565b6103d261046d366004612b56565b610867565b610360610e17565b610360610e1e565b6102c0610e23565b6103d2610498366004612ca2565b610e29565b6103d26104ab366004612a50565b610e9a565b6103d26104be366004612bbf565b61128b565b61036061187e565b6102c0611883565b6103d2611889565b6103606118c5565b6102c06118cb565b61037d6118d1565b6103d26118d6565b6102c0611d1f565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613349565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9f565b60405162461bcd60e51b81526004016105319061343a565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612837565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b603881565b600881565b61200081565b60045481565b336110001461066c5760405162461bcd60e51b81526004016105319061312e565b60005460ff1661068e5760405162461bcd60e51b815260040161053190612e9f565b61200063f7a251d7600b6106a184611d25565b60006040518463ffffffff1660e01b81526004016106c19392919061356f565b600060405180830381600087803b1580156106db57600080fd5b505af11580156106ef573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107475760405162461bcd60e51b815260040161053190613349565b60005460ff166107695760405162461bcd60e51b815260040161053190612e9f565b61077161285a565b60006107b284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df792505050565b9150915080156107f95781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ec91613550565b60405180910390a16106ef565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79161082991613550565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff166108895760405162461bcd60e51b815260040161053190612e9f565b33611007146108aa5760405162461bcd60e51b815260040161053190613206565b61091584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e779050565b156109b0576020811461093a5760405162461bcd60e51b8152600401610531906130ba565b604080516020601f840181900481028201810190925282815260009161097891858580838501838280828437600092019190915250611ed192505050565b90506001811015801561098c575060055481105b6109a85760405162461bcd60e51b815260040161053190613304565b600455610dd4565b610a1684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e779050565b15610ab25760208114610a3b5760405162461bcd60e51b815260040161053190613254565b604080516020601f8401819004810282018101909252828152600091610a7991858580838501838280828437600092019190915250611ed192505050565b90506103e88111158015610a8e575060045481115b610aaa5760405162461bcd60e51b815260040161053190612f58565b600555610dd4565b610b2684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e779050565b15610bc05760208114610b4b5760405162461bcd60e51b815260040161053190613471565b604080516020601f8401819004810282018101909252828152600091610b8991858580838501838280828437600092019190915250611ed192505050565b9050600a8110158015610b9c5750606481105b610bb85760405162461bcd60e51b81526004016105319061306e565b600655610dd4565b610c3484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e779050565b15610cab5760208114610c595760405162461bcd60e51b815260040161053190612f8d565b604080516020601f8401819004810282018101909252828152610c959190848480838501838280828437600092019190915250611ed692505050565b6007805460ff1916911515919091179055610dd4565b610d1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e779050565b15610dbc5760208114610d445760405162461bcd60e51b815260040161053190612de9565b604080516020601f8401819004810282018101909252828152600091610d8291858580838501838280828437600092019190915250611ed192505050565b90506170808110158015610d985750620d2f0081105b610db45760405162461bcd60e51b815260040161053190612ed6565b600855610dd4565b60405162461bcd60e51b8152600401610531906133e5565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e099493929190612db7565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4a5760405162461bcd60e51b815260040161053190613349565b60005460ff16610e6c5760405162461bcd60e51b815260040161053190612e9f565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eb95760405162461bcd60e51b815260040161053190613398565b60005460ff16610edb5760405162461bcd60e51b815260040161053190612e9f565b6003544311610efc5760405162461bcd60e51b8152600401610531906134bc565b3a15610f1a5760405162461bcd60e51b8152600401610531906131a9565b60405163155853f360e21b8152611000906355614fcc90610f3f908490600401612d6c565b60206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190612b36565b610f9857611284565b610fa0612837565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffb576020810180516001019052611054565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106657fe5b066111b257600060208201526040516335409f7f60e01b8152611000906335409f7f90611097908590600401612d6c565b600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e585611d25565b60006040518463ffffffff1660e01b81526004016111059392919061356f565b600060405180830381600087803b15801561111f57600080fd5b505af1925050508015611130575060015b6111ad573d80801561115e576040519150601f19603f3d011682016040523d82523d6000602084013e611163565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a3929190613509565b60405180910390a2505b61121e565b6004548160200151816111c157fe5b0661121e576040516375abf10160e11b81526110009063eb57e202906111eb908590600401612d6c565b600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ad5760405162461bcd60e51b815260040161053190612e9f565b604051630a83aaa960e31b81526110069063541d5548906112d2903390600401612d6c565b60206040518083038186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190612b36565b61133e5760405162461bcd60e51b815260040161053190612e33565b60075460ff166113605760405162461bcd60e51b815260040161053190612e6a565b60065461136d5760146006555b60085461137c57620151806008555b6008548151604001514391011180156113a057504360085482602001516040015101115b6113bc5760405162461bcd60e51b81526004016105319061340c565b8060200151602001518160000151602001511480156113ea5750806020015160600151816000015160600151145b156114075760405162461bcd60e51b815260040161053190613101565b8051604081015190511080156114265750602081015160408101519051105b6114425760405162461bcd60e51b815260040161053190613037565b6020810151518151511080156114675750806000015160400151816020015160400151105b8061149257508051516020820151511080156114925750806020015160400151816000015160400151105b806114ac5750806020015160400151816000015160400151145b6114c85760405162461bcd60e51b815260040161053190612f21565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f19190600401612da4565b60206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190612b36565b61155d5760405162461bcd60e51b8152600401610531906131d7565b61156f81600001518260400151611efe565b8015611588575061158881602001518260400151611efe565b6115a45760405162461bcd60e51b815260040161053190612fd8565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161e9190810190612a73565b9150915060005b815181101561175b5761164f82828151811061163d57fe5b602002602001015185604001516120d6565b15611753576006546040516309a99b4f60e41b815260646110028031909302049190639a99b4f0906116879033908590600401612d80565b602060405180830381600087803b1580156116a157600080fd5b505af11580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d99190612c8a565b506110006001600160a01b03166335409f7f8584815181106116f757fe5b60200260200101516040518263ffffffff1660e01b815260040161171b9190612d6c565b600060405180830381600087803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b505050505061175b565b600101611625565b50600061176d8460400151600061213a565b90506120006001600160a01b031663f7a251d7600b61178f8760400151612156565b60006040518463ffffffff1660e01b81526004016117af9392919061356f565b600060405180830381600087803b1580156117c957600080fd5b505af19250505080156117da575060015b61184c573d808015611808576040519150601f19603f3d011682016040523d82523d6000602084013e61180d565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183e9190612da4565b60405180910390a250611878565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118ac5760405162461bcd60e51b815260040161053190613296565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f75760405162461bcd60e51b81526004016105319061312e565b60005460ff166119195760405162461bcd60e51b815260040161053190612e9f565b60015461192557611d1d565b600154600090600019015b808211611cf1576000805b82841015611a545761194b612837565b600260006001878154811061195c57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3e576004600554816119c957fe5b048160200151038160200181815250508060026000600188815481106119eb57fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a48565b6001925050611a54565b5083600101935061193b565b828411611beb57611a63612837565b6002600060018681548110611a7457fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5c57600460055481611ae157fe5b04816020015103816020018181525050806002600060018781548110611b0357fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611beb9050565b6002600060018681548110611b6d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611bb157fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bde5750611beb565b5060001990920191611a54565b818015611bf55750805b15611cd4576002600060018681548110611c0b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5257fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611cb157fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611ce0575050611cf1565b505060019091019060001901611930565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d40579050509050611d69836001600160a01b0316612191565b81600081518110611d7657fe5b6020026020010181905250611d8a436121b4565b81600181518110611d9757fe5b6020908102919091010152611dac60386121b4565b81600281518110611db957fe5b6020026020010181905250611dcd426121b4565b81600381518110611dda57fe5b6020026020010181905250611dee816121c7565b9150505b919050565b611dff61285a565b6000611e0961285a565b611e1161286c565b611e22611e1d86612251565b612276565b90506000805b611e31836122c0565b15611e6a5780611e5d57611e4c611e47846122e1565b61232f565b63ffffffff16845260019150611e62565b611e6a565b600101611e28565b5091935090915050915091565b600081604051602001611e8a9190612d50565b6040516020818303038152906040528051906020012083604051602001611eb19190612d50565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611ef0576001915081611ef6565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f1a575050604080516020808252818301909252919250606091908082018180368337019050509050611f5f85600001516121b4565b82600081518110611f6c57fe5b6020026020010181905250611f8760208660200151836123b1565b611f90816123c1565b82600181518110611f9d57fe5b6020026020010181905250611fb585604001516121b4565b82600281518110611fc257fe5b6020026020010181905250611fdd60208660600151836123b1565b611fe6816123c1565b82600381518110611ff357fe5b6020026020010181905250612019602061200c846121c7565b80519060200120836123b1565b6040805160b080825260e08201909252606091602082018180368337019050509050612049818360006020612417565b61205b81876080015160206060612417565b612069818660806030612417565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a657600080fd5b5060016120b482600061246a565b60ff16146120c9576000945050505050611ecb565b5060019695505050505050565b8151815160009160019181148083146120f25760009250612130565b600160208701838101602088015b60028483851001141561212b57805183511461211f5760009650600093505b60209283019201612100565b505050505b5090949350505050565b6000816020018351101561214d57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612171579050509050611d69836123c1565b60408051600560a21b8318601482015260348101909152606090611dee816123c1565b6060611ecb6121c283612486565b6123c1565b60608151600014156121e85750604080516000815260208101909152611df2565b6060826000815181106121f757fe5b602002602001015190506000600190505b83518110156122385761222e8285838151811061222157fe5b602002602001015161256c565b9150600101612208565b50611dee61224b825160c060ff166125e9565b8261256c565b61225961288c565b506040805180820190915281518152602082810190820152919050565b61227e61286c565b612287826126bb565b61229057600080fd5b600061229f83602001516126f5565b60208085015160408051808201909152868152920190820152915050919050565b60006122ca61288c565b505080518051602091820151919092015191011190565b6122e961288c565b6122f2826122c0565b6122fb57600080fd5b6020820151600061230b82612758565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234457508151602110155b61234d57600080fd5b600061235c83602001516126f5565b905080836000015110156123825760405162461bcd60e51b8152600401610531906132cd565b8251602080850151830180519284900392918310156123a857826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f35750607f60f81b826000815181106123e157fe5b01602001516001600160f81b03191611155b156123ff575080611df2565b611ecb6124118351608060ff166125e9565b8361256c565b60005b818110156106ef5783818151811061242e57fe5b602001015160f81c60f81b85848060010195508151811061244b57fe5b60200101906001600160f81b031916908160001a90535060010161241a565b6000816001018351101561247d57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124ca575060186124ee565b6fffffffffffffffffffffffffffffffff1984166124ea575060106124ee565b5060005b60208110156125245781818151811061250357fe5b01602001516001600160f81b0319161561251c57612524565b6001016124ee565b60008160200390506060816040519080825280601f01601f191660200182016040528015612559576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259d578051835260209283019201612585565b50855184518101855292509050808201602086015b818310156125ca5780518352602092830192016125b2565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126135760405162461bcd60e51b81526004016105319061300f565b6040805160018082528183019092526060916020820181803683370190505090506037841161266d5782840160f81b8160008151811061264f57fe5b60200101906001600160f81b031916908160001a9053509050611ecb565b606061267885612486565b90508381510160370160f81b8260008151811061269157fe5b60200101906001600160f81b031916908160001a9053506126b2828261256c565b95945050505050565b80516000906126cc57506000611df2565b6020820151805160001a9060c08210156126eb57600092505050611df2565b5060019392505050565b8051600090811a608081101561270f576000915050611df2565b60b881108061272a575060c0811080159061272a575060f881105b15612739576001915050611df2565b60c081101561274d5760b519019050611df2565b60f519019050611df2565b80516000908190811a60808110156127735760019150612830565b60b881101561278857607e1981019150612830565b60c08110156127d957600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d35760405162461bcd60e51b81526004016105319061317e565b50612830565b60f88110156127ee5760be1981019150612830565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef65760405162461bcd60e51b81526004016105319061317e565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287f61288c565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b6578081fd5b81516128c96128c4826135c2565b61359b565b818152915060208083019084810160005b8481101561293f578151870188603f8201126128f557600080fd5b838101516129056128c4826135e2565b81815260408b8184860101111561291b57600080fd5b61292a83888401838701613606565b508652505092820192908201906001016128da565b505050505092915050565b60008083601f84011261295b578182fd5b50813567ffffffffffffffff811115612972578182fd5b60208301915083602082850101111561298a57600080fd5b9250929050565b600082601f8301126129a1578081fd5b81356129af6128c4826135e2565b91508082528360208285010111156129c657600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129f0578081fd5b6129fa60a061359b565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3857600080fd5b612a4484828501612991565b60808301525092915050565b600060208284031215612a61578081fd5b8135612a6c81613632565b9392505050565b60008060408385031215612a85578081fd5b825167ffffffffffffffff80821115612a9c578283fd5b81850186601f820112612aad578384fd5b80519250612abd6128c4846135c2565b80848252602080830192508084018a828389028701011115612add578788fd5b8794505b86851015612b08578051612af481613632565b845260019490940193928101928101612ae1565b508801519096509350505080821115612b1f578283fd5b50612b2c858286016128a6565b9150509250929050565b600060208284031215612b47578081fd5b81518015158114612a6c578182fd5b60008060008060408587031215612b6b578182fd5b843567ffffffffffffffff80821115612b82578384fd5b612b8e8883890161294a565b90965094506020870135915080821115612ba6578384fd5b50612bb38782880161294a565b95989497509550505050565b600060208284031215612bd0578081fd5b813567ffffffffffffffff80821115612be7578283fd5b81840160608187031215612bf9578384fd5b612c03606061359b565b9250803582811115612c13578485fd5b612c1f878284016129df565b845250602081013582811115612c33578485fd5b612c3f878284016129df565b602085015250604081013582811115612c56578485fd5b612c6287828401612991565b6040850152509195945050505050565b600060208284031215612c83578081fd5b5035919050565b600060208284031215612c9b578081fd5b5051919050565b600080600060408486031215612cb6578283fd5b833560ff81168114612cc6578384fd5b9250602084013567ffffffffffffffff811115612ce1578283fd5b612ced8682870161294a565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3c816020860160208601613606565b601f01601f19169290920160200192915050565b60008251612d62818460208701613606565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6c6020830184612d24565b600060408252612dcb604083018688612cfa565b8281036020840152612dde818587612cfa565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135226040830184612d24565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff851682526060602083015261358b6060830185612d24565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135ba57600080fd5b604052919050565b600067ffffffffffffffff8211156135d8578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f8578081fd5b50601f01601f191660200190565b60005b83811015613621578181015183820152602001613609565b838111156118785750506000910152565b6001600160a01b038116811461364757600080fd5b5056fea164736f6c6343000604000a", + }, + }, + } + + keplerUpgrade[chapelNet] = &Upgrade{ + UpgradeName: "kepler", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/84551b51424be411b80580b299bd5eda06815545", + Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617693565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176bd565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a62565b34801561054157600080fd5b50610555610550366004616948565b610d1d565b6040516104e89190616bd9565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bce565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d2565b610f69565b3480156105da57600080fd5b506105776105e93660046168f5565b6112b2565b3480156105fa57600080fd5b506105776106093660046168f5565b611381565b34801561061a57600080fd5b506104c46106293660046167ab565b611432565b34801561063a57600080fd5b5061064361158b565b6040516104e8929190616ae4565b34801561065d57600080fd5b506104db611867565b34801561067257600080fd5b5061067b61186d565b6040516104e891906176ce565b34801561069457600080fd5b50610528611872565b3480156106a957600080fd5b506104db611878565b3480156106be57600080fd5b506106c761187e565b6040516104e89190617684565b3480156106e057600080fd5b5061067b611883565b3480156106f557600080fd5b50610643611888565b34801561070a57600080fd5b506104db611a06565b34801561071f57600080fd5b50610528611a0c565b34801561073457600080fd5b506105776107433660046167ab565b611a12565b34801561075457600080fd5b506104db6107633660046167ab565b611a47565b34801561077457600080fd5b5061067b611a98565b34801561078957600080fd5b50610506611a9d565b34801561079e57600080fd5b506104db611aa2565b3480156107b357600080fd5b506105556107c23660046168f5565b611aa8565b3480156107d357600080fd5b506104db611b4e565b3480156107e857600080fd5b506107fc6107f73660046168f5565b611b54565b6040516104e896959493929190616a8f565b34801561081a57600080fd5b50610528611bb8565b34801561082f57600080fd5b5061067b611bbe565b34801561084457600080fd5b5061067b611bc3565b34801561085957600080fd5b50610528611bc8565b34801561086e57600080fd5b506104db611bce565b34801561088357600080fd5b5061067b611bd4565b34801561089857600080fd5b506104db611bd9565b3480156108ad57600080fd5b50610506611bdf565b3480156108c257600080fd5b506104c46108d1366004616948565b611be4565b3480156108e257600080fd5b506104db611c45565b3480156108f757600080fd5b506104db611c4b565b34801561090c57600080fd5b50610577611c51565b34801561092157600080fd5b506104db611c5a565b34801561093657600080fd5b506104db6109453660046167ab565b611c60565b34801561095657600080fd5b506104c4611ca0565b34801561096b57600080fd5b5061067b611db4565b34801561098057600080fd5b50610528611db9565b34801561099557600080fd5b506104db611dbf565b3480156109aa57600080fd5b506104db611dc4565b3480156109bf57600080fd5b50610528611dc9565b3480156109d457600080fd5b50610555611dcf565b3480156109e957600080fd5b50610577611dee565b3480156109fe57600080fd5b506104db611df7565b348015610a1357600080fd5b50610506611a98565b348015610a2857600080fd5b506104c4610a37366004616899565b611e00565b348015610a4857600080fd5b506104db610a573660046167ab565b61269e565b348015610a6857600080fd5b506104db6126b0565b348015610a7d57600080fd5b50610a866126bd565b6040516104e89190616ad1565b348015610a9f57600080fd5b506104db6127a9565b348015610ab457600080fd5b506104db6127ae565b348015610ac957600080fd5b506104db611bbe565b348015610ade57600080fd5b506105286127b4565b348015610af357600080fd5b50610555610b023660046168f5565b6127ba565b348015610b1357600080fd5b506104db6127c7565b348015610b2857600080fd5b506104db612806565b348015610b3d57600080fd5b506104db612812565b348015610b5257600080fd5b50610528612818565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281e565b348015610b9157600080fd5b506104db6129cd565b348015610ba657600080fd5b50610577610bb536600461685a565b6129d3565b348015610bc657600080fd5b506104c4610bd53660046167ab565b612b59565b348015610be657600080fd5b50610506612c61565b6104c4610bfd3660046167ab565b612c66565b348015610c0e57600080fd5b506104db612fce565b348015610c2357600080fd5b50610528612fd4565b348015610c3857600080fd5b5061067b611dbf565b348015610c4d57600080fd5b50610528612fda565b348015610c6257600080fd5b50610c76610c713660046168f5565b612fe0565b6040516104e89392919061769c565b348015610c9157600080fd5b506105286130a2565b6000610ca533611c60565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733e565b60405180910390fd5b6000610cfa6127c7565b9050610d073383836130a8565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d98565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d7565b600b54610e2157610d72616497565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178f183398151915260169092029182019081556020808601516000805160206179318339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206179118339815191529091019201906164c6565b506060820151610e0f9060038301906013616540565b505050806001019050610d78565b5050505b610e2961656d565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329492505050565b9150915080610e8657610e7d6064613450565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134b1565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef0576000805160206178d1833981519152604051610ee0906171f7565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614105565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f4881613450565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617526565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef4565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727d565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d98565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427c16565b9150611027565b50506112a8565b6040516309a99b4f60e41b815261100290639a99b4f09061104e9030908690600401616a76565b602060405180830381600087803b15801561106857600080fd5b505af115801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a0919061690d565b9150816110ae5750506112a8565b6000805b848110156110dc578585828181106110c657fe5b90506020020135820191508060010190506110b2565b50806110ea575050506112a8565b6000806000805b898110156112a0578489898381811061110657fe5b9050602002013588028161111657fe5b0493508a8a8281811061112557fe5b905060200201602081019061113a91906167ab565b6001600160a01b0381166000908152600460205260409020549093509150811561125657600060018084038154811061116f57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111dc57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cf9190617693565b60405180910390a2611250565b6003546111ef908663ffffffff6142be16565b6003908155810154611207908663ffffffff6142be16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611247908890617693565b60405180910390a25b50611298565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128f9190617693565b60405180910390a25b6001016110f1565b505050505050505b5050436010555050565b60015460009082106112c65750600061137c565b60006001600160a01b0316600183815481106112de57fe5b60009182526020909120600490910201546001600160a01b0316148061130e5750600854158061130e5750600a54155b8061131d575060085460095410155b8061132e575061132c82611381565b155b8061135757506000600b838154811061134357fe5b906000526020600020906016020160000154115b8061136b575060016113676126bd565b5111155b156113785750600061137c565b5060015b919050565b60015460009082106113955750600061137c565b600b5482106113d257600182815481106113ab57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137c565b600182815481106113df57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142c5750600b828154811061141357fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114535760405162461bcd60e51b8152600401610ce79061763b565b600b5461151157611462616497565b60015460005b8181101561150d57600b805460018101825560009190915283516000805160206178f183398151915260169092029182019081556020808601516000805160206179318339815191528401805460ff19169115159190911790556040860151805187946114e9936000805160206179118339815191529091019201906164c6565b5060608201516114ff9060038301906013616540565b505050806001019050611468565b5050505b6001600160a01b038116600090815260046020526040902054806115355750611588565b6001810390506000600b828154811061154a57fe5b600091825260209091206001601690920201015460ff16905061156d83836142e3565b80156115765750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115de57600181815481106115ac57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d6576001909101905b600101611597565b5060608160405190808252806020026020018201604052801561160b578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164457816020015b606081526020019060019003908161162f5790505b50600b54600094509091508414156117bf5760005b848110156117b9576001818154811061166e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117b1576001818154811061169e57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f657fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b505050505082858151811061179f57fe5b60209081029190910101526001909301925b600101611659565b5061185b565b60005b8481101561185957600181815481106117d757fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611851576001818154811061180757fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183257fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c2565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b606181565b600881565b600e54600c5460609182918061189c575060155b60606118a66126bd565b905060606118b382614696565b9050828251116118ca579094509250611863915050565b838383510310156118dc578282510393505b83156119125760c843046118f883838388880360008a8a614804565b6119108383838888038989038a8b8b8b510301614804565b505b60608360405190808252806020026020018201604052801561193e578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197757816020015b60608152602001906001900390816119625790505b50905060005b858110156119f85784818151811061199157fe5b60200260200101518382815181106119a557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119d157fe5b60200260200101518282815181106119e557fe5b602090810291909101015260010161197d565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3a57600091505061137c565b60001901610f4e81611381565b6001600160a01b03811660009081526004602052604081205480611a6f57600091505061137c565b600180820381548110611a7e57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab557fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b465780601f10611b1b57610100808354040283529160200191611b46565b820191906000526020600020905b815481529060010190602001808311611b2957829003601f168201915b505050505081565b60105481565b60018181548110611b6157fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c055760405162461bcd60e51b8152600401610ce7906174d7565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c38939291906176dc565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c965760405162461bcd60e51b8152600401610ce79061745f565b6000190192915050565b600b54611d5e57611caf616497565b60015460005b81811015611d5a57600b805460018101825560009190915283516000805160206178f183398151915260169092029182019081556020808601516000805160206179318339815191528401805460ff1916911515919091179055604086015180518794611d36936000805160206179118339815191529091019201906164c6565b506060820151611d4c9060038301906013616540565b505050806001019050611cb5565b5050505b600854611d6b5760036008555b600a54611d78576002600a555b6000611d8333611c60565b9050611d8e816112b2565b611daa5760405162461bcd60e51b8152600401610ce7906171b4565b611588338261495b565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016177266101ab913981565b60005460ff1681565b6402540be40081565b60005460ff16611e225760405162461bcd60e51b8152600401610ce790616d98565b3361100714611e435760405162461bcd60e51b8152600401610ce7906172ab565b611ead84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f39050565b15611f4a5760208114611ed25760405162461bcd60e51b8152600401610ce790617419565b604080516020601f8401819004810282018101909252828152600091611f1091858580838501838280828437600092019190915250614a4c92505050565b905060648110158015611f265750620186a08111155b611f425760405162461bcd60e51b8152600401610ce7906170a4565b60025561265b565b611faa84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f39050565b156120395760208114611fcf5760405162461bcd60e51b8152600401610ce790616c1e565b604080516020601f840181900481028201810190925282815260009161200d91858580838501838280828437600092019190915250614a4c92505050565b90506127108111156120315760405162461bcd60e51b8152600401610ce790616f36565b60065561265b565b6120a384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f39050565b1561213d57602081146120c85760405162461bcd60e51b8152600401610ce790616c55565b604080516020601f840181900481028201810190925282815260009161210691858580838501838280828437600092019190915250614a4c92505050565b600c5490915080612115575060155b8082106121345760405162461bcd60e51b8152600401610ce790616fa9565b5060085561265b565b6121a684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f39050565b1561223f57602081146121cb5760405162461bcd60e51b8152600401610ce790616d1e565b604080516020601f840181900481028201810190925282815260009161220991858580838501838280828437600092019190915250614a4c92505050565b905060008111801561221b5750600a81105b6122375760405162461bcd60e51b8152600401610ce7906175b7565b600a5561265b565b6122b384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f39050565b1561234257602081146122d85760405162461bcd60e51b8152600401610ce790616cd2565b604080516020601f840181900481028201810190925282815260009161231691858580838501838280828437600092019190915250614a4c92505050565b9050600d5481111561233a5760405162461bcd60e51b8152600401610ce79061711a565b600e5561265b565b6123ab84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f39050565b1561242d57602081146123d05760405162461bcd60e51b8152600401610ce7906172f9565b604080516020601f840181900481028201810190925282815260009161240e91858580838501838280828437600092019190915250614a4c92505050565b600d819055600e5490915081101561242757600d54600e555b5061265b565b61249184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f39050565b1561253f57602081146124b65760405162461bcd60e51b8152600401610ce790616d63565b604080516020601f84018190048102820181019092528281526000916124f491858580838501838280828437600092019190915250614a4c92505050565b9050600081116125165760405162461bcd60e51b8152600401610ce790616e06565b60648111156125375760405162461bcd60e51b8152600401610ce790616e4e565b600c5561265b565b6125a784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f39050565b1561264357602081146125cc5760405162461bcd60e51b8152600401610ce790617573565b604080516020601f840181900481028201810190925282815260009161260a91858580838501838280828437600092019190915250614a4c92505050565b90506001811015801561261f57506127108111155b61263b5760405162461bcd60e51b8152600401610ce790617051565b600f5561265b565b60405162461bcd60e51b8152600401610ce790617614565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040516126909493929190616bec565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ec576126d881611381565b156126e4578160010191505b6001016126c7565b50606081604051908082528060200260200182016040528015612719578160200160208202803683370190505b5090506000915060005b838110156127a05761273481611381565b15612798576001818154811061274657fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061277157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612723565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab557fe5b60006127d16126bd565b519050600080600c54116127e65760156127ea565b600c545b9050808211156127f8578091505b8161280257600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff16156128415760405162461bcd60e51b8152600401610ce7906173ab565b61284961656d565b600061286f604051806101e001604052806101ab81526020016177266101ab9139613294565b91509150806128905760405162461bcd60e51b8152600401610ce790617496565b60005b8260200151518110156129b5576001836020015182815181106128b257fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298857fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612893565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612adc57612ac485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2c57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612aba5780601f10612a8f57610100808354040283529160200191612aba565b820191906000526020600020905b815481529060010190602001808311612a9d57829003601f168201915b5050505050614a51565b15612ad45760019250505061142c565b6001016129db565b5060125460005b81811015612b4d57612b3486868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2c57fe5b15612b45576001935050505061142c565b600101612ae3565b50600095945050505050565b3361100114612b7a5760405162461bcd60e51b8152600401610ce79061763b565b600b54612c3857612b89616497565b60015460005b81811015612c3457600b805460018101825560009190915283516000805160206178f183398151915260169092029182019081556020808601516000805160206179318339815191528401805460ff1916911515919091179055604086015180518794612c10936000805160206179118339815191529091019201906164c6565b506060820151612c269060038301906013616540565b505050806001019050612b8f565b5050505b6000612c4382614ab5565b9050612c4e816112b2565b15612c5d57612c5d828261495b565b5050565b606581565b334114612c855760405162461bcd60e51b8152600401610ce790617526565b60005460ff16612ca75760405162461bcd60e51b8152600401610ce790616d98565b60003411612cc75760405162461bcd60e51b8152600401610ce7906170eb565b3a15612ce55760405162461bcd60e51b8152600401610ce79061727d565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2557610271600f556103aa6006556014805460ff191660011790555b6000612d4e612710612d42600f5486614c5890919063ffffffff16565b9063ffffffff614c9216565b90508015612dbe576040516110029082156108fc029083906000818181858888f19350505050158015612d85573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db59190617693565b60405180910390a15b600083118015612dd057506000600654115b15612e76576000612df2612710612d4260065487614c5890919063ffffffff16565b90508015612e745760405161dead9082156108fc029083906000818181858888f19350505050158015612e29573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e599190617693565b60405180910390a1612e71848263ffffffff61427c16565b93505b505b612e86838263ffffffff61427c16565b92508115612f86576000600180840381548110612e9f57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0c57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612eff9190617693565b60405180910390a2612f80565b600354612f1f908563ffffffff6142be16565b6003908155810154612f37908563ffffffff6142be16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f77908790617693565b60405180910390a25b50612fc8565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fbf9190617693565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612fed57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130985780601f1061306d57610100808354040283529160200191613098565b820191906000526020600020905b81548152906001019060200180831161307b57829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130b9575081155b806130c45750600954155b156130d157506000610f4e565b6009600081546001900391905081905550600061311c600a54612d4285612d42600b89815481106130fe57fe5b6000918252602090912060169091020154439063ffffffff61427c16565b90506000600b858154811061312d57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319257600080fd5b505afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190616925565b9150915060009350808310613244576131e387876142e3565b506040516305bfb49960e41b815261100190635bfb499090613209908a90600401616a62565b600060405180830381600087803b15801561322357600080fd5b505af1158015613237573d6000803e3d6000fd5b5050505060019350613256565b8183106132565761325487614ab5565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329c61656d565b60006132a661656d565b6132ae616591565b6132bf6132ba86614cd4565b614cf9565b90506000805b6132ce83614d43565b1561344257806132f3576132e96132e484614d64565b614db2565b60ff16845261343a565b806001141561343557606061330f61330a85614d64565b614e32565b9050805160405190808252806020026020018201604052801561334c57816020015b6133396165b1565b8152602001906001900390816133315790505b508560200181905250805160405190808252806020026020018201604052801561338a57816020015b60608152602001906001900390816133755790505b50604086015260005b815181101561342a576133a46165b1565b606060006133c48585815181106133b757fe5b6020026020010151614f03565b925092509250806133e4578860009a509a5050505050505050505061344b565b82896020015185815181106133f557fe5b6020026020010181905250818960400151858151811061341157fe5b6020026020010181905250505050806001019050613393565b50600192505061343a565b613442565b6001016132c5565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346a5790505090506134908363ffffffff1661501d565b8160008151811061349d57fe5b6020026020010181905250610f4e81615030565b60006064835111156134e8576000805160206178d18339815191526040516134d890616eab565b60405180910390a150606661142c565b60005b83518110156135865760005b8181101561357d5784818151811061350b57fe5b6020026020010151600001516001600160a01b031685838151811061352c57fe5b6020026020010151600001516001600160a01b03161415613575576000805160206178d183398151915260405161356290617006565b60405180910390a160669250505061142c565b6001016134f7565b506001016134eb565b5060608061359485856150ba565b60015491935091506000908190815b818110156136195767016345785d8a0000600182815481106135c157fe5b906000526020600020906004020160030154106135e357836001019350613611565b6000600182815481106135f257fe5b9060005260206000209060040201600301541115613611578260010192505b6001016135a3565b50606083604051908082528060200260200182016040528015613646578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613675578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a4578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d3578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613704578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613733578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377b57600080fd5b505afa15801561378f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b3919061690d565b905067016345785d8a00008111156137fe576000805160206178d18339815191526040516137e09061736a565b60405180910390a160689d505050505050505050505050505061142c565b60005b89811015613a6f5767016345785d8a00006001828154811061381f57fe5b906000526020600020906004020160030154106139a4576001818154811061384357fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138a957fe5b906000526020600020906004020160030154816138c257fe5b06600183815481106138d057fe5b9060005260206000209060040201600301540390506138f8838261427c90919063ffffffff16565b898e8151811061390457fe5b6020026020010181815250506001828154811061391d57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397b57fe5b6020908102919091010152613996868263ffffffff6142be16565b95508c6001019c5050613a67565b6000600182815481106139b357fe5b9060005260206000209060040201600301541115613a6757600181815481106139d857fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3657fe5b906000526020600020906004020160030154838c81518110613a5457fe5b6020026020010181815250508a6001019a505b600101613801565b5060008415613ce5576002546040516303702b2960e51b815261100491636e056520918891613aa9918e918e918d91420190600401616b54565b6020604051808303818588803b158015613ac257600080fd5b505af193505050508015613af3575060408051601f3d908101601f19168201909252613af09181019061683a565b60015b613c6a576040516000815260443d1015613b0f57506000613baa565b60046000803e60005160e01c6308c379a08114613b30576000915050613baa565b60043d036004833e81513d60248201116001600160401b0382111715613b5b57600092505050613baa565b80830180516001600160401b03811115613b7c576000945050505050613baa565b8060208301013d8601811115613b9a57600095505050505050613baa565b601f01601f191660405250925050505b80613bb55750613bf7565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613be99190616bd9565b60405180910390a250613c65565b3d808015613c21576040519150601f19603f3d011682016040523d82523d6000602084013e613c26565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c5b9190616bd9565b60405180910390a2505b613ce5565b8015613cac577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613c9f9190617693565b60405180910390a1613ce3565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cda90616c9b565b60405180910390a25b505b8015613e9b5760005b8751811015613e99576000888281518110613d0557fe5b60200260200101519050600060018281548110613d1e57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d4f57fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e0b5760018281548110613d9057fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613ddf57fe5b906000526020600020906004020160030154604051613dfe9190617693565b60405180910390a2613e8f565b60018281548110613e1857fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6757fe5b906000526020600020906004020160030154604051613e869190617693565b60405180910390a25b5050600101613cee565b505b835115613fe55760005b8451811015613fe3576000858281518110613ebc57fe5b60200260200101516001600160a01b03166108fc868481518110613edc57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7257858281518110613f1257fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f5057fe5b6020026020010151604051613f659190617693565b60405180910390a2613fda565b858281518110613f7e57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fbc57fe5b6020026020010151604051613fd19190617693565b60405180910390a25b50600101613ea5565b505b5050505050505050505050506000471115614061577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d476040516140299190617693565b60405180910390a1604051611002904780156108fc02916000818181858888f1935050505015801561405f573d6000803e3d6000fd5b505b6000600381905560055581511561407c5761407c82826152f3565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140b957600080fd5b505af11580156140cd573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614156575060018082038154811061413657fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419c5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137c565b6001546005546000198201118015906141f25784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137c565b60058054600190810190915580548190600019860190811061421057fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aad565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dcf565b600080600183815481106142f357fe5b9060005260206000209060040201600301549050600060018080549050039050600161431d6126bd565b51116143525760006001858154811061433257fe5b90600052602060002090600402016003018190555060009250505061142c565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161438b9190617693565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457857600181600101815481106143cc57fe5b9060005260206000209060040201600182815481106143e757fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a857fe5b9060005260206000209060160201600b82815481106144c357fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff199092169190911790556002808401805461451a9383860193908216156101000260001901909116046165e6565b5061452d6003828101908401601361665b565b5090505080600101600460006001848154811061454657fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143ae565b50600180548061458457fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d757fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906146096002830182616685565b6146176003830160006166c9565b50509055600081838161462657fe5b049050801561468a5760015460005b8181101561468757826001828154811061464b57fe5b906000526020600020906004020160030154016001828154811061466b57fe5b6000918252602090912060036004909202010155600101614635565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d557816020015b60608152602001906001900390816146c05790505b50600b5490915083146146ec57925061137c915050565b60005b828110156147fb57600b60016004600089858151811061470b57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061473f57fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d75780601f106147ac576101008083540402835291602001916147d7565b820191906000526020600020905b8154815290600101906020018083116147ba57829003601f168201915b50505050508282815181106147e857fe5b60209081029190910101526001016146ef565b50949350505050565b60005b828110156149515760008287838801604051602001614827929190616a54565b6040516020818303038152906040528051906020012060001c8161484757fe5b06905080850182870114614948576000898388018151811061486557fe5b602002602001015190506060898489018151811061487f57fe5b602002602001015190508a8388018151811061489757fe5b60200260200101518b858a01815181106148ad57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148dc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490a57fe5b60200260200101518a858a018151811061492057fe5b6020026020010181905250808a8489018151811061493a57fe5b602002602001018190525050505b50600101614807565b5050505050505050565b600980546001908101909155600b80548390811061497557fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149ab57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a069190616a38565b6040516020818303038152906040528051906020012083604051602001614a2d9190616a38565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6d5760009250614aab565b600160208701838101602088015b600284838510011415614aa6578051835114614a9a5760009650600093505b60209283019201614a7b565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614ade5750600019905061137c565b600181039050600060018281548110614af357fe5b9060005260206000209060040201600301549050600060018381548110614b1657fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b6f908590617693565b60405180910390a280614b875782935050505061137c565b6000818381614b9257fe5b0490508015614c4e5760005b84811015614bf0578160018281548110614bb457fe5b9060005260206000209060040201600301540160018281548110614bd457fe5b6000918252602090912060036004909202010155600101614b9e565b50600180549085015b81811015614c4b578260018281548110614c0f57fe5b9060005260206000209060040201600301540160018281548110614c2f57fe5b6000918252602090912060036004909202010155600101614bf9565b50505b5091949350505050565b600082614c675750600061142c565b82820282848281614c7457fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723c565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ad9565b614cdc6166d8565b506040805180820190915281518152602082810190820152919050565b614d01616591565b614d0a82615b10565b614d1357600080fd5b6000614d228360200151615b4a565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4d6166d8565b505080518051602091820151919092015191011190565b614d6c6166d8565b614d7582614d43565b614d7e57600080fd5b60208201516000614d8e82615bad565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc757508151602110155b614dd057600080fd5b6000614ddf8360200151615b4a565b90508083600001511015614e055760405162461bcd60e51b8152600401610ce7906173e2565b8251602080850151830180519284900392918310156147fb57506020919091036101000a90049392505050565b6060614e3d82615b10565b614e4657600080fd5b6000614e5183615c8e565b9050606081604051908082528060200260200182016040528015614e8f57816020015b614e7c6166d8565b815260200190600190039081614e745790505b5090506000614ea18560200151615b4a565b60208601510190506000805b84811015614ef857614ebe83615bad565b9150604051806040016040528083815260200184815250848281518110614ee157fe5b602090810291909101015291810191600101614ead565b509195945050505050565b614f0b6165b1565b60606000614f176165b1565b6060614f21616591565b614f2a87614cf9565b90506000805b614f3983614d43565b1561500e5780614f6457614f54614f4f84614d64565b615cea565b6001600160a01b03168552615006565b8060011415614f8c57614f79614f4f84614d64565b6001600160a01b03166020860152615006565b8060021415614fb457614fa1614f4f84614d64565b6001600160a01b03166040860152615006565b8060031415614fe057614fc96132e484614d64565b6001600160401b0316606086015260019150615006565b806004141561500157614ffa614ff584614d64565b615d04565b9350615006565b61500e565b600101614f30565b50929791965091945092505050565b606061142c61502b83615d74565b615e5a565b6060815160001415615051575060408051600081526020810190915261137c565b60608260008151811061506057fe5b602002602001015190506000600190505b83518110156150a1576150978285838151811061508a57fe5b6020026020010151615eac565b9150600101615071565b50610f4e6150b4825160c060ff16615f29565b82615eac565b6060806000808080806150cb6127c7565b6001549091505b80156151d957600181039250600b83815481106150eb57fe5b600091825260209091206001601690920201015460ff1661510b576151d0565b6001838154811061511857fe5b60009182526020909120600490910201546001600160a01b0316945061513f8584846130a8565b9350831580615152575060018a51038610155b1561515c576151d0565b60005b8a518110156151ce57856001600160a01b03168b828151811061517e57fe5b6020026020010151600001516001600160a01b031614156151c65760018b82815181106151a757fe5b60209081029190910101519015156080909101526001909601956151ce565b60010161515f565b505b600019016150d2565b508489510360405190808252806020026020018201604052801561521757816020015b6152046165b1565b8152602001906001900390816151fc5790505b5096508489510360405190808252806020026020018201604052801561525157816020015b606081526020019060019003908161523c5790505b5095506000915060005b89518110156152e55789818151811061527057fe5b6020026020010151608001516152dd5789818151811061528c57fe5b60200260200101518884815181106152a057fe5b60200260200101819052508881815181106152b757fe5b60200260200101518784815181106152cb57fe5b60200260200101819052508260010192505b60010161525b565b5050505050505b9250929050565b600154825160005b8281101561541057600161530d6165b1565b6001838154811061531a57fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e4578781815181106153aa57fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153dc57600092506153e4565b600101615396565b5081156154065780516001600160a01b03166000908152600460205260408120555b50506001016152fb565b50808211156154cf57805b828110156154cd57600180548061542e57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061548157fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b36002830182616685565b6154c16003830160006166c9565b5050905560010161541b565b505b60008183106154de57816154e0565b825b905060005b8181101561584f576155928682815181106154fc57fe5b60200260200101516001838154811061551157fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ffb565b6157465780600101600460008884815181106155aa57fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e657fe5b6020026020010151600182815481106155fb57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b657fe5b6020026020010151600b82815481106156cb57fe5b906000526020600020906016020160020190805190602001906156ef9291906164c6565b506000600b82815481106156ff57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061573057fe5b6000918252602090912060169091020155615847565b6157d785828151811061575557fe5b6020026020010151600b838154811061576a57fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612aba5780601f10612a8f57610100808354040283529160200191612aba565b615822578481815181106157e757fe5b6020026020010151600b82815481106157fc57fe5b906000526020600020906016020160020190805190602001906158209291906164c6565b505b60006001828154811061583157fe5b9060005260206000209060040201600301819055505b6001016154e5565b5082821115615a2757615860616497565b835b83811015615a245785818151811061587657fe5b60200260200101518260400181905250600187828151811061589457fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178f18339815191528101918255858301516000805160206179318339815191528201805491151560ff19909216919091179055928501518051869492936159ca93600080516020617911833981519152019201906164c6565b5060608201516159e09060038301906013616540565b50505080600101600460008984815181106159f757fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615862565b50505b615a2f61607c565b615a3761625e565b6000600981905560015493505b83811015615aa5576000600b8281548110615a5b57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8c57fe5b6000918252602090912060169091020155600101615a44565b505050505050565b60008184841115615ad15760405162461bcd60e51b8152600401610ce79190616bd9565b505050900390565b60008183615afa5760405162461bcd60e51b8152600401610ce79190616bd9565b506000838581615b0657fe5b0495945050505050565b8051600090615b215750600061137c565b6020820151805160001a9060c0821015615b405760009250505061137c565b5060019392505050565b8051600090811a6080811015615b6457600091505061137c565b60b8811080615b7f575060c08110801590615b7f575060f881105b15615b8e57600191505061137c565b60c0811015615ba25760b51901905061137c565b60f51901905061137c565b80516000908190811a6080811015615bc85760019150615c87565b60b8811015615bdd57607e1981019150615c87565b60c0811015615c2e57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c285760405162461bcd60e51b8152600401610ce790617189565b50615c87565b60f8811015615c435760be1981019150615c87565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c855760405162461bcd60e51b8152600401610ce790617189565b505b5092915050565b8051600090615c9f5750600061137c565b60008090506000615cb38460200151615b4a565b602085015185519181019250015b80821015615ce157615cd282615bad565b82019150826001019250615cc1565b50909392505050565b8051600090601514615cfb57600080fd5b61142c82614db2565b8051606090615d1257600080fd5b6000615d218360200151615b4a565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d58576020820181803683370190505b50905060008160200190506147fb84876020015101828561644c565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db857506018615ddc565b6fffffffffffffffffffffffffffffffff198416615dd857506010615ddc565b5060005b6020811015615e1257818181518110615df157fe5b01602001516001600160f81b03191615615e0a57615e12565b600101615ddc565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e47576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8c5750607f60f81b82600081518110615e7a57fe5b01602001516001600160f81b03191611155b15615e9857508061137c565b61142c615eaa8351608060ff16615f29565b835b6060806040519050835180825260208201818101602087015b81831015615edd578051835260209283019201615ec5565b50855184518101855292509050808201602086015b81831015615f0a578051835260209283019201615ef2565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f535760405162461bcd60e51b8152600401610ce790616f81565b60408051600180825281830190925260609160208201818036833701905050905060378411615fad5782840160f81b81600081518110615f8f57fe5b60200101906001600160f81b031916908160001a905350905061142c565b6060615fb885615d74565b90508381510160370160f81b82600081518110615fd157fe5b60200101906001600160f81b031916908160001a905350615ff28282615eac565b95945050505050565b805182516000916001600160a01b039182169116148015616035575081602001516001600160a01b031683602001516001600160a01b0316145b801561605a575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c757805b828110156160c557601280548061609f57fe5b6001900381819060005260206000200160006160bb9190616685565b905560010161608c565b505b60008183106160d657816160d8565b825b905060005b818110156161f057616195601282815481106160f557fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161835780601f1061615857610100808354040283529160200191616183565b820191906000526020600020905b81548152906001019060200180831161616657829003601f168201915b505050505060138381548110612a2c57fe5b6161e857601381815481106161a657fe5b90600052602060002001601282815481106161bd57fe5b9060005260206000200190805460018160011615610100020316600290046161e69291906165e6565b505b6001016160dd565b5082821115610d0757825b82811015612fc85760126013828154811061621257fe5b60009182526020808320845460018181018755958552919093209290910180546162559493909201929091600261010092821615929092026000190116046165e6565b506001016161fb565b601354600b54808211156162a957805b828110156162a757601380548061628157fe5b60019003818190600052602060002001600061629d9190616685565b905560010161626e565b505b60008183106162b857816162ba565b825b905060005b818110156163d957616377601382815481106162d757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163655780601f1061633a57610100808354040283529160200191616365565b820191906000526020600020905b81548152906001019060200180831161634857829003601f168201915b5050505050600b838154811061576a57fe5b6163d157600b818154811061638857fe5b9060005260206000209060160201600201601382815481106163a657fe5b9060005260206000200190805460018160011615610100020316600290046163cf9291906165e6565b505b6001016162bf565b5082821115610d0757825b82811015612fc8576013600b82815481106163fb57fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616443959390940193909260001990821615610100020116046165e6565b506001016163e4565b8061645657610d07565b5b60208110616476578251825260209283019290910190601f1901616457565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164c16166f2565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650757805160ff1916838001178555616534565b82800160010185558215616534579182015b82811115616534578251825591602001919060010190616519565b50612802929150616711565b82601381019282156165345791602002820182811115616534578251825591602001919060010190616519565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a46166d8565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061661f5780548555616534565b8280016001018555821561653457600052602060002091601f016020900482015b82811115616534578254825591600101919060010190616640565b82601381019282156165345791820182811115616534578254825591600101919060010190616640565b50805460018160011615610100020316600290046000825580601f106166ab5750611588565b601f0160209004906000526020600020908101906115889190616711565b50611588906013810190616711565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a691905b808211156128025760008155600101616717565b60008083601f84011261673c578182fd5b5081356001600160401b03811115616752578182fd5b60208301915083602080830285010111156152ec57600080fd5b60008083601f84011261677d578182fd5b5081356001600160401b03811115616793578182fd5b6020830191508360208285010111156152ec57600080fd5b6000602082840312156167bc578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e7578283fd5b84356001600160401b03808211156167fd578485fd5b6168098883890161672b565b90965094506020870135915080821115616821578384fd5b5061682e8782880161672b565b95989497509550505050565b60006020828403121561684b578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686c578182fd5b82356001600160401b03811115616881578283fd5b61688d8582860161676c565b90969095509350505050565b600080600080604085870312156168ae578384fd5b84356001600160401b03808211156168c4578586fd5b6168d08883890161676c565b909650945060208701359150808211156168e8578384fd5b5061682e8782880161676c565b600060208284031215616906578081fd5b5035919050565b60006020828403121561691e578081fd5b5051919050565b60008060408385031215616937578182fd5b505080516020909101519092909150565b60008060006040848603121561695c578283fd5b833560ff8116811461696c578384fd5b925060208401356001600160401b03811115616986578283fd5b6169928682870161676c565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d75781516001600160a01b0316875295820195908201906001016169b2565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a248160208601602086016176f9565b601f01601f19169290920160200192915050565b60008251616a4a8184602087016176f9565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e602083018461699f565b600060408252616af7604083018561699f565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4557601f19878403018552616b33838351616a0c565b94860194925090850190600101616b17565b50909998505050505050505050565b600060808252616b67608083018761699f565b828103602084810191909152865180835287820192820190845b81811015616b9d57845183529383019391830191600101616b81565b50508481036040860152616bb1818861699f565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0c565b600060408252616c006040830186886169e2565b8281036020840152616c138185876169e2565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff26060830184616a0c565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff26040830184866169e2565b60005b838110156177145781810151838201526020016176fc565b83811115612fc8575050600091015256fef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/84551b51424be411b80580b299bd5eda06815545", + Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af9190613550565b60405180910390f35b6102c0610508565b6040516102af9190612d6c565b6102e06102db366004612ca2565b61050e565b6040516102af9190612da4565b6102f5610574565b6040516102af9190612d99565b610315610310366004612a50565b61057d565b6040516102af93929190613538565b6102c0610332366004612c72565b6105a0565b61034a610345366004612a50565b6105c7565b6040516102af92919061352a565b61036061061e565b6040516102af9190613500565b610360610624565b61037d61062a565b6040516102af9190613561565b6102c061062f565b61039a610635565b6040516102af91906134f1565b61037d61063a565b6102c061063f565b610360610645565b6103d26103cd366004612a50565b61064b565b005b6103606106f6565b6102c06106fc565b61037d610702565b61037d610707565b6102c061070c565b610360610712565b61037d610717565b61034a61071c565b6103d2610422366004612ca2565b610726565b61037d610838565b61036061083d565b6102c0610848565b6102c061084e565b6102f5610854565b6102a261085d565b610360610862565b6103d261046d366004612b56565b610867565b610360610e17565b610360610e1e565b6102c0610e23565b6103d2610498366004612ca2565b610e29565b6103d26104ab366004612a50565b610e9a565b6103d26104be366004612bbf565b61128b565b61036061187e565b6102c0611883565b6103d2611889565b6103606118c5565b6102c06118cb565b61037d6118d1565b6103d26118d6565b6102c0611d1f565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b815260040161053190613349565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612e9f565b60405162461bcd60e51b81526004016105319061343a565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612837565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b606181565b600881565b61200081565b60045481565b336110001461066c5760405162461bcd60e51b81526004016105319061312e565b60005460ff1661068e5760405162461bcd60e51b815260040161053190612e9f565b61200063f7a251d7600b6106a184611d25565b60006040518463ffffffff1660e01b81526004016106c19392919061356f565b600060405180830381600087803b1580156106db57600080fd5b505af11580156106ef573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107475760405162461bcd60e51b815260040161053190613349565b60005460ff166107695760405162461bcd60e51b815260040161053190612e9f565b61077161285a565b60006107b284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df792505050565b9150915080156107f95781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ec91613550565b60405180910390a16106ef565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79161082991613550565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff166108895760405162461bcd60e51b815260040161053190612e9f565b33611007146108aa5760405162461bcd60e51b815260040161053190613206565b61091584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e779050565b156109b0576020811461093a5760405162461bcd60e51b8152600401610531906130ba565b604080516020601f840181900481028201810190925282815260009161097891858580838501838280828437600092019190915250611ed192505050565b90506001811015801561098c575060055481105b6109a85760405162461bcd60e51b815260040161053190613304565b600455610dd4565b610a1684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e779050565b15610ab25760208114610a3b5760405162461bcd60e51b815260040161053190613254565b604080516020601f8401819004810282018101909252828152600091610a7991858580838501838280828437600092019190915250611ed192505050565b90506103e88111158015610a8e575060045481115b610aaa5760405162461bcd60e51b815260040161053190612f58565b600555610dd4565b610b2684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e779050565b15610bc05760208114610b4b5760405162461bcd60e51b815260040161053190613471565b604080516020601f8401819004810282018101909252828152600091610b8991858580838501838280828437600092019190915250611ed192505050565b9050600a8110158015610b9c5750606481105b610bb85760405162461bcd60e51b81526004016105319061306e565b600655610dd4565b610c3484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e779050565b15610cab5760208114610c595760405162461bcd60e51b815260040161053190612f8d565b604080516020601f8401819004810282018101909252828152610c959190848480838501838280828437600092019190915250611ed692505050565b6007805460ff1916911515919091179055610dd4565b610d1f84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e779050565b15610dbc5760208114610d445760405162461bcd60e51b815260040161053190612de9565b604080516020601f8401819004810282018101909252828152600091610d8291858580838501838280828437600092019190915250611ed192505050565b90506170808110158015610d985750620d2f0081105b610db45760405162461bcd60e51b815260040161053190612ed6565b600855610dd4565b60405162461bcd60e51b8152600401610531906133e5565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e099493929190612db7565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4a5760405162461bcd60e51b815260040161053190613349565b60005460ff16610e6c5760405162461bcd60e51b815260040161053190612e9f565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eb95760405162461bcd60e51b815260040161053190613398565b60005460ff16610edb5760405162461bcd60e51b815260040161053190612e9f565b6003544311610efc5760405162461bcd60e51b8152600401610531906134bc565b3a15610f1a5760405162461bcd60e51b8152600401610531906131a9565b60405163155853f360e21b8152611000906355614fcc90610f3f908490600401612d6c565b60206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190612b36565b610f9857611284565b610fa0612837565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffb576020810180516001019052611054565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106657fe5b066111b257600060208201526040516335409f7f60e01b8152611000906335409f7f90611097908590600401612d6c565b600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e585611d25565b60006040518463ffffffff1660e01b81526004016111059392919061356f565b600060405180830381600087803b15801561111f57600080fd5b505af1925050508015611130575060015b6111ad573d80801561115e576040519150601f19603f3d011682016040523d82523d6000602084013e611163565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a3929190613509565b60405180910390a2505b61121e565b6004548160200151816111c157fe5b0661121e576040516375abf10160e11b81526110009063eb57e202906111eb908590600401612d6c565b600060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ad5760405162461bcd60e51b815260040161053190612e9f565b604051630a83aaa960e31b81526110069063541d5548906112d2903390600401612d6c565b60206040518083038186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190612b36565b61133e5760405162461bcd60e51b815260040161053190612e33565b60075460ff166113605760405162461bcd60e51b815260040161053190612e6a565b60065461136d5760146006555b60085461137c57620151806008555b6008548151604001514391011180156113a057504360085482602001516040015101115b6113bc5760405162461bcd60e51b81526004016105319061340c565b8060200151602001518160000151602001511480156113ea5750806020015160600151816000015160600151145b156114075760405162461bcd60e51b815260040161053190613101565b8051604081015190511080156114265750602081015160408101519051105b6114425760405162461bcd60e51b815260040161053190613037565b6020810151518151511080156114675750806000015160400151816020015160400151105b8061149257508051516020820151511080156114925750806020015160400151816000015160400151105b806114ac5750806020015160400151816000015160400151145b6114c85760405162461bcd60e51b815260040161053190612f21565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f19190600401612da4565b60206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190612b36565b61155d5760405162461bcd60e51b8152600401610531906131d7565b61156f81600001518260400151611efe565b8015611588575061158881602001518260400151611efe565b6115a45760405162461bcd60e51b815260040161053190612fd8565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161e9190810190612a73565b9150915060005b815181101561175b5761164f82828151811061163d57fe5b602002602001015185604001516120d6565b15611753576006546040516309a99b4f60e41b815260646110028031909302049190639a99b4f0906116879033908590600401612d80565b602060405180830381600087803b1580156116a157600080fd5b505af11580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d99190612c8a565b506110006001600160a01b03166335409f7f8584815181106116f757fe5b60200260200101516040518263ffffffff1660e01b815260040161171b9190612d6c565b600060405180830381600087803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b505050505061175b565b600101611625565b50600061176d8460400151600061213a565b90506120006001600160a01b031663f7a251d7600b61178f8760400151612156565b60006040518463ffffffff1660e01b81526004016117af9392919061356f565b600060405180830381600087803b1580156117c957600080fd5b505af19250505080156117da575060015b61184c573d808015611808576040519150601f19603f3d011682016040523d82523d6000602084013e61180d565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183e9190612da4565b60405180910390a250611878565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118ac5760405162461bcd60e51b815260040161053190613296565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f75760405162461bcd60e51b81526004016105319061312e565b60005460ff166119195760405162461bcd60e51b815260040161053190612e9f565b60015461192557611d1d565b600154600090600019015b808211611cf1576000805b82841015611a545761194b612837565b600260006001878154811061195c57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3e576004600554816119c957fe5b048160200151038160200181815250508060026000600188815481106119eb57fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a48565b6001925050611a54565b5083600101935061193b565b828411611beb57611a63612837565b6002600060018681548110611a7457fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5c57600460055481611ae157fe5b04816020015103816020018181525050806002600060018781548110611b0357fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611beb9050565b6002600060018681548110611b6d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611bb157fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bde5750611beb565b5060001990920191611a54565b818015611bf55750805b15611cd4576002600060018681548110611c0b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5257fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7857fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611cb157fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611ce0575050611cf1565b505060019091019060001901611930565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d40579050509050611d69836001600160a01b0316612191565b81600081518110611d7657fe5b6020026020010181905250611d8a436121b4565b81600181518110611d9757fe5b6020908102919091010152611dac60616121b4565b81600281518110611db957fe5b6020026020010181905250611dcd426121b4565b81600381518110611dda57fe5b6020026020010181905250611dee816121c7565b9150505b919050565b611dff61285a565b6000611e0961285a565b611e1161286c565b611e22611e1d86612251565b612276565b90506000805b611e31836122c0565b15611e6a5780611e5d57611e4c611e47846122e1565b61232f565b63ffffffff16845260019150611e62565b611e6a565b600101611e28565b5091935090915050915091565b600081604051602001611e8a9190612d50565b6040516020818303038152906040528051906020012083604051602001611eb19190612d50565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611ef0576001915081611ef6565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f1a575050604080516020808252818301909252919250606091908082018180368337019050509050611f5f85600001516121b4565b82600081518110611f6c57fe5b6020026020010181905250611f8760208660200151836123b1565b611f90816123c1565b82600181518110611f9d57fe5b6020026020010181905250611fb585604001516121b4565b82600281518110611fc257fe5b6020026020010181905250611fdd60208660600151836123b1565b611fe6816123c1565b82600381518110611ff357fe5b6020026020010181905250612019602061200c846121c7565b80519060200120836123b1565b6040805160b080825260e08201909252606091602082018180368337019050509050612049818360006020612417565b61205b81876080015160206060612417565b612069818660806030612417565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a657600080fd5b5060016120b482600061246a565b60ff16146120c9576000945050505050611ecb565b5060019695505050505050565b8151815160009160019181148083146120f25760009250612130565b600160208701838101602088015b60028483851001141561212b57805183511461211f5760009650600093505b60209283019201612100565b505050505b5090949350505050565b6000816020018351101561214d57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612171579050509050611d69836123c1565b60408051600560a21b8318601482015260348101909152606090611dee816123c1565b6060611ecb6121c283612486565b6123c1565b60608151600014156121e85750604080516000815260208101909152611df2565b6060826000815181106121f757fe5b602002602001015190506000600190505b83518110156122385761222e8285838151811061222157fe5b602002602001015161256c565b9150600101612208565b50611dee61224b825160c060ff166125e9565b8261256c565b61225961288c565b506040805180820190915281518152602082810190820152919050565b61227e61286c565b612287826126bb565b61229057600080fd5b600061229f83602001516126f5565b60208085015160408051808201909152868152920190820152915050919050565b60006122ca61288c565b505080518051602091820151919092015191011190565b6122e961288c565b6122f2826122c0565b6122fb57600080fd5b6020820151600061230b82612758565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234457508151602110155b61234d57600080fd5b600061235c83602001516126f5565b905080836000015110156123825760405162461bcd60e51b8152600401610531906132cd565b8251602080850151830180519284900392918310156123a857826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f35750607f60f81b826000815181106123e157fe5b01602001516001600160f81b03191611155b156123ff575080611df2565b611ecb6124118351608060ff166125e9565b8361256c565b60005b818110156106ef5783818151811061242e57fe5b602001015160f81c60f81b85848060010195508151811061244b57fe5b60200101906001600160f81b031916908160001a90535060010161241a565b6000816001018351101561247d57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124ca575060186124ee565b6fffffffffffffffffffffffffffffffff1984166124ea575060106124ee565b5060005b60208110156125245781818151811061250357fe5b01602001516001600160f81b0319161561251c57612524565b6001016124ee565b60008160200390506060816040519080825280601f01601f191660200182016040528015612559576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259d578051835260209283019201612585565b50855184518101855292509050808201602086015b818310156125ca5780518352602092830192016125b2565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126135760405162461bcd60e51b81526004016105319061300f565b6040805160018082528183019092526060916020820181803683370190505090506037841161266d5782840160f81b8160008151811061264f57fe5b60200101906001600160f81b031916908160001a9053509050611ecb565b606061267885612486565b90508381510160370160f81b8260008151811061269157fe5b60200101906001600160f81b031916908160001a9053506126b2828261256c565b95945050505050565b80516000906126cc57506000611df2565b6020820151805160001a9060c08210156126eb57600092505050611df2565b5060019392505050565b8051600090811a608081101561270f576000915050611df2565b60b881108061272a575060c0811080159061272a575060f881105b15612739576001915050611df2565b60c081101561274d5760b519019050611df2565b60f519019050611df2565b80516000908190811a60808110156127735760019150612830565b60b881101561278857607e1981019150612830565b60c08110156127d957600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d35760405162461bcd60e51b81526004016105319061317e565b50612830565b60f88110156127ee5760be1981019150612830565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef65760405162461bcd60e51b81526004016105319061317e565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061287f61288c565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b6578081fd5b81516128c96128c4826135c2565b61359b565b818152915060208083019084810160005b8481101561293f578151870188603f8201126128f557600080fd5b838101516129056128c4826135e2565b81815260408b8184860101111561291b57600080fd5b61292a83888401838701613606565b508652505092820192908201906001016128da565b505050505092915050565b60008083601f84011261295b578182fd5b50813567ffffffffffffffff811115612972578182fd5b60208301915083602082850101111561298a57600080fd5b9250929050565b600082601f8301126129a1578081fd5b81356129af6128c4826135e2565b91508082528360208285010111156129c657600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129f0578081fd5b6129fa60a061359b565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3857600080fd5b612a4484828501612991565b60808301525092915050565b600060208284031215612a61578081fd5b8135612a6c81613632565b9392505050565b60008060408385031215612a85578081fd5b825167ffffffffffffffff80821115612a9c578283fd5b81850186601f820112612aad578384fd5b80519250612abd6128c4846135c2565b80848252602080830192508084018a828389028701011115612add578788fd5b8794505b86851015612b08578051612af481613632565b845260019490940193928101928101612ae1565b508801519096509350505080821115612b1f578283fd5b50612b2c858286016128a6565b9150509250929050565b600060208284031215612b47578081fd5b81518015158114612a6c578182fd5b60008060008060408587031215612b6b578182fd5b843567ffffffffffffffff80821115612b82578384fd5b612b8e8883890161294a565b90965094506020870135915080821115612ba6578384fd5b50612bb38782880161294a565b95989497509550505050565b600060208284031215612bd0578081fd5b813567ffffffffffffffff80821115612be7578283fd5b81840160608187031215612bf9578384fd5b612c03606061359b565b9250803582811115612c13578485fd5b612c1f878284016129df565b845250602081013582811115612c33578485fd5b612c3f878284016129df565b602085015250604081013582811115612c56578485fd5b612c6287828401612991565b6040850152509195945050505050565b600060208284031215612c83578081fd5b5035919050565b600060208284031215612c9b578081fd5b5051919050565b600080600060408486031215612cb6578283fd5b833560ff81168114612cc6578384fd5b9250602084013567ffffffffffffffff811115612ce1578283fd5b612ced8682870161294a565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3c816020860160208601613606565b601f01601f19169290920160200192915050565b60008251612d62818460208701613606565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6c6020830184612d24565b600060408252612dcb604083018688612cfa565b8281036020840152612dde818587612cfa565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135226040830184612d24565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff851682526060602083015261358b6060830185612d24565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135ba57600080fd5b604052919050565b600067ffffffffffffffff8211156135d8578081fd5b5060209081020190565b600067ffffffffffffffff8211156135f8578081fd5b50601f01601f191660200190565b60005b83811015613621578181015183820152602001613609565b838111156118785750506000910152565b6001600160a01b038116811461364757600080fd5b5056fea164736f6c6343000604000a", + }, + }, + } + + keplerUpgrade[rialtoNet] = &Upgrade{ + UpgradeName: "kepler", + Configs: []*UpgradeConfig{ + { + ContractAddr: common.HexToAddress(ValidatorContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/84551b51424be411b80580b299bd5eda06815545", + Code: "6080604052600436106104a35760003560e01c806388b32f1111610260578063c6d3394511610144578063e40716a1116100c1578063f92eb86b11610085578063f92eb86b14610c02578063f9a2bbc714610c17578063fc3e590814610c2c578063fccc281314610c41578063fd4ad81f14610c56578063fd6a687914610c85576104aa565b8063e40716a114610b85578063ea321e4914610b9a578063eb57e20214610bba578063eda5868c14610bda578063f340fa0114610bef576104aa565b8063d86222d511610108578063d86222d514610b1c578063daacdb6614610b31578063dc927faf14610b46578063e086c7b114610b5b578063e1c7392a14610b70576104aa565b8063c6d3394514610abd578063c81b166214610ad2578063c8509d81146108b6578063ce910b0c14610ae7578063d68fb56a14610b07576104aa565b8063a5422d5c116101dd578063ad3c9da6116101a1578063ad3c9da614610a3c578063aef198a914610a5c578063b7ab4db514610a71578063b8cf4ef114610a93578063bf9f499514610666578063c466689d14610aa8576104aa565b8063a5422d5c146109c8578063a78abc16146109dd578063aaf5eb68146109f2578063ab51bb9614610a07578063ac43175114610a1c576104aa565b806396713da91161022457806396713da91461095f5780639dc09262146109745780639fe0f81614610989578063a0dc27581461099e578063a1a11bf5146109b3576104aa565b806388b32f11146108eb5780638a7beb01146109005780638b5ad0c9146109155780638d19a4101461092a5780639369d7de1461094a576104aa565b806351e80672116103875780636e47b482116103045780637942fd05116102c85780637942fd05146108775780637a84ca2a1461088c57806381650b62146108a1578063831d65d1146108b6578063853230aa1461086257806386249882146108d6576104aa565b80636e47b4821461080e57806370fd5bad14610823578063718a8aa81461083857806375d47a0a1461084d57806378dfed4a14610862576104aa565b80635de1e22c1161034b5780635de1e22c14610792578063603d86d31461065157806360eba4fe146107a757806362b72cf5146107c75780636969a25c146107dc576104aa565b806351e806721461071357806355614fcc14610728578063565c56b3146107485780635667515a146107685780635d77156c1461077d576104aa565b80633365af3a1161042057806343756e5c116103e457806343756e5c1461068857806345cf9daf1461069d578063493279b1146106b25780634bf6c882146106d45780634df6e0c3146106e95780635192c82c146106fe576104aa565b80633365af3a146105ee57806335409f7f1461060e5780633b071dcc1461062e5780633de0f0d8146106515780633dffc38714610666576104aa565b8063152ad3b811610467578063152ad3b8146105625780631ff1806914610584578063219f22d514610599578063300c3567146105ae578063321d398a146105ce576104aa565b806304c4fec6146104af57806307a56847146104c65780630bee7a67146104f15780630e2374a5146105135780631182b87514610535576104aa565b366104aa57005b600080fd5b3480156104bb57600080fd5b506104c4610c9a565b005b3480156104d257600080fd5b506104db610d0c565b6040516104e89190617694565b60405180910390f35b3480156104fd57600080fd5b50610506610d12565b6040516104e891906176be565b34801561051f57600080fd5b50610528610d17565b6040516104e89190616a63565b34801561054157600080fd5b50610555610550366004616949565b610d1d565b6040516104e89190616bda565b34801561056e57600080fd5b50610577610f55565b6040516104e89190616bcf565b34801561059057600080fd5b506104db610f5e565b3480156105a557600080fd5b50610506610f64565b3480156105ba57600080fd5b506104c46105c93660046167d3565b610f69565b3480156105da57600080fd5b506105776105e93660046168f6565b6112b2565b3480156105fa57600080fd5b506105776106093660046168f6565b611381565b34801561061a57600080fd5b506104c46106293660046167ac565b611432565b34801561063a57600080fd5b5061064361158b565b6040516104e8929190616ae5565b34801561065d57600080fd5b506104db611867565b34801561067257600080fd5b5061067b61186d565b6040516104e891906176cf565b34801561069457600080fd5b50610528611872565b3480156106a957600080fd5b506104db611878565b3480156106be57600080fd5b506106c761187e565b6040516104e89190617685565b3480156106e057600080fd5b5061067b611884565b3480156106f557600080fd5b50610643611889565b34801561070a57600080fd5b506104db611a07565b34801561071f57600080fd5b50610528611a0d565b34801561073457600080fd5b506105776107433660046167ac565b611a13565b34801561075457600080fd5b506104db6107633660046167ac565b611a48565b34801561077457600080fd5b5061067b611a99565b34801561078957600080fd5b50610506611a9e565b34801561079e57600080fd5b506104db611aa3565b3480156107b357600080fd5b506105556107c23660046168f6565b611aa9565b3480156107d357600080fd5b506104db611b4f565b3480156107e857600080fd5b506107fc6107f73660046168f6565b611b55565b6040516104e896959493929190616a90565b34801561081a57600080fd5b50610528611bb9565b34801561082f57600080fd5b5061067b611bbf565b34801561084457600080fd5b5061067b611bc4565b34801561085957600080fd5b50610528611bc9565b34801561086e57600080fd5b506104db611bcf565b34801561088357600080fd5b5061067b611bd5565b34801561089857600080fd5b506104db611bda565b3480156108ad57600080fd5b50610506611be0565b3480156108c257600080fd5b506104c46108d1366004616949565b611be5565b3480156108e257600080fd5b506104db611c46565b3480156108f757600080fd5b506104db611c4c565b34801561090c57600080fd5b50610577611c52565b34801561092157600080fd5b506104db611c5b565b34801561093657600080fd5b506104db6109453660046167ac565b611c61565b34801561095657600080fd5b506104c4611ca1565b34801561096b57600080fd5b5061067b611db5565b34801561098057600080fd5b50610528611dba565b34801561099557600080fd5b506104db611dc0565b3480156109aa57600080fd5b506104db611dc5565b3480156109bf57600080fd5b50610528611dca565b3480156109d457600080fd5b50610555611dd0565b3480156109e957600080fd5b50610577611def565b3480156109fe57600080fd5b506104db611df8565b348015610a1357600080fd5b50610506611a99565b348015610a2857600080fd5b506104c4610a3736600461689a565b611e01565b348015610a4857600080fd5b506104db610a573660046167ac565b61269f565b348015610a6857600080fd5b506104db6126b1565b348015610a7d57600080fd5b50610a866126be565b6040516104e89190616ad2565b348015610a9f57600080fd5b506104db6127aa565b348015610ab457600080fd5b506104db6127af565b348015610ac957600080fd5b506104db611bbf565b348015610ade57600080fd5b506105286127b5565b348015610af357600080fd5b50610555610b023660046168f6565b6127bb565b348015610b1357600080fd5b506104db6127c8565b348015610b2857600080fd5b506104db612807565b348015610b3d57600080fd5b506104db612813565b348015610b5257600080fd5b50610528612819565b348015610b6757600080fd5b506104db610d12565b348015610b7c57600080fd5b506104c461281f565b348015610b9157600080fd5b506104db6129ce565b348015610ba657600080fd5b50610577610bb536600461685b565b6129d4565b348015610bc657600080fd5b506104c4610bd53660046167ac565b612b5a565b348015610be657600080fd5b50610506612c62565b6104c4610bfd3660046167ac565b612c67565b348015610c0e57600080fd5b506104db612fcf565b348015610c2357600080fd5b50610528612fd5565b348015610c3857600080fd5b5061067b611dc0565b348015610c4d57600080fd5b50610528612fdb565b348015610c6257600080fd5b50610c76610c713660046168f6565b612fe1565b6040516104e89392919061769d565b348015610c9157600080fd5b506105286130a3565b6000610ca533611c61565b9050600b8181548110610cb457fe5b600091825260209091206001601690920201015460ff16610cf05760405162461bcd60e51b8152600401610ce79061733f565b60405180910390fd5b6000610cfa6127c8565b9050610d073383836130a9565b505050565b60095481565b606481565b61200181565b60005460609060ff16610d425760405162461bcd60e51b8152600401610ce790616d99565b3361200014610d635760405162461bcd60e51b8152600401610ce7906174d8565b600b54610e2157610d72616498565b60015460005b81811015610e1d57600b805460018101825560009190915283516000805160206178f283398151915260169092029182019081556020808601516000805160206179328339815191528401805460ff1916911515919091179055604086015180518794610df9936000805160206179128339815191529091019201906164c7565b506060820151610e0f9060038301906013616541565b505050806001019050610d78565b5050505b610e2961656e565b6000610e6a85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329592505050565b9150915080610e8657610e7d6064613451565b92505050610f4e565b815160009060ff16610eab57610ea4836020015184604001516134b2565b9050610f1a565b825160ff1660011415610f1657826020015151600114610ef0576000805160206178d2833981519152604051610ee0906171f8565b60405180910390a1506067610f11565b610ea48360200151600081518110610f0457fe5b6020026020010151614106565b610f1a565b5060655b63ffffffff8116610f3f5750506040805160008152602081019091529150610f4e9050565b610f4881613451565b93505050505b9392505050565b60075460ff1681565b60035481565b606881565b334114610f885760405162461bcd60e51b8152600401610ce790617527565b6010544311610fa95760405162461bcd60e51b8152600401610ce790616ef5565b3a15610fc75760405162461bcd60e51b8152600401610ce79061727e565b60005460ff16610fe95760405162461bcd60e51b8152600401610ce790616d99565b60006110023168056bc75e2d63100000811115611020576110198168056bc75e2d6310000063ffffffff61427d16565b9150611027565b50506112a8565b6040516309a99b4f60e41b815261100290639a99b4f09061104e9030908690600401616a77565b602060405180830381600087803b15801561106857600080fd5b505af115801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a0919061690e565b9150816110ae5750506112a8565b6000805b848110156110dc578585828181106110c657fe5b90506020020135820191508060010190506110b2565b50806110ea575050506112a8565b6000806000805b898110156112a0578489898381811061110657fe5b9050602002013588028161111657fe5b0493508a8a8281811061112557fe5b905060200201602081019061113a91906167ac565b6001600160a01b0381166000908152600460205260409020549093509150811561125657600060018084038154811061116f57fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff16156111dc57836001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d85866040516111cf9190617694565b60405180910390a2611250565b6003546111ef908663ffffffff6142bf16565b6003908155810154611207908663ffffffff6142bf16565b60038201556040516001600160a01b038516907fcb0aad6cf9cd03bdf6137e359f541c42f38b39f007cae8e89e88aa7d8c6617b290611247908890617694565b60405180910390a25b50611298565b826001600160a01b03167fb9c75cbbfde137c4281689580799ef5f52144e78858f776a5979b2b212137d858560405161128f9190617694565b60405180910390a25b6001016110f1565b505050505050505b5050436010555050565b60015460009082106112c65750600061137c565b60006001600160a01b0316600183815481106112de57fe5b60009182526020909120600490910201546001600160a01b0316148061130e5750600854158061130e5750600a54155b8061131d575060085460095410155b8061132e575061132c82611381565b155b8061135757506000600b838154811061134357fe5b906000526020600020906016020160000154115b8061136b575060016113676126be565b5111155b156113785750600061137c565b5060015b919050565b60015460009082106113955750600061137c565b600b5482106113d257600182815481106113ab57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615905061137c565b600182815481106113df57fe5b9060005260206000209060040201600201601c9054906101000a900460ff1615801561142c5750600b828154811061141357fe5b600091825260209091206001601690920201015460ff16155b92915050565b33611001146114535760405162461bcd60e51b8152600401610ce79061763c565b600b5461151157611462616498565b60015460005b8181101561150d57600b805460018101825560009190915283516000805160206178f283398151915260169092029182019081556020808601516000805160206179328339815191528401805460ff19169115159190911790556040860151805187946114e9936000805160206179128339815191529091019201906164c7565b5060608201516114ff9060038301906013616541565b505050806001019050611468565b5050505b6001600160a01b038116600090815260046020526040902054806115355750611588565b6001810390506000600b828154811061154a57fe5b600091825260209091206001601690920201015460ff16905061156d83836142e4565b80156115765750805b15610d07576009805460001901905550505b50565b60015460609081906000805b828110156115de57600181815481106115ac57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166115d6576001909101905b600101611597565b5060608160405190808252806020026020018201604052801561160b578160200160208202803683370190505b50905060608260405190808252806020026020018201604052801561164457816020015b606081526020019060019003908161162f5790505b50600b54600094509091508414156117bf5760005b848110156117b9576001818154811061166e57fe5b9060005260206000209060040201600201601c9054906101000a900460ff166117b1576001818154811061169e57fe5b600091825260209091206004909102015483516001600160a01b03909116908490869081106116c957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600b81815481106116f657fe5b600091825260209182902060026016909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b505050505082858151811061179f57fe5b60209081029190910101526001909301925b600101611659565b5061185b565b60005b8481101561185957600181815481106117d757fe5b9060005260206000209060040201600201601c9054906101000a900460ff16611851576001818154811061180757fe5b600091825260209091206004909102015483516001600160a01b039091169084908690811061183257fe5b6001600160a01b03909216602092830291909101909101526001909301925b6001016117c2565b505b909450925050505b9091565b61271081565b600181565b61100181565b60085481565b6102ca81565b600881565b600e54600c5460609182918061189d575060155b60606118a76126be565b905060606118b482614697565b9050828251116118cb579094509250611863915050565b838383510310156118dd578282510393505b83156119135760c843046118f983838388880360008a8a614805565b6119118383838888038989038a8b8b8b510301614805565b505b60608360405190808252806020026020018201604052801561193f578160200160208202803683370190505b50905060608460405190808252806020026020018201604052801561197857816020015b60608152602001906001900390816119635790505b50905060005b858110156119f95784818151811061199257fe5b60200260200101518382815181106119a657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106119d257fe5b60200260200101518282815181106119e657fe5b602090810291909101015260010161197e565b509096509450505050509091565b60065481565b61200081565b6001600160a01b03811660009081526004602052604081205480611a3b57600091505061137c565b60001901610f4e81611381565b6001600160a01b03811660009081526004602052604081205480611a7057600091505061137c565b600180820381548110611a7f57fe5b906000526020600020906004020160030154915050919050565b600081565b606781565b600f5481565b60128181548110611ab657fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b60105481565b60018181548110611b6257fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509082169291821691600160a01b81046001600160401b031691600160e01b90910460ff169086565b61100581565b600281565b601081565b61100881565b6103e881565b600b81565b600c5481565b606681565b3361200014611c065760405162461bcd60e51b8152600401610ce7906174d8565b7f41ce201247b6ceb957dcdb217d0b8acb50b9ea0e12af9af4f5e7f38902101605838383604051611c39939291906176dd565b60405180910390a1505050565b60025481565b60115481565b60145460ff1681565b600a5481565b6001600160a01b03811660009081526004602052604081205480611c975760405162461bcd60e51b8152600401610ce790617460565b6000190192915050565b600b54611d5f57611cb0616498565b60015460005b81811015611d5b57600b805460018101825560009190915283516000805160206178f283398151915260169092029182019081556020808601516000805160206179328339815191528401805460ff1916911515919091179055604086015180518794611d37936000805160206179128339815191529091019201906164c7565b506060820151611d4d9060038301906013616541565b505050806001019050611cb6565b5050505b600854611d6c5760036008555b600a54611d79576002600a555b6000611d8433611c61565b9050611d8f816112b2565b611dab5760405162461bcd60e51b8152600401610ce7906171b5565b611588338261495c565b600981565b61100781565b600381565b60c881565b61100681565b604051806101e001604052806101ab81526020016177276101ab913981565b60005460ff1681565b6402540be40081565b60005460ff16611e235760405162461bcd60e51b8152600401610ce790616d99565b3361100714611e445760405162461bcd60e51b8152600401610ce7906172ac565b611eae84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080518082019091526013815272065787069726554696d655365636f6e6447617606c1b602082015291506149f49050565b15611f4b5760208114611ed35760405162461bcd60e51b8152600401610ce79061741a565b604080516020601f8401819004810282018101909252828152600091611f1191858580838501838280828437600092019190915250614a4d92505050565b905060648110158015611f275750620186a08111155b611f435760405162461bcd60e51b8152600401610ce7906170a5565b60025561265c565b611fab84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260098152686275726e526174696f60b81b602082015291506149f49050565b1561203a5760208114611fd05760405162461bcd60e51b8152600401610ce790616c1f565b604080516020601f840181900481028201810190925282815260009161200e91858580838501838280828437600092019190915250614a4d92505050565b90506127108111156120325760405162461bcd60e51b8152600401610ce790616f37565b60065561265c565b6120a484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260138152726d61784e756d4f664d61696e7461696e696e6760681b602082015291506149f49050565b1561213e57602081146120c95760405162461bcd60e51b8152600401610ce790616c56565b604080516020601f840181900481028201810190925282815260009161210791858580838501838280828437600092019190915250614a4d92505050565b600c5490915080612116575060155b8082106121355760405162461bcd60e51b8152600401610ce790616faa565b5060085561265c565b6121a784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61696e7461696e536c6173685363616c6560701b602082015291506149f49050565b1561224057602081146121cc5760405162461bcd60e51b8152600401610ce790616d1f565b604080516020601f840181900481028201810190925282815260009161220a91858580838501838280828437600092019190915250614a4d92505050565b905060008111801561221c5750600a81105b6122385760405162461bcd60e51b8152600401610ce7906175b8565b600a5561265c565b6122b484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601981527f6d61784e756d4f66576f726b696e6743616e6469646174657300000000000000602082015291506149f49050565b1561234357602081146122d95760405162461bcd60e51b8152600401610ce790616cd3565b604080516020601f840181900481028201810190925282815260009161231791858580838501838280828437600092019190915250614a4d92505050565b9050600d5481111561233b5760405162461bcd60e51b8152600401610ce79061711b565b600e5561265c565b6123ac84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260128152716d61784e756d4f6643616e6469646174657360701b602082015291506149f49050565b1561242e57602081146123d15760405162461bcd60e51b8152600401610ce7906172fa565b604080516020601f840181900481028201810190925282815260009161240f91858580838501838280828437600092019190915250614a4d92505050565b600d819055600e5490915081101561242857600d54600e555b5061265c565b61249284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c6e756d4f66436162696e65747360981b602082015291506149f49050565b1561254057602081146124b75760405162461bcd60e51b8152600401610ce790616d64565b604080516020601f84018190048102820181019092528281526000916124f591858580838501838280828437600092019190915250614a4d92505050565b9050600081116125175760405162461bcd60e51b8152600401610ce790616e07565b60648111156125385760405162461bcd60e51b8152600401610ce790616e4f565b600c5561265c565b6125a884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527073797374656d526577617264526174696f60781b602082015291506149f49050565b1561264457602081146125cd5760405162461bcd60e51b8152600401610ce790617574565b604080516020601f840181900481028201810190925282815260009161260b91858580838501838280828437600092019190915250614a4d92505050565b90506001811015801561262057506127108111155b61263c5760405162461bcd60e51b8152600401610ce790617052565b600f5561265c565b60405162461bcd60e51b8152600401610ce790617615565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040516126919493929190616bed565b60405180910390a150505050565b60046020526000908152604090205481565b68056bc75e2d6310000081565b6001546060906000805b828110156126ed576126d981611381565b156126e5578160010191505b6001016126c8565b5060608160405190808252806020026020018201604052801561271a578160200160208202803683370190505b5090506000915060005b838110156127a15761273581611381565b15612799576001818154811061274757fe5b600091825260209091206004909102015482516001600160a01b039091169083908590811061277257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b600101612724565b50925050505b90565b601581565b61027181565b61100281565b60138181548110611ab657fe5b60006127d26126be565b519050600080600c54116127e75760156127eb565b600c545b9050808211156127f9578091505b8161280357600191505b5090565b67016345785d8a000081565b60055481565b61100381565b60005460ff16156128425760405162461bcd60e51b8152600401610ce7906173ac565b61284a61656e565b6000612870604051806101e001604052806101ab81526020016177276101ab9139613295565b91509150806128915760405162461bcd60e51b8152600401610ce790617497565b60005b8260200151518110156129b6576001836020015182815181106128b357fe5b60209081029190910181015182546001818101855560009485528385208351600493840290910180546001600160a01b039283166001600160a01b03199182161782558587015182850180549185169183169190911790556040860151600283018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b199590981692909516919091179290921694909417161790915560a09093015160039093019290925591860151805191850193918590811061298957fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101612894565b50506103e8600255506000805460ff19166001179055565b600d5481565b601354600090815b81811015612add57612ac585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601380549092508591508110612a2d57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612abb5780601f10612a9057610100808354040283529160200191612abb565b820191906000526020600020905b815481529060010190602001808311612a9e57829003601f168201915b5050505050614a52565b15612ad55760019250505061142c565b6001016129dc565b5060125460005b81811015612b4e57612b3586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601280549092508591508110612a2d57fe5b15612b46576001935050505061142c565b600101612ae4565b50600095945050505050565b3361100114612b7b5760405162461bcd60e51b8152600401610ce79061763c565b600b54612c3957612b8a616498565b60015460005b81811015612c3557600b805460018101825560009190915283516000805160206178f283398151915260169092029182019081556020808601516000805160206179328339815191528401805460ff1916911515919091179055604086015180518794612c11936000805160206179128339815191529091019201906164c7565b506060820151612c279060038301906013616541565b505050806001019050612b90565b5050505b6000612c4482614ab6565b9050612c4f816112b2565b15612c5e57612c5e828261495c565b5050565b606581565b334114612c865760405162461bcd60e51b8152600401610ce790617527565b60005460ff16612ca85760405162461bcd60e51b8152600401610ce790616d99565b60003411612cc85760405162461bcd60e51b8152600401610ce7906170ec565b3a15612ce65760405162461bcd60e51b8152600401610ce79061727e565b6001600160a01b03811660009081526004602052604090205460145434919060ff16612d2657610271600f556103aa6006556014805460ff191660011790555b6000612d4f612710612d43600f5486614c5990919063ffffffff16565b9063ffffffff614c9316565b90508015612dbf576040516110029082156108fc029083906000818181858888f19350505050158015612d86573d6000803e3d6000fd5b507f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d81604051612db69190617694565b60405180910390a15b600083118015612dd157506000600654115b15612e77576000612df3612710612d4360065487614c5990919063ffffffff16565b90508015612e755760405161dead9082156108fc029083906000818181858888f19350505050158015612e2a573d6000803e3d6000fd5b507f627059660ea01c4733a328effb2294d2f86905bf806da763a89cee254de8bee581604051612e5a9190617694565b60405180910390a1612e72848263ffffffff61427d16565b93505b505b612e87838263ffffffff61427d16565b92508115612f87576000600180840381548110612ea057fe5b9060005260206000209060040201905080600201601c9054906101000a900460ff1615612f0d57846001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b485604051612f009190617694565b60405180910390a2612f81565b600354612f20908563ffffffff6142bf16565b6003908155810154612f38908563ffffffff6142bf16565b60038201556040516001600160a01b038616907f93a090ecc682c002995fad3c85b30c5651d7fd29b0be5da9d784a3302aedc05590612f78908790617694565b60405180910390a25b50612fc9565b836001600160a01b03167ff177e5d6c5764d79c32883ed824111d9b13f5668cf6ab1cc12dd36791dd955b484604051612fc09190617694565b60405180910390a25b50505050565b600e5481565b61100081565b61dead81565b600b8181548110612fee57fe5b6000918252602091829020601691909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f810188900488028501880190925281845293965060ff909116949192918301828280156130995780601f1061306e57610100808354040283529160200191613099565b820191906000526020600020905b81548152906001019060200180831161307c57829003601f168201915b5050505050905083565b61100481565b6000600a54600014806130ba575081155b806130c55750600954155b156130d257506000610f4e565b6009600081546001900391905081905550600061311d600a54612d4385612d43600b89815481106130ff57fe5b6000918252602090912060169091020154439063ffffffff61427d16565b90506000600b858154811061312e57fe5b906000526020600020906016020160010160006101000a81548160ff0219169083151502179055506000806110016001600160a01b0316638256ace66040518163ffffffff1660e01b8152600401604080518083038186803b15801561319357600080fd5b505afa1580156131a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cb9190616926565b9150915060009350808310613245576131e487876142e4565b506040516305bfb49960e41b815261100190635bfb49909061320a908a90600401616a63565b600060405180830381600087803b15801561322457600080fd5b505af1158015613238573d6000803e3d6000fd5b5050505060019350613257565b8183106132575761325587614ab6565b505b6040516001600160a01b038816907fb9d38178dc641ff1817967a63c9078cbcd955a9f1fcd75e0e3636de615d44d3b90600090a25050509392505050565b61329d61656e565b60006132a761656e565b6132af616592565b6132c06132bb86614cd5565b614cfa565b90506000805b6132cf83614d44565b1561344357806132f4576132ea6132e584614d65565b614db3565b60ff16845261343b565b806001141561343657606061331061330b85614d65565b614e33565b9050805160405190808252806020026020018201604052801561334d57816020015b61333a6165b2565b8152602001906001900390816133325790505b508560200181905250805160405190808252806020026020018201604052801561338b57816020015b60608152602001906001900390816133765790505b50604086015260005b815181101561342b576133a56165b2565b606060006133c58585815181106133b857fe5b6020026020010151614f04565b925092509250806133e5578860009a509a5050505050505050505061344c565b82896020015185815181106133f657fe5b6020026020010181905250818960400151858151811061341257fe5b6020026020010181905250505050806001019050613394565b50600192505061343b565b613443565b6001016132c6565b50919350909150505b915091565b604080516001808252818301909252606091829190816020015b606081526020019060019003908161346b5790505090506134918363ffffffff1661501e565b8160008151811061349e57fe5b6020026020010181905250610f4e81615031565b60006064835111156134e9576000805160206178d28339815191526040516134d990616eac565b60405180910390a150606661142c565b60005b83518110156135875760005b8181101561357e5784818151811061350c57fe5b6020026020010151600001516001600160a01b031685838151811061352d57fe5b6020026020010151600001516001600160a01b03161415613576576000805160206178d283398151915260405161356390617007565b60405180910390a160669250505061142c565b6001016134f8565b506001016134ec565b5060608061359585856150bb565b60015491935091506000908190815b8181101561361a5767016345785d8a0000600182815481106135c257fe5b906000526020600020906004020160030154106135e457836001019350613612565b6000600182815481106135f357fe5b9060005260206000209060040201600301541115613612578260010192505b6001016135a4565b50606083604051908082528060200260200182016040528015613647578160200160208202803683370190505b509050606084604051908082528060200260200182016040528015613676578160200160208202803683370190505b5090506060856040519080825280602002602001820160405280156136a5578160200160208202803683370190505b5090506060866040519080825280602002602001820160405280156136d4578160200160208202803683370190505b5090506000606087604051908082528060200260200182016040528015613705578160200160208202803683370190505b509050606088604051908082528060200260200182016040528015613734578160200160208202803683370190505b509050600099506000985060006110046001600160a01b031663149d14d96040518163ffffffff1660e01b815260040160206040518083038186803b15801561377c57600080fd5b505afa158015613790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b4919061690e565b905067016345785d8a00008111156137ff576000805160206178d28339815191526040516137e19061736b565b60405180910390a160689d505050505050505050505050505061142c565b60005b89811015613a705767016345785d8a00006001828154811061382057fe5b906000526020600020906004020160030154106139a5576001818154811061384457fe5b906000526020600020906004020160020160009054906101000a90046001600160a01b0316898d8151811061387557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006402540be400600183815481106138aa57fe5b906000526020600020906004020160030154816138c357fe5b06600183815481106138d157fe5b9060005260206000209060040201600301540390506138f9838261427d90919063ffffffff16565b898e8151811061390557fe5b6020026020010181815250506001828154811061391e57fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316878e8151811061394f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081888e8151811061397c57fe5b6020908102919091010152613997868263ffffffff6142bf16565b95508c6001019c5050613a68565b6000600182815481106139b457fe5b9060005260206000209060040201600301541115613a6857600181815481106139d957fe5b906000526020600020906004020160010160009054906101000a90046001600160a01b0316848c81518110613a0a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060018181548110613a3757fe5b906000526020600020906004020160030154838c81518110613a5557fe5b6020026020010181815250508a6001019a505b600101613802565b5060008415613ce6576002546040516303702b2960e51b815261100491636e056520918891613aaa918e918e918d91420190600401616b55565b6020604051808303818588803b158015613ac357600080fd5b505af193505050508015613af4575060408051601f3d908101601f19168201909252613af19181019061683b565b60015b613c6b576040516000815260443d1015613b1057506000613bab565b60046000803e60005160e01c6308c379a08114613b31576000915050613bab565b60043d036004833e81513d60248201116001600160401b0382111715613b5c57600092505050613bab565b80830180516001600160401b03811115613b7d576000945050505050613bab565b8060208301013d8601811115613b9b57600095505050505050613bab565b601f01601f191660405250925050505b80613bb65750613bf8565b60019150857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf28082604051613bea9190616bda565b60405180910390a250613c66565b3d808015613c22576040519150601f19603f3d011682016040523d82523d6000602084013e613c27565b606091505b5060019150857fbfa884552dd8921b6ce90bfe906952ae5b3b29be0cc1a951d4f62697635a3a4582604051613c5c9190616bda565b60405180910390a2505b613ce6565b8015613cad577fa217d08e65f80c73121cd9db834d81652d544bfbf452f6d04922b16c90a37b7086604051613ca09190617694565b60405180910390a1613ce4565b857fa7cdeed7d0db45e3219a6e5d60838824c16f1d39991fcfe3f963029c844bf280604051613cdb90616c9c565b60405180910390a25b505b8015613e9c5760005b8751811015613e9a576000888281518110613d0657fe5b60200260200101519050600060018281548110613d1f57fe5b60009182526020909120600160049092020181015481546001600160a01b03909116916108fc9185908110613d5057fe5b9060005260206000209060040201600301549081150290604051600060405180830381858888f1935050505090508015613e0c5760018281548110613d9157fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d9185908110613de057fe5b906000526020600020906004020160030154604051613dff9190617694565b60405180910390a2613e90565b60018281548110613e1957fe5b60009182526020909120600160049092020181015481546001600160a01b03909116917f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d9185908110613e6857fe5b906000526020600020906004020160030154604051613e879190617694565b60405180910390a25b5050600101613cef565b505b835115613fe65760005b8451811015613fe4576000858281518110613ebd57fe5b60200260200101516001600160a01b03166108fc868481518110613edd57fe5b60200260200101519081150290604051600060405180830381858888f1935050505090508015613f7357858281518110613f1357fe5b60200260200101516001600160a01b03167f6c61d60f69a7beb3e1c80db7f39f37b208537cbb19da3174511b477812b2fc7d868481518110613f5157fe5b6020026020010151604051613f669190617694565b60405180910390a2613fdb565b858281518110613f7f57fe5b60200260200101516001600160a01b03167f25d0ce7d2f0cec669a8c17efe49d195c13455bb8872b65fa610ac7f53fe4ca7d868481518110613fbd57fe5b6020026020010151604051613fd29190617694565b60405180910390a25b50600101613ea6565b505b5050505050505050505050506000471115614062577f6ecc855f9440a9282c90913bbc91619fd44f5ec0b462af28d127b116f130aa4d4760405161402a9190617694565b60405180910390a1604051611002904780156108fc02916000818181858888f19350505050158015614060573d6000803e3d6000fd5b505b6000600381905560055581511561407d5761407d82826152f4565b6110016001600160a01b031663fc4333cd6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140ba57600080fd5b505af11580156140ce573d6000803e3d6000fd5b50506040517fedd8d7296956dd970ab4de3f2fc03be2b0ffc615d20cd4c72c6e44f928630ebf925060009150a1506000949350505050565b80516001600160a01b0316600090815260046020526040812054801580614157575060018082038154811061413757fe5b9060005260206000209060040201600201601c9054906101000a900460ff165b1561419d5782516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a2600091505061137c565b6001546005546000198201118015906141f35784516040516001600160a01b03909116907fe209c46bebf57cf265d5d9009a00870e256d9150f3ed5281ab9d9eb3cec6e4be90600090a26000935050505061137c565b60058054600190810190915580548190600019860190811061421157fe5b6000918252602082206002600490920201018054921515600160e01b0260ff60e01b199093169290921790915585516040516001600160a01b03909116917ff226e7d8f547ff903d9d419cf5f54e0d7d07efa9584135a53a057c5f1f27f49a91a2506000949350505050565b6000610f4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615aae565b600082820183811015610f4e5760405162461bcd60e51b8152600401610ce790616dd0565b600080600183815481106142f457fe5b9060005260206000209060040201600301549050600060018080549050039050600161431e6126be565b51116143535760006001858154811061433357fe5b90600052602060002090600402016003018190555060009250505061142c565b846001600160a01b03167f3b6f9ef90462b512a1293ecec018670bf7b7f1876fb727590a8a6d7643130a708360405161438c9190617694565b60405180910390a26001600160a01b038516600090815260046020526040812055835b6001546000190181101561457957600181600101815481106143cd57fe5b9060005260206000209060040201600182815481106143e857fe5b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b0393841617825560018085015481840180548416918616919091179055600280860180549185018054909416919095161780835584546001600160401b03600160a01b91829004160267ffffffffffffffff60a01b1990911617808355935460ff600160e01b918290041615150260ff60e01b19909416939093179055600392830154920191909155600b8054909183019081106144a957fe5b9060005260206000209060160201600b82815481106144c457fe5b600091825260209091208254601690920201908155600180830154818301805460ff909216151560ff199092169190911790556002808401805461451b9383860193908216156101000260001901909116046165e7565b5061452e6003828101908401601361665c565b5090505080600101600460006001848154811061454757fe5b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020556001016143af565b50600180548061458557fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b8054806145d857fe5b60008281526020812060166000199093019283020181815560018101805460ff191690559061460a6002830182616686565b6146186003830160006166ca565b50509055600081838161462757fe5b049050801561468b5760015460005b8181101561468857826001828154811061464c57fe5b906000526020600020906004020160030154016001828154811061466c57fe5b6000918252602090912060036004909202010155600101614636565b50505b50600195945050505050565b6001548151604080518281526020808402820101909152606092919083908280156146d657816020015b60608152602001906001900390816146c15790505b50600b5490915083146146ed57925061137c915050565b60005b828110156147fc57600b60016004600089858151811061470c57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054038154811061474057fe5b600091825260209182902060026016909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156147d85780601f106147ad576101008083540402835291602001916147d8565b820191906000526020600020905b8154815290600101906020018083116147bb57829003601f168201915b50505050508282815181106147e957fe5b60209081029190910101526001016146f0565b50949350505050565b60005b828110156149525760008287838801604051602001614828929190616a55565b6040516020818303038152906040528051906020012060001c8161484857fe5b06905080850182870114614949576000898388018151811061486657fe5b602002602001015190506060898489018151811061488057fe5b602002602001015190508a8388018151811061489857fe5b60200260200101518b858a01815181106148ae57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050818b848901815181106148dd57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050898388018151811061490b57fe5b60200260200101518a858a018151811061492157fe5b6020026020010181905250808a8489018151811061493b57fe5b602002602001018190525050505b50600101614808565b5050505050505050565b600980546001908101909155600b80548390811061497657fe5b906000526020600020906016020160010160006101000a81548160ff02191690831515021790555043600b82815481106149ac57fe5b600091825260208220601690910201919091556040516001600160a01b038416917ff62981a567ec3cec866c6fa93c55bcdf841d6292d18b8d522ececa769375d82d91a25050565b600081604051602001614a079190616a39565b6040516020818303038152906040528051906020012083604051602001614a2e9190616a39565b6040516020818303038152906040528051906020012014905092915050565b015190565b815181516000916001918114808314614a6e5760009250614aac565b600160208701838101602088015b600284838510011415614aa7578051835114614a9b5760009650600093505b60209283019201614a7c565b505050505b5090949350505050565b6001600160a01b03811660009081526004602052604081205480614adf5750600019905061137c565b600181039050600060018281548110614af457fe5b9060005260206000209060040201600301549050600060018381548110614b1757fe5b6000918252602090912060036004909202010155600154604051600019909101906001600160a01b038616907f8cd4e147d8af98a9e3b6724021b8bf6aed2e5dac71c38f2dce8161b82585b25d90614b70908590617694565b60405180910390a280614b885782935050505061137c565b6000818381614b9357fe5b0490508015614c4f5760005b84811015614bf1578160018281548110614bb557fe5b9060005260206000209060040201600301540160018281548110614bd557fe5b6000918252602090912060036004909202010155600101614b9f565b50600180549085015b81811015614c4c578260018281548110614c1057fe5b9060005260206000209060040201600301540160018281548110614c3057fe5b6000918252602090912060036004909202010155600101614bfa565b50505b5091949350505050565b600082614c685750600061142c565b82820282848281614c7557fe5b0414610f4e5760405162461bcd60e51b8152600401610ce79061723d565b6000610f4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615ada565b614cdd6166d9565b506040805180820190915281518152602082810190820152919050565b614d02616592565b614d0b82615b11565b614d1457600080fd5b6000614d238360200151615b4b565b60208085015160408051808201909152868152920190820152915050919050565b6000614d4e6166d9565b505080518051602091820151919092015191011190565b614d6d6166d9565b614d7682614d44565b614d7f57600080fd5b60208201516000614d8f82615bae565b80830160209586015260408051808201909152908152938401919091525090919050565b805160009015801590614dc857508151602110155b614dd157600080fd5b6000614de08360200151615b4b565b90508083600001511015614e065760405162461bcd60e51b8152600401610ce7906173e3565b8251602080850151830180519284900392918310156147fc57506020919091036101000a90049392505050565b6060614e3e82615b11565b614e4757600080fd5b6000614e5283615c8f565b9050606081604051908082528060200260200182016040528015614e9057816020015b614e7d6166d9565b815260200190600190039081614e755790505b5090506000614ea28560200151615b4b565b60208601510190506000805b84811015614ef957614ebf83615bae565b9150604051806040016040528083815260200184815250848281518110614ee257fe5b602090810291909101015291810191600101614eae565b509195945050505050565b614f0c6165b2565b60606000614f186165b2565b6060614f22616592565b614f2b87614cfa565b90506000805b614f3a83614d44565b1561500f5780614f6557614f55614f5084614d65565b615ceb565b6001600160a01b03168552615007565b8060011415614f8d57614f7a614f5084614d65565b6001600160a01b03166020860152615007565b8060021415614fb557614fa2614f5084614d65565b6001600160a01b03166040860152615007565b8060031415614fe157614fca6132e584614d65565b6001600160401b0316606086015260019150615007565b806004141561500257614ffb614ff684614d65565b615d05565b9350615007565b61500f565b600101614f31565b50929791965091945092505050565b606061142c61502c83615d75565b615e5b565b6060815160001415615052575060408051600081526020810190915261137c565b60608260008151811061506157fe5b602002602001015190506000600190505b83518110156150a2576150988285838151811061508b57fe5b6020026020010151615ead565b9150600101615072565b50610f4e6150b5825160c060ff16615f2a565b82615ead565b6060806000808080806150cc6127c8565b6001549091505b80156151da57600181039250600b83815481106150ec57fe5b600091825260209091206001601690920201015460ff1661510c576151d1565b6001838154811061511957fe5b60009182526020909120600490910201546001600160a01b031694506151408584846130a9565b9350831580615153575060018a51038610155b1561515d576151d1565b60005b8a518110156151cf57856001600160a01b03168b828151811061517f57fe5b6020026020010151600001516001600160a01b031614156151c75760018b82815181106151a857fe5b60209081029190910101519015156080909101526001909601956151cf565b600101615160565b505b600019016150d3565b508489510360405190808252806020026020018201604052801561521857816020015b6152056165b2565b8152602001906001900390816151fd5790505b5096508489510360405190808252806020026020018201604052801561525257816020015b606081526020019060019003908161523d5790505b5095506000915060005b89518110156152e65789818151811061527157fe5b6020026020010151608001516152de5789818151811061528d57fe5b60200260200101518884815181106152a157fe5b60200260200101819052508881815181106152b857fe5b60200260200101518784815181106152cc57fe5b60200260200101819052508260010192505b60010161525c565b5050505050505b9250929050565b600154825160005b8281101561541157600161530e6165b2565b6001838154811061531b57fe5b600091825260208083206040805160c08101825260049490940290910180546001600160a01b0390811685526001820154811693850193909352600281015492831691840191909152600160a01b82046001600160401b03166060840152600160e01b90910460ff16151560808301526003015460a082015291505b848110156153e5578781815181106153ab57fe5b6020026020010151600001516001600160a01b031682600001516001600160a01b031614156153dd57600092506153e5565b600101615397565b5081156154075780516001600160a01b03166000908152600460205260408120555b50506001016152fc565b50808211156154d057805b828110156154ce57600180548061542f57fe5b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055600b80548061548257fe5b60008281526020812060166000199093019283020181815560018101805460ff19169055906154b46002830182616686565b6154c26003830160006166ca565b5050905560010161541c565b505b60008183106154df57816154e1565b825b905060005b81811015615850576155938682815181106154fd57fe5b60200260200101516001838154811061551257fe5b60009182526020918290206040805160c08101825260049390930290910180546001600160a01b0390811684526001820154811694840194909452600281015493841691830191909152600160a01b83046001600160401b03166060830152600160e01b90920460ff161515608082015260039091015460a0820152615ffc565b6157475780600101600460008884815181106155ab57fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055508581815181106155e757fe5b6020026020010151600182815481106155fc57fe5b6000918252602091829020835160049092020180546001600160a01b039283166001600160a01b0319918216178255928401516001820180549184169185169190911790556040840151600282018054606087015160808801511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909716929097169190911792909216939093171692909217905560a09091015160039091015584518590829081106156b757fe5b6020026020010151600b82815481106156cc57fe5b906000526020600020906016020160020190805190602001906156f09291906164c7565b506000600b828154811061570057fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b80548390811061573157fe5b6000918252602090912060169091020155615848565b6157d885828151811061575657fe5b6020026020010151600b838154811061576b57fe5b600091825260209182902060026016909202018101805460408051601f600019610100600186161502019093169490940491820185900485028401850190528083529192909190830182828015612abb5780601f10612a9057610100808354040283529160200191612abb565b615823578481815181106157e857fe5b6020026020010151600b82815481106157fd57fe5b906000526020600020906016020160020190805190602001906158219291906164c7565b505b60006001828154811061583257fe5b9060005260206000209060040201600301819055505b6001016154e6565b5082821115615a2857615861616498565b835b83811015615a255785818151811061587757fe5b60200260200101518260400181905250600187828151811061589557fe5b6020908102919091018101518254600181810185556000948552838520835160049093020180546001600160a01b039384166001600160a01b0319918216178255848601518284018054918616918316919091179055604080860151600284018054606089015160808a01511515600160e01b0260ff60e01b196001600160401b03909216600160a01b0267ffffffffffffffff60a01b1995909a1692909616919091179290921696909617169190911790935560a090930151600390930192909255600b80549283018155909352845160169091026000805160206178f28339815191528101918255858301516000805160206179328339815191528201805491151560ff19909216919091179055928501518051869492936159cb93600080516020617912833981519152019201906164c7565b5060608201516159e19060038301906013616541565b50505080600101600460008984815181106159f857fe5b602090810291909101810151516001600160a01b0316825281019190915260400160002055600101615863565b50505b615a3061607d565b615a3861625f565b6000600981905560015493505b83811015615aa6576000600b8281548110615a5c57fe5b60009182526020822060169190910201600101805460ff191692151592909217909155600b805483908110615a8d57fe5b6000918252602090912060169091020155600101615a45565b505050505050565b60008184841115615ad25760405162461bcd60e51b8152600401610ce79190616bda565b505050900390565b60008183615afb5760405162461bcd60e51b8152600401610ce79190616bda565b506000838581615b0757fe5b0495945050505050565b8051600090615b225750600061137c565b6020820151805160001a9060c0821015615b415760009250505061137c565b5060019392505050565b8051600090811a6080811015615b6557600091505061137c565b60b8811080615b80575060c08110801590615b80575060f881105b15615b8f57600191505061137c565b60c0811015615ba35760b51901905061137c565b60f51901905061137c565b80516000908190811a6080811015615bc95760019150615c88565b60b8811015615bde57607e1981019150615c88565b60c0811015615c2f57600060b78203600186019550806020036101000a865104915060018101820193505080831015615c295760405162461bcd60e51b8152600401610ce79061718a565b50615c88565b60f8811015615c445760be1981019150615c88565b600060f78203600186019550806020036101000a865104915060018101820193505080831015615c865760405162461bcd60e51b8152600401610ce79061718a565b505b5092915050565b8051600090615ca05750600061137c565b60008090506000615cb48460200151615b4b565b602085015185519181019250015b80821015615ce257615cd382615bae565b82019150826001019250615cc2565b50909392505050565b8051600090601514615cfc57600080fd5b61142c82614db3565b8051606090615d1357600080fd5b6000615d228360200151615b4b565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015615d59576020820181803683370190505b50905060008160200190506147fc84876020015101828561644d565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416615db957506018615ddd565b6fffffffffffffffffffffffffffffffff198416615dd957506010615ddd565b5060005b6020811015615e1357818181518110615df257fe5b01602001516001600160f81b03191615615e0b57615e13565b600101615ddd565b60008160200390506060816040519080825280601f01601f191660200182016040528015615e48576020820181803683370190505b5080830196909652508452509192915050565b606081516001148015615e8d5750607f60f81b82600081518110615e7b57fe5b01602001516001600160f81b03191611155b15615e9957508061137c565b61142c615eab8351608060ff16615f2a565b835b6060806040519050835180825260208201818101602087015b81831015615ede578051835260209283019201615ec6565b50855184518101855292509050808201602086015b81831015615f0b578051835260209283019201615ef3565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310615f545760405162461bcd60e51b8152600401610ce790616f82565b60408051600180825281830190925260609160208201818036833701905050905060378411615fae5782840160f81b81600081518110615f9057fe5b60200101906001600160f81b031916908160001a905350905061142c565b6060615fb985615d75565b90508381510160370160f81b82600081518110615fd257fe5b60200101906001600160f81b031916908160001a905350615ff38282615ead565b95945050505050565b805182516000916001600160a01b039182169116148015616036575081602001516001600160a01b031683602001516001600160a01b0316145b801561605b575081604001516001600160a01b031683604001516001600160a01b0316145b8015610f4e5750506060908101519101516001600160401b0390811691161490565b601254601354808211156160c857805b828110156160c65760128054806160a057fe5b6001900381819060005260206000200160006160bc9190616686565b905560010161608d565b505b60008183106160d757816160d9565b825b905060005b818110156161f157616196601282815481106160f657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156161845780601f1061615957610100808354040283529160200191616184565b820191906000526020600020905b81548152906001019060200180831161616757829003601f168201915b505050505060138381548110612a2d57fe5b6161e957601381815481106161a757fe5b90600052602060002001601282815481106161be57fe5b9060005260206000200190805460018160011615610100020316600290046161e79291906165e7565b505b6001016160de565b5082821115610d0757825b82811015612fc95760126013828154811061621357fe5b60009182526020808320845460018181018755958552919093209290910180546162569493909201929091600261010092821615929092026000190116046165e7565b506001016161fc565b601354600b54808211156162aa57805b828110156162a857601380548061628257fe5b60019003818190600052602060002001600061629e9190616686565b905560010161626f565b505b60008183106162b957816162bb565b825b905060005b818110156163da57616378601382815481106162d857fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156163665780601f1061633b57610100808354040283529160200191616366565b820191906000526020600020905b81548152906001019060200180831161634957829003601f168201915b5050505050600b838154811061576b57fe5b6163d257600b818154811061638957fe5b9060005260206000209060160201600201601382815481106163a757fe5b9060005260206000200190805460018160011615610100020316600290046163d09291906165e7565b505b6001016162c0565b5082821115610d0757825b82811015612fc9576013600b82815481106163fc57fe5b600091825260208083208454600180820187559585529190932060169290920290920160029081018054616444959390940193909260001990821615610100020116046165e7565b506001016163e5565b8061645757610d07565b5b60208110616477578251825260209283019290910190601f1901616458565b915181516020939093036101000a6000190180199091169216919091179052565b604051806080016040528060008152602001600015158152602001606081526020016164c26166f3565b905290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061650857805160ff1916838001178555616535565b82800160010185558215616535579182015b8281111561653557825182559160200191906001019061651a565b50612803929150616712565b8260138101928215616535579160200282018281111561653557825182559160200191906001019061651a565b6040518060600160405280600060ff16815260200160608152602001606081525090565b60405180604001604052806165a56166d9565b8152602001600081525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106166205780548555616535565b8280016001018555821561653557600052602060002091601f016020900482015b82811115616535578254825591600101919060010190616641565b82601381019282156165355791820182811115616535578254825591600101919060010190616641565b50805460018160011615610100020316600290046000825580601f106166ac5750611588565b601f0160209004906000526020600020908101906115889190616712565b50611588906013810190616712565b604051806040016040528060008152602001600081525090565b6040518061026001604052806013906020820280368337509192915050565b6127a791905b808211156128035760008155600101616718565b60008083601f84011261673d578182fd5b5081356001600160401b03811115616753578182fd5b60208301915083602080830285010111156152ed57600080fd5b60008083601f84011261677e578182fd5b5081356001600160401b03811115616794578182fd5b6020830191508360208285010111156152ed57600080fd5b6000602082840312156167bd578081fd5b81356001600160a01b0381168114610f4e578182fd5b600080600080604085870312156167e8578283fd5b84356001600160401b03808211156167fe578485fd5b61680a8883890161672c565b90965094506020870135915080821115616822578384fd5b5061682f8782880161672c565b95989497509550505050565b60006020828403121561684c578081fd5b81518015158114610f4e578182fd5b6000806020838503121561686d578182fd5b82356001600160401b03811115616882578283fd5b61688e8582860161676d565b90969095509350505050565b600080600080604085870312156168af578384fd5b84356001600160401b03808211156168c5578586fd5b6168d18883890161676d565b909650945060208701359150808211156168e9578384fd5b5061682f8782880161676d565b600060208284031215616907578081fd5b5035919050565b60006020828403121561691f578081fd5b5051919050565b60008060408385031215616938578182fd5b505080516020909101519092909150565b60008060006040848603121561695d578283fd5b833560ff8116811461696d578384fd5b925060208401356001600160401b03811115616987578283fd5b6169938682870161676d565b9497909650939450505050565b6000815180845260208085019450808401835b838110156169d85781516001600160a01b0316875295820195908201906001016169b3565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452616a258160208601602086016176fa565b601f01601f19169290920160200192915050565b60008251616a4b8184602087016176fa565b9190910192915050565b918252602082015260400190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03968716815294861660208601529290941660408401526001600160401b03166060830152911515608082015260a081019190915260c00190565b600060208252610f4e60208301846169a0565b600060408252616af860408301856169a0565b602083820381850152818551808452828401915082838202850101838801865b83811015616b4657601f19878403018552616b34838351616a0d565b94860194925090850190600101616b18565b50909998505050505050505050565b600060808252616b6860808301876169a0565b828103602084810191909152865180835287820192820190845b81811015616b9e57845183529383019391830191600101616b82565b50508481036040860152616bb281886169a0565b93505050506001600160401b038316606083015295945050505050565b901515815260200190565b600060208252610f4e6020830184616a0d565b600060408252616c016040830186886169e3565b8281036020840152616c148185876169e3565b979650505050505050565b6020808252601c908201527f6c656e677468206f66206275726e526174696f206d69736d6174636800000000604082015260600190565b60208082526026908201527f6c656e677468206f66206d61784e756d4f664d61696e7461696e696e67206d696040820152650e6dac2e8c6d60d31b606082015260800190565b6020808252601b908201527f6261746368207472616e736665722072657475726e2066616c73650000000000604082015260600190565b6020808252602c908201527f6c656e677468206f66206d61784e756d4f66576f726b696e6743616e6469646160408201526b0e8cae640dad2e6dac2e8c6d60a31b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61696e7461696e536c6173685363616c65206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252818101527f6c656e677468206f66206e756d4f66436162696e657473206d69736d61746368604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f746865206e756d4f66436162696e657473206d75737420626520677265617465604082015267072207468616e20360c41b606082015260800190565b60208082526039908201527f746865206e756d4f66436162696e657473206d757374206265206c657373207460408201527f68616e204d41585f4e554d5f4f465f56414c494441544f525300000000000000606082015260800190565b60208082526029908201527f746865206e756d626572206f662076616c696461746f727320657863656564206040820152681d1a19481b1a5b5a5d60ba1b606082015260800190565b60208082526022908201527f63616e206e6f7420646f207468697320747769636520696e206f6e6520626c6f604082015261636b60f01b606082015260800190565b6020808252602b908201527f746865206275726e526174696f206d757374206265206e6f206772656174657260408201526a0207468616e2031303030360ac1b606082015260800190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526037908201527f746865206d61784e756d4f664d61696e7461696e696e67206d7573742062652060408201527f6c657373207468616e206e756d4f66436162696e657473000000000000000000606082015260800190565b6020808252602b908201527f6475706c696361746520636f6e73656e7375732061646472657373206f66207660408201526a185b1a59185d1bdc94d95d60aa1b606082015260800190565b60208082526033908201527f7468652073797374656d526577617264526174696f206d757374206265206e6f60408201527202067726561746572207468616e20313030303606c1b606082015260800190565b60208082526027908201527f7468652065787069726554696d655365636f6e64476170206973206f7574206f604082015266662072616e676560c81b606082015260800190565b6020808252601590820152746465706f7369742076616c7565206973207a65726f60581b604082015260600190565b60208082526049908201527f746865206d61784e756d4f66576f726b696e6743616e64696461746573206d7560408201527f7374206265206e6f742067726561746572207468616e206d61784e756d4f6643606082015268616e6469646174657360b81b608082015260a00190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526023908201527f63616e206e6f7420656e7465722054656d706f72617279204d61696e74656e616040820152626e636560e81b606082015260800190565b60208082526025908201527f6c656e677468206f66206a61696c2076616c696461746f7273206d757374206260408201526465206f6e6560d81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526025908201527f6c656e677468206f66206d61784e756d4f6643616e64696461746573206d69736040820152640dac2e8c6d60db1b606082015260800190565b6020808252601290820152716e6f7420696e206d61696e74656e616e636560701b604082015260600190565b60208082526021908201527f666565206973206c6172676572207468616e2044555354595f494e434f4d494e6040820152604760f81b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526026908201527f6c656e677468206f662065787069726554696d655365636f6e64476170206d696040820152650e6dac2e8c6d60d31b606082015260800190565b60208082526017908201527f6f6e6c792063757272656e742076616c696461746f7273000000000000000000604082015260600190565b60208082526021908201527f6661696c656420746f20706172736520696e69742076616c696461746f7253656040820152601d60fa1b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b60208082526024908201527f6c656e677468206f662073797374656d526577617264526174696f206d69736d6040820152630c2e8c6d60e31b606082015260800190565b6020808252603e908201527f746865206d61696e7461696e536c6173685363616c65206d757374206265206760408201527f726561746572207468616e203020616e64206c657373207468616e2031300000606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b61ffff91909116815260200190565b90815260200190565b6000848252831515602083015260606040830152615ff36060830184616a0d565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff8516825260406020830152615ff36040830184866169e3565b60005b838110156177155781810151838201526020016176fd565b83811115612fc9575050600091015256fef901a880f901a4f844941284214b9b9c85549ab3d2b972df0deef66ac2c9946ddf42a51534fc98d0c0a3b42c963cace8441ddf946ddf42a51534fc98d0c0a3b42c963cace8441ddf8410000000f84494a2959d3f95eae5dc7d70144ce1b73b403b7eb6e0948081ef03f1d9e0bb4a5bf38f16285c879299f07f948081ef03f1d9e0bb4a5bf38f16285c879299f07f8410000000f8449435552c16704d214347f29fa77f77da6d75d7c75294dc4973e838e3949c77aced16ac2315dc2d7ab11194dc4973e838e3949c77aced16ac2315dc2d7ab1118410000000f84494980a75ecd1309ea12fa2ed87a8744fbfc9b863d594cc6ac05c95a99c1f7b5f88de0e3486c82293b27094cc6ac05c95a99c1f7b5f88de0e3486c82293b2708410000000f84494f474cf03cceff28abc65c9cbae594f725c80e12d94e61a183325a18a173319dd8e19c8d069459e217594e61a183325a18a173319dd8e19c8d069459e21758410000000f84494b71b214cb885500844365e95cd9942c7276e7fd894d22ca3ba2141d23adab65ce4940eb7665ea2b6a794d22ca3ba2141d23adab65ce4940eb7665ea2b6a7841000000070e72399380dcfb0338abc03dc8d47f9f470ada8e769c9a78d644ea97385ecb20175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbb0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01dbaa164736f6c6343000604000a", + }, + { + ContractAddr: common.HexToAddress(SlashContract), + CommitUrl: "https://github.com/bnb-chain/bsc-genesis-contract/commit/84551b51424be411b80580b299bd5eda06815545", + Code: "608060405234801561001057600080fd5b50600436106102955760003560e01c80638256ace611610167578063c81b1662116100ce578063e1c7392a11610087578063e1c7392a146104d3578063eb57bff7146104db578063f9a2bbc7146104e3578063fc3e5908146104eb578063fc4333cd146104f3578063fd6a6879146104fb57610295565b8063c81b166214610482578063c8509d811461048a578063c96be4cb1461049d578063cc844b73146104b0578063d2a42e4b146104c3578063dc927faf146104cb57610295565b8063a78abc1611610120578063a78abc1614610447578063ab51bb961461044f578063ac0af62914610457578063ac4317511461045f578063ae61dc3b14610472578063c80d4b8f1461047a57610295565b80638256ace61461040c578063831d65d11461041457806396713da9146104275780639bc8e4f21461042f5780639dc0926214610437578063a1a11bf51461043f57610295565b8063493279b11161020b5780636e47b482116101c45780636e47b482146103dc57806370fd5bad146103e4578063718a8aa8146103ec57806375d47a0a146103f45780637912a65d146103fc5780637942fd051461040457610295565b8063493279b1146103925780634bf6c882146103a757806351e80672146103af578063567a372d146103b75780635bfb4990146103bf57806362b72cf5146103d457610295565b806335aa2e441161025d57806335aa2e441461032457806337c8dab914610337578063389f4f71146103585780633a63f4b11461036d5780633dffc3871461037557806343756e5c1461038a57610295565b80630bee7a671461029a5780630e2374a5146102b85780631182b875146102cd57806322d1e80b146102ed57806323bac5a214610302575b600080fd5b6102a2610503565b6040516102af9190613552565b60405180910390f35b6102c0610508565b6040516102af9190612d6e565b6102e06102db366004612ca4565b61050e565b6040516102af9190612da6565b6102f5610574565b6040516102af9190612d9b565b610315610310366004612a52565b61057d565b6040516102af9392919061353a565b6102c0610332366004612c74565b6105a0565b61034a610345366004612a52565b6105c7565b6040516102af92919061352c565b61036061061e565b6040516102af9190613502565b610360610624565b61037d61062a565b6040516102af9190613563565b6102c061062f565b61039a610635565b6040516102af91906134f3565b61037d61063b565b6102c0610640565b610360610646565b6103d26103cd366004612a52565b61064c565b005b6103606106f7565b6102c06106fd565b61037d610703565b61037d610708565b6102c061070d565b610360610713565b61037d610718565b61034a61071d565b6103d2610422366004612ca4565b610727565b61037d610839565b61036061083e565b6102c0610849565b6102c061084f565b6102f5610855565b6102a261085e565b610360610863565b6103d261046d366004612b58565b610868565b610360610e18565b610360610e1f565b6102c0610e24565b6103d2610498366004612ca4565b610e2a565b6103d26104ab366004612a52565b610e9b565b6103d26104be366004612bc1565b61128c565b61036061187f565b6102c0611884565b6103d261188a565b6103606118c6565b6102c06118cc565b61037d6118d2565b6103d26118d7565b6102c0611d20565b606481565b61200181565b6060336120001461053a5760405162461bcd60e51b81526004016105319061334b565b60405180910390fd5b60005460ff1661055c5760405162461bcd60e51b815260040161053190612ea1565b60405162461bcd60e51b81526004016105319061343c565b60075460ff1681565b600260208190526000918252604090912080546001820154919092015460ff1683565b600181815481106105ad57fe5b6000918252602090912001546001600160a01b0316905081565b6000806105d2612839565b5050506001600160a01b0316600090815260026020818152604092839020835160608101855281548082526001830154938201849052919093015460ff16151592909301919091529091565b60055481565b60065481565b600181565b61100181565b6102ca81565b600881565b61200081565b60045481565b336110001461066d5760405162461bcd60e51b815260040161053190613130565b60005460ff1661068f5760405162461bcd60e51b815260040161053190612ea1565b61200063f7a251d7600b6106a284611d26565b60006040518463ffffffff1660e01b81526004016106c293929190613571565b600060405180830381600087803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b5050505050565b60035481565b61100581565b600281565b601081565b61100881565b603281565b600b81565b6004546005549091565b33612000146107485760405162461bcd60e51b81526004016105319061334b565b60005460ff1661076a5760405162461bcd60e51b815260040161053190612ea1565b61077261285c565b60006107b384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611df992505050565b9150915080156107fa5781516040517f7f0956d47419b9525356e7111652b653b530ec6f5096dccc04589bc38e629967916107ed91613552565b60405180910390a16106f0565b81516040517f7d45f62d17443dd4547bca8a8112c60e2385669318dc300ec61a5d2492f262e79161082a91613552565b60405180910390a15050505050565b600981565b662386f26fc1000081565b61100781565b61100681565b60005460ff1681565b600081565b600481565b60005460ff1661088a5760405162461bcd60e51b815260040161053190612ea1565b33611007146108ab5760405162461bcd60e51b815260040161053190613208565b61091684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152731b5a5cd9195b59585b9bdc951a1c995cda1bdb1960621b60208201529150611e799050565b156109b1576020811461093b5760405162461bcd60e51b8152600401610531906130bc565b604080516020601f840181900481028201810190925282815260009161097991858580838501838280828437600092019190915250611ed392505050565b90506001811015801561098d575060055481105b6109a95760405162461bcd60e51b815260040161053190613306565b600455610dd5565b610a1784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600f81526e19995b1bdb9e551a1c995cda1bdb19608a1b60208201529150611e799050565b15610ab35760208114610a3c5760405162461bcd60e51b815260040161053190613256565b604080516020601f8401819004810282018101909252828152600091610a7a91858580838501838280828437600092019190915250611ed392505050565b90506103e88111158015610a8f575060045481115b610aab5760405162461bcd60e51b815260040161053190612f5a565b600555610dd5565b610b2784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f66696e616c697479536c617368526577617264526174696f000000000000000060208201529150611e799050565b15610bc15760208114610b4c5760405162461bcd60e51b815260040161053190613473565b604080516020601f8401819004810282018101909252828152600091610b8a91858580838501838280828437600092019190915250611ed392505050565b9050600a8110158015610b9d5750606481105b610bb95760405162461bcd60e51b815260040161053190613070565b600655610dd5565b610c3584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601881527f656e61626c654d616c6963696f7573566f7465536c617368000000000000000060208201529150611e799050565b15610cac5760208114610c5a5760405162461bcd60e51b815260040161053190612f8f565b604080516020601f8401819004810282018101909252828152610c969190848480838501838280828437600092019190915250611ed892505050565b6007805460ff1916911515919091179055610dd5565b610d2084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601781527f6d616c6963696f7573566f7465536c61736853636f706500000000000000000060208201529150611e799050565b15610dbd5760208114610d455760405162461bcd60e51b815260040161053190612deb565b604080516020601f8401819004810282018101909252828152600091610d8391858580838501838280828437600092019190915250611ed392505050565b90506170808110158015610d995750620d2f0081105b610db55760405162461bcd60e51b815260040161053190612ed8565b600855610dd5565b60405162461bcd60e51b8152600401610531906133e7565b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a84848484604051610e0a9493929190612db9565b60405180910390a150505050565b6201518081565b609681565b61100281565b3361200014610e4b5760405162461bcd60e51b81526004016105319061334b565b60005460ff16610e6d5760405162461bcd60e51b815260040161053190612ea1565b6040517f07db600eebe2ac176be8dcebad61858c245a4961bb32ca2aa3d159b09aa0810e90600090a1505050565b334114610eba5760405162461bcd60e51b81526004016105319061339a565b60005460ff16610edc5760405162461bcd60e51b815260040161053190612ea1565b6003544311610efd5760405162461bcd60e51b8152600401610531906134be565b3a15610f1b5760405162461bcd60e51b8152600401610531906131ab565b60405163155853f360e21b8152611000906355614fcc90610f40908490600401612d6e565b60206040518083038186803b158015610f5857600080fd5b505afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190612b38565b610f9957611285565b610fa1612839565b506001600160a01b0381166000908152600260208181526040928390208351606081018552815481526001820154928101929092529091015460ff161580159282019290925290610ffc576020810180516001019052611055565b60016040820181905260208201819052805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790555b43815260055460208201518161106757fe5b066111b357600060208201526040516335409f7f60e01b8152611000906335409f7f90611098908590600401612d6e565b600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b505050506120006001600160a01b031663f7a251d7600b6110e685611d26565b60006040518463ffffffff1660e01b815260040161110693929190613571565b600060405180830381600087803b15801561112057600080fd5b505af1925050508015611131575060015b6111ae573d80801561115f576040519150601f19603f3d011682016040523d82523d6000602084013e611164565b606091505b50826001600160a01b03167fd7bc86ff5d08c8ab043edec743302aba2520e6635172a428bc956721db9e2d1c8360200151836040516111a492919061350b565b60405180910390a2505b61121f565b6004548160200151816111c257fe5b0661121f576040516375abf10160e11b81526110009063eb57e202906111ec908590600401612d6e565b600060405180830381600087803b15801561120657600080fd5b505af115801561121a573d6000803e3d6000fd5b505050505b6001600160a01b0382166000818152600260208181526040808420865181559186015160018301558581015191909201805460ff1916911515919091179055517fddb6012116e51abf5436d956a4f0ebd927e92c576ff96d7918290c8782291e3e9190a2505b5043600355565b60005460ff166112ae5760405162461bcd60e51b815260040161053190612ea1565b604051630a83aaa960e31b81526110069063541d5548906112d3903390600401612d6e565b60206040518083038186803b1580156112eb57600080fd5b505afa1580156112ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113239190612b38565b61133f5760405162461bcd60e51b815260040161053190612e35565b60075460ff166113615760405162461bcd60e51b815260040161053190612e6c565b60065461136e5760146006555b60085461137d57620151806008555b6008548151604001514391011180156113a157504360085482602001516040015101115b6113bd5760405162461bcd60e51b81526004016105319061340e565b8060200151602001518160000151602001511480156113eb5750806020015160600151816000015160600151145b156114085760405162461bcd60e51b815260040161053190613103565b8051604081015190511080156114275750602081015160408101519051105b6114435760405162461bcd60e51b815260040161053190613039565b6020810151518151511080156114685750806000015160400151816020015160400151105b8061149357508051516020820151511080156114935750806020015160400151816000015160400151105b806114ad5750806020015160400151816000015160400151145b6114c95760405162461bcd60e51b815260040161053190612f23565b604080820151905163ea321e4960e01b81526110009163ea321e49916114f29190600401612da6565b60206040518083038186803b15801561150a57600080fd5b505afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190612b38565b61155e5760405162461bcd60e51b8152600401610531906131d9565b61157081600001518260400151611f00565b8015611589575061158981602001518260400151611f00565b6115a55760405162461bcd60e51b815260040161053190612fda565b6060806110006001600160a01b0316633b071dcc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156115e357600080fd5b505afa1580156115f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261161f9190810190612a75565b9150915060005b815181101561175c5761165082828151811061163e57fe5b602002602001015185604001516120d8565b15611754576006546040516309a99b4f60e41b815260646110028031909302049190639a99b4f0906116889033908590600401612d82565b602060405180830381600087803b1580156116a257600080fd5b505af11580156116b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116da9190612c8c565b506110006001600160a01b03166335409f7f8584815181106116f857fe5b60200260200101516040518263ffffffff1660e01b815260040161171c9190612d6e565b600060405180830381600087803b15801561173657600080fd5b505af115801561174a573d6000803e3d6000fd5b505050505061175c565b600101611626565b50600061176e8460400151600061213c565b90506120006001600160a01b031663f7a251d7600b6117908760400151612158565b60006040518463ffffffff1660e01b81526004016117b093929190613571565b600060405180830381600087803b1580156117ca57600080fd5b505af19250505080156117db575060015b61184d573d808015611809576040519150601f19603f3d011682016040523d82523d6000602084013e61180e565b606091505b50817fd58d1183100bd0932c0588f31c4205d6bc6168909765a96c41adbed3115f36288260405161183f9190612da6565b60405180910390a250611879565b60405181907f7b78aadacff901d8b63d0dba4f86283d4db8aef27f9ed70413dd860f1c9532b690600090a25b50505050565b601481565b61100381565b60005460ff16156118ad5760405162461bcd60e51b815260040161053190613298565b603260045560966005556000805460ff19166001179055565b60085481565b61100081565b600381565b33611000146118f85760405162461bcd60e51b815260040161053190613130565b60005460ff1661191a5760405162461bcd60e51b815260040161053190612ea1565b60015461192657611d1e565b600154600090600019015b808211611cf2576000805b82841015611a555761194c612839565b600260006001878154811061195d57fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611a3f576004600554816119ca57fe5b048160200151038160200181815250508060026000600188815481106119ec57fe5b6000918252602080832091909101546001600160a01b0316835282810193909352604091820190208351815591830151600183015591909101516002909101805460ff1916911515919091179055611a49565b6001925050611a55565b5083600101935061193c565b828411611bec57611a64612839565b6002600060018681548110611a7557fe5b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151606081018352815481526001820154938101939093526002015460ff161515908201526005549091506004900481602001511115611b5d57600460055481611ae257fe5b04816020015103816020018181525050806002600060018781548110611b0457fe5b6000918252602080832091909101546001600160a01b03168352828101939093526040918201902083518155918301516001808401919091559201516002909101805460ff19169115159190911790559150611bec9050565b6002600060018681548110611b6e57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805480611bb257fe5b600082815260209020810160001990810180546001600160a01b031916905501905583611bdf5750611bec565b5060001990920191611a55565b818015611bf65750805b15611cd5576002600060018681548110611c0c57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120818155600181810192909255600201805460ff19169055805484908110611c5357fe5b600091825260209091200154600180546001600160a01b039092169186908110611c7957fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001805480611cb257fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b82611ce1575050611cf2565b505060019091019060001901611931565b6040517fcfdb3b6ccaeccbdc68be3c59c840e3b3c90f0a7c491f5fff1cf56cfda200dd9c90600090a150505b565b61100481565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081611d41579050509050611d6a836001600160a01b0316612193565b81600081518110611d7757fe5b6020026020010181905250611d8b436121b6565b81600181518110611d9857fe5b6020908102919091010152611dae6102ca6121b6565b81600281518110611dbb57fe5b6020026020010181905250611dcf426121b6565b81600381518110611ddc57fe5b6020026020010181905250611df0816121c9565b9150505b919050565b611e0161285c565b6000611e0b61285c565b611e1361286e565b611e24611e1f86612253565b612278565b90506000805b611e33836122c2565b15611e6c5780611e5f57611e4e611e49846122e3565b612331565b63ffffffff16845260019150611e64565b611e6c565b600101611e2a565b5091935090915050915091565b600081604051602001611e8c9190612d52565b6040516020818303038152906040528051906020012083604051602001611eb39190612d52565b604051602081830303815290604052805190602001201490505b92915050565b015190565b8082015160009060ff811615611ef2576001915081611ef8565b60009150815b505092915050565b60408051600480825260a0820190925260009160609190816020015b6060815260200190600190039081611f1c575050604080516020808252818301909252919250606091908082018180368337019050509050611f6185600001516121b6565b82600081518110611f6e57fe5b6020026020010181905250611f8960208660200151836123b3565b611f92816123c3565b82600181518110611f9f57fe5b6020026020010181905250611fb785604001516121b6565b82600281518110611fc457fe5b6020026020010181905250611fdf60208660600151836123b3565b611fe8816123c3565b82600381518110611ff557fe5b602002602001018190525061201b602061200e846121c9565b80519060200120836123b3565b6040805160b080825260e0820190925260609160208201818036833701905050905061204b818360006020612419565b61205d81876080015160206060612419565b61206b818660806030612419565b604080516001808252818301909252606091602082018180368337019050509050815160016020830182602086016066600019fa6120a857600080fd5b5060016120b682600061246c565b60ff16146120cb576000945050505050611ecd565b5060019695505050505050565b8151815160009160019181148083146120f45760009250612132565b600160208701838101602088015b60028483851001141561212d5780518351146121215760009650600093505b60209283019201612102565b505050505b5090949350505050565b6000816020018351101561214f57600080fd5b50016020015190565b60408051600480825260a08201909252606091829190816020015b6060815260200190600190039081612173579050509050611d6a836123c3565b60408051600560a21b8318601482015260348101909152606090611df0816123c3565b6060611ecd6121c483612488565b6123c3565b60608151600014156121ea5750604080516000815260208101909152611df4565b6060826000815181106121f957fe5b602002602001015190506000600190505b835181101561223a576122308285838151811061222357fe5b602002602001015161256e565b915060010161220a565b50611df061224d825160c060ff166125eb565b8261256e565b61225b61288e565b506040805180820190915281518152602082810190820152919050565b61228061286e565b612289826126bd565b61229257600080fd5b60006122a183602001516126f7565b60208085015160408051808201909152868152920190820152915050919050565b60006122cc61288e565b505080518051602091820151919092015191011190565b6122eb61288e565b6122f4826122c2565b6122fd57600080fd5b6020820151600061230d8261275a565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061234657508151602110155b61234f57600080fd5b600061235e83602001516126f7565b905080836000015110156123845760405162461bcd60e51b8152600401610531906132cf565b8251602080850151830180519284900392918310156123aa57826020036101000a820491505b50949350505050565b9091018181526020918201910152565b6060815160011480156123f55750607f60f81b826000815181106123e357fe5b01602001516001600160f81b03191611155b15612401575080611df4565b611ecd6124138351608060ff166125eb565b8361256e565b60005b818110156106f05783818151811061243057fe5b602001015160f81c60f81b85848060010195508151811061244d57fe5b60200101906001600160f81b031916908160001a90535060010161241c565b6000816001018351101561247f57600080fd5b50016001015190565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff1984166124cc575060186124f0565b6fffffffffffffffffffffffffffffffff1984166124ec575060106124f0565b5060005b60208110156125265781818151811061250557fe5b01602001516001600160f81b0319161561251e57612526565b6001016124f0565b60008160200390506060816040519080825280601f01601f19166020018201604052801561255b576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b8183101561259f578051835260209283019201612587565b50855184518101855292509050808201602086015b818310156125cc5780518352602092830192016125b4565b508651929092011591909101601f01601f191660405250905092915050565b60606801000000000000000083106126155760405162461bcd60e51b815260040161053190613011565b6040805160018082528183019092526060916020820181803683370190505090506037841161266f5782840160f81b8160008151811061265157fe5b60200101906001600160f81b031916908160001a9053509050611ecd565b606061267a85612488565b90508381510160370160f81b8260008151811061269357fe5b60200101906001600160f81b031916908160001a9053506126b4828261256e565b95945050505050565b80516000906126ce57506000611df4565b6020820151805160001a9060c08210156126ed57600092505050611df4565b5060019392505050565b8051600090811a6080811015612711576000915050611df4565b60b881108061272c575060c0811080159061272c575060f881105b1561273b576001915050611df4565b60c081101561274f5760b519019050611df4565b60f519019050611df4565b80516000908190811a60808110156127755760019150612832565b60b881101561278a57607e1981019150612832565b60c08110156127db57600060b78203600186019550806020036101000a8651049150600181018201935050808310156127d55760405162461bcd60e51b815260040161053190613180565b50612832565b60f88110156127f05760be1981019150612832565b600060f78203600186019550806020036101000a865104915060018101820193505080831015611ef85760405162461bcd60e51b815260040161053190613180565b5092915050565b604051806060016040528060008152602001600081526020016000151581525090565b60408051602081019091526000815290565b604051806040016040528061288161288e565b8152602001600081525090565b604051806040016040528060008152602001600081525090565b600082601f8301126128b8578081fd5b81516128cb6128c6826135c4565b61359d565b818152915060208083019084810160005b84811015612941578151870188603f8201126128f757600080fd5b838101516129076128c6826135e4565b81815260408b8184860101111561291d57600080fd5b61292c83888401838701613608565b508652505092820192908201906001016128dc565b505050505092915050565b60008083601f84011261295d578182fd5b50813567ffffffffffffffff811115612974578182fd5b60208301915083602082850101111561298c57600080fd5b9250929050565b600082601f8301126129a3578081fd5b81356129b16128c6826135e4565b91508082528360208285010111156129c857600080fd5b8060208401602084013760009082016020015292915050565b600060a082840312156129f2578081fd5b6129fc60a061359d565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff811115612a3a57600080fd5b612a4684828501612993565b60808301525092915050565b600060208284031215612a63578081fd5b8135612a6e81613634565b9392505050565b60008060408385031215612a87578081fd5b825167ffffffffffffffff80821115612a9e578283fd5b81850186601f820112612aaf578384fd5b80519250612abf6128c6846135c4565b80848252602080830192508084018a828389028701011115612adf578788fd5b8794505b86851015612b0a578051612af681613634565b845260019490940193928101928101612ae3565b508801519096509350505080821115612b21578283fd5b50612b2e858286016128a8565b9150509250929050565b600060208284031215612b49578081fd5b81518015158114612a6e578182fd5b60008060008060408587031215612b6d578182fd5b843567ffffffffffffffff80821115612b84578384fd5b612b908883890161294c565b90965094506020870135915080821115612ba8578384fd5b50612bb58782880161294c565b95989497509550505050565b600060208284031215612bd2578081fd5b813567ffffffffffffffff80821115612be9578283fd5b81840160608187031215612bfb578384fd5b612c05606061359d565b9250803582811115612c15578485fd5b612c21878284016129e1565b845250602081013582811115612c35578485fd5b612c41878284016129e1565b602085015250604081013582811115612c58578485fd5b612c6487828401612993565b6040850152509195945050505050565b600060208284031215612c85578081fd5b5035919050565b600060208284031215612c9d578081fd5b5051919050565b600080600060408486031215612cb8578283fd5b833560ff81168114612cc8578384fd5b9250602084013567ffffffffffffffff811115612ce3578283fd5b612cef8682870161294c565b9497909650939450505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452612d3e816020860160208601613608565b601f01601f19169290920160200192915050565b60008251612d64818460208701613608565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252612a6e6020830184612d26565b600060408252612dcd604083018688612cfc565b8281036020840152612de0818587612cfc565b979650505050505050565b6020808252602a908201527f6c656e677468206f66206d616c6963696f7573566f7465536c61736853636f706040820152690ca40dad2e6dac2e8c6d60b31b606082015260800190565b6020808252601f908201527f746865206d73672073656e646572206973206e6f7420612072656c6179657200604082015260600190565b6020808252818101527f6d616c6963696f757320766f746520736c617368206e6f7420656e61626c6564604082015260600190565b60208082526019908201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604082015260600190565b6020808252602b908201527f746865206d616c6963696f757320766f746520736c6173682073636f7065206f60408201526a7574206f662072616e676560a81b606082015260800190565b6020808252601a908201527f6e6f2076696f6c6174696f6e206f6620766f74652072756c6573000000000000604082015260600190565b6020808252818101527f7468652066656c6f6e795468726573686f6c64206f7574206f662072616e6765604082015260600190565b6020808252602b908201527f6c656e677468206f6620656e61626c654d616c6963696f7573566f7465536c6160408201526a0e6d040dad2e6dac2e8c6d60ab1b606082015260800190565b60208082526017908201527f766572696679207369676e6174757265206661696c6564000000000000000000604082015260600190565b6020808252600e908201526d696e70757420746f6f206c6f6e6760901b604082015260600190565b60208082526019908201527f7372634e756d20626967676572207468616e207461724e756d00000000000000604082015260600190565b6020808252602c908201527f7468652066696e616c69747920736c6173682072657761726420726174696f2060408201526b6f7574206f662072616e676560a01b606082015260800190565b60208082526027908201527f6c656e677468206f66206d697364656d65616e6f725468726573686f6c64206d6040820152660d2e6dac2e8c6d60cb1b606082015260800190565b60208082526013908201527274776f206964656e746963616c20766f74657360681b604082015260600190565b60208082526030908201527f746865206d6573736167652073656e646572206d7573742062652076616c696460408201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b6020808252601490820152736761737072696365206973206e6f74207a65726f60601b604082015260600190565b6020808252601590820152741d9bdd195059191c881a5cc81b9bdd08199bdd5b99605a1b604082015260600190565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b60208082526022908201527f6c656e677468206f662066656c6f6e795468726573686f6c64206d69736d61746040820152610c6d60f31b606082015260800190565b60208082526019908201527f74686520636f6e747261637420616c726561647920696e697400000000000000604082015260600190565b6020808252601a908201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604082015260600190565b60208082526025908201527f746865206d697364656d65616e6f725468726573686f6c64206f7574206f662060408201526472616e676560d81b606082015260800190565b6020808252602f908201527f746865206d6573736167652073656e646572206d7573742062652063726f737360408201526e0818da185a5b8818dbdb9d1c9858dd608a1b606082015260800190565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b6020808252600d908201526c756e6b6e6f776e20706172616d60981b604082015260600190565b6020808252601490820152731d185c99d95d08189b1bd8dac81d1bdbc81bdb1960621b604082015260600190565b6020808252601e908201527f7265636569766520756e65787065637465642073796e207061636b6167650000604082015260600190565b6020808252602b908201527f6c656e677468206f662066696e616c697479536c61736852657761726452617460408201526a0d2de40dad2e6dac2e8c6d60ab1b606082015260800190565b6020808252818101527f63616e206e6f7420736c61736820747769636520696e206f6e6520626c6f636b604082015260600190565b61ffff91909116815260200190565b90815260200190565b6000838252604060208301526135246040830184612d26565b949350505050565b918252602082015260400190565b92835260208301919091521515604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600060ff851682526060602083015261358d6060830185612d26565b9050826040830152949350505050565b60405181810167ffffffffffffffff811182821017156135bc57600080fd5b604052919050565b600067ffffffffffffffff8211156135da578081fd5b5060209081020190565b600067ffffffffffffffff8211156135fa578081fd5b50601f01601f191660200190565b60005b8381101561362357818101518382015260200161360b565b838111156118795750506000910152565b6001600160a01b038116811461364957600080fd5b5056fea164736f6c6343000604000a", + }, + }, + } + latestUpgrade[defaultNet] = latestUpgrade[rialtoNet] } -func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, statedb *state.StateDB) { +func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.Int, lastBlockTime uint64, blockTime uint64, statedb *state.StateDB) { if config == nil || blockNumber == nil || statedb == nil { return } @@ -758,6 +808,9 @@ func UpgradeBuildInSystemContract(config *params.ChainConfig, blockNumber *big.I applySystemContractUpgrade(platoUpgrade[network], blockNumber, statedb, logger) } + if config.IsOnKepler(blockNumber, lastBlockTime, blockTime) { + applySystemContractUpgrade(keplerUpgrade[network], blockNumber, statedb, logger) + } /* apply other upgrades */ diff --git a/miner/worker.go b/miner/worker.go index ffade84a39..d1ea4f8034 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -914,7 +914,7 @@ func (w *worker) prepareWork(genParams *generateParams) (*environment, error) { } // Handle upgrade build-in system contract code - systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, env.state) + systemcontracts.UpgradeBuildInSystemContract(w.chainConfig, header.Number, parent.Time, header.Time, env.state) return env, nil } diff --git a/params/config.go b/params/config.go index 6476d2b760..5f0d52a36d 100644 --- a/params/config.go +++ b/params/config.go @@ -448,6 +448,7 @@ type ChainConfig struct { // Fork scheduling was switched from blocks to timestamps here ShanghaiTime *uint64 `json:"shanghaiTime,omitempty" toml:",omitempty"` // Shanghai switch time (nil = no fork, 0 = already on shanghai) + KeplerTime *uint64 `json:"keplerTime,omitempty" toml:",omitempty"` // Kepler switch time (nil = no fork, 0 = already activated) CancunTime *uint64 `json:"cancunTime,omitempty" toml:",omitempty"` // Cancun switch time (nil = no fork, 0 = already on cancun) PragueTime *uint64 `json:"pragueTime,omitempty" toml:",omitempty"` // Prague switch time (nil = no fork, 0 = already on prague) VerkleTime *uint64 `json:"verkleTime,omitempty" toml:",omitempty"` // Verkle switch time (nil = no fork, 0 = already on verkle) @@ -530,7 +531,12 @@ func (c *ChainConfig) String() string { engine = "unknown" } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Engine: %v}", + var KeplerTime *big.Int + if c.KeplerTime != nil { + KeplerTime = big.NewInt(0).SetUint64(*c.KeplerTime) + } + + return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, KeplerTime: %v, Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -561,6 +567,7 @@ func (c *ChainConfig) String() string { c.LubanBlock, c.PlatoBlock, c.HertzBlock, + KeplerTime, engine, ) } @@ -764,6 +771,20 @@ func (c *ChainConfig) IsShanghai(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.ShanghaiTime, time) } +// IsKepler returns whether time is either equal to the kepler fork time or greater. +func (c *ChainConfig) IsKepler(num *big.Int, time uint64) bool { + return c.IsLondon(num) && isTimestampForked(c.KeplerTime, time) +} + +// IsOnKepler returns whether currentBlockTime is either equal to the kepler fork time or greater firstly. +func (c *ChainConfig) IsOnKepler(currentBlockNumber *big.Int, lastBlockTime uint64, currentBlockTime uint64) bool { + lastBlockNumber := new(big.Int) + if currentBlockNumber.Cmp(big.NewInt(1)) >= 0 { + lastBlockNumber.Sub(currentBlockNumber, big.NewInt(1)) + } + return !c.IsKepler(lastBlockNumber, lastBlockTime) && c.IsKepler(currentBlockNumber, currentBlockTime) +} + // IsCancun returns whether num is either equal to the Cancun fork time or greater. func (c *ChainConfig) IsCancun(num *big.Int, time uint64) bool { return c.IsLondon(num) && isTimestampForked(c.CancunTime, time) @@ -961,6 +982,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, headNumber *big.Int, if isForkTimestampIncompatible(c.ShanghaiTime, newcfg.ShanghaiTime, headTimestamp) { return newTimestampCompatError("Shanghai fork timestamp", c.ShanghaiTime, newcfg.ShanghaiTime) } + if isForkTimestampIncompatible(c.KeplerTime, newcfg.KeplerTime, headTimestamp) { + return newTimestampCompatError("Kepler fork timestamp", c.KeplerTime, newcfg.KeplerTime) + } if isForkTimestampIncompatible(c.CancunTime, newcfg.CancunTime, headTimestamp) { return newTimestampCompatError("Cancun fork timestamp", c.CancunTime, newcfg.CancunTime) } @@ -1121,7 +1145,7 @@ type Rules struct { IsLuban bool IsPlato bool IsHertz bool - IsShanghai, IsCancun, IsPrague bool + IsShanghai, IsKepler, IsCancun, IsPrague bool IsVerkle bool } @@ -1151,6 +1175,7 @@ func (c *ChainConfig) Rules(num *big.Int, isMerge bool, timestamp uint64) Rules IsPlato: c.IsPlato(num), IsHertz: c.IsHertz(num), IsShanghai: c.IsShanghai(num, timestamp), + IsKepler: c.IsKepler(num, timestamp), IsCancun: c.IsCancun(num, timestamp), IsPrague: c.IsPrague(num, timestamp), IsVerkle: c.IsVerkle(num, timestamp),