Transactions
Token Transfers
Internal Transactions
Coin Balance History
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- BActions
- Optimization enabled
- true
- Compiler version
- v0.5.12+commit.7709ece9
- Optimization runs
- 10000
- EVM Version
- petersburg
- Verified at
- 2026-04-22T16:57:53.076861Z
BActions.sol
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pragma solidity 0.5.12;
contract ERC20 {
function balanceOf(address whom) external view returns (uint);
function allowance(address, address) external view returns (uint);
function approve(address spender, uint amount) external returns (bool);
function transfer(address dst, uint amt) external returns (bool);
function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}
contract BPool is ERC20 {
function isBound(address t) external view returns (bool);
function getFinalTokens() external view returns(address[] memory);
function getBalance(address token) external view returns (uint);
function setSwapFee(uint swapFee) external;
function setController(address controller) external;
function setPublicSwap(bool public_) external;
function finalize() external;
function bind(address token, uint balance, uint denorm) external;
function rebind(address token, uint balance, uint denorm) external;
function unbind(address token) external;
function joinPool(uint poolAmountOut, uint[] calldata maxAmountsIn) external;
function joinswapExternAmountIn(
address tokenIn, uint tokenAmountIn, uint minPoolAmountOut
) external returns (uint poolAmountOut);
}
contract BFactory {
function newBPool() external returns (BPool);
}
/********************************** WARNING **********************************/
// //
// This contract is only meant to be used in conjunction with ds-proxy. //
// Calling this contract directly will lead to loss of funds. //
// //
/********************************** WARNING **********************************/
contract BActions {
function create(
BFactory factory,
address[] calldata tokens,
uint[] calldata balances,
uint[] calldata denorms,
uint swapFee,
bool finalize
) external returns (BPool pool) {
require(tokens.length == balances.length, "ERR_LENGTH_MISMATCH");
require(tokens.length == denorms.length, "ERR_LENGTH_MISMATCH");
pool = factory.newBPool();
pool.setSwapFee(swapFee);
for (uint i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
require(token.transferFrom(msg.sender, address(this), balances[i]), "ERR_TRANSFER_FAILED");
if (token.allowance(address(this), address(pool)) > 0) {
token.approve(address(pool), 0);
}
token.approve(address(pool), balances[i]);
pool.bind(tokens[i], balances[i], denorms[i]);
}
if (finalize) {
pool.finalize();
require(pool.transfer(msg.sender, pool.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
} else {
pool.setPublicSwap(true);
}
}
function setTokens(
BPool pool,
address[] calldata tokens,
uint[] calldata balances,
uint[] calldata denorms
) external {
require(tokens.length == balances.length, "ERR_LENGTH_MISMATCH");
require(tokens.length == denorms.length, "ERR_LENGTH_MISMATCH");
for (uint i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
if (pool.isBound(tokens[i])) {
if (balances[i] > pool.getBalance(tokens[i])) {
require(
token.transferFrom(msg.sender, address(this), balances[i] - pool.getBalance(tokens[i])),
"ERR_TRANSFER_FAILED"
);
if (token.allowance(address(this), address(pool)) > 0) {
token.approve(address(pool), 0);
}
token.approve(address(pool), balances[i] - pool.getBalance(tokens[i]));
}
if (balances[i] > 10**6) {
pool.rebind(tokens[i], balances[i], denorms[i]);
} else {
pool.unbind(tokens[i]);
}
} else {
require(token.transferFrom(msg.sender, address(this), balances[i]), "ERR_TRANSFER_FAILED");
if (token.allowance(address(this), address(pool)) > 0) {
token.approve(address(pool), 0);
}
token.approve(address(pool), balances[i]);
pool.bind(tokens[i], balances[i], denorms[i]);
}
if (token.balanceOf(address(this)) > 0) {
require(token.transfer(msg.sender, token.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
}
}
function setPublicSwap(BPool pool, bool publicSwap) external {
pool.setPublicSwap(publicSwap);
}
function setSwapFee(BPool pool, uint newFee) external {
pool.setSwapFee(newFee);
}
function setController(BPool pool, address newController) external {
pool.setController(newController);
}
function finalize(BPool pool) external {
pool.finalize();
require(pool.transfer(msg.sender, pool.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
function joinPool(
BPool pool,
uint poolAmountOut,
uint[] calldata maxAmountsIn
) external {
address[] memory tokens = pool.getFinalTokens();
require(maxAmountsIn.length == tokens.length, "ERR_LENGTH_MISMATCH");
for (uint i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
require(token.transferFrom(msg.sender, address(this), maxAmountsIn[i]), "ERR_TRANSFER_FAILED");
if (token.allowance(address(this), address(pool)) > 0) {
token.approve(address(pool), 0);
}
token.approve(address(pool), maxAmountsIn[i]);
}
pool.joinPool(poolAmountOut, maxAmountsIn);
for (uint i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
if (token.balanceOf(address(this)) > 0) {
require(token.transfer(msg.sender, token.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
}
require(pool.transfer(msg.sender, pool.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
function joinswapExternAmountIn(
BPool pool,
address tokenIn,
uint tokenAmountIn,
uint minPoolAmountOut
) external {
ERC20 token = ERC20(tokenIn);
require(token.transferFrom(msg.sender, address(this), tokenAmountIn), "ERR_TRANSFER_FAILED");
if (token.allowance(address(this), address(pool)) > 0) {
token.approve(address(pool), 0);
}
token.approve(address(pool), tokenAmountIn);
uint poolAmountOut = pool.joinswapExternAmountIn(tokenIn, tokenAmountIn, minPoolAmountOut);
require(pool.transfer(msg.sender, poolAmountOut), "ERR_TRANSFER_FAILED");
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":10000,"enabled":true},"libraries":{},"evmVersion":"petersburg","compilationTarget":{"BActions.sol":"BActions"}}
Contract ABI
[{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"address","name":"pool","internalType":"contract BPool"}],"name":"create","inputs":[{"type":"address","name":"factory","internalType":"contract BFactory"},{"type":"address[]","name":"tokens","internalType":"address[]"},{"type":"uint256[]","name":"balances","internalType":"uint256[]"},{"type":"uint256[]","name":"denorms","internalType":"uint256[]"},{"type":"uint256","name":"swapFee","internalType":"uint256"},{"type":"bool","name":"finalize","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"finalize","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"joinPool","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"uint256","name":"poolAmountOut","internalType":"uint256"},{"type":"uint256[]","name":"maxAmountsIn","internalType":"uint256[]"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"joinswapExternAmountIn","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"address","name":"tokenIn","internalType":"address"},{"type":"uint256","name":"tokenAmountIn","internalType":"uint256"},{"type":"uint256","name":"minPoolAmountOut","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setController","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"address","name":"newController","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setPublicSwap","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"bool","name":"publicSwap","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setSwapFee","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"uint256","name":"newFee","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setTokens","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"address[]","name":"tokens","internalType":"address[]"},{"type":"uint256[]","name":"balances","internalType":"uint256[]"},{"type":"uint256[]","name":"denorms","internalType":"uint256[]"}],"constant":false}]
Contract Creation Code
0x608060405234801561001057600080fd5b506129a9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638a5c57df1161005b5780638a5c57df14610259578063991991c7146102de578063c1762b151461030a578063e0d945bf1461034657610088565b80631a78a2751461008d5780631eccc185146101d55780634ef39b75146102055780637b7d6c681461022b575b600080fd5b6101b9600480360360c08110156100a357600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ce57600080fd5b8201836020820111156100e057600080fd5b8035906020019184602083028401116401000000008311171561010257600080fd5b91939092909160208101903564010000000081111561012057600080fd5b82018360208201111561013257600080fd5b8035906020019184602083028401116401000000008311171561015457600080fd5b91939092909160208101903564010000000081111561017257600080fd5b82018360208201111561018457600080fd5b803590602001918460208302840111640100000000831117156101a657600080fd5b919350915080359060200135151561046a565b604080516001600160a01b039092168252519081900360200190f35b610203600480360360408110156101eb57600080fd5b506001600160a01b0381351690602001351515610c21565b005b6102036004803603602081101561021b57600080fd5b50356001600160a01b0316610c9f565b6102036004803603604081101561024157600080fd5b506001600160a01b0381358116916020013516610e6f565b6102036004803603606081101561026f57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561029f57600080fd5b8201836020820111156102b157600080fd5b803590602001918460208302840111640100000000831117156102d357600080fd5b509092509050610ec7565b610203600480360360408110156102f457600080fd5b506001600160a01b0381351690602001356117a4565b6102036004803603608081101561032057600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117ea565b6102036004803603608081101561035c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111640100000000831117156103bb57600080fd5b9193909290916020810190356401000000008111156103d957600080fd5b8201836020820111156103eb57600080fd5b8035906020019184602083028401116401000000008311171561040d57600080fd5b91939092909160208101903564010000000081111561042b57600080fd5b82018360208201111561043d57600080fd5b8035906020019184602083028401116401000000008311171561045f57600080fd5b509092509050611c16565b60008786146104c0576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b878414610514576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b896001600160a01b031663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561054f57600080fd5b505af1158015610563573d6000803e3d6000fd5b505050506040513d602081101561057957600080fd5b5051604080517f34e199070000000000000000000000000000000000000000000000000000000081526004810186905290519192506001600160a01b038316916334e199079160248082019260009290919082900301818387803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b506000925050505b888110156109c15760008a8a8381811061061257fe5b905060200201356001600160a01b03169050806001600160a01b03166323b872dd33308c8c8781811061064157fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156106b057600080fd5b505af11580156106c4573d6000803e3d6000fd5b505050506040513d60208110156106da57600080fd5b505161072d576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038581166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561079757600080fd5b505afa1580156107ab573d6000803e3d6000fd5b505050506040513d60208110156107c157600080fd5b5051111561085757806001600160a01b031663095ea7b38460006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561082a57600080fd5b505af115801561083e573d6000803e3d6000fd5b505050506040513d602081101561085457600080fd5b50505b806001600160a01b031663095ea7b3848b8b8681811061087357fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b505050506040513d60208110156108f357600080fd5b50506001600160a01b03831663e4e1e5388c8c8581811061091057fe5b905060200201356001600160a01b03168b8b8681811061092c57fe5b905060200201358a8a8781811061093f57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561099c57600080fd5b505af11580156109b0573d6000803e3d6000fd5b5050600190930192506105fc915050565b508115610b9a57806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610a8557600080fd5b505afa158015610a99573d6000803e3d6000fd5b505050506040513d6020811015610aaf57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050506040513d6020811015610b4257600080fd5b5051610b95576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b610c14565b604080517f49b595520000000000000000000000000000000000000000000000000000000081526001600482015290516001600160a01b038316916349b5955291602480830192600092919082900301818387803b158015610bfb57600080fd5b505af1158015610c0f573d6000803e3d6000fd5b505050505b9998505050505050505050565b604080517f49b59552000000000000000000000000000000000000000000000000000000008152821515600482015290516001600160a01b038416916349b5955291602480830192600092919082900301818387803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b505050505050565b806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cda57600080fd5b505af1158015610cee573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610d5c57600080fd5b505afa158015610d70573d6000803e3d6000fd5b505050506040513d6020811015610d8657600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b505050506040513d6020811015610e1957600080fd5b5051610e6c576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b50565b816001600160a01b03166392eefe9b826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610c8357600080fd5b6060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b158015610f0257600080fd5b505afa158015610f16573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610f5d57600080fd5b8101908080516040519392919084640100000000821115610f7d57600080fd5b908301906020820185811115610f9257600080fd5b8251866020820283011164010000000082111715610faf57600080fd5b82525081516020918201928201910280838360005b83811015610fdc578181015183820152602001610fc4565b50505050905001604052505050905080518383905014611043576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b60005b815181101561134157600082828151811061105d57fe5b60200260200101519050806001600160a01b03166323b872dd333088888781811061108457fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505050506040513d602081101561111d57600080fd5b5051611170576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038981166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b1580156111da57600080fd5b505afa1580156111ee573d6000803e3d6000fd5b505050506040513d602081101561120457600080fd5b5051111561129a57806001600160a01b031663095ea7b38860006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b50505b806001600160a01b031663095ea7b3888787868181106112b657fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561130c57600080fd5b505af1158015611320573d6000803e3d6000fd5b505050506040513d602081101561133657600080fd5b505050600101611046565b50604080517f4f69c0d40000000000000000000000000000000000000000000000000000000081526004810186815260248201928352604482018590526001600160a01b03881692634f69c0d492889288928892606401846020850280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b506000925050505b815181101561162257600082828151811061140b57fe5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146d57600080fd5b505afa158015611481573d6000803e3d6000fd5b505050506040513d602081101561149757600080fd5b5051111561161957604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d602081101561153357600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050506040513d60208110156115c657600080fd5b5051611619576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b506001016113f4565b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0387169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561168d57600080fd5b505afa1580156116a1573d6000803e3d6000fd5b505050506040513d60208110156116b757600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561172057600080fd5b505af1158015611734573d6000803e3d6000fd5b505050506040513d602081101561174a57600080fd5b505161179d576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b5050505050565b816001600160a01b03166334e19907826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610c8357600080fd5b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101849052905184916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561185b57600080fd5b505af115801561186f573d6000803e3d6000fd5b505050506040513d602081101561188557600080fd5b50516118d8576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038781166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561194257600080fd5b505afa158015611956573d6000803e3d6000fd5b505050506040513d602081101561196c57600080fd5b50511115611a0257806001600160a01b031663095ea7b38660006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156119d557600080fd5b505af11580156119e9573d6000803e3d6000fd5b505050506040513d60208110156119ff57600080fd5b50505b806001600160a01b031663095ea7b386856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b505050506040513d6020811015611a8c57600080fd5b5050604080517f5db342770000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201869052604482018590529151600092881691635db3427791606480830192602092919082900301818787803b158015611b0157600080fd5b505af1158015611b15573d6000803e3d6000fd5b505050506040513d6020811015611b2b57600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905290519192506001600160a01b0388169163a9059cbb916044808201926020929091908290030181600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d6020811015611bc357600080fd5b5051610c97576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b848314611c6a576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b848114611cbe576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b60005b8581101561296a576000878783818110611cd757fe5b905060200201356001600160a01b03169050886001600160a01b0316632f37b624898985818110611d0457fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d5a57600080fd5b505afa158015611d6e573d6000803e3d6000fd5b505050506040513d6020811015611d8457600080fd5b5051156123c157886001600160a01b031663f8b2cb4f898985818110611da657fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d6020811015611e2657600080fd5b5051868684818110611e3457fe5b90506020020135111561224f57806001600160a01b03166323b872dd33308c6001600160a01b031663f8b2cb4f8d8d89818110611e6d57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ec357600080fd5b505afa158015611ed7573d6000803e3d6000fd5b505050506040513d6020811015611eed57600080fd5b50518a8a88818110611efb57fe5b90506020020135036040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611f6b57600080fd5b505af1158015611f7f573d6000803e3d6000fd5b505050506040513d6020811015611f9557600080fd5b5051611fe8576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038b81166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561205257600080fd5b505afa158015612066573d6000803e3d6000fd5b505050506040513d602081101561207c57600080fd5b5051111561211257806001600160a01b031663095ea7b38a60006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b505050506040513d602081101561210f57600080fd5b50505b806001600160a01b031663095ea7b38a8b6001600160a01b031663f8b2cb4f8c8c8881811061213d57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561219357600080fd5b505afa1580156121a7573d6000803e3d6000fd5b505050506040513d60208110156121bd57600080fd5b50518989878181106121cb57fe5b90506020020135036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561222257600080fd5b505af1158015612236573d6000803e3d6000fd5b505050506040513d602081101561224c57600080fd5b50505b620f424086868481811061225f57fe5b90506020020135111561233057886001600160a01b0316633fdddaa289898581811061228757fe5b905060200201356001600160a01b03168888868181106122a357fe5b905060200201358787878181106122b657fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561231357600080fd5b505af1158015612327573d6000803e3d6000fd5b505050506123bc565b886001600160a01b031663cf5e7bd389898581811061234b57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b505050505b612752565b806001600160a01b03166323b872dd33308989878181106123de57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561244d57600080fd5b505af1158015612461573d6000803e3d6000fd5b505050506040513d602081101561247757600080fd5b50516124ca576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038b81166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561253457600080fd5b505afa158015612548573d6000803e3d6000fd5b505050506040513d602081101561255e57600080fd5b505111156125f457806001600160a01b031663095ea7b38a60006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b505050506040513d60208110156125f157600080fd5b50505b806001600160a01b031663095ea7b38a88888681811061261057fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561266657600080fd5b505af115801561267a573d6000803e3d6000fd5b505050506040513d602081101561269057600080fd5b50506001600160a01b03891663e4e1e5388989858181106126ad57fe5b905060200201356001600160a01b03168888868181106126c957fe5b905060200201358787878181106126dc57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050505b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156127b557600080fd5b505afa1580156127c9573d6000803e3d6000fd5b505050506040513d60208110156127df57600080fd5b5051111561296157604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561285157600080fd5b505afa158015612865573d6000803e3d6000fd5b505050506040513d602081101561287b57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b505050506040513d602081101561290e57600080fd5b5051612961576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b50600101611cc1565b505050505050505056fea265627a7a72315820ce040971b9847cc1b37485cb95ddac87e589b1b20bae7eebf750305d0026318d64736f6c634300050c0032
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638a5c57df1161005b5780638a5c57df14610259578063991991c7146102de578063c1762b151461030a578063e0d945bf1461034657610088565b80631a78a2751461008d5780631eccc185146101d55780634ef39b75146102055780637b7d6c681461022b575b600080fd5b6101b9600480360360c08110156100a357600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ce57600080fd5b8201836020820111156100e057600080fd5b8035906020019184602083028401116401000000008311171561010257600080fd5b91939092909160208101903564010000000081111561012057600080fd5b82018360208201111561013257600080fd5b8035906020019184602083028401116401000000008311171561015457600080fd5b91939092909160208101903564010000000081111561017257600080fd5b82018360208201111561018457600080fd5b803590602001918460208302840111640100000000831117156101a657600080fd5b919350915080359060200135151561046a565b604080516001600160a01b039092168252519081900360200190f35b610203600480360360408110156101eb57600080fd5b506001600160a01b0381351690602001351515610c21565b005b6102036004803603602081101561021b57600080fd5b50356001600160a01b0316610c9f565b6102036004803603604081101561024157600080fd5b506001600160a01b0381358116916020013516610e6f565b6102036004803603606081101561026f57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561029f57600080fd5b8201836020820111156102b157600080fd5b803590602001918460208302840111640100000000831117156102d357600080fd5b509092509050610ec7565b610203600480360360408110156102f457600080fd5b506001600160a01b0381351690602001356117a4565b6102036004803603608081101561032057600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117ea565b6102036004803603608081101561035c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111640100000000831117156103bb57600080fd5b9193909290916020810190356401000000008111156103d957600080fd5b8201836020820111156103eb57600080fd5b8035906020019184602083028401116401000000008311171561040d57600080fd5b91939092909160208101903564010000000081111561042b57600080fd5b82018360208201111561043d57600080fd5b8035906020019184602083028401116401000000008311171561045f57600080fd5b509092509050611c16565b60008786146104c0576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b878414610514576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b896001600160a01b031663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561054f57600080fd5b505af1158015610563573d6000803e3d6000fd5b505050506040513d602081101561057957600080fd5b5051604080517f34e199070000000000000000000000000000000000000000000000000000000081526004810186905290519192506001600160a01b038316916334e199079160248082019260009290919082900301818387803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b506000925050505b888110156109c15760008a8a8381811061061257fe5b905060200201356001600160a01b03169050806001600160a01b03166323b872dd33308c8c8781811061064157fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156106b057600080fd5b505af11580156106c4573d6000803e3d6000fd5b505050506040513d60208110156106da57600080fd5b505161072d576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038581166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561079757600080fd5b505afa1580156107ab573d6000803e3d6000fd5b505050506040513d60208110156107c157600080fd5b5051111561085757806001600160a01b031663095ea7b38460006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561082a57600080fd5b505af115801561083e573d6000803e3d6000fd5b505050506040513d602081101561085457600080fd5b50505b806001600160a01b031663095ea7b3848b8b8681811061087357fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b505050506040513d60208110156108f357600080fd5b50506001600160a01b03831663e4e1e5388c8c8581811061091057fe5b905060200201356001600160a01b03168b8b8681811061092c57fe5b905060200201358a8a8781811061093f57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561099c57600080fd5b505af11580156109b0573d6000803e3d6000fd5b5050600190930192506105fc915050565b508115610b9a57806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610a8557600080fd5b505afa158015610a99573d6000803e3d6000fd5b505050506040513d6020811015610aaf57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050506040513d6020811015610b4257600080fd5b5051610b95576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b610c14565b604080517f49b595520000000000000000000000000000000000000000000000000000000081526001600482015290516001600160a01b038316916349b5955291602480830192600092919082900301818387803b158015610bfb57600080fd5b505af1158015610c0f573d6000803e3d6000fd5b505050505b9998505050505050505050565b604080517f49b59552000000000000000000000000000000000000000000000000000000008152821515600482015290516001600160a01b038416916349b5955291602480830192600092919082900301818387803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b505050505050565b806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cda57600080fd5b505af1158015610cee573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610d5c57600080fd5b505afa158015610d70573d6000803e3d6000fd5b505050506040513d6020811015610d8657600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b505050506040513d6020811015610e1957600080fd5b5051610e6c576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b50565b816001600160a01b03166392eefe9b826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610c8357600080fd5b6060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b158015610f0257600080fd5b505afa158015610f16573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610f5d57600080fd5b8101908080516040519392919084640100000000821115610f7d57600080fd5b908301906020820185811115610f9257600080fd5b8251866020820283011164010000000082111715610faf57600080fd5b82525081516020918201928201910280838360005b83811015610fdc578181015183820152602001610fc4565b50505050905001604052505050905080518383905014611043576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b60005b815181101561134157600082828151811061105d57fe5b60200260200101519050806001600160a01b03166323b872dd333088888781811061108457fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b505050506040513d602081101561111d57600080fd5b5051611170576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038981166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b1580156111da57600080fd5b505afa1580156111ee573d6000803e3d6000fd5b505050506040513d602081101561120457600080fd5b5051111561129a57806001600160a01b031663095ea7b38860006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b50505b806001600160a01b031663095ea7b3888787868181106112b657fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561130c57600080fd5b505af1158015611320573d6000803e3d6000fd5b505050506040513d602081101561133657600080fd5b505050600101611046565b50604080517f4f69c0d40000000000000000000000000000000000000000000000000000000081526004810186815260248201928352604482018590526001600160a01b03881692634f69c0d492889288928892606401846020850280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b506000925050505b815181101561162257600082828151811061140b57fe5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146d57600080fd5b505afa158015611481573d6000803e3d6000fd5b505050506040513d602081101561149757600080fd5b5051111561161957604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d602081101561153357600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050506040513d60208110156115c657600080fd5b5051611619576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b506001016113f4565b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0387169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561168d57600080fd5b505afa1580156116a1573d6000803e3d6000fd5b505050506040513d60208110156116b757600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561172057600080fd5b505af1158015611734573d6000803e3d6000fd5b505050506040513d602081101561174a57600080fd5b505161179d576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b5050505050565b816001600160a01b03166334e19907826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610c8357600080fd5b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101849052905184916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561185b57600080fd5b505af115801561186f573d6000803e3d6000fd5b505050506040513d602081101561188557600080fd5b50516118d8576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038781166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561194257600080fd5b505afa158015611956573d6000803e3d6000fd5b505050506040513d602081101561196c57600080fd5b50511115611a0257806001600160a01b031663095ea7b38660006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156119d557600080fd5b505af11580156119e9573d6000803e3d6000fd5b505050506040513d60208110156119ff57600080fd5b50505b806001600160a01b031663095ea7b386856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b505050506040513d6020811015611a8c57600080fd5b5050604080517f5db342770000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201869052604482018590529151600092881691635db3427791606480830192602092919082900301818787803b158015611b0157600080fd5b505af1158015611b15573d6000803e3d6000fd5b505050506040513d6020811015611b2b57600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905290519192506001600160a01b0388169163a9059cbb916044808201926020929091908290030181600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d6020811015611bc357600080fd5b5051610c97576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b848314611c6a576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b848114611cbe576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b60005b8581101561296a576000878783818110611cd757fe5b905060200201356001600160a01b03169050886001600160a01b0316632f37b624898985818110611d0457fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d5a57600080fd5b505afa158015611d6e573d6000803e3d6000fd5b505050506040513d6020811015611d8457600080fd5b5051156123c157886001600160a01b031663f8b2cb4f898985818110611da657fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d6020811015611e2657600080fd5b5051868684818110611e3457fe5b90506020020135111561224f57806001600160a01b03166323b872dd33308c6001600160a01b031663f8b2cb4f8d8d89818110611e6d57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ec357600080fd5b505afa158015611ed7573d6000803e3d6000fd5b505050506040513d6020811015611eed57600080fd5b50518a8a88818110611efb57fe5b90506020020135036040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611f6b57600080fd5b505af1158015611f7f573d6000803e3d6000fd5b505050506040513d6020811015611f9557600080fd5b5051611fe8576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038b81166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561205257600080fd5b505afa158015612066573d6000803e3d6000fd5b505050506040513d602081101561207c57600080fd5b5051111561211257806001600160a01b031663095ea7b38a60006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b505050506040513d602081101561210f57600080fd5b50505b806001600160a01b031663095ea7b38a8b6001600160a01b031663f8b2cb4f8c8c8881811061213d57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561219357600080fd5b505afa1580156121a7573d6000803e3d6000fd5b505050506040513d60208110156121bd57600080fd5b50518989878181106121cb57fe5b90506020020135036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561222257600080fd5b505af1158015612236573d6000803e3d6000fd5b505050506040513d602081101561224c57600080fd5b50505b620f424086868481811061225f57fe5b90506020020135111561233057886001600160a01b0316633fdddaa289898581811061228757fe5b905060200201356001600160a01b03168888868181106122a357fe5b905060200201358787878181106122b657fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561231357600080fd5b505af1158015612327573d6000803e3d6000fd5b505050506123bc565b886001600160a01b031663cf5e7bd389898581811061234b57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b505050505b612752565b806001600160a01b03166323b872dd33308989878181106123de57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561244d57600080fd5b505af1158015612461573d6000803e3d6000fd5b505050506040513d602081101561247757600080fd5b50516124ca576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038b81166024830152915160009284169163dd62ed3e916044808301926020929190829003018186803b15801561253457600080fd5b505afa158015612548573d6000803e3d6000fd5b505050506040513d602081101561255e57600080fd5b505111156125f457806001600160a01b031663095ea7b38a60006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125c757600080fd5b505af11580156125db573d6000803e3d6000fd5b505050506040513d60208110156125f157600080fd5b50505b806001600160a01b031663095ea7b38a88888681811061261057fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561266657600080fd5b505af115801561267a573d6000803e3d6000fd5b505050506040513d602081101561269057600080fd5b50506001600160a01b03891663e4e1e5388989858181106126ad57fe5b905060200201356001600160a01b03168888868181106126c957fe5b905060200201358787878181106126dc57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050505b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156127b557600080fd5b505afa1580156127c9573d6000803e3d6000fd5b505050506040513d60208110156127df57600080fd5b5051111561296157604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561285157600080fd5b505afa158015612865573d6000803e3d6000fd5b505050506040513d602081101561287b57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156128e457600080fd5b505af11580156128f8573d6000803e3d6000fd5b505050506040513d602081101561290e57600080fd5b5051612961576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b50600101611cc1565b505050505050505056fea265627a7a72315820ce040971b9847cc1b37485cb95ddac87e589b1b20bae7eebf750305d0026318d64736f6c634300050c0032