From 260ac244da713436bbe2812cf97aab9e8b915a08 Mon Sep 17 00:00:00 2001 From: StefanIliev545 Date: Tue, 10 Dec 2024 18:48:56 +0200 Subject: [PATCH] made it a flat fee. --- .../testnet/layer2/003_set_fee.ts | 2 +- contracts/generated/Fees/Fees.go | 64 +++++++++---------- .../ManagementContract/ManagementContract.go | 2 +- .../MerkleTreeMessageBus.go | 2 +- contracts/generated/MessageBus/MessageBus.go | 2 +- .../SystemDeployer/SystemDeployer.go | 2 +- contracts/src/messaging/MessageBus.sol | 2 +- contracts/src/system/Fees.sol | 18 +++--- 8 files changed, 47 insertions(+), 47 deletions(-) diff --git a/contracts/deployment_scripts/testnet/layer2/003_set_fee.ts b/contracts/deployment_scripts/testnet/layer2/003_set_fee.ts index 5c2404774..71d8491d8 100644 --- a/contracts/deployment_scripts/testnet/layer2/003_set_fee.ts +++ b/contracts/deployment_scripts/testnet/layer2/003_set_fee.ts @@ -28,7 +28,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { console.log(`Owner = ${owner}`); console.log(`Signer = ${l2Accounts.deployer}`); - const tx = await fees.setMessageFee(10000); + const tx = await fees.setMessageFee(32*10000); const receipt =await tx.wait(); if (receipt.status != 1) { diff --git a/contracts/generated/Fees/Fees.go b/contracts/generated/Fees/Fees.go index 63b660c47..a2f57a233 100644 --- a/contracts/generated/Fees/Fees.go +++ b/contracts/generated/Fees/Fees.go @@ -31,8 +31,8 @@ var ( // FeesMetaData contains all meta data concerning the Fees contract. var FeesMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"collectedFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"initialMessageFeePerByte\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"eoaOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"messageSize\",\"type\":\"uint256\"}],\"name\":\"messageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMessageFeePerByte\",\"type\":\"uint256\"}],\"name\":\"setMessageFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawalCollectedFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"collectedFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"flatFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"eoaOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newFeeForMessage\",\"type\":\"uint256\"}],\"name\":\"setMessageFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawalCollectedFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610688806100d96000396000f3fe60806040526004361061007f5760003560e01c80639003adfe1161004e5780639003adfe1461012e578063afe997ea14610141578063da35a26f14610156578063f2fde38b1461017657600080fd5b80631a90a2191461008b57806323aa2a9d146100b2578063715018a6146100d45780638da5cb5b146100e957600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506000545b6040516100a99190610544565b60405180910390f35b3480156100be57600080fd5b506100d26100cd366004610570565b610196565b005b3480156100e057600080fd5b506100d26101a3565b3480156100f557600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516100a991906105b0565b34801561013a57600080fd5b504761009c565b34801561014d57600080fd5b506100d26101b7565b34801561016257600080fd5b506100d26101713660046105d2565b61021a565b34801561018257600080fd5b506100d261019136600461060a565b610362565b61019e6103bf565b600055565b6101ab6103bf565b6101b56000610433565b565b6101bf6103bf565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610217573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102655750825b905060008267ffffffffffffffff1660011480156102825750303b155b905081158015610290575080155b156102c7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102fb57845468ff00000000000000001916680100000000000000001785555b610304866104bc565b6000879055831561035957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035090600190610644565b60405180910390a15b50505050505050565b61036a6103bf565b6001600160a01b0381166103b65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b60405180910390fd5b61021781610433565b336103f17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101b557336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104c46104cd565b61021781610534565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101b5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61036a6104cd565b805b82525050565b60208101610552828461053c565b92915050565b805b811461021757600080fd5b803561055281610558565b60006020828403121561058557610585600080fd5b61058f8383610565565b9392505050565b60006001600160a01b038216610552565b61053e81610596565b6020810161055282846105a7565b61055a81610596565b8035610552816105be565b600080604083850312156105e8576105e8600080fd5b6105f28484610565565b915061060184602085016105c7565b90509250929050565b60006020828403121561061f5761061f600080fd5b61058f83836105c7565b600067ffffffffffffffff8216610552565b61053e81610629565b60208101610552828461063b56fea264697066735822122080f0c01e34a6bfd9ed27e9c05c50a018ef9cc6e669f767856b4c30e98b70567764736f6c634300081c0033", } // FeesABI is the input ABI used to generate the binding from. @@ -233,12 +233,12 @@ func (_Fees *FeesCallerSession) CollectedFees() (*big.Int, error) { return _Fees.Contract.CollectedFees(&_Fees.CallOpts) } -// MessageFee is a free data retrieval call binding the contract method 0xf1d44d51. +// MessageFee is a free data retrieval call binding the contract method 0x1a90a219. // -// Solidity: function messageFee(uint256 messageSize) view returns(uint256) -func (_Fees *FeesCaller) MessageFee(opts *bind.CallOpts, messageSize *big.Int) (*big.Int, error) { +// Solidity: function messageFee() view returns(uint256) +func (_Fees *FeesCaller) MessageFee(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Fees.contract.Call(opts, &out, "messageFee", messageSize) + err := _Fees.contract.Call(opts, &out, "messageFee") if err != nil { return *new(*big.Int), err @@ -250,18 +250,18 @@ func (_Fees *FeesCaller) MessageFee(opts *bind.CallOpts, messageSize *big.Int) ( } -// MessageFee is a free data retrieval call binding the contract method 0xf1d44d51. +// MessageFee is a free data retrieval call binding the contract method 0x1a90a219. // -// Solidity: function messageFee(uint256 messageSize) view returns(uint256) -func (_Fees *FeesSession) MessageFee(messageSize *big.Int) (*big.Int, error) { - return _Fees.Contract.MessageFee(&_Fees.CallOpts, messageSize) +// Solidity: function messageFee() view returns(uint256) +func (_Fees *FeesSession) MessageFee() (*big.Int, error) { + return _Fees.Contract.MessageFee(&_Fees.CallOpts) } -// MessageFee is a free data retrieval call binding the contract method 0xf1d44d51. +// MessageFee is a free data retrieval call binding the contract method 0x1a90a219. // -// Solidity: function messageFee(uint256 messageSize) view returns(uint256) -func (_Fees *FeesCallerSession) MessageFee(messageSize *big.Int) (*big.Int, error) { - return _Fees.Contract.MessageFee(&_Fees.CallOpts, messageSize) +// Solidity: function messageFee() view returns(uint256) +func (_Fees *FeesCallerSession) MessageFee() (*big.Int, error) { + return _Fees.Contract.MessageFee(&_Fees.CallOpts) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -297,23 +297,23 @@ func (_Fees *FeesCallerSession) Owner() (common.Address, error) { // Initialize is a paid mutator transaction binding the contract method 0xda35a26f. // -// Solidity: function initialize(uint256 initialMessageFeePerByte, address eoaOwner) returns() -func (_Fees *FeesTransactor) Initialize(opts *bind.TransactOpts, initialMessageFeePerByte *big.Int, eoaOwner common.Address) (*types.Transaction, error) { - return _Fees.contract.Transact(opts, "initialize", initialMessageFeePerByte, eoaOwner) +// Solidity: function initialize(uint256 flatFee, address eoaOwner) returns() +func (_Fees *FeesTransactor) Initialize(opts *bind.TransactOpts, flatFee *big.Int, eoaOwner common.Address) (*types.Transaction, error) { + return _Fees.contract.Transact(opts, "initialize", flatFee, eoaOwner) } // Initialize is a paid mutator transaction binding the contract method 0xda35a26f. // -// Solidity: function initialize(uint256 initialMessageFeePerByte, address eoaOwner) returns() -func (_Fees *FeesSession) Initialize(initialMessageFeePerByte *big.Int, eoaOwner common.Address) (*types.Transaction, error) { - return _Fees.Contract.Initialize(&_Fees.TransactOpts, initialMessageFeePerByte, eoaOwner) +// Solidity: function initialize(uint256 flatFee, address eoaOwner) returns() +func (_Fees *FeesSession) Initialize(flatFee *big.Int, eoaOwner common.Address) (*types.Transaction, error) { + return _Fees.Contract.Initialize(&_Fees.TransactOpts, flatFee, eoaOwner) } // Initialize is a paid mutator transaction binding the contract method 0xda35a26f. // -// Solidity: function initialize(uint256 initialMessageFeePerByte, address eoaOwner) returns() -func (_Fees *FeesTransactorSession) Initialize(initialMessageFeePerByte *big.Int, eoaOwner common.Address) (*types.Transaction, error) { - return _Fees.Contract.Initialize(&_Fees.TransactOpts, initialMessageFeePerByte, eoaOwner) +// Solidity: function initialize(uint256 flatFee, address eoaOwner) returns() +func (_Fees *FeesTransactorSession) Initialize(flatFee *big.Int, eoaOwner common.Address) (*types.Transaction, error) { + return _Fees.Contract.Initialize(&_Fees.TransactOpts, flatFee, eoaOwner) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -339,23 +339,23 @@ func (_Fees *FeesTransactorSession) RenounceOwnership() (*types.Transaction, err // SetMessageFee is a paid mutator transaction binding the contract method 0x23aa2a9d. // -// Solidity: function setMessageFee(uint256 newMessageFeePerByte) returns() -func (_Fees *FeesTransactor) SetMessageFee(opts *bind.TransactOpts, newMessageFeePerByte *big.Int) (*types.Transaction, error) { - return _Fees.contract.Transact(opts, "setMessageFee", newMessageFeePerByte) +// Solidity: function setMessageFee(uint256 newFeeForMessage) returns() +func (_Fees *FeesTransactor) SetMessageFee(opts *bind.TransactOpts, newFeeForMessage *big.Int) (*types.Transaction, error) { + return _Fees.contract.Transact(opts, "setMessageFee", newFeeForMessage) } // SetMessageFee is a paid mutator transaction binding the contract method 0x23aa2a9d. // -// Solidity: function setMessageFee(uint256 newMessageFeePerByte) returns() -func (_Fees *FeesSession) SetMessageFee(newMessageFeePerByte *big.Int) (*types.Transaction, error) { - return _Fees.Contract.SetMessageFee(&_Fees.TransactOpts, newMessageFeePerByte) +// Solidity: function setMessageFee(uint256 newFeeForMessage) returns() +func (_Fees *FeesSession) SetMessageFee(newFeeForMessage *big.Int) (*types.Transaction, error) { + return _Fees.Contract.SetMessageFee(&_Fees.TransactOpts, newFeeForMessage) } // SetMessageFee is a paid mutator transaction binding the contract method 0x23aa2a9d. // -// Solidity: function setMessageFee(uint256 newMessageFeePerByte) returns() -func (_Fees *FeesTransactorSession) SetMessageFee(newMessageFeePerByte *big.Int) (*types.Transaction, error) { - return _Fees.Contract.SetMessageFee(&_Fees.TransactOpts, newMessageFeePerByte) +// Solidity: function setMessageFee(uint256 newFeeForMessage) returns() +func (_Fees *FeesTransactorSession) SetMessageFee(newFeeForMessage *big.Int) (*types.Transaction, error) { + return _Fees.Contract.SetMessageFee(&_Fees.TransactOpts, newFeeForMessage) } // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 0b88ce3d4..22d5738a7 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -62,7 +62,7 @@ type StructsValueTransferMessage struct { // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetRollupByNumber\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetUniqueForkID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"rollupNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"forkID\",\"type\":\"bytes32\"}],\"name\":\"addCrossChainMessagesRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61528b8061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b6125c680612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61246d806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061015690339083906004016111ef565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d9061123e565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c8919061124e565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611277565b61047c565b3480156101fd57600080fd5b5061018361020c3660046112ca565b6104db565b34801561021d57600080fd5b5061023161022c366004611277565b610521565b6040516101c891906112f1565b61018361024c366004611313565b610573565b34801561025d57600080fd5b5061018361026c36600461134b565b6106c2565b34801561027d57600080fd5b5061018361028c36600461136a565b610741565b34801561029d57600080fd5b506101836108ac565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c89190611399565b3480156102f757600080fd5b506101836103063660046113a7565b6108c0565b34801561031757600080fd5b50610183610326366004611313565b610a2c565b34801561033757600080fd5b50610183610346366004611313565b610aac565b61035e610359366004611470565b610b75565b6040516101c891906114fd565b34801561037757600080fd5b5061018361038636600461156b565b610c82565b34801561039757600080fd5b506101836103a63660046115d6565b610d83565b3480156103b757600080fd5b506101836103c63660046115f6565b610dc9565b3480156103d757600080fd5b506101836103e636600461134b565b610f14565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d51906104369060209060040161168b565b602060405180830381865afa158015610453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047791906116a4565b905090565b600080826040516020016104909190611862565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104d45760405162461bcd60e51b815260040161019d906118b1565b9392505050565b6104e3610f6b565b60008181526004602052604081205490036105105760405162461bcd60e51b815260040161019d906118f3565b600090815260046020526040812055565b600080826040516020016105359190611862565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061056b5750428111155b949350505050565b60003411801561058257508034145b61059e5760405162461bcd60e51b815260040161019d9061195b565b60035434906001600160a01b0316156106625760006105bb6103eb565b9050803410156105dd5760405162461bcd60e51b815260040161019d9061199b565b6105e781346119c1565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610639576040519150601f19603f3d011682016040523d82523d6000602084013e61063e565b606091505b505090508061065f5760405162461bcd60e51b815260040161019d90611a2c565b50505b600061066d33610fdf565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106b4929190611a3c565b60405180910390a350505050565b6106ca610f6b565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610717576040519150601f19603f3d011682016040523d82523d6000602084013e61071c565b606091505b505090508061073d5760405162461bcd60e51b815260040161019d90611a89565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561078c5750825b905060008267ffffffffffffffff1660011480156107a95750303b155b9050811580156107b7575080155b156107ee576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561082257845468ff00000000000000001916680100000000000000001785555b61082b8761103d565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156108a357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089a90600190611ab6565b60405180910390a15b50505050505050565b6108b4610f6b565b6108be600061104e565b565b60006108cd600130611ac4565b90506109007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109275750336001600160a01b038216145b6109435760405162461bcd60e51b815260040161019d90611b19565b600061094f8342611b29565b90506000846040516020016109649190611862565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a85760405162461bcd60e51b815260040161019d90611b94565b6000818152602081815260408220849055600191906109c99088018861134b565b6001600160a01b0316815260208101919091526040016000908120906109f56080880160608901611ba4565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016108a38282611fd6565b610a34610f6b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a81576040519150601f19603f3d011682016040523d82523d6000602084013e610a86565b606091505b5050905080610aa75760405162461bcd60e51b815260040161019d90611a89565b505050565b6000610ab9600130611ac4565b9050610aec7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b135750336001600160a01b038216145b610b2f5760405162461bcd60e51b815260040161019d90611b19565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b68919061124e565b60405180910390a2505050565b6003546000906001600160a01b031615610c2b576000610b936103eb565b905080341015610bb55760405162461bcd60e51b815260040161019d90612038565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c02576040519150601f19603f3d011682016040523d82523d6000602084013e610c07565b606091505b5050905080610c285760405162461bcd60e51b815260040161019d90611a2c565b50505b610c3433610fdf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c719796959493929190612048565b60405180910390a195945050505050565b6000818152600460205260408120549003610caf5760405162461bcd60e51b815260040161019d90612103565b600081815260046020526040902054421015610cdd5760405162461bcd60e51b815260040161019d9061214f565b600084604051602001610cf091906121d4565b60405160208183030381529060405280519060200120604051602001610d169190612214565b604051602081830303815290604052805190602001209050610d6084848484604051602001610d459190612233565b604051602081830303815290604052805190602001206110cc565b610d7c5760405162461bcd60e51b815260040161019d9061229d565b5050505050565b610d8b610f6b565b60008281526004602052604090205415610db75760405162461bcd60e51b815260040161019d90612305565b60009182526004602052604090912055565b6000818152600460205260408120549003610df65760405162461bcd60e51b815260040161019d90612103565b600081815260046020526040902054421015610e245760405162461bcd60e51b815260040161019d9061214f565b6000610e33602086018661134b565b610e436040870160208801612315565b610e536060880160408901611ba4565b610e636080890160608a01611ba4565b610e7060808a018a611cfb565b610e8060c08c0160a08d01612334565b604051602001610e969796959493929190612048565b604051602081830303815290604052805190602001209050600081604051602001610ec19190612385565b604051602081830303815290604052805190602001209050610ef085858584604051602001610d459190612233565b610f0c5760405162461bcd60e51b815260040161019d906123ed565b505050505050565b610f1c610f6b565b6001600160a01b038116610f5f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d9190611399565b610f688161104e565b50565b33610f9d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d9190611399565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061101283856123fd565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110456110e4565b610f688161114b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110da868685611153565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f1c6110e4565b600081815b8481101561118c576111828287878481811061117657611176612421565b90506020020135611195565b9150600101611158565b50949350505050565b60008183106111b15760008281526020849052604090206111c0565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111c3565b6111e3816111c9565b82525050565b806111e3565b604081016111fd82856111da565b6104d460208301846111e9565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111c38161120a565b602081016111c382846111e9565b600060c0828403121561127157611271600080fd5b50919050565b60006020828403121561128c5761128c600080fd5b813567ffffffffffffffff8111156112a6576112a6600080fd5b61056b8482850161125c565b805b8114610f6857600080fd5b80356111c3816112b2565b6000602082840312156112df576112df600080fd5b6111c083836112bf565b8015156111e3565b602081016111c382846112e9565b6112b4816111c9565b80356111c3816112ff565b6000806040838503121561132957611329600080fd5b6113338484611308565b915061134284602085016112bf565b90509250929050565b60006020828403121561136057611360600080fd5b6111c08383611308565b6000806040838503121561138057611380600080fd5b61138a8484611308565b91506113428460208501611308565b602081016111c382846111da565b600080604083850312156113bd576113bd600080fd5b823567ffffffffffffffff8111156113d7576113d7600080fd5b6113e38582860161125c565b92505061134284602085016112bf565b63ffffffff81166112b4565b80356111c3816113f3565b60008083601f84011261141f5761141f600080fd5b50813567ffffffffffffffff81111561143a5761143a600080fd5b60208301915083600182028301111561145557611455600080fd5b9250929050565b60ff81166112b4565b80356111c38161145c565b60008060008060006080868803121561148b5761148b600080fd5b61149587876113ff565b94506114a487602088016113ff565b9350604086013567ffffffffffffffff8111156114c3576114c3600080fd5b6114cf8882890161140a565b93509350506114e18760608801611465565b90509295509295909350565b67ffffffffffffffff81166111e3565b602081016111c382846114ed565b60006080828403121561127157611271600080fd5b60008083601f84011261153557611535600080fd5b50813567ffffffffffffffff81111561155057611550600080fd5b60208301915083602082028301111561145557611455600080fd5b60008060008060c0858703121561158457611584600080fd5b61158e868661150b565b9350608085013567ffffffffffffffff8111156115ad576115ad600080fd5b6115b987828801611520565b93509350506115cb8660a087016112bf565b905092959194509250565b600080604083850312156115ec576115ec600080fd5b61133384846112bf565b6000806000806060858703121561160f5761160f600080fd5b843567ffffffffffffffff81111561162957611629600080fd5b6116358782880161125c565b945050602085013567ffffffffffffffff81111561165557611655600080fd5b61166187828801611520565b93509350506115cb86604087016112bf565b60006111c361167f8381565b90565b6111e381611673565b602081016111c38284611682565b80516111c3816112b2565b6000602082840312156116b9576116b9600080fd5b6111c08383611699565b5060006111c36020830183611308565b67ffffffffffffffff81166112b4565b80356111c3816116d3565b5060006111c360208301836116e3565b5060006111c360208301836113ff565b63ffffffff81166111e3565b6000808335601e193685900301811261173557611735600080fd5b830160208101925035905067ffffffffffffffff81111561175857611758600080fd5b3681900382131561145557611455600080fd5b82818337506000910152565b81835260208301925061178b82848361176b565b50601f01601f19160190565b5060006111c36020830183611465565b60ff81166111e3565b600060c083016117c083806116c3565b6117ca85826111da565b506117d860208401846116ee565b6117e560208601826114ed565b506117f360408401846116fe565b611800604086018261170e565b5061180e60608401846116fe565b61181b606086018261170e565b50611829608084018461171a565b858303608087015261183c838284611777565b9250505061184d60a0840184611797565b61185a60a08601826117a7565b509392505050565b602080825281016111c081846117b0565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111c381611873565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611238565b602080825281016111c3816118c1565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506118ab565b602080825281016111c381611903565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611238565b602080825281016111c38161196b565b634e487b7160e01b600052601160045260246000fd5b818103818111156111c3576111c36119ab565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c3816119d4565b60408101611a4a82856111e9565b6104d460208301846114ed565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611238565b602080825281016111c381611a57565b60006111c3825b67ffffffffffffffff1690565b6111e381611a99565b602081016111c38284611aad565b6001600160a01b039182169190811690828203908111156111c3576111c36119ab565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611238565b602080825281016111c381611ae7565b808201808211156111c3576111c36119ab565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c381611b3c565b600060208284031215611bb957611bb9600080fd5b6111c083836113ff565b600081356111c3816112ff565b60006001600160a01b03835b81169019929092169190911792915050565b60006111c3826111c9565b60006111c382611bee565b611c0d82611bf9565b611c18818354611bd0565b8255505050565b600081356111c3816116d3565b60007bffffffffffffffff0000000000000000000000000000000000000000611bdc8460a01b90565b60006111c367ffffffffffffffff8316611aa0565b611c7382611c55565b611c18818354611c2c565b600081356111c3816113f3565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bdc8460e01b90565b600063ffffffff82166111c3565b611ccf82611cb8565b611c18818354611c8b565b600063ffffffff83611bdc565b611cf082611cb8565b611c18818354611cda565b6000808335601e1936859003018112611d1657611d16600080fd5b8301915050803567ffffffffffffffff811115611d3557611d35600080fd5b60208201915060018102360382131561145557611455600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d9057607f821691505b60208210810361127157611271611d66565b611dab83611673565b815460001960089490940293841b1916921b91909117905550565b6000610aa7818484611da2565b8181101561073d57611de6600082611dc6565b600101611dd3565b601f821115610aa7576000818152602090206020601f85010481016020851015611e155750805b610d7c6020601f860104830182611dd3565b8267ffffffffffffffff811115611e4057611e40611d50565b611e4a8254611d7c565b611e55828285611dee565b506000601f821160018114611e8a5760008315611e725750848201355b600019600885021c1981166002850217855550610f0c565b600084815260209020601f19841690835b82811015611ebb5787850135825560209485019460019092019101611e9b565b5084821015611ed8576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610aa7838383611e27565b600081356111c38161145c565b600060ff82166111c3565b611f1482611f00565b815460ff191660ff821617611c18565b808280611f3081611bc3565b9050611f3c8184611c04565b50506020830180611f4c82611c1f565b9050611f588184611c6a565b50506040830180611f6882611c7e565b9050611f748184611cc6565b5050506060820180611f8582611c7e565b9050611f948160018501611ce7565b5050611fa36080830183611cfb565b611fb1818360028601611ee8565b505060a0820180611fc182611ef3565b9050611fd08160038501611f0b565b50505050565b61073d8282611f24565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c381611fe0565b60c08101612056828a6111da565b61206360208301896114ed565b612070604083018861170e565b61207d606083018761170e565b8181036080830152612090818587611777565b905061209f60a08301846117a7565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c3816120ab565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506118ab565b602080825281016111c381612113565b5060006111c360208301836112bf565b61217981806116c3565b61218383826111da565b5061219160208201826116c3565b61219e60208401826111da565b506121ac604082018261215f565b6121b960408401826111e9565b506121c760608201826116ee565b610aa760608401826114ed565b608081016111c3828461216f565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611238565b60408082528101612224816121e2565b90506111c360208301846111e9565b61223d81836111e9565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506118ab565b602080825281016111c381612245565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c3816122ad565b60006020828403121561232a5761232a600080fd5b6111c083836116e3565b60006020828403121561234957612349600080fd5b6111c08383611465565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611238565b6040808252810161222481612353565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506118ab565b602080825281016111c381612395565b67ffffffffffffffff9182169190811690828201908111156111c3576111c36119ab565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207dba597ff68a2be19ae7cadaedfe68686776216fd31f2a1fb57527ee23cc31c564736f6c634300081c0033a2646970667358221220cbbe1784e06f4c4b37a4f468d0deea1b241c688e2863097cfeaa0adb440f561864736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b50601733601b565b608c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6152738061009b6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638129fc1c11610104578063a25eb31c116100a2578063db5d91b111610071578063db5d91b114610475578063e34fbfc8146104a1578063e874eb20146104b3578063f2fde38b146104c657600080fd5b8063a25eb31c1461042c578063a4ab2faa1461043f578063a52f433c14610452578063d4fab8871461046257600080fd5b806387059edb116100de57806387059edb146103a95780638da5cb5b146103bc57806398077e86146103ec578063a1a227fa1461040c57600080fd5b80638129fc1c1461035d5780638236a7ba14610365578063841548261461038657600080fd5b8063476657381161017c5780636a30d26c1161014b5780636a30d26c146103255780636b9707d61461033a578063715018a61461034d578063728109961461035557600080fd5b806347665738146102cb5780635371a216146102de578063568699c8146102f157806368e103831461031257600080fd5b80632f0cb9e3116101b85780632f0cb9e3146102255780633e60a22f1461025557806343348b2f14610296578063440c953b146102c257600080fd5b80620ddd27146101de57806303e72e48146101fd578063073b6ef314610212575b600080fd5b6101e7600e5481565b6040516101f491906119de565b60405180910390f35b61021061020b366004611b14565b6104d9565b005b610210610220366004611c89565b6105e1565b610248610233366004611d57565b600c6020526000908152604090205460ff1681565b6040516101f49190611d7e565b610289610263366004611d8c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516101f49190611dd8565b6102486102a4366004611de6565b6001600160a01b031660009081526020819052604090205460ff1690565b6101e760055481565b6102106102d9366004611de6565b6107d8565b6102106102ec366004611e6b565b610878565b6103046102ff366004611d57565b610a1d565b6040516101f4929190611f6d565b610210610320366004611f8d565b610a73565b61032d610b17565b6040516101f49190612090565b610210610348366004611de6565b610bf0565b610210610c80565b610210610c94565b610210610d19565b610378610373366004611d57565b610ef4565b6040516101f49291906120a1565b610248610394366004611d57565b600d6020526000908152604090205460ff1681565b6103786103b7366004611d57565b610fdc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610289565b6103ff6103fa366004611d57565b611053565b6040516101f491906120af565b600a5461041f906001600160a01b031681565b6040516101f49190612102565b61021061043a36600461213a565b6110ff565b61024861044d3660046121ac565b611207565b600454610100900460ff16610248565b6102106104703660046121fa565b611285565b610248610483366004611de6565b6001600160a01b031660009081526001602052604090205460ff1690565b6102106104af3660046122a1565b5050565b600b5461041f906001600160a01b031681565b6102106104d4366004611de6565b611361565b6104e16113b8565b60006001600160a01b03166003836040516104fc919061230b565b908152604051908190036020019020546001600160a01b03160361055857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161055683826123e7565b505b80600383604051610569919061230b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906105d590849084906124a7565b60405180910390a15050565b60008281526008602052604090205481146106175760405162461bcd60e51b815260040161060e906124f9565b60405180910390fd5b6000610685898989896040516020016106339493929190612561565b6040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166106c05760405162461bcd60e51b815260040161060e906125d7565b600e8990556000805b87518110156107b357600b5488516001600160a01b039091169063b6aed0cb908a90849081106106fb576106fb6125e7565b602002602001015161070c90612607565b426040518363ffffffff1660e01b815260040161072a92919061263d565b600060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050508188828151811061076f5761076f6125e7565b602002602001015161078090612607565b60405160200161079192919061263d565b60408051601f19818403018152919052805160209091012091506001016106c9565b506000908152600d60205260409020805460ff19166001179055505050505050505050565b6107e06113b8565b6001600160a01b03811660009081526020819052604090205460ff166108185760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e7609369061086d908390611dd8565b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906108c7908790879087908790600401612773565b60006040518083038186803b1580156108df57600080fd5b505afa1580156108f3573d6000803e3d6000fd5b5050505060008460405160200161090a91906127ac565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff16156109525760405162461bcd60e51b815260040161060e906127ec565b6001600c60008760405160200161096991906127ac565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad21916109c291908901908901611de6565b87604001356040518363ffffffff1660e01b81526004016109e49291906127fc565b600060405180830381600087803b1580156109fe57600080fd5b505af1158015610a12573d6000803e3d6000fd5b505050505050505050565b604080516060808201835260008083526020830191909152918101829052600080610a4785610fdc565b9150915081610a5c5760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff1615610a965760405162461bcd60e51b815260040161060e90612864565b60048054600160ff1991821681179092556001600160a01b0387166000908152602081815260408083208054851686179055908490529081902080549092169092179055517ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093690610b08908790611dd8565b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610be7578382906000526020600020018054610b5a9061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b869061232b565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081526020019060010190610b3b565b50505050905090565b610bf86113b8565b6001600160a01b03811660009081526001602052604090205460ff16610c305760405162461bcd60e51b815260040161060e906128a6565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479061086d908390611dd8565b610c886113b8565b610c926000611458565b565b610c9c6113b8565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906336d2da9090610ce5903390600401611dd8565b600060405180830381600087803b158015610cff57600080fd5b505af1158015610d13573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d645750825b905060008267ffffffffffffffff166001148015610d815750303b155b905081158015610d8f575080155b15610dc6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610dfa57845468ff00000000000000001916680100000000000000001785555b610e03336114d6565b60006005556001600955604051610e19906119c9565b604051809103906000f080158015610e35573d6000803e3d6000fd5b50600b80546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199283168117909155600a805490921681179091556040517fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf91610e9e91611dd8565b60405180910390a18315610eed57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b08906001906128d1565b5050505050565b604080516060808201835260008083526020808401839052838501829052858252600681528482208551938401909552845483526001850180549295869493909284019190610f429061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e9061232b565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6040805160608082018352600080835260208301919091529181018290526000838152600760205260408120549081900361104057505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b61104981610ef4565b9250925050915091565b6002818154811061106357600080fd5b90600052602060002001600091509050805461107e9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546110aa9061232b565b80156110f75780601f106110cc576101008083540402835291602001916110f7565b820191906000526020600020905b8154815290600101906020018083116110da57829003601f168201915b505050505081565b600061114d833561111360208601866128df565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061142c92505050565b6001600160a01b03811660009081526020819052604090205490915060ff166111885760405162461bcd60e51b815260040161060e906125d7565b6001600160a01b03811660009081526001602052604090205460ff166111c05760405162461bcd60e51b815260040161060e906128a6565b6111c9836114e7565b6040517fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906111fa908535906119de565b60405180910390a1505050565b600080805b835181101561126c5781848281518110611228576112286125e7565b602002602001015161123990612607565b60405160200161124a92919061263d565b60408051601f198184030181529190528051602090910120915060010161120c565b506000908152600d602052604090205460ff1692915050565b6001600160a01b03851660009081526020819052604090205460ff16806112be5760405162461bcd60e51b815260040161060e9061298c565b81156113365760006112f28787866040516020016112de939291906129c4565b60405160208183030381529060405261158b565b90506000611300828761142c565b9050876001600160a01b0316816001600160a01b0316146113335760405162461bcd60e51b815260040161060e90612a40565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6113696113b8565b6001600160a01b0381166113ac5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b6113b581611458565b50565b336113ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610c9257336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161060e9190611dd8565b60008060008061143c86866115c6565b92509250925061144c8282611613565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6114de611715565b6113b58161177c565b8035600090815260066020526040902081906115038282612bb3565b50506009546000908152600760205260409020813590819055611527600143612bd3565b4060405160200161153992919061263d565b60408051601f19818403018152918152815160209283012060098054600090815260089094529183205580549161156f83612be6565b9190505550600554816040013511156113b55760400135600555565b60006115978251611784565b826040516020016115a9929190612bff565b604051602081830303815290604052805190602001209050919050565b600080600083516041036116005760208401516040850151606086015160001a6115f288828585611825565b95509550955050505061160c565b50508151600091506002905b9250925092565b600082600381111561162757611627612c3b565b03611630575050565b600182600381111561164457611644612c3b565b0361167b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561168f5761168f612c3b565b036116c8576040517ffce698f700000000000000000000000000000000000000000000000000000000815261060e9082906004016119de565b60038260038111156116dc576116dc612c3b565b036104af57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161060e91906119de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610c92576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611369611715565b60606000611791836118e7565b600101905060008167ffffffffffffffff8111156117b1576117b16119ec565b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117e5575b509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561186057506000915060039050826118dd565b6000600188888888604051600081526020016040526040516118859493929190612c5a565b6020604051602081039080840390855afa1580156118a7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118d3575060009250600191508290506118dd565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611930577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061195c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061197a57662386f26fc10000830492506010015b6305f5e1008310611992576305f5e100830492506008015b61271083106119a657612710830492506004015b606483106119b8576064830492506002015b600a83106114525760010192915050565b6125ae80612c9083390190565b805b82525050565b6020810161145282846119d6565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715611a2857611a286119ec565b6040525050565b6000611a3a60405190565b9050611a468282611a02565b919050565b600067ffffffffffffffff821115611a6557611a656119ec565b601f19601f83011660200192915050565b82818337506000910152565b6000611a95611a9084611a4b565b611a2f565b9050828152838383011115611aac57611aac600080fd5b611aba836020830184611a76565b9392505050565b600082601f830112611ad557611ad5600080fd5b611aba83833560208501611a82565b60006001600160a01b038216611452565b611afe81611ae4565b81146113b557600080fd5b803561145281611af5565b60008060408385031215611b2a57611b2a600080fd5b823567ffffffffffffffff811115611b4457611b44600080fd5b611b5085828601611ac1565b925050611b608460208501611b09565b90509250929050565b80611afe565b803561145281611b69565b600067ffffffffffffffff821115611b9457611b946119ec565b5060209081020190565b6000611bac611a9084611b7a565b83815290506020808201908402830185811115611bcb57611bcb600080fd5b835b81811015611c0a57803567ffffffffffffffff811115611bef57611bef600080fd5b611bfb88828801611ac1565b84525060209283019201611bcd565b5050509392505050565b600082601f830112611c2857611c28600080fd5b611aba83833560208501611b9e565b60008083601f840112611c4c57611c4c600080fd5b50813567ffffffffffffffff811115611c6757611c67600080fd5b602083019150836001820283011115611c8257611c82600080fd5b9250929050565b60008060008060008060008060e0898b031215611ca857611ca8600080fd5b611cb28a8a611b6f565b9750611cc18a60208b01611b6f565b9650611cd08a60408b01611b6f565b9550606089013567ffffffffffffffff811115611cef57611cef600080fd5b611cfb8b828c01611c14565b955050608089013567ffffffffffffffff811115611d1b57611d1b600080fd5b611d278b828c01611c37565b9450945050611d398a60a08b01611b6f565b9150611d488a60c08b01611b6f565b90509295985092959890939650565b600060208284031215611d6c57611d6c600080fd5b611aba8383611b6f565b8015156119d8565b602081016114528284611d76565b600060208284031215611da157611da1600080fd5b813567ffffffffffffffff811115611dbb57611dbb600080fd5b611dc784828501611ac1565b949350505050565b6119d881611ae4565b602081016114528284611dcf565b600060208284031215611dfb57611dfb600080fd5b611aba8383611b09565b600060808284031215611e1a57611e1a600080fd5b50919050565b60008083601f840112611e3557611e35600080fd5b50813567ffffffffffffffff811115611e5057611e50600080fd5b602083019150836020820283011115611c8257611c82600080fd5b60008060008060c08587031215611e8457611e84600080fd5b611e8e8686611e05565b9350608085013567ffffffffffffffff811115611ead57611ead600080fd5b611eb987828801611e20565b9350935050611ecb8660a08701611b6f565b905092959194509250565b60005b83811015611ef1578181015183820152602001611ed9565b50506000910152565b6000611f04825190565b808452602084019350611f1b818560208601611ed6565b601f01601f19169290920192915050565b80516000906060840190611f4085826119d6565b5060208301518482036020860152611f588282611efa565b915050604083015161181d60408601826119d6565b60408101611f7b82856119d6565b8181036020830152611dc78184611f2c565b600080600080600060608688031215611fa857611fa8600080fd5b611fb28787611b09565b9450602086013567ffffffffffffffff811115611fd157611fd1600080fd5b611fdd88828901611c37565b9450945050604086013567ffffffffffffffff811115611fff57611fff600080fd5b61200b88828901611c37565b92509250509295509295909350565b6000611aba8383611efa565b60200190565b6000612036825190565b808452602084019350836020820285016120508560200190565b60005b84811015612084578383038852815161206c848261201a565b93505060208201602098909801979150600101612053565b50909695505050505050565b60208082528101611aba818461202c565b60408101611f7b8285611d76565b60208082528101611aba8184611efa565b60006114526001600160a01b0383166120d7565b90565b6001600160a01b031690565b6000611452826120c0565b6000611452826120e3565b6119d8816120ee565b6020810161145282846120f9565b600060608284031215611e1a57611e1a600080fd5b600060208284031215611e1a57611e1a600080fd5b6000806040838503121561215057612150600080fd5b823567ffffffffffffffff81111561216a5761216a600080fd5b61217685828601612110565b925050602083013567ffffffffffffffff81111561219657612196600080fd5b6121a285828601612125565b9150509250929050565b6000602082840312156121c1576121c1600080fd5b813567ffffffffffffffff8111156121db576121db600080fd5b611dc784828501611c14565b801515611afe565b8035611452816121e7565b600080600080600060a0868803121561221557612215600080fd5b61221f8787611b09565b945061222e8760208801611b09565b9350604086013567ffffffffffffffff81111561224d5761224d600080fd5b61225988828901611ac1565b935050606086013567ffffffffffffffff81111561227957612279600080fd5b61228588828901611ac1565b92505061229587608088016121ef565b90509295509295909350565b600080602083850312156122b7576122b7600080fd5b823567ffffffffffffffff8111156122d1576122d1600080fd5b6122dd85828601611c37565b92509250509250929050565b60006122f3825190565b612301818560208601611ed6565b9290920192915050565b61145281836122e9565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061233f57607f821691505b602082108103611e1a57611e1a612315565b60006114526120d48381565b61236683612351565b815460001960089490940293841b1916921b91909117905550565b600061238e81848461235d565b505050565b818110156104af576123a6600082612381565b600101612393565b601f82111561238e576000818152602090206020601f850104810160208510156123d55750805b610eed6020601f860104830182612393565b815167ffffffffffffffff811115612401576124016119ec565b61240b825461232b565b6124168282856123ae565b506020601f82116001811461244b57600083156124335750848201515b600019600885021c1981166002850217855550610eed565b600084815260208120601f198516915b8281101561247b578785015182556020948501946001909201910161245b565b50848210156124985783870151600019601f87166008021c191681555b50505050600202600101905550565b604080825281016124b88185611efa565b9050611aba6020830184611dcf565b600e8152602081017f496e76616c696420666f726b494400000000000000000000000000000000000081529050612026565b60208082528101611452816124c7565b6000612513825190565b8084526020840193508360208202850161252d8560200190565b60005b848110156120845783830388528151612549848261201a565b93505060208201602098909801979150600101612530565b6080810161256f82876119d6565b61257c60208301866119d6565b61258960408301856119d6565b818103606083015261259b8184612509565b9695505050505050565b60168152602081017f656e636c6176654944206e6f742061747465737465640000000000000000000081529050612026565b60208082528101611452816125a5565b634e487b7160e01b600052603260045260246000fd5b6000611452825190565b6000612611825190565b6020830161261e816125fd565b9250506020811015611e1a576000196020919091036008021b16919050565b6040810161264b82856119d6565b611aba60208301846119d6565b5060006114526020830183611b09565b5060006114526020830183611b6f565b67ffffffffffffffff8116611afe565b803561145281612678565b5060006114526020830183612688565b67ffffffffffffffff81166119d8565b6126bd8180612658565b6126c78382611dcf565b506126d56020820182612658565b6126e26020840182611dcf565b506126f06040820182612668565b6126fd60408401826119d6565b5061270b6060820182612693565b61238e60608401826126a3565b82818337505050565b81835260208301925060007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561275c5761275c600080fd5b60208302925061276d838584612718565b50500190565b60c0810161278182876126b3565b8181036080830152612794818587612721565b90506127a360a08301846119d6565b95945050505050565b6080810161145282846126b3565b60188152602081017f7769746864726177616c20616c7265616479207370656e74000000000000000081529050612026565b60208082528101611452816127ba565b6040810161264b8285611dcf565b60228152602081017f6e6574776f726b2073656372657420616c726561647920696e697469616c697a81527f6564000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016114528161280a565b60198152602081017f656e636c6176654944206e6f7420612073657175656e6365720000000000000081529050612026565b6020808252810161145281612874565b600067ffffffffffffffff8216611452565b6119d8816128b6565b6020810161145282846128c8565b6000808335601e19368590030181126128fa576128fa600080fd5b8301915050803567ffffffffffffffff81111561291957612919600080fd5b602082019150600181023603821315611c8257611c82600080fd5b60238152602081017f726573706f6e64696e67206174746573746572206973206e6f7420617474657381527f74656400000000000000000000000000000000000000000000000000000000006020820152905061285e565b6020808252810161145281612934565b60006114528260601b90565b60006114528261299c565b6119d86129bf82611ae4565b6129a8565b6129ce81856129b3565b6014016129db81846129b3565b601401611dc781836122e9565b602c8152602081017f63616c63756c61746564206164647265737320616e642061747465737465724981527f4420646f6e74206d6174636800000000000000000000000000000000000000006020820152905061285e565b60208082528101611452816129e8565b6000813561145281611b69565b600081611452565b612a6e82612a5d565b612a7a6120d482612a5d565b8255505050565b8267ffffffffffffffff811115612a9a57612a9a6119ec565b612aa4825461232b565b612aaf8282856123ae565b506000601f821160018114612ae45760008315612acc5750848201355b600019600885021c1981166002850217855550612b3e565b600084815260209020601f19841690835b82811015612b155787850135825560209485019460019092019101612af5565b5084821015612b32576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b61238e838383612a81565b612b5a82612351565b80612a7a565b8180612b6b81612a50565b9050612b778184612a65565b5050612b8660208301836128df565b612b94818360018601612b46565b50506040820180612ba482612a50565b9050610d138160028501612b51565b6104af8282612b60565b634e487b7160e01b600052601160045260246000fd5b8181038181111561145257611452612bbd565b600060018201612bf857612bf8612bbd565b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152601a01612c2f81846122e9565b9050611aba81836122e9565b634e487b7160e01b600052602160045260246000fd5b60ff81166119d8565b60808101612c6882876119d6565b612c756020830186612c51565b612c8260408301856119d6565b6127a360608301846119d656fe608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612455806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061015690339083906004016111ea565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d90611239565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c89190611249565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611272565b610477565b3480156101fd57600080fd5b5061018361020c3660046112c5565b6104d6565b34801561021d57600080fd5b5061023161022c366004611272565b61051c565b6040516101c891906112ec565b61018361024c36600461130e565b61056e565b34801561025d57600080fd5b5061018361026c366004611346565b6106bd565b34801561027d57600080fd5b5061018361028c366004611365565b61073c565b34801561029d57600080fd5b506101836108a7565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c89190611394565b3480156102f757600080fd5b506101836103063660046113a2565b6108bb565b34801561031757600080fd5b5061018361032636600461130e565b610a27565b34801561033757600080fd5b5061018361034636600461130e565b610aa7565b61035e61035936600461146b565b610b70565b6040516101c891906114f8565b34801561037757600080fd5b50610183610386366004611566565b610c7d565b34801561039757600080fd5b506101836103a63660046115d1565b610d7e565b3480156103b757600080fd5b506101836103c63660046115f1565b610dc4565b3480156103d757600080fd5b506101836103e6366004611346565b610f0f565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa15801561044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104729190611679565b905090565b6000808260405160200161048b9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104cf5760405162461bcd60e51b815260040161019d90611886565b9392505050565b6104de610f66565b600081815260046020526040812054900361050b5760405162461bcd60e51b815260040161019d906118c8565b600090815260046020526040812055565b600080826040516020016105309190611837565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906105665750428111155b949350505050565b60003411801561057d57508034145b6105995760405162461bcd60e51b815260040161019d90611930565b60035434906001600160a01b03161561065d5760006105b66103eb565b9050803410156105d85760405162461bcd60e51b815260040161019d90611970565b6105e28134611996565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610634576040519150601f19603f3d011682016040523d82523d6000602084013e610639565b606091505b505090508061065a5760405162461bcd60e51b815260040161019d90611a01565b50505b600061066833610fda565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106af929190611a11565b60405180910390a350505050565b6106c5610f66565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610712576040519150601f19603f3d011682016040523d82523d6000602084013e610717565b606091505b50509050806107385760405162461bcd60e51b815260040161019d90611a5e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107875750825b905060008267ffffffffffffffff1660011480156107a45750303b155b9050811580156107b2575080155b156107e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561081d57845468ff00000000000000001916680100000000000000001785555b61082687611038565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561089e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089590600190611a92565b60405180910390a15b50505050505050565b6108af610f66565b6108b96000611049565b565b60006108c8600130611aa0565b90506108fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109225750336001600160a01b038216145b61093e5760405162461bcd60e51b815260040161019d90611af5565b600061094a8342611b05565b905060008460405160200161095f9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a35760405162461bcd60e51b815260040161019d90611b70565b6000818152602081815260408220849055600191906109c490880188611346565b6001600160a01b0316815260208101919091526040016000908120906109f06080880160608901611b80565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161089e8282611fbe565b610a2f610f66565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a7c576040519150601f19603f3d011682016040523d82523d6000602084013e610a81565b606091505b5050905080610aa25760405162461bcd60e51b815260040161019d90611a5e565b505050565b6000610ab4600130611aa0565b9050610ae77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b0e5750336001600160a01b038216145b610b2a5760405162461bcd60e51b815260040161019d90611af5565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b639190611249565b60405180910390a2505050565b6003546000906001600160a01b031615610c26576000610b8e6103eb565b905080341015610bb05760405162461bcd60e51b815260040161019d90612020565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610bfd576040519150601f19603f3d011682016040523d82523d6000602084013e610c02565b606091505b5050905080610c235760405162461bcd60e51b815260040161019d90611a01565b50505b610c2f33610fda565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c6c9796959493929190612030565b60405180910390a195945050505050565b6000818152600460205260408120549003610caa5760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610cd85760405162461bcd60e51b815260040161019d90612137565b600084604051602001610ceb91906121bc565b60405160208183030381529060405280519060200120604051602001610d1191906121fc565b604051602081830303815290604052805190602001209050610d5b84848484604051602001610d40919061221b565b604051602081830303815290604052805190602001206110c7565b610d775760405162461bcd60e51b815260040161019d90612285565b5050505050565b610d86610f66565b60008281526004602052604090205415610db25760405162461bcd60e51b815260040161019d906122ed565b60009182526004602052604090912055565b6000818152600460205260408120549003610df15760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610e1f5760405162461bcd60e51b815260040161019d90612137565b6000610e2e6020860186611346565b610e3e60408701602088016122fd565b610e4e6060880160408901611b80565b610e5e6080890160608a01611b80565b610e6b60808a018a611cd7565b610e7b60c08c0160a08d0161231c565b604051602001610e919796959493929190612030565b604051602081830303815290604052805190602001209050600081604051602001610ebc919061236d565b604051602081830303815290604052805190602001209050610eeb85858584604051602001610d40919061221b565b610f075760405162461bcd60e51b815260040161019d906123d5565b505050505050565b610f17610f66565b6001600160a01b038116610f5a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b610f6381611049565b50565b33610f987f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108b957336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061100d83856123e5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110406110df565b610f6381611146565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110d586868561114e565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f176110df565b600081815b848110156111875761117d8287878481811061117157611171612409565b90506020020135611190565b9150600101611153565b50949350505050565b60008183106111ac5760008281526020849052604090206111bb565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111be565b6111de816111c4565b82525050565b806111de565b604081016111f882856111d5565b6104cf60208301846111e4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111be81611205565b602081016111be82846111e4565b600060c0828403121561126c5761126c600080fd5b50919050565b60006020828403121561128757611287600080fd5b813567ffffffffffffffff8111156112a1576112a1600080fd5b61056684828501611257565b805b8114610f6357600080fd5b80356111be816112ad565b6000602082840312156112da576112da600080fd5b6111bb83836112ba565b8015156111de565b602081016111be82846112e4565b6112af816111c4565b80356111be816112fa565b6000806040838503121561132457611324600080fd5b61132e8484611303565b915061133d84602085016112ba565b90509250929050565b60006020828403121561135b5761135b600080fd5b6111bb8383611303565b6000806040838503121561137b5761137b600080fd5b6113858484611303565b915061133d8460208501611303565b602081016111be82846111d5565b600080604083850312156113b8576113b8600080fd5b823567ffffffffffffffff8111156113d2576113d2600080fd5b6113de85828601611257565b92505061133d84602085016112ba565b63ffffffff81166112af565b80356111be816113ee565b60008083601f84011261141a5761141a600080fd5b50813567ffffffffffffffff81111561143557611435600080fd5b60208301915083600182028301111561145057611450600080fd5b9250929050565b60ff81166112af565b80356111be81611457565b60008060008060006080868803121561148657611486600080fd5b61149087876113fa565b945061149f87602088016113fa565b9350604086013567ffffffffffffffff8111156114be576114be600080fd5b6114ca88828901611405565b93509350506114dc8760608801611460565b90509295509295909350565b67ffffffffffffffff81166111de565b602081016111be82846114e8565b60006080828403121561126c5761126c600080fd5b60008083601f84011261153057611530600080fd5b50813567ffffffffffffffff81111561154b5761154b600080fd5b60208301915083602082028301111561145057611450600080fd5b60008060008060c0858703121561157f5761157f600080fd5b6115898686611506565b9350608085013567ffffffffffffffff8111156115a8576115a8600080fd5b6115b48782880161151b565b93509350506115c68660a087016112ba565b905092959194509250565b600080604083850312156115e7576115e7600080fd5b61132e84846112ba565b6000806000806060858703121561160a5761160a600080fd5b843567ffffffffffffffff81111561162457611624600080fd5b61163087828801611257565b945050602085013567ffffffffffffffff81111561165057611650600080fd5b61165c8782880161151b565b93509350506115c686604087016112ba565b80516111be816112ad565b60006020828403121561168e5761168e600080fd5b6111bb838361166e565b5060006111be6020830183611303565b67ffffffffffffffff81166112af565b80356111be816116a8565b5060006111be60208301836116b8565b5060006111be60208301836113fa565b63ffffffff81166111de565b6000808335601e193685900301811261170a5761170a600080fd5b830160208101925035905067ffffffffffffffff81111561172d5761172d600080fd5b3681900382131561145057611450600080fd5b82818337506000910152565b818352602083019250611760828483611740565b50601f01601f19160190565b5060006111be6020830183611460565b60ff81166111de565b600060c083016117958380611698565b61179f85826111d5565b506117ad60208401846116c3565b6117ba60208601826114e8565b506117c860408401846116d3565b6117d560408601826116e3565b506117e360608401846116d3565b6117f060608601826116e3565b506117fe60808401846116ef565b858303608087015261181183828461174c565b9250505061182260a084018461176c565b61182f60a086018261177c565b509392505050565b602080825281016111bb8184611785565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111be81611848565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611233565b602080825281016111be81611896565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611880565b602080825281016111be816118d8565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611233565b602080825281016111be81611940565b634e487b7160e01b600052601160045260246000fd5b818103818111156111be576111be611980565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be816119a9565b60408101611a1f82856111e4565b6104cf60208301846114e8565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611233565b602080825281016111be81611a2c565b60006111be82611a7c565b90565b67ffffffffffffffff1690565b6111de81611a6e565b602081016111be8284611a89565b6001600160a01b039182169190811690828203908111156111be576111be611980565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611233565b602080825281016111be81611ac3565b808201808211156111be576111be611980565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611b18565b600060208284031215611b9557611b95600080fd5b6111bb83836113fa565b600081356111be816112fa565b60006001600160a01b03835b81169019929092169190911792915050565b60006111be826111c4565b60006111be82611bca565b611be982611bd5565b611bf4818354611bac565b8255505050565b600081356111be816116a8565b60007bffffffffffffffff0000000000000000000000000000000000000000611bb88460a01b90565b60006111be67ffffffffffffffff8316611a7c565b611c4f82611c31565b611bf4818354611c08565b600081356111be816113ee565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bb88460e01b90565b600063ffffffff82166111be565b611cab82611c94565b611bf4818354611c67565b600063ffffffff83611bb8565b611ccc82611c94565b611bf4818354611cb6565b6000808335601e1936859003018112611cf257611cf2600080fd5b8301915050803567ffffffffffffffff811115611d1157611d11600080fd5b60208201915060018102360382131561145057611450600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d6c57607f821691505b60208210810361126c5761126c611d42565b60006111be611a798381565b611d9383611d7e565b815460001960089490940293841b1916921b91909117905550565b6000610aa2818484611d8a565b8181101561073857611dce600082611dae565b600101611dbb565b601f821115610aa2576000818152602090206020601f85010481016020851015611dfd5750805b610d776020601f860104830182611dbb565b8267ffffffffffffffff811115611e2857611e28611d2c565b611e328254611d58565b611e3d828285611dd6565b506000601f821160018114611e725760008315611e5a5750848201355b600019600885021c1981166002850217855550610f07565b600084815260209020601f19841690835b82811015611ea35787850135825560209485019460019092019101611e83565b5084821015611ec0576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610aa2838383611e0f565b600081356111be81611457565b600060ff82166111be565b611efc82611ee8565b815460ff191660ff821617611bf4565b808280611f1881611b9f565b9050611f248184611be0565b50506020830180611f3482611bfb565b9050611f408184611c46565b50506040830180611f5082611c5a565b9050611f5c8184611ca2565b5050506060820180611f6d82611c5a565b9050611f7c8160018501611cc3565b5050611f8b6080830183611cd7565b611f99818360028601611ed0565b505060a0820180611fa982611edb565b9050611fb88160038501611ef3565b50505050565b6107388282611f0c565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611fc8565b60c0810161203e828a6111d5565b61204b60208301896114e8565b61205860408301886116e3565b61206560608301876116e3565b818103608083015261207881858761174c565b905061208760a083018461177c565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612093565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611880565b602080825281016111be816120fb565b5060006111be60208301836112ba565b6121618180611698565b61216b83826111d5565b506121796020820182611698565b61218660208401826111d5565b506121946040820182612147565b6121a160408401826111e4565b506121af60608201826116c3565b610aa260608401826114e8565b608081016111be8284612157565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c816121ca565b90506111be60208301846111e4565b61222581836111e4565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611880565b602080825281016111be8161222d565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612295565b60006020828403121561231257612312600080fd5b6111bb83836116b8565b60006020828403121561233157612331600080fd5b6111bb8383611460565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c8161233b565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611880565b602080825281016111be8161237d565b67ffffffffffffffff9182169190811690828201908111156111be576111be611980565b634e487b7160e01b600052603260045260246000fdfea26469706673582212209046d260e6ecf02a9b545045265133ebd2a8a091d8cfe42d8fe9829451348f2664736f6c634300081c0033a26469706673582212206fbeb4fa662306572375051ef628ba8cd5106387c138927f0349e546931828e964736f6c634300081c0033", } // ManagementContractABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go index b4694de55..28b2b8a84 100644 --- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go +++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go @@ -50,7 +50,7 @@ type StructsValueTransferMessage struct { // MerkleTreeMessageBusMetaData contains all meta data concerning the MerkleTreeMessageBus contract. var MerkleTreeMessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"name\":\"addStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"disableStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublishFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"notifyDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMessageInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyValueTransferInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61246d806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061015690339083906004016111ef565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d9061123e565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c8919061124e565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611277565b61047c565b3480156101fd57600080fd5b5061018361020c3660046112ca565b6104db565b34801561021d57600080fd5b5061023161022c366004611277565b610521565b6040516101c891906112f1565b61018361024c366004611313565b610573565b34801561025d57600080fd5b5061018361026c36600461134b565b6106c2565b34801561027d57600080fd5b5061018361028c36600461136a565b610741565b34801561029d57600080fd5b506101836108ac565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c89190611399565b3480156102f757600080fd5b506101836103063660046113a7565b6108c0565b34801561031757600080fd5b50610183610326366004611313565b610a2c565b34801561033757600080fd5b50610183610346366004611313565b610aac565b61035e610359366004611470565b610b75565b6040516101c891906114fd565b34801561037757600080fd5b5061018361038636600461156b565b610c82565b34801561039757600080fd5b506101836103a63660046115d6565b610d83565b3480156103b757600080fd5b506101836103c63660046115f6565b610dc9565b3480156103d757600080fd5b506101836103e636600461134b565b610f14565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d51906104369060209060040161168b565b602060405180830381865afa158015610453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047791906116a4565b905090565b600080826040516020016104909190611862565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104d45760405162461bcd60e51b815260040161019d906118b1565b9392505050565b6104e3610f6b565b60008181526004602052604081205490036105105760405162461bcd60e51b815260040161019d906118f3565b600090815260046020526040812055565b600080826040516020016105359190611862565b60408051601f198184030181529181528151602092830120600081815292839052912054909150801580159061056b5750428111155b949350505050565b60003411801561058257508034145b61059e5760405162461bcd60e51b815260040161019d9061195b565b60035434906001600160a01b0316156106625760006105bb6103eb565b9050803410156105dd5760405162461bcd60e51b815260040161019d9061199b565b6105e781346119c1565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610639576040519150601f19603f3d011682016040523d82523d6000602084013e61063e565b606091505b505090508061065f5760405162461bcd60e51b815260040161019d90611a2c565b50505b600061066d33610fdf565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106b4929190611a3c565b60405180910390a350505050565b6106ca610f6b565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610717576040519150601f19603f3d011682016040523d82523d6000602084013e61071c565b606091505b505090508061073d5760405162461bcd60e51b815260040161019d90611a89565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561078c5750825b905060008267ffffffffffffffff1660011480156107a95750303b155b9050811580156107b7575080155b156107ee576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561082257845468ff00000000000000001916680100000000000000001785555b61082b8761103d565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156108a357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089a90600190611ab6565b60405180910390a15b50505050505050565b6108b4610f6b565b6108be600061104e565b565b60006108cd600130611ac4565b90506109007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109275750336001600160a01b038216145b6109435760405162461bcd60e51b815260040161019d90611b19565b600061094f8342611b29565b90506000846040516020016109649190611862565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a85760405162461bcd60e51b815260040161019d90611b94565b6000818152602081815260408220849055600191906109c99088018861134b565b6001600160a01b0316815260208101919091526040016000908120906109f56080880160608901611ba4565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016108a38282611fd6565b610a34610f6b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a81576040519150601f19603f3d011682016040523d82523d6000602084013e610a86565b606091505b5050905080610aa75760405162461bcd60e51b815260040161019d90611a89565b505050565b6000610ab9600130611ac4565b9050610aec7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b135750336001600160a01b038216145b610b2f5760405162461bcd60e51b815260040161019d90611b19565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b68919061124e565b60405180910390a2505050565b6003546000906001600160a01b031615610c2b576000610b936103eb565b905080341015610bb55760405162461bcd60e51b815260040161019d90612038565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c02576040519150601f19603f3d011682016040523d82523d6000602084013e610c07565b606091505b5050905080610c285760405162461bcd60e51b815260040161019d90611a2c565b50505b610c3433610fdf565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c719796959493929190612048565b60405180910390a195945050505050565b6000818152600460205260408120549003610caf5760405162461bcd60e51b815260040161019d90612103565b600081815260046020526040902054421015610cdd5760405162461bcd60e51b815260040161019d9061214f565b600084604051602001610cf091906121d4565b60405160208183030381529060405280519060200120604051602001610d169190612214565b604051602081830303815290604052805190602001209050610d6084848484604051602001610d459190612233565b604051602081830303815290604052805190602001206110cc565b610d7c5760405162461bcd60e51b815260040161019d9061229d565b5050505050565b610d8b610f6b565b60008281526004602052604090205415610db75760405162461bcd60e51b815260040161019d90612305565b60009182526004602052604090912055565b6000818152600460205260408120549003610df65760405162461bcd60e51b815260040161019d90612103565b600081815260046020526040902054421015610e245760405162461bcd60e51b815260040161019d9061214f565b6000610e33602086018661134b565b610e436040870160208801612315565b610e536060880160408901611ba4565b610e636080890160608a01611ba4565b610e7060808a018a611cfb565b610e8060c08c0160a08d01612334565b604051602001610e969796959493929190612048565b604051602081830303815290604052805190602001209050600081604051602001610ec19190612385565b604051602081830303815290604052805190602001209050610ef085858584604051602001610d459190612233565b610f0c5760405162461bcd60e51b815260040161019d906123ed565b505050505050565b610f1c610f6b565b6001600160a01b038116610f5f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d9190611399565b610f688161104e565b50565b33610f9d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108be57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d9190611399565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061101283856123fd565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110456110e4565b610f688161114b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110da868685611153565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108be576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f1c6110e4565b600081815b8481101561118c576111828287878481811061117657611176612421565b90506020020135611195565b9150600101611158565b50949350505050565b60008183106111b15760008281526020849052604090206111c0565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111c3565b6111e3816111c9565b82525050565b806111e3565b604081016111fd82856111da565b6104d460208301846111e9565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111c38161120a565b602081016111c382846111e9565b600060c0828403121561127157611271600080fd5b50919050565b60006020828403121561128c5761128c600080fd5b813567ffffffffffffffff8111156112a6576112a6600080fd5b61056b8482850161125c565b805b8114610f6857600080fd5b80356111c3816112b2565b6000602082840312156112df576112df600080fd5b6111c083836112bf565b8015156111e3565b602081016111c382846112e9565b6112b4816111c9565b80356111c3816112ff565b6000806040838503121561132957611329600080fd5b6113338484611308565b915061134284602085016112bf565b90509250929050565b60006020828403121561136057611360600080fd5b6111c08383611308565b6000806040838503121561138057611380600080fd5b61138a8484611308565b91506113428460208501611308565b602081016111c382846111da565b600080604083850312156113bd576113bd600080fd5b823567ffffffffffffffff8111156113d7576113d7600080fd5b6113e38582860161125c565b92505061134284602085016112bf565b63ffffffff81166112b4565b80356111c3816113f3565b60008083601f84011261141f5761141f600080fd5b50813567ffffffffffffffff81111561143a5761143a600080fd5b60208301915083600182028301111561145557611455600080fd5b9250929050565b60ff81166112b4565b80356111c38161145c565b60008060008060006080868803121561148b5761148b600080fd5b61149587876113ff565b94506114a487602088016113ff565b9350604086013567ffffffffffffffff8111156114c3576114c3600080fd5b6114cf8882890161140a565b93509350506114e18760608801611465565b90509295509295909350565b67ffffffffffffffff81166111e3565b602081016111c382846114ed565b60006080828403121561127157611271600080fd5b60008083601f84011261153557611535600080fd5b50813567ffffffffffffffff81111561155057611550600080fd5b60208301915083602082028301111561145557611455600080fd5b60008060008060c0858703121561158457611584600080fd5b61158e868661150b565b9350608085013567ffffffffffffffff8111156115ad576115ad600080fd5b6115b987828801611520565b93509350506115cb8660a087016112bf565b905092959194509250565b600080604083850312156115ec576115ec600080fd5b61133384846112bf565b6000806000806060858703121561160f5761160f600080fd5b843567ffffffffffffffff81111561162957611629600080fd5b6116358782880161125c565b945050602085013567ffffffffffffffff81111561165557611655600080fd5b61166187828801611520565b93509350506115cb86604087016112bf565b60006111c361167f8381565b90565b6111e381611673565b602081016111c38284611682565b80516111c3816112b2565b6000602082840312156116b9576116b9600080fd5b6111c08383611699565b5060006111c36020830183611308565b67ffffffffffffffff81166112b4565b80356111c3816116d3565b5060006111c360208301836116e3565b5060006111c360208301836113ff565b63ffffffff81166111e3565b6000808335601e193685900301811261173557611735600080fd5b830160208101925035905067ffffffffffffffff81111561175857611758600080fd5b3681900382131561145557611455600080fd5b82818337506000910152565b81835260208301925061178b82848361176b565b50601f01601f19160190565b5060006111c36020830183611465565b60ff81166111e3565b600060c083016117c083806116c3565b6117ca85826111da565b506117d860208401846116ee565b6117e560208601826114ed565b506117f360408401846116fe565b611800604086018261170e565b5061180e60608401846116fe565b61181b606086018261170e565b50611829608084018461171a565b858303608087015261183c838284611777565b9250505061184d60a0840184611797565b61185a60a08601826117a7565b509392505050565b602080825281016111c081846117b0565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111c381611873565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611238565b602080825281016111c3816118c1565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506118ab565b602080825281016111c381611903565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611238565b602080825281016111c38161196b565b634e487b7160e01b600052601160045260246000fd5b818103818111156111c3576111c36119ab565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c3816119d4565b60408101611a4a82856111e9565b6104d460208301846114ed565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611238565b602080825281016111c381611a57565b60006111c3825b67ffffffffffffffff1690565b6111e381611a99565b602081016111c38284611aad565b6001600160a01b039182169190811690828203908111156111c3576111c36119ab565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611238565b602080825281016111c381611ae7565b808201808211156111c3576111c36119ab565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c381611b3c565b600060208284031215611bb957611bb9600080fd5b6111c083836113ff565b600081356111c3816112ff565b60006001600160a01b03835b81169019929092169190911792915050565b60006111c3826111c9565b60006111c382611bee565b611c0d82611bf9565b611c18818354611bd0565b8255505050565b600081356111c3816116d3565b60007bffffffffffffffff0000000000000000000000000000000000000000611bdc8460a01b90565b60006111c367ffffffffffffffff8316611aa0565b611c7382611c55565b611c18818354611c2c565b600081356111c3816113f3565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bdc8460e01b90565b600063ffffffff82166111c3565b611ccf82611cb8565b611c18818354611c8b565b600063ffffffff83611bdc565b611cf082611cb8565b611c18818354611cda565b6000808335601e1936859003018112611d1657611d16600080fd5b8301915050803567ffffffffffffffff811115611d3557611d35600080fd5b60208201915060018102360382131561145557611455600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d9057607f821691505b60208210810361127157611271611d66565b611dab83611673565b815460001960089490940293841b1916921b91909117905550565b6000610aa7818484611da2565b8181101561073d57611de6600082611dc6565b600101611dd3565b601f821115610aa7576000818152602090206020601f85010481016020851015611e155750805b610d7c6020601f860104830182611dd3565b8267ffffffffffffffff811115611e4057611e40611d50565b611e4a8254611d7c565b611e55828285611dee565b506000601f821160018114611e8a5760008315611e725750848201355b600019600885021c1981166002850217855550610f0c565b600084815260209020601f19841690835b82811015611ebb5787850135825560209485019460019092019101611e9b565b5084821015611ed8576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610aa7838383611e27565b600081356111c38161145c565b600060ff82166111c3565b611f1482611f00565b815460ff191660ff821617611c18565b808280611f3081611bc3565b9050611f3c8184611c04565b50506020830180611f4c82611c1f565b9050611f588184611c6a565b50506040830180611f6882611c7e565b9050611f748184611cc6565b5050506060820180611f8582611c7e565b9050611f948160018501611ce7565b5050611fa36080830183611cfb565b611fb1818360028601611ee8565b505060a0820180611fc182611ef3565b9050611fd08160038501611f0b565b50505050565b61073d8282611f24565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c381611fe0565b60c08101612056828a6111da565b61206360208301896114ed565b612070604083018861170e565b61207d606083018761170e565b8181036080830152612090818587611777565b905061209f60a08301846117a7565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e00000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c3816120ab565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b602082015290506118ab565b602080825281016111c381612113565b5060006111c360208301836112bf565b61217981806116c3565b61218383826111da565b5061219160208201826116c3565b61219e60208401826111da565b506121ac604082018261215f565b6121b960408401826111e9565b506121c760608201826116ee565b610aa760608401826114ed565b608081016111c3828461216f565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611238565b60408082528101612224816121e2565b90506111c360208301846111e9565b61223d81836111e9565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e00000000000000000000000000602082015290506118ab565b602080825281016111c381612245565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f6520627573000000000000000000000000000000000000000000000000000000602082015290506118ab565b602080825281016111c3816122ad565b60006020828403121561232a5761232a600080fd5b6111c083836116e3565b60006020828403121561234957612349600080fd5b6111c08383611465565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611238565b6040808252810161222481612353565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e00000000000000000000000000000000602082015290506118ab565b602080825281016111c381612395565b67ffffffffffffffff9182169190811690828201908111156111c3576111c36119ab565b634e487b7160e01b600052603260045260246000fdfea26469706673582212207dba597ff68a2be19ae7cadaedfe68686776216fd31f2a1fb57527ee23cc31c564736f6c634300081c0033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612455806101596000396000f3fe6080604052600436106101115760003560e01c80638da5cb5b116100a5578063b1454caa11610074578063b6aed0cb11610059578063b6aed0cb1461038b578063e138a8d2146103ab578063f2fde38b146103cb57610185565b8063b1454caa1461034b578063b201246f1461036b57610185565b80638da5cb5b146102a65780639730886d146102eb57806399a3ad211461030b578063ab53bddc1461032b57610185565b8063346633fb116100e1578063346633fb1461023e57806336d2da9014610251578063485cc95514610271578063715018a61461029157610185565b8062a1b815146101a65780630fcfbd11146101d15780630fe9188e146101f157806333a88c721461021157610185565b36610185576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061015690339083906004016111ea565b6000604051808303818588803b15801561016f57600080fd5b505af1158015610183573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161019d90611239565b60405180910390fd5b3480156101b257600080fd5b506101bb6103eb565b6040516101c89190611249565b60405180910390f35b3480156101dd57600080fd5b506101bb6101ec366004611272565b610477565b3480156101fd57600080fd5b5061018361020c3660046112c5565b6104d6565b34801561021d57600080fd5b5061023161022c366004611272565b61051c565b6040516101c891906112ec565b61018361024c36600461130e565b61056e565b34801561025d57600080fd5b5061018361026c366004611346565b6106bd565b34801561027d57600080fd5b5061018361028c366004611365565b61073c565b34801561029d57600080fd5b506101836108a7565b3480156102b257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101c89190611394565b3480156102f757600080fd5b506101836103063660046113a2565b6108bb565b34801561031757600080fd5b5061018361032636600461130e565b610a27565b34801561033757600080fd5b5061018361034636600461130e565b610aa7565b61035e61035936600461146b565b610b70565b6040516101c891906114f8565b34801561037757600080fd5b50610183610386366004611566565b610c7d565b34801561039757600080fd5b506101836103a63660046115d1565b610d7e565b3480156103b757600080fd5b506101836103c63660046115f1565b610dc4565b3480156103d757600080fd5b506101836103e6366004611346565b610f0f565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa15801561044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104729190611679565b905090565b6000808260405160200161048b9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104cf5760405162461bcd60e51b815260040161019d90611886565b9392505050565b6104de610f66565b600081815260046020526040812054900361050b5760405162461bcd60e51b815260040161019d906118c8565b600090815260046020526040812055565b600080826040516020016105309190611837565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906105665750428111155b949350505050565b60003411801561057d57508034145b6105995760405162461bcd60e51b815260040161019d90611930565b60035434906001600160a01b03161561065d5760006105b66103eb565b9050803410156105d85760405162461bcd60e51b815260040161019d90611970565b6105e28134611996565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610634576040519150601f19603f3d011682016040523d82523d6000602084013e610639565b606091505b505090508061065a5760405162461bcd60e51b815260040161019d90611a01565b50505b600061066833610fda565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516106af929190611a11565b60405180910390a350505050565b6106c5610f66565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610712576040519150601f19603f3d011682016040523d82523d6000602084013e610717565b606091505b50509050806107385760405162461bcd60e51b815260040161019d90611a5e565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156107875750825b905060008267ffffffffffffffff1660011480156107a45750303b155b9050811580156107b2575080155b156107e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561081d57845468ff00000000000000001916680100000000000000001785555b61082687611038565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561089e57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061089590600190611a92565b60405180910390a15b50505050505050565b6108af610f66565b6108b96000611049565b565b60006108c8600130611aa0565b90506108fb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109225750336001600160a01b038216145b61093e5760405162461bcd60e51b815260040161019d90611af5565b600061094a8342611b05565b905060008460405160200161095f9190611837565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156109a35760405162461bcd60e51b815260040161019d90611b70565b6000818152602081815260408220849055600191906109c490880188611346565b6001600160a01b0316815260208101919091526040016000908120906109f06080880160608901611b80565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161089e8282611fbe565b610a2f610f66565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a7c576040519150601f19603f3d011682016040523d82523d6000602084013e610a81565b606091505b5050905080610aa25760405162461bcd60e51b815260040161019d90611a5e565b505050565b6000610ab4600130611aa0565b9050610ae77f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610b0e5750336001600160a01b038216145b610b2a5760405162461bcd60e51b815260040161019d90611af5565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610b639190611249565b60405180910390a2505050565b6003546000906001600160a01b031615610c26576000610b8e6103eb565b905080341015610bb05760405162461bcd60e51b815260040161019d90612020565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610bfd576040519150601f19603f3d011682016040523d82523d6000602084013e610c02565b606091505b5050905080610c235760405162461bcd60e51b815260040161019d90611a01565b50505b610c2f33610fda565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610c6c9796959493929190612030565b60405180910390a195945050505050565b6000818152600460205260408120549003610caa5760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610cd85760405162461bcd60e51b815260040161019d90612137565b600084604051602001610ceb91906121bc565b60405160208183030381529060405280519060200120604051602001610d1191906121fc565b604051602081830303815290604052805190602001209050610d5b84848484604051602001610d40919061221b565b604051602081830303815290604052805190602001206110c7565b610d775760405162461bcd60e51b815260040161019d90612285565b5050505050565b610d86610f66565b60008281526004602052604090205415610db25760405162461bcd60e51b815260040161019d906122ed565b60009182526004602052604090912055565b6000818152600460205260408120549003610df15760405162461bcd60e51b815260040161019d906120eb565b600081815260046020526040902054421015610e1f5760405162461bcd60e51b815260040161019d90612137565b6000610e2e6020860186611346565b610e3e60408701602088016122fd565b610e4e6060880160408901611b80565b610e5e6080890160608a01611b80565b610e6b60808a018a611cd7565b610e7b60c08c0160a08d0161231c565b604051602001610e919796959493929190612030565b604051602081830303815290604052805190602001209050600081604051602001610ebc919061236d565b604051602081830303815290604052805190602001209050610eeb85858584604051602001610d40919061221b565b610f075760405162461bcd60e51b815260040161019d906123d5565b505050505050565b610f17610f66565b6001600160a01b038116610f5a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b610f6381611049565b50565b33610f987f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108b957336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161019d9190611394565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff16916001919061100d83856123e5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6110406110df565b610f6381611146565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000826110d586868561114e565b1495945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166108b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f176110df565b600081815b848110156111875761117d8287878481811061117157611171612409565b90506020020135611190565b9150600101611153565b50949350505050565b60008183106111ac5760008281526020849052604090206111bb565b60008381526020839052604090205b90505b92915050565b60006001600160a01b0382166111be565b6111de816111c4565b82525050565b806111de565b604081016111f882856111d5565b6104cf60208301846111e4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016111be81611205565b602081016111be82846111e4565b600060c0828403121561126c5761126c600080fd5b50919050565b60006020828403121561128757611287600080fd5b813567ffffffffffffffff8111156112a1576112a1600080fd5b61056684828501611257565b805b8114610f6357600080fd5b80356111be816112ad565b6000602082840312156112da576112da600080fd5b6111bb83836112ba565b8015156111de565b602081016111be82846112e4565b6112af816111c4565b80356111be816112fa565b6000806040838503121561132457611324600080fd5b61132e8484611303565b915061133d84602085016112ba565b90509250929050565b60006020828403121561135b5761135b600080fd5b6111bb8383611303565b6000806040838503121561137b5761137b600080fd5b6113858484611303565b915061133d8460208501611303565b602081016111be82846111d5565b600080604083850312156113b8576113b8600080fd5b823567ffffffffffffffff8111156113d2576113d2600080fd5b6113de85828601611257565b92505061133d84602085016112ba565b63ffffffff81166112af565b80356111be816113ee565b60008083601f84011261141a5761141a600080fd5b50813567ffffffffffffffff81111561143557611435600080fd5b60208301915083600182028301111561145057611450600080fd5b9250929050565b60ff81166112af565b80356111be81611457565b60008060008060006080868803121561148657611486600080fd5b61149087876113fa565b945061149f87602088016113fa565b9350604086013567ffffffffffffffff8111156114be576114be600080fd5b6114ca88828901611405565b93509350506114dc8760608801611460565b90509295509295909350565b67ffffffffffffffff81166111de565b602081016111be82846114e8565b60006080828403121561126c5761126c600080fd5b60008083601f84011261153057611530600080fd5b50813567ffffffffffffffff81111561154b5761154b600080fd5b60208301915083602082028301111561145057611450600080fd5b60008060008060c0858703121561157f5761157f600080fd5b6115898686611506565b9350608085013567ffffffffffffffff8111156115a8576115a8600080fd5b6115b48782880161151b565b93509350506115c68660a087016112ba565b905092959194509250565b600080604083850312156115e7576115e7600080fd5b61132e84846112ba565b6000806000806060858703121561160a5761160a600080fd5b843567ffffffffffffffff81111561162457611624600080fd5b61163087828801611257565b945050602085013567ffffffffffffffff81111561165057611650600080fd5b61165c8782880161151b565b93509350506115c686604087016112ba565b80516111be816112ad565b60006020828403121561168e5761168e600080fd5b6111bb838361166e565b5060006111be6020830183611303565b67ffffffffffffffff81166112af565b80356111be816116a8565b5060006111be60208301836116b8565b5060006111be60208301836113fa565b63ffffffff81166111de565b6000808335601e193685900301811261170a5761170a600080fd5b830160208101925035905067ffffffffffffffff81111561172d5761172d600080fd5b3681900382131561145057611450600080fd5b82818337506000910152565b818352602083019250611760828483611740565b50601f01601f19160190565b5060006111be6020830183611460565b60ff81166111de565b600060c083016117958380611698565b61179f85826111d5565b506117ad60208401846116c3565b6117ba60208601826114e8565b506117c860408401846116d3565b6117d560408601826116e3565b506117e360608401846116d3565b6117f060608601826116e3565b506117fe60808401846116ef565b858303608087015261181183828461174c565b9250505061182260a084018461176c565b61182f60a086018261177c565b509392505050565b602080825281016111bb8184611785565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b602082015290505b60400190565b602080825281016111be81611848565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611233565b602080825281016111be81611896565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611880565b602080825281016111be816118d8565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152611233565b602080825281016111be81611940565b634e487b7160e01b600052601160045260246000fd5b818103818111156111be576111be611980565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be816119a9565b60408101611a1f82856111e4565b6104cf60208301846114e8565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050611233565b602080825281016111be81611a2c565b60006111be82611a7c565b90565b67ffffffffffffffff1690565b6111de81611a6e565b602081016111be8284611a89565b6001600160a01b039182169190811690828203908111156111be576111be611980565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611233565b602080825281016111be81611ac3565b808201808211156111be576111be611980565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611b18565b600060208284031215611b9557611b95600080fd5b6111bb83836113fa565b600081356111be816112fa565b60006001600160a01b03835b81169019929092169190911792915050565b60006111be826111c4565b60006111be82611bca565b611be982611bd5565b611bf4818354611bac565b8255505050565b600081356111be816116a8565b60007bffffffffffffffff0000000000000000000000000000000000000000611bb88460a01b90565b60006111be67ffffffffffffffff8316611a7c565b611c4f82611c31565b611bf4818354611c08565b600081356111be816113ee565b60007fffffffff00000000000000000000000000000000000000000000000000000000611bb88460e01b90565b600063ffffffff82166111be565b611cab82611c94565b611bf4818354611c67565b600063ffffffff83611bb8565b611ccc82611c94565b611bf4818354611cb6565b6000808335601e1936859003018112611cf257611cf2600080fd5b8301915050803567ffffffffffffffff811115611d1157611d11600080fd5b60208201915060018102360382131561145057611450600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b600281046001821680611d6c57607f821691505b60208210810361126c5761126c611d42565b60006111be611a798381565b611d9383611d7e565b815460001960089490940293841b1916921b91909117905550565b6000610aa2818484611d8a565b8181101561073857611dce600082611dae565b600101611dbb565b601f821115610aa2576000818152602090206020601f85010481016020851015611dfd5750805b610d776020601f860104830182611dbb565b8267ffffffffffffffff811115611e2857611e28611d2c565b611e328254611d58565b611e3d828285611dd6565b506000601f821160018114611e725760008315611e5a5750848201355b600019600885021c1981166002850217855550610f07565b600084815260209020601f19841690835b82811015611ea35787850135825560209485019460019092019101611e83565b5084821015611ec0576000196008601f8716021c19878501351681555b5050505060020260010190555050565b610aa2838383611e0f565b600081356111be81611457565b600060ff82166111be565b611efc82611ee8565b815460ff191660ff821617611bf4565b808280611f1881611b9f565b9050611f248184611be0565b50506020830180611f3482611bfb565b9050611f408184611c46565b50506040830180611f5082611c5a565b9050611f5c8184611ca2565b5050506060820180611f6d82611c5a565b9050611f7c8160018501611cc3565b5050611f8b6080830183611cd7565b611f99818360028601611ed0565b505060a0820180611fa982611edb565b9050611fb88160038501611ef3565b50505050565b6107388282611f0c565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81611fc8565b60c0810161203e828a6111d5565b61204b60208301896114e8565b61205860408301886116e3565b61206560608301876116e3565b818103608083015261207881858761174c565b905061208760a083018461177c565b98975050505050505050565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e0000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612093565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b60208201529050611880565b602080825281016111be816120fb565b5060006111be60208301836112ba565b6121618180611698565b61216b83826111d5565b506121796020820182611698565b61218660208401826111d5565b506121946040820182612147565b6121a160408401826111e4565b506121af60608201826116c3565b610aa260608401826114e8565b608081016111be8284612157565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c816121ca565b90506111be60208301846111e4565b61222581836111e4565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e0000000000000000000000000060208201529050611880565b602080825281016111be8161222d565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f652062757300000000000000000000000000000000000000000000000000000060208201529050611880565b602080825281016111be81612295565b60006020828403121561231257612312600080fd5b6111bb83836116b8565b60006020828403121561233157612331600080fd5b6111bb8383611460565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611233565b6040808252810161220c8161233b565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e0000000000000000000000000000000060208201529050611880565b602080825281016111be8161237d565b67ffffffffffffffff9182169190811690828201908111156111be576111be611980565b634e487b7160e01b600052603260045260246000fdfea26469706673582212209046d260e6ecf02a9b545045265133ebd2a8a091d8cfe42d8fe9829451348f2664736f6c634300081c0033", } // MerkleTreeMessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go index 39fc3fc87..d4d9d5526 100644 --- a/contracts/generated/MessageBus/MessageBus.go +++ b/contracts/generated/MessageBus/MessageBus.go @@ -42,7 +42,7 @@ type StructsCrossChainMessage struct { // MessageBusMetaData contains all meta data concerning the MessageBus contract. var MessageBusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"name\":\"ValueTransfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublishFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"notifyDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveValueFromL2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"retrieveAllFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendValueToL2\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b58806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dcf565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e1e565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e2e565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e57565b6103c0565b3480156101c157600080fd5b506101d56101d0366004610e57565b61041f565b60405161018c9190610e9a565b6101476101f0366004610ed8565b610471565b34801561020157600080fd5b50610147610210366004610f10565b6105c0565b34801561022157600080fd5b50610147610230366004610f2f565b61063f565b34801561024157600080fd5b506101476107aa565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f5e565b34801561029b57600080fd5b506101476102aa366004610f6c565b6107be565b3480156102bb57600080fd5b506101476102ca366004610ed8565b61092a565b3480156102db57600080fd5b506101476102ea366004610ed8565b6109aa565b6103026102fd366004611035565b610a73565b60405161018c91906110c2565b34801561031b57600080fd5b5061014761032a366004610f10565b610b80565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d519061037a906020906004016110e8565b602060405180830381865afa158015610397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bb9190611101565b905090565b600080826040516020016103d491906112bf565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104185760405162461bcd60e51b81526004016101619061132a565b9392505050565b6000808260405160200161043391906112bf565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104695750428111155b949350505050565b60003411801561048057508034145b61049c5760405162461bcd60e51b815260040161016190611392565b60035434906001600160a01b0316156105605760006104b961032f565b9050803410156104db5760405162461bcd60e51b8152600401610161906113d2565b6104e581346113f8565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610537576040519150601f19603f3d011682016040523d82523d6000602084013e61053c565b606091505b505090508061055d5760405162461bcd60e51b815260040161016190611463565b50505b600061056b33610bd7565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105b2929190611473565b60405180910390a350505050565b6105c8610c35565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610615576040519150601f19603f3d011682016040523d82523d6000602084013e61061a565b606091505b505090508061063b5760405162461bcd60e51b8152600401610161906114c0565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561068a5750825b905060008267ffffffffffffffff1660011480156106a75750303b155b9050811580156106b5575080155b156106ec576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561072057845468ff00000000000000001916680100000000000000001785555b61072987610ca9565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156107a157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610798906001906114ed565b60405180910390a15b50505050505050565b6107b2610c35565b6107bc6000610cba565b565b60006107cb6001306114fb565b90506107fe7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108255750336001600160a01b038216145b6108415760405162461bcd60e51b815260040161016190611550565b600061084d8342611560565b905060008460405160200161086291906112bf565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a65760405162461bcd60e51b8152600401610161906115cb565b6000818152602081815260408220849055600191906108c790880188610f10565b6001600160a01b0316815260208101919091526040016000908120906108f360808801606089016115db565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016107a18282611a29565b610932610c35565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461097f576040519150601f19603f3d011682016040523d82523d6000602084013e610984565b606091505b50509050806109a55760405162461bcd60e51b8152600401610161906114c0565b505050565b60006109b76001306114fb565b90506109ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a115750336001600160a01b038216145b610a2d5760405162461bcd60e51b815260040161016190611550565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a669190610e2e565b60405180910390a2505050565b6003546000906001600160a01b031615610b29576000610a9161032f565b905080341015610ab35760405162461bcd60e51b815260040161016190611a8b565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610b00576040519150601f19603f3d011682016040523d82523d6000602084013e610b05565b606091505b5050905080610b265760405162461bcd60e51b815260040161016190611463565b50505b610b3233610bd7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b6f9796959493929190611a9b565b60405180910390a195945050505050565b610b88610c35565b6001600160a01b038116610bcb5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f5e565b610bd481610cba565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c0a8385611afe565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c677f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107bc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f5e565b610cb1610d38565b610bd481610d9f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107bc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b88610d38565b60006001600160a01b0382165b92915050565b610dc381610da7565b82525050565b80610dc3565b60408101610ddd8285610dba565b6104186020830184610dc9565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610db481610dea565b60208101610db48284610dc9565b600060c08284031215610e5157610e51600080fd5b50919050565b600060208284031215610e6c57610e6c600080fd5b813567ffffffffffffffff811115610e8657610e86600080fd5b61046984828501610e3c565b801515610dc3565b60208101610db48284610e92565b610eb181610da7565b8114610bd457600080fd5b8035610db481610ea8565b80610eb1565b8035610db481610ec7565b60008060408385031215610eee57610eee600080fd5b610ef88484610ebc565b9150610f078460208501610ecd565b90509250929050565b600060208284031215610f2557610f25600080fd5b6104188383610ebc565b60008060408385031215610f4557610f45600080fd5b610f4f8484610ebc565b9150610f078460208501610ebc565b60208101610db48284610dba565b60008060408385031215610f8257610f82600080fd5b823567ffffffffffffffff811115610f9c57610f9c600080fd5b610fa885828601610e3c565b925050610f078460208501610ecd565b63ffffffff8116610eb1565b8035610db481610fb8565b60008083601f840112610fe457610fe4600080fd5b50813567ffffffffffffffff811115610fff57610fff600080fd5b60208301915083600182028301111561101a5761101a600080fd5b9250929050565b60ff8116610eb1565b8035610db481611021565b60008060008060006080868803121561105057611050600080fd5b61105a8787610fc4565b94506110698760208801610fc4565b9350604086013567ffffffffffffffff81111561108857611088600080fd5b61109488828901610fcf565b93509350506110a6876060880161102a565b90509295509295909350565b67ffffffffffffffff8116610dc3565b60208101610db482846110b2565b6000610db46110dc8381565b90565b610dc3816110d0565b60208101610db482846110df565b8051610db481610ec7565b60006020828403121561111657611116600080fd5b61041883836110f6565b506000610db46020830183610ebc565b67ffffffffffffffff8116610eb1565b8035610db481611130565b506000610db46020830183611140565b506000610db46020830183610fc4565b63ffffffff8116610dc3565b6000808335601e193685900301811261119257611192600080fd5b830160208101925035905067ffffffffffffffff8111156111b5576111b5600080fd5b3681900382131561101a5761101a600080fd5b82818337506000910152565b8183526020830192506111e88284836111c8565b50601f01601f19160190565b506000610db4602083018361102a565b60ff8116610dc3565b600060c0830161121d8380611120565b6112278582610dba565b50611235602084018461114b565b61124260208601826110b2565b50611250604084018461115b565b61125d604086018261116b565b5061126b606084018461115b565b611278606086018261116b565b506112866080840184611177565b85830360808701526112998382846111d4565b925050506112aa60a08401846111f4565b6112b760a0860182611204565b509392505050565b60208082528101610418818461120d565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610db4816112d0565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611324565b60208082528101610db48161133a565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e18565b60208082528101610db4816113a2565b634e487b7160e01b600052601160045260246000fd5b81810381811115610db457610db46113e2565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611324565b60208082528101610db48161140b565b604081016114818285610dc9565b61041860208301846110b2565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e18565b60208082528101610db48161148e565b6000610db4825b67ffffffffffffffff1690565b610dc3816114d0565b60208101610db482846114e4565b6001600160a01b03918216919081169082820390811115610db457610db46113e2565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e18565b60208082528101610db48161151e565b80820180821115610db457610db46113e2565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611324565b60208082528101610db481611573565b6000602082840312156115f0576115f0600080fd5b6104188383610fc4565b60008135610db481610ea8565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610db4565b6000610db482611625565b6000610db482611636565b61165582611641565b611660818354611607565b8255505050565b60008135610db481611130565b60007bffffffffffffffff00000000000000000000000000000000000000006116138460a01b90565b6000610db467ffffffffffffffff83166114d7565b6116bb8261169d565b611660818354611674565b60008135610db481610fb8565b60007fffffffff000000000000000000000000000000000000000000000000000000006116138460e01b90565b600063ffffffff8216610db4565b61171782611700565b6116608183546116d3565b600063ffffffff83611613565b61173882611700565b611660818354611722565b6000808335601e193685900301811261175e5761175e600080fd5b8301915050803567ffffffffffffffff81111561177d5761177d600080fd5b60208201915060018102360382131561101a5761101a600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117d857607f821691505b602082108103610e5157610e516117ae565b6117f3836110d0565b815460001960089490940293841b1916921b91909117905550565b60006109a58184846117ea565b8181101561063b5761182e60008261180e565b60010161181b565b601f8211156109a5576000818152602090206020601f8501048101602085101561185d5750805b61186f6020601f86010483018261181b565b5050505050565b8267ffffffffffffffff81111561188f5761188f611798565b61189982546117c4565b6118a4828285611836565b506000601f8211600181146118d957600083156118c15750848201355b600019600885021c1981166002850217855550611933565b600084815260209020601f19841690835b8281101561190a57878501358255602094850194600190920191016118ea565b5084821015611927576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109a5838383611876565b60008135610db481611021565b600060ff8216610db4565b61196782611953565b815460ff191660ff821617611660565b808280611983816115fa565b905061198f818461164c565b5050602083018061199f82611667565b90506119ab81846116b2565b505060408301806119bb826116c6565b90506119c7818461170e565b50505060608201806119d8826116c6565b90506119e7816001850161172f565b50506119f66080830183611743565b611a0481836002860161193b565b505060a0820180611a1482611946565b9050611a23816003850161195e565b50505050565b61063b8282611977565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611324565b60208082528101610db481611a33565b60c08101611aa9828a610dba565b611ab660208301896110b2565b611ac3604083018861116b565b611ad0606083018761116b565b8181036080830152611ae38185876111d4565b9050611af260a0830184611204565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610db457610db46113e256fea264697066735822122081d655cb139197ad3656cc0e5dc3cb1726520731d5f2d0ec10bd5637a69440cb64736f6c634300081c0033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b40806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dca565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e19565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e29565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e52565b6103bb565b3480156101c157600080fd5b506101d56101d0366004610e52565b61041a565b60405161018c9190610e95565b6101476101f0366004610ed3565b61046c565b34801561020157600080fd5b50610147610210366004610f0b565b6105bb565b34801561022157600080fd5b50610147610230366004610f2a565b61063a565b34801561024157600080fd5b506101476107a5565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f59565b34801561029b57600080fd5b506101476102aa366004610f67565b6107b9565b3480156102bb57600080fd5b506101476102ca366004610ed3565b610925565b3480156102db57600080fd5b506101476102ea366004610ed3565b6109a5565b6103026102fd366004611030565b610a6e565b60405161018c91906110bd565b34801561031b57600080fd5b5061014761032a366004610f0b565b610b7b565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906110d6565b905090565b600080826040516020016103cf9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104135760405162461bcd60e51b8152600401610161906112ff565b9392505050565b6000808260405160200161042e9190611294565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104645750428111155b949350505050565b60003411801561047b57508034145b6104975760405162461bcd60e51b815260040161016190611367565b60035434906001600160a01b03161561055b5760006104b461032f565b9050803410156104d65760405162461bcd60e51b8152600401610161906113a7565b6104e081346113cd565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610532576040519150601f19603f3d011682016040523d82523d6000602084013e610537565b606091505b50509050806105585760405162461bcd60e51b815260040161016190611438565b50505b600061056633610bd2565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105ad929190611448565b60405180910390a350505050565b6105c3610c30565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106365760405162461bcd60e51b815260040161016190611495565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106855750825b905060008267ffffffffffffffff1660011480156106a25750303b155b9050811580156106b0575080155b156106e7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071b57845468ff00000000000000001916680100000000000000001785555b61072487610ca4565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561079c57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610793906001906114c9565b60405180910390a15b50505050505050565b6107ad610c30565b6107b76000610cb5565b565b60006107c66001306114d7565b90506107f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108205750336001600160a01b038216145b61083c5760405162461bcd60e51b81526004016101619061152c565b6000610848834261153c565b905060008460405160200161085d9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a15760405162461bcd60e51b8152600401610161906115a7565b6000818152602081815260408220849055600191906108c290880188610f0b565b6001600160a01b0316815260208101919091526040016000908120906108ee60808801606089016115b7565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161079c8282611a11565b61092d610c30565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461097a576040519150601f19603f3d011682016040523d82523d6000602084013e61097f565b606091505b50509050806109a05760405162461bcd60e51b815260040161016190611495565b505050565b60006109b26001306114d7565b90506109e57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a0c5750336001600160a01b038216145b610a285760405162461bcd60e51b81526004016101619061152c565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a619190610e29565b60405180910390a2505050565b6003546000906001600160a01b031615610b24576000610a8c61032f565b905080341015610aae5760405162461bcd60e51b815260040161016190611a73565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610afb576040519150601f19603f3d011682016040523d82523d6000602084013e610b00565b606091505b5050905080610b215760405162461bcd60e51b815260040161016190611438565b50505b610b2d33610bd2565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b6a9796959493929190611a83565b60405180910390a195945050505050565b610b83610c30565b6001600160a01b038116610bc65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610bcf81610cb5565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c058385611ae6565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c627f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107b757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610cac610d33565b610bcf81610d9a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b83610d33565b60006001600160a01b0382165b92915050565b610dbe81610da2565b82525050565b80610dbe565b60408101610dd88285610db5565b6104136020830184610dc4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610daf81610de5565b60208101610daf8284610dc4565b600060c08284031215610e4c57610e4c600080fd5b50919050565b600060208284031215610e6757610e67600080fd5b813567ffffffffffffffff811115610e8157610e81600080fd5b61046484828501610e37565b801515610dbe565b60208101610daf8284610e8d565b610eac81610da2565b8114610bcf57600080fd5b8035610daf81610ea3565b80610eac565b8035610daf81610ec2565b60008060408385031215610ee957610ee9600080fd5b610ef38484610eb7565b9150610f028460208501610ec8565b90509250929050565b600060208284031215610f2057610f20600080fd5b6104138383610eb7565b60008060408385031215610f4057610f40600080fd5b610f4a8484610eb7565b9150610f028460208501610eb7565b60208101610daf8284610db5565b60008060408385031215610f7d57610f7d600080fd5b823567ffffffffffffffff811115610f9757610f97600080fd5b610fa385828601610e37565b925050610f028460208501610ec8565b63ffffffff8116610eac565b8035610daf81610fb3565b60008083601f840112610fdf57610fdf600080fd5b50813567ffffffffffffffff811115610ffa57610ffa600080fd5b60208301915083600182028301111561101557611015600080fd5b9250929050565b60ff8116610eac565b8035610daf8161101c565b60008060008060006080868803121561104b5761104b600080fd5b6110558787610fbf565b94506110648760208801610fbf565b9350604086013567ffffffffffffffff81111561108357611083600080fd5b61108f88828901610fca565b93509350506110a18760608801611025565b90509295509295909350565b67ffffffffffffffff8116610dbe565b60208101610daf82846110ad565b8051610daf81610ec2565b6000602082840312156110eb576110eb600080fd5b61041383836110cb565b506000610daf6020830183610eb7565b67ffffffffffffffff8116610eac565b8035610daf81611105565b506000610daf6020830183611115565b506000610daf6020830183610fbf565b63ffffffff8116610dbe565b6000808335601e193685900301811261116757611167600080fd5b830160208101925035905067ffffffffffffffff81111561118a5761118a600080fd5b3681900382131561101557611015600080fd5b82818337506000910152565b8183526020830192506111bd82848361119d565b50601f01601f19160190565b506000610daf6020830183611025565b60ff8116610dbe565b600060c083016111f283806110f5565b6111fc8582610db5565b5061120a6020840184611120565b61121760208601826110ad565b506112256040840184611130565b6112326040860182611140565b506112406060840184611130565b61124d6060860182611140565b5061125b608084018461114c565b858303608087015261126e8382846111a9565b9250505061127f60a08401846111c9565b61128c60a08601826111d9565b509392505050565b6020808252810161041381846111e2565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610daf816112a5565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161130f565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e13565b60208082528101610daf81611377565b634e487b7160e01b600052601160045260246000fd5b81810381811115610daf57610daf6113b7565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf816113e0565b604081016114568285610dc4565b61041360208301846110ad565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e13565b60208082528101610daf81611463565b6000610daf826114b3565b90565b67ffffffffffffffff1690565b610dbe816114a5565b60208101610daf82846114c0565b6001600160a01b03918216919081169082820390811115610daf57610daf6113b7565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e13565b60208082528101610daf816114fa565b80820180821115610daf57610daf6113b7565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161154f565b6000602082840312156115cc576115cc600080fd5b6104138383610fbf565b60008135610daf81610ea3565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610daf565b6000610daf82611601565b6000610daf82611612565b6116318261161d565b61163c8183546115e3565b8255505050565b60008135610daf81611105565b60007bffffffffffffffff00000000000000000000000000000000000000006115ef8460a01b90565b6000610daf67ffffffffffffffff83166114b3565b61169782611679565b61163c818354611650565b60008135610daf81610fb3565b60007fffffffff000000000000000000000000000000000000000000000000000000006115ef8460e01b90565b600063ffffffff8216610daf565b6116f3826116dc565b61163c8183546116af565b600063ffffffff836115ef565b611714826116dc565b61163c8183546116fe565b6000808335601e193685900301811261173a5761173a600080fd5b8301915050803567ffffffffffffffff81111561175957611759600080fd5b60208201915060018102360382131561101557611015600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117b457607f821691505b602082108103610e4c57610e4c61178a565b6000610daf6114b08381565b6117db836117c6565b815460001960089490940293841b1916921b91909117905550565b60006109a08184846117d2565b81811015610636576118166000826117f6565b600101611803565b601f8211156109a0576000818152602090206020601f850104810160208510156118455750805b6118576020601f860104830182611803565b5050505050565b8267ffffffffffffffff81111561187757611877611774565b61188182546117a0565b61188c82828561181e565b506000601f8211600181146118c157600083156118a95750848201355b600019600885021c198116600285021785555061191b565b600084815260209020601f19841690835b828110156118f257878501358255602094850194600190920191016118d2565b508482101561190f576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109a083838361185e565b60008135610daf8161101c565b600060ff8216610daf565b61194f8261193b565b815460ff191660ff82161761163c565b80828061196b816115d6565b90506119778184611628565b5050602083018061198782611643565b9050611993818461168e565b505060408301806119a3826116a2565b90506119af81846116ea565b50505060608201806119c0826116a2565b90506119cf816001850161170b565b50506119de608083018361171f565b6119ec818360028601611923565b505060a08201806119fc8261192e565b9050611a0b8160038501611946565b50505050565b610636828261195f565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf81611a1b565b60c08101611a91828a610db5565b611a9e60208301896110ad565b611aab6040830188611140565b611ab86060830187611140565b8181036080830152611acb8185876111a9565b9050611ada60a08301846111d9565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610daf57610daf6113b756fea2646970667358221220bead2f08222fa8050ef654f93b3b55289786509febf6aadea92d722d33fb188964736f6c634300081c0033", } // MessageBusABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index cd2ae5300..e6708f90c 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051615c20380380615c2083398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615c008339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615c00833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615c008339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615c008339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610dfe8061061183390190565b6107c68061140f83390190565b611cb180611bd583390190565b6110f08061388683390190565b61128a8061497683390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea26469706673582212208bcb2b2e84710674530eb43ebc72a2c402e0c3a935db32a33c9cd75bb10c53b064736f6c634300081c00336080604052348015600f57600080fd5b50610ddf8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc3660046107fd565b610265565b6040516100ee919061082d565b60405180910390f35b61011a61010536600461084c565b60009081526020819052604090206001015490565b6040516100ee9190610871565b61013a6101353660046108a4565b6102fe565b005b61013a61014a3660046108a4565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a61018436600461092e565b61037a565b6100e16101973660046108a4565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d6366004610976565b610492565b61013a6101e93660046108a4565b610602565b61013a6101fc366004610976565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610627565b6103238383610634565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037582826106de565b505050565b60006103876001306109ab565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a02565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a44565b60005b600154811015610323576000600182815481106103fd576103fd610a54565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906104549088908890600401610d4b565b600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b50505050508060010190506103de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104dd5750825b905060008267ffffffffffffffff1660011480156104fa5750303b155b905081158015610508575080155b1561053f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561057357845468ff00000000000000001916680100000000000000001785555b61057e600087610634565b506105a97ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610634565b5083156105fa57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105f190600190610d80565b60405180910390a15b505050505050565b60008281526020819052604090206001015461061d81610627565b61032383836106de565b6106318133610761565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166106d6576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561068e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156106d6576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107bf5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610d8e565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461063157600080fd5b80356102f8816107c3565b60006020828403121561081257610812600080fd5b61081c83836107f2565b9392505050565b8015155b82525050565b602081016102f88284610823565b806107e7565b80356102f88161083b565b60006020828403121561086157610861600080fd5b61081c8383610841565b80610827565b602081016102f8828461086b565b60006001600160a01b0382166102f8565b6107e78161087f565b80356102f881610890565b600080604083850312156108ba576108ba600080fd5b6108c48484610841565b91506108d38460208501610899565b90509250929050565b60008083601f8401126108f1576108f1600080fd5b50813567ffffffffffffffff81111561090c5761090c600080fd5b60208301915083602082028301111561092757610927600080fd5b9250929050565b6000806020838503121561094457610944600080fd5b823567ffffffffffffffff81111561095e5761095e600080fd5b61096a858286016108dc565b92509250509250929050565b60006020828403121561098b5761098b600080fd5b61081c8383610899565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f8610995565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f8816109ce565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000815290506109fc565b602080825281016102f881610a12565b634e487b7160e01b600052603260045260246000fd5b60ff81166107e7565b80356102f881610a6a565b5060006102f86020830183610a73565b60ff8116610827565b5060006102f86020830183610841565b5060006102f86020830183610899565b6108278161087f565b6000808335601e1936859003018112610adb57610adb600080fd5b830160208101925035905067ffffffffffffffff811115610afe57610afe600080fd5b3681900382131561092757610927600080fd5b82818337506000910152565b818352602083019250610b31828483610b11565b50601f01601f19160190565b8015156107e7565b80356102f881610b3d565b5060006102f86020830183610b45565b67ffffffffffffffff81166107e7565b80356102f881610b60565b5060006102f86020830183610b70565b67ffffffffffffffff8116610827565b60006101408301610bac8380610a7e565b610bb68582610a8e565b50610bc46020840184610a97565b610bd1602086018261086b565b50610bdf6040840184610a97565b610bec604086018261086b565b50610bfa6060840184610a97565b610c07606086018261086b565b50610c156080840184610aa7565b610c226080860182610ab7565b50610c3060a0840184610a97565b610c3d60a086018261086b565b50610c4b60c0840184610ac0565b85830360c0870152610c5e838284610b1d565b92505050610c6f60e0840184610aa7565b610c7c60e0860182610ab7565b50610c8b610100840184610b50565b610c99610100860182610823565b50610ca8610120840184610b7b565b610cb6610120860182610b8b565b509392505050565b600061081c8383610b9b565b6000823561013e1936849003018112610ce557610ce5600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d3e578484038952610d1c8284610cca565b610d268582610cbe565b94505060208201602099909901989150600101610d05565b5091979650505050505050565b60208082528101610d5d818486610cee565b949350505050565b600067ffffffffffffffff82166102f8565b61082781610d65565b602081016102f88284610d77565b60408101610d9c8285610ab7565b61081c602083018461086b56fea2646970667358221220000c7add8ef77f2ce3e54738e1a6216052e3c7d3dfd30f31adc394e073238b4d64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b58806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dcf565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e1e565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e2e565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e57565b6103c0565b3480156101c157600080fd5b506101d56101d0366004610e57565b61041f565b60405161018c9190610e9a565b6101476101f0366004610ed8565b610471565b34801561020157600080fd5b50610147610210366004610f10565b6105c0565b34801561022157600080fd5b50610147610230366004610f2f565b61063f565b34801561024157600080fd5b506101476107aa565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f5e565b34801561029b57600080fd5b506101476102aa366004610f6c565b6107be565b3480156102bb57600080fd5b506101476102ca366004610ed8565b61092a565b3480156102db57600080fd5b506101476102ea366004610ed8565b6109aa565b6103026102fd366004611035565b610a73565b60405161018c91906110c2565b34801561031b57600080fd5b5061014761032a366004610f10565b610b80565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d519061037a906020906004016110e8565b602060405180830381865afa158015610397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bb9190611101565b905090565b600080826040516020016103d491906112bf565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104185760405162461bcd60e51b81526004016101619061132a565b9392505050565b6000808260405160200161043391906112bf565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104695750428111155b949350505050565b60003411801561048057508034145b61049c5760405162461bcd60e51b815260040161016190611392565b60035434906001600160a01b0316156105605760006104b961032f565b9050803410156104db5760405162461bcd60e51b8152600401610161906113d2565b6104e581346113f8565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610537576040519150601f19603f3d011682016040523d82523d6000602084013e61053c565b606091505b505090508061055d5760405162461bcd60e51b815260040161016190611463565b50505b600061056b33610bd7565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105b2929190611473565b60405180910390a350505050565b6105c8610c35565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610615576040519150601f19603f3d011682016040523d82523d6000602084013e61061a565b606091505b505090508061063b5760405162461bcd60e51b8152600401610161906114c0565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561068a5750825b905060008267ffffffffffffffff1660011480156106a75750303b155b9050811580156106b5575080155b156106ec576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561072057845468ff00000000000000001916680100000000000000001785555b61072987610ca9565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156107a157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610798906001906114ed565b60405180910390a15b50505050505050565b6107b2610c35565b6107bc6000610cba565b565b60006107cb6001306114fb565b90506107fe7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108255750336001600160a01b038216145b6108415760405162461bcd60e51b815260040161016190611550565b600061084d8342611560565b905060008460405160200161086291906112bf565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a65760405162461bcd60e51b8152600401610161906115cb565b6000818152602081815260408220849055600191906108c790880188610f10565b6001600160a01b0316815260208101919091526040016000908120906108f360808801606089016115db565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016107a18282611a29565b610932610c35565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461097f576040519150601f19603f3d011682016040523d82523d6000602084013e610984565b606091505b50509050806109a55760405162461bcd60e51b8152600401610161906114c0565b505050565b60006109b76001306114fb565b90506109ea7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a115750336001600160a01b038216145b610a2d5760405162461bcd60e51b815260040161016190611550565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a669190610e2e565b60405180910390a2505050565b6003546000906001600160a01b031615610b29576000610a9161032f565b905080341015610ab35760405162461bcd60e51b815260040161016190611a8b565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610b00576040519150601f19603f3d011682016040523d82523d6000602084013e610b05565b606091505b5050905080610b265760405162461bcd60e51b815260040161016190611463565b50505b610b3233610bd7565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b6f9796959493929190611a9b565b60405180910390a195945050505050565b610b88610c35565b6001600160a01b038116610bcb5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f5e565b610bd481610cba565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c0a8385611afe565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c677f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107bc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f5e565b610cb1610d38565b610bd481610d9f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107bc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b88610d38565b60006001600160a01b0382165b92915050565b610dc381610da7565b82525050565b80610dc3565b60408101610ddd8285610dba565b6104186020830184610dc9565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610db481610dea565b60208101610db48284610dc9565b600060c08284031215610e5157610e51600080fd5b50919050565b600060208284031215610e6c57610e6c600080fd5b813567ffffffffffffffff811115610e8657610e86600080fd5b61046984828501610e3c565b801515610dc3565b60208101610db48284610e92565b610eb181610da7565b8114610bd457600080fd5b8035610db481610ea8565b80610eb1565b8035610db481610ec7565b60008060408385031215610eee57610eee600080fd5b610ef88484610ebc565b9150610f078460208501610ecd565b90509250929050565b600060208284031215610f2557610f25600080fd5b6104188383610ebc565b60008060408385031215610f4557610f45600080fd5b610f4f8484610ebc565b9150610f078460208501610ebc565b60208101610db48284610dba565b60008060408385031215610f8257610f82600080fd5b823567ffffffffffffffff811115610f9c57610f9c600080fd5b610fa885828601610e3c565b925050610f078460208501610ecd565b63ffffffff8116610eb1565b8035610db481610fb8565b60008083601f840112610fe457610fe4600080fd5b50813567ffffffffffffffff811115610fff57610fff600080fd5b60208301915083600182028301111561101a5761101a600080fd5b9250929050565b60ff8116610eb1565b8035610db481611021565b60008060008060006080868803121561105057611050600080fd5b61105a8787610fc4565b94506110698760208801610fc4565b9350604086013567ffffffffffffffff81111561108857611088600080fd5b61109488828901610fcf565b93509350506110a6876060880161102a565b90509295509295909350565b67ffffffffffffffff8116610dc3565b60208101610db482846110b2565b6000610db46110dc8381565b90565b610dc3816110d0565b60208101610db482846110df565b8051610db481610ec7565b60006020828403121561111657611116600080fd5b61041883836110f6565b506000610db46020830183610ebc565b67ffffffffffffffff8116610eb1565b8035610db481611130565b506000610db46020830183611140565b506000610db46020830183610fc4565b63ffffffff8116610dc3565b6000808335601e193685900301811261119257611192600080fd5b830160208101925035905067ffffffffffffffff8111156111b5576111b5600080fd5b3681900382131561101a5761101a600080fd5b82818337506000910152565b8183526020830192506111e88284836111c8565b50601f01601f19160190565b506000610db4602083018361102a565b60ff8116610dc3565b600060c0830161121d8380611120565b6112278582610dba565b50611235602084018461114b565b61124260208601826110b2565b50611250604084018461115b565b61125d604086018261116b565b5061126b606084018461115b565b611278606086018261116b565b506112866080840184611177565b85830360808701526112998382846111d4565b925050506112aa60a08401846111f4565b6112b760a0860182611204565b509392505050565b60208082528101610418818461120d565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610db4816112d0565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611324565b60208082528101610db48161133a565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e18565b60208082528101610db4816113a2565b634e487b7160e01b600052601160045260246000fd5b81810381811115610db457610db46113e2565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611324565b60208082528101610db48161140b565b604081016114818285610dc9565b61041860208301846110b2565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e18565b60208082528101610db48161148e565b6000610db4825b67ffffffffffffffff1690565b610dc3816114d0565b60208101610db482846114e4565b6001600160a01b03918216919081169082820390811115610db457610db46113e2565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e18565b60208082528101610db48161151e565b80820180821115610db457610db46113e2565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611324565b60208082528101610db481611573565b6000602082840312156115f0576115f0600080fd5b6104188383610fc4565b60008135610db481610ea8565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610db4565b6000610db482611625565b6000610db482611636565b61165582611641565b611660818354611607565b8255505050565b60008135610db481611130565b60007bffffffffffffffff00000000000000000000000000000000000000006116138460a01b90565b6000610db467ffffffffffffffff83166114d7565b6116bb8261169d565b611660818354611674565b60008135610db481610fb8565b60007fffffffff000000000000000000000000000000000000000000000000000000006116138460e01b90565b600063ffffffff8216610db4565b61171782611700565b6116608183546116d3565b600063ffffffff83611613565b61173882611700565b611660818354611722565b6000808335601e193685900301811261175e5761175e600080fd5b8301915050803567ffffffffffffffff81111561177d5761177d600080fd5b60208201915060018102360382131561101a5761101a600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117d857607f821691505b602082108103610e5157610e516117ae565b6117f3836110d0565b815460001960089490940293841b1916921b91909117905550565b60006109a58184846117ea565b8181101561063b5761182e60008261180e565b60010161181b565b601f8211156109a5576000818152602090206020601f8501048101602085101561185d5750805b61186f6020601f86010483018261181b565b5050505050565b8267ffffffffffffffff81111561188f5761188f611798565b61189982546117c4565b6118a4828285611836565b506000601f8211600181146118d957600083156118c15750848201355b600019600885021c1981166002850217855550611933565b600084815260209020601f19841690835b8281101561190a57878501358255602094850194600190920191016118ea565b5084821015611927576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109a5838383611876565b60008135610db481611021565b600060ff8216610db4565b61196782611953565b815460ff191660ff821617611660565b808280611983816115fa565b905061198f818461164c565b5050602083018061199f82611667565b90506119ab81846116b2565b505060408301806119bb826116c6565b90506119c7818461170e565b50505060608201806119d8826116c6565b90506119e7816001850161172f565b50506119f66080830183611743565b611a0481836002860161193b565b505060a0820180611a1482611946565b9050611a23816003850161195e565b50505050565b61063b8282611977565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611324565b60208082528101610db481611a33565b60c08101611aa9828a610dba565b611ab660208301896110b2565b611ac3604083018861116b565b611ad0606083018761116b565b8181036080830152611ae38185876111d4565b9050611af260a0830184611204565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610db457610db46113e256fea264697066735822122081d655cb139197ad3656cc0e5dc3cb1726520731d5f2d0ec10bd5637a69440cb64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122022c0117e92f6ffb3d46b462f20642839c7b4f030bf531f7cf3eb5d72325f73f664736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051615ba3380380615ba383398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615b838339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615b83833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615b838339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615b838339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610dfe8061061183390190565b6107618061140f83390190565b611c9980611b7083390190565b6110f08061380983390190565b61128a806148f983390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220980aa679cb38f1528abccc7a8f3b3d1cb60d67ec5db94c6b6fada5183bda908664736f6c634300081c00336080604052348015600f57600080fd5b50610ddf8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc3660046107fd565b610265565b6040516100ee919061082d565b60405180910390f35b61011a61010536600461084c565b60009081526020819052604090206001015490565b6040516100ee9190610871565b61013a6101353660046108a4565b6102fe565b005b61013a61014a3660046108a4565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a61018436600461092e565b61037a565b6100e16101973660046108a4565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d6366004610976565b610492565b61013a6101e93660046108a4565b610602565b61013a6101fc366004610976565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610627565b6103238383610634565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037582826106de565b505050565b60006103876001306109ab565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a02565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a44565b60005b600154811015610323576000600182815481106103fd576103fd610a54565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906104549088908890600401610d4b565b600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b50505050508060010190506103de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104dd5750825b905060008267ffffffffffffffff1660011480156104fa5750303b155b905081158015610508575080155b1561053f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561057357845468ff00000000000000001916680100000000000000001785555b61057e600087610634565b506105a97ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610634565b5083156105fa57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105f190600190610d80565b60405180910390a15b505050505050565b60008281526020819052604090206001015461061d81610627565b61032383836106de565b6106318133610761565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166106d6576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561068e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156106d6576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107bf5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610d8e565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461063157600080fd5b80356102f8816107c3565b60006020828403121561081257610812600080fd5b61081c83836107f2565b9392505050565b8015155b82525050565b602081016102f88284610823565b806107e7565b80356102f88161083b565b60006020828403121561086157610861600080fd5b61081c8383610841565b80610827565b602081016102f8828461086b565b60006001600160a01b0382166102f8565b6107e78161087f565b80356102f881610890565b600080604083850312156108ba576108ba600080fd5b6108c48484610841565b91506108d38460208501610899565b90509250929050565b60008083601f8401126108f1576108f1600080fd5b50813567ffffffffffffffff81111561090c5761090c600080fd5b60208301915083602082028301111561092757610927600080fd5b9250929050565b6000806020838503121561094457610944600080fd5b823567ffffffffffffffff81111561095e5761095e600080fd5b61096a858286016108dc565b92509250509250929050565b60006020828403121561098b5761098b600080fd5b61081c8383610899565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f8610995565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f8816109ce565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000815290506109fc565b602080825281016102f881610a12565b634e487b7160e01b600052603260045260246000fd5b60ff81166107e7565b80356102f881610a6a565b5060006102f86020830183610a73565b60ff8116610827565b5060006102f86020830183610841565b5060006102f86020830183610899565b6108278161087f565b6000808335601e1936859003018112610adb57610adb600080fd5b830160208101925035905067ffffffffffffffff811115610afe57610afe600080fd5b3681900382131561092757610927600080fd5b82818337506000910152565b818352602083019250610b31828483610b11565b50601f01601f19160190565b8015156107e7565b80356102f881610b3d565b5060006102f86020830183610b45565b67ffffffffffffffff81166107e7565b80356102f881610b60565b5060006102f86020830183610b70565b67ffffffffffffffff8116610827565b60006101408301610bac8380610a7e565b610bb68582610a8e565b50610bc46020840184610a97565b610bd1602086018261086b565b50610bdf6040840184610a97565b610bec604086018261086b565b50610bfa6060840184610a97565b610c07606086018261086b565b50610c156080840184610aa7565b610c226080860182610ab7565b50610c3060a0840184610a97565b610c3d60a086018261086b565b50610c4b60c0840184610ac0565b85830360c0870152610c5e838284610b1d565b92505050610c6f60e0840184610aa7565b610c7c60e0860182610ab7565b50610c8b610100840184610b50565b610c99610100860182610823565b50610ca8610120840184610b7b565b610cb6610120860182610b8b565b509392505050565b600061081c8383610b9b565b6000823561013e1936849003018112610ce557610ce5600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d3e578484038952610d1c8284610cca565b610d268582610cbe565b94505060208201602099909901989150600101610d05565b5091979650505050505050565b60208082528101610d5d818486610cee565b949350505050565b600067ffffffffffffffff82166102f8565b61082781610d65565b602081016102f88284610d77565b60408101610d9c8285610ab7565b61081c602083018461086b56fea2646970667358221220000c7add8ef77f2ce3e54738e1a6216052e3c7d3dfd30f31adc394e073238b4d64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610688806100d96000396000f3fe60806040526004361061007f5760003560e01c80639003adfe1161004e5780639003adfe1461012e578063afe997ea14610141578063da35a26f14610156578063f2fde38b1461017657600080fd5b80631a90a2191461008b57806323aa2a9d146100b2578063715018a6146100d45780638da5cb5b146100e957600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506000545b6040516100a99190610544565b60405180910390f35b3480156100be57600080fd5b506100d26100cd366004610570565b610196565b005b3480156100e057600080fd5b506100d26101a3565b3480156100f557600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516100a991906105b0565b34801561013a57600080fd5b504761009c565b34801561014d57600080fd5b506100d26101b7565b34801561016257600080fd5b506100d26101713660046105d2565b61021a565b34801561018257600080fd5b506100d261019136600461060a565b610362565b61019e6103bf565b600055565b6101ab6103bf565b6101b56000610433565b565b6101bf6103bf565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610217573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102655750825b905060008267ffffffffffffffff1660011480156102825750303b155b905081158015610290575080155b156102c7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156102fb57845468ff00000000000000001916680100000000000000001785555b610304866104bc565b6000879055831561035957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035090600190610644565b60405180910390a15b50505050505050565b61036a6103bf565b6001600160a01b0381166103b65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b60405180910390fd5b61021781610433565b336103f17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101b557336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ad91906105b0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104c46104cd565b61021781610534565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101b5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61036a6104cd565b805b82525050565b60208101610552828461053c565b92915050565b805b811461021757600080fd5b803561055281610558565b60006020828403121561058557610585600080fd5b61058f8383610565565b9392505050565b60006001600160a01b038216610552565b61053e81610596565b6020810161055282846105a7565b61055a81610596565b8035610552816105be565b600080604083850312156105e8576105e8600080fd5b6105f28484610565565b915061060184602085016105c7565b90509250929050565b60006020828403121561061f5761061f600080fd5b61058f83836105c7565b600067ffffffffffffffff8216610552565b61053e81610629565b60208101610552828461063b56fea264697066735822122080f0c01e34a6bfd9ed27e9c05c50a018ef9cc6e669f767856b4c30e98b70567764736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611b40806101596000396000f3fe6080604052600436106100d55760003560e01c8063715018a61161007f57806399a3ad211161005957806399a3ad21146102af578063ab53bddc146102cf578063b1454caa146102ef578063f2fde38b1461030f57610149565b8063715018a6146102355780638da5cb5b1461024a5780639730886d1461028f57610149565b8063346633fb116100b0578063346633fb146101e257806336d2da90146101f5578063485cc9551461021557610149565b8062a1b8151461016a5780630fcfbd111461019557806333a88c72146101b557610149565b36610149576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb90349061011a9033908390600401610dca565b6000604051808303818588803b15801561013357600080fd5b505af1158015610147573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161016190610e19565b60405180910390fd5b34801561017657600080fd5b5061017f61032f565b60405161018c9190610e29565b60405180910390f35b3480156101a157600080fd5b5061017f6101b0366004610e52565b6103bb565b3480156101c157600080fd5b506101d56101d0366004610e52565b61041a565b60405161018c9190610e95565b6101476101f0366004610ed3565b61046c565b34801561020157600080fd5b50610147610210366004610f0b565b6105bb565b34801561022157600080fd5b50610147610230366004610f2a565b61063a565b34801561024157600080fd5b506101476107a5565b34801561025657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018c9190610f59565b34801561029b57600080fd5b506101476102aa366004610f67565b6107b9565b3480156102bb57600080fd5b506101476102ca366004610ed3565b610925565b3480156102db57600080fd5b506101476102ea366004610ed3565b6109a5565b6103026102fd366004611030565b610a6e565b60405161018c91906110bd565b34801561031b57600080fd5b5061014761032a366004610f0b565b610b7b565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906110d6565b905090565b600080826040516020016103cf9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806104135760405162461bcd60e51b8152600401610161906112ff565b9392505050565b6000808260405160200161042e9190611294565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906104645750428111155b949350505050565b60003411801561047b57508034145b6104975760405162461bcd60e51b815260040161016190611367565b60035434906001600160a01b03161561055b5760006104b461032f565b9050803410156104d65760405162461bcd60e51b8152600401610161906113a7565b6104e081346113cd565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610532576040519150601f19603f3d011682016040523d82523d6000602084013e610537565b606091505b50509050806105585760405162461bcd60e51b815260040161016190611438565b50505b600061056633610bd2565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b684846040516105ad929190611448565b60405180910390a350505050565b6105c3610c30565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106365760405162461bcd60e51b815260040161016190611495565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156106855750825b905060008267ffffffffffffffff1660011480156106a25750303b155b9050811580156106b0575080155b156106e7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071b57845468ff00000000000000001916680100000000000000001785555b61072487610ca4565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561079c57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610793906001906114c9565b60405180910390a15b50505050505050565b6107ad610c30565b6107b76000610cb5565b565b60006107c66001306114d7565b90506107f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806108205750336001600160a01b038216145b61083c5760405162461bcd60e51b81526004016101619061152c565b6000610848834261153c565b905060008460405160200161085d9190611294565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156108a15760405162461bcd60e51b8152600401610161906115a7565b6000818152602081815260408220849055600191906108c290880188610f0b565b6001600160a01b0316815260208101919091526040016000908120906108ee60808801606089016115b7565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902086916004020161079c8282611a11565b61092d610c30565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461097a576040519150601f19603f3d011682016040523d82523d6000602084013e61097f565b606091505b50509050806109a05760405162461bcd60e51b815260040161016190611495565b505050565b60006109b26001306114d7565b90506109e57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610a0c5750336001600160a01b038216145b610a285760405162461bcd60e51b81526004016101619061152c565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d383604051610a619190610e29565b60405180910390a2505050565b6003546000906001600160a01b031615610b24576000610a8c61032f565b905080341015610aae5760405162461bcd60e51b815260040161016190611a73565b6003546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610afb576040519150601f19603f3d011682016040523d82523d6000602084013e610b00565b606091505b5050905080610b215760405162461bcd60e51b815260040161016190611438565b50505b610b2d33610bd2565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610b6a9796959493929190611a83565b60405180910390a195945050505050565b610b83610c30565b6001600160a01b038116610bc65760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610bcf81610cb5565b50565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610c058385611ae6565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c627f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107b757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101619190610f59565b610cac610d33565b610bcf81610d9a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b83610d33565b60006001600160a01b0382165b92915050565b610dbe81610da2565b82525050565b80610dbe565b60408101610dd88285610db5565b6104136020830184610dc4565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610daf81610de5565b60208101610daf8284610dc4565b600060c08284031215610e4c57610e4c600080fd5b50919050565b600060208284031215610e6757610e67600080fd5b813567ffffffffffffffff811115610e8157610e81600080fd5b61046484828501610e37565b801515610dbe565b60208101610daf8284610e8d565b610eac81610da2565b8114610bcf57600080fd5b8035610daf81610ea3565b80610eac565b8035610daf81610ec2565b60008060408385031215610ee957610ee9600080fd5b610ef38484610eb7565b9150610f028460208501610ec8565b90509250929050565b600060208284031215610f2057610f20600080fd5b6104138383610eb7565b60008060408385031215610f4057610f40600080fd5b610f4a8484610eb7565b9150610f028460208501610eb7565b60208101610daf8284610db5565b60008060408385031215610f7d57610f7d600080fd5b823567ffffffffffffffff811115610f9757610f97600080fd5b610fa385828601610e37565b925050610f028460208501610ec8565b63ffffffff8116610eac565b8035610daf81610fb3565b60008083601f840112610fdf57610fdf600080fd5b50813567ffffffffffffffff811115610ffa57610ffa600080fd5b60208301915083600182028301111561101557611015600080fd5b9250929050565b60ff8116610eac565b8035610daf8161101c565b60008060008060006080868803121561104b5761104b600080fd5b6110558787610fbf565b94506110648760208801610fbf565b9350604086013567ffffffffffffffff81111561108357611083600080fd5b61108f88828901610fca565b93509350506110a18760608801611025565b90509295509295909350565b67ffffffffffffffff8116610dbe565b60208101610daf82846110ad565b8051610daf81610ec2565b6000602082840312156110eb576110eb600080fd5b61041383836110cb565b506000610daf6020830183610eb7565b67ffffffffffffffff8116610eac565b8035610daf81611105565b506000610daf6020830183611115565b506000610daf6020830183610fbf565b63ffffffff8116610dbe565b6000808335601e193685900301811261116757611167600080fd5b830160208101925035905067ffffffffffffffff81111561118a5761118a600080fd5b3681900382131561101557611015600080fd5b82818337506000910152565b8183526020830192506111bd82848361119d565b50601f01601f19160190565b506000610daf6020830183611025565b60ff8116610dbe565b600060c083016111f283806110f5565b6111fc8582610db5565b5061120a6020840184611120565b61121760208601826110ad565b506112256040840184611130565b6112326040860182611140565b506112406060840184611130565b61124d6060860182611140565b5061125b608084018461114c565b858303608087015261126e8382846111a9565b9250505061127f60a08401846111c9565b61128c60a08601826111d9565b509392505050565b6020808252810161041381846111e2565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610daf816112a5565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e6720457468657200000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161130f565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e13565b60208082528101610daf81611377565b634e487b7160e01b600052601160045260246000fd5b81810381811115610daf57610daf6113b7565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf816113e0565b604081016114568285610dc4565b61041360208301846110ad565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e13565b60208082528101610daf81611463565b6000610daf826114b3565b90565b67ffffffffffffffff1690565b610dbe816114a5565b60208101610daf82846114c0565b6001600160a01b03918216919081169082820390811115610daf57610daf6113b7565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e13565b60208082528101610daf816114fa565b80820180821115610daf57610daf6113b7565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf8161154f565b6000602082840312156115cc576115cc600080fd5b6104138383610fbf565b60008135610daf81610ea3565b60006001600160a01b03835b81169019929092169190911792915050565b60006001600160a01b038216610daf565b6000610daf82611601565b6000610daf82611612565b6116318261161d565b61163c8183546115e3565b8255505050565b60008135610daf81611105565b60007bffffffffffffffff00000000000000000000000000000000000000006115ef8460a01b90565b6000610daf67ffffffffffffffff83166114b3565b61169782611679565b61163c818354611650565b60008135610daf81610fb3565b60007fffffffff000000000000000000000000000000000000000000000000000000006115ef8460e01b90565b600063ffffffff8216610daf565b6116f3826116dc565b61163c8183546116af565b600063ffffffff836115ef565b611714826116dc565b61163c8183546116fe565b6000808335601e193685900301811261173a5761173a600080fd5b8301915050803567ffffffffffffffff81111561175957611759600080fd5b60208201915060018102360382131561101557611015600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117b457607f821691505b602082108103610e4c57610e4c61178a565b6000610daf6114b08381565b6117db836117c6565b815460001960089490940293841b1916921b91909117905550565b60006109a08184846117d2565b81811015610636576118166000826117f6565b600101611803565b601f8211156109a0576000818152602090206020601f850104810160208510156118455750805b6118576020601f860104830182611803565b5050505050565b8267ffffffffffffffff81111561187757611877611774565b61188182546117a0565b61188c82828561181e565b506000601f8211600181146118c157600083156118a95750848201355b600019600885021c198116600285021785555061191b565b600084815260209020601f19841690835b828110156118f257878501358255602094850194600190920191016118d2565b508482101561190f576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6109a083838361185e565b60008135610daf8161101c565b600060ff8216610daf565b61194f8261193b565b815460ff191660ff82161761163c565b80828061196b816115d6565b90506119778184611628565b5050602083018061198782611643565b9050611993818461168e565b505060408301806119a3826116a2565b90506119af81846116ea565b50505060608201806119c0826116a2565b90506119cf816001850161170b565b50506119de608083018361171f565b6119ec818360028601611923565b505060a08201806119fc8261192e565b9050611a0b8160038501611946565b50505050565b610636828261195f565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506112f9565b60208082528101610daf81611a1b565b60c08101611a91828a610db5565b611a9e60208301896110ad565b611aab6040830188611140565b611ab86060830187611140565b8181036080830152611acb8185876111a9565b9050611ada60a08301846111d9565b98975050505050505050565b67ffffffffffffffff918216919081169082820190811115610daf57610daf6113b756fea2646970667358221220bead2f08222fa8050ef654f93b3b55289786509febf6aadea92d722d33fb188964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122022c0117e92f6ffb3d46b462f20642839c7b4f030bf531f7cf3eb5d72325f73f664736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/src/messaging/MessageBus.sol b/contracts/src/messaging/MessageBus.sol index 6b3527cea..ff36bc739 100644 --- a/contracts/src/messaging/MessageBus.sol +++ b/contracts/src/messaging/MessageBus.sol @@ -76,7 +76,7 @@ contract MessageBus is IMessageBus, Initializable, OwnableUpgradeable { } function getPublishFee() public view returns (uint256) { - return fees.messageFee(32); //just a hash + return fees.messageFee(); } // This method is called from contracts to publish messages to the other linked message bus. diff --git a/contracts/src/system/Fees.sol b/contracts/src/system/Fees.sol index 1b842788b..7bc45bc7b 100644 --- a/contracts/src/system/Fees.sol +++ b/contracts/src/system/Fees.sol @@ -5,13 +5,13 @@ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; interface IFees { - function messageFee(uint256 messageSize) external view returns (uint256); + function messageFee() external view returns (uint256); } // Contract that will contain fees for contracts that need to apply them -contract Fees is Initializable, OwnableUpgradeable { +contract Fees is Initializable, OwnableUpgradeable, IFees { - uint256 private _messageFeePerByte; + uint256 private _messageFee; // Constructor disables initializer; // Only owner functions will not be callable on implementation @@ -20,20 +20,20 @@ contract Fees is Initializable, OwnableUpgradeable { } // initialization function to be used by the proxy. - function initialize(uint256 initialMessageFeePerByte, address eoaOwner) public initializer { + function initialize(uint256 flatFee, address eoaOwner) public initializer { __Ownable_init(eoaOwner); - _messageFeePerByte = initialMessageFeePerByte; + _messageFee = flatFee; } // Helper function to calculate the fee for a message - function messageFee(uint256 messageSize) external view returns (uint256) { - return _messageFeePerByte * messageSize; + function messageFee() external view returns (uint256) { + return _messageFee; } // The EOA owner can set the message fee to ensure sequencer is not publishing // at a loss - function setMessageFee(uint256 newMessageFeePerByte) external onlyOwner{ - _messageFeePerByte = newMessageFeePerByte; + function setMessageFee(uint256 newFeeForMessage) external onlyOwner{ + _messageFee = newFeeForMessage; } // The EOA owner can collect the fees