Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
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.
- Contract name:
- WalletDAO
- Optimization enabled
- false
- Compiler version
- v0.8.16+commit.07a7930e
- EVM Version
- default
- Verified at
- 2024-09-26T15:35:32.053486Z
Contract source code
// SPDX-License-Identifier: GPL-3.0-only // Разработчик: Upaut pragma solidity ^0.8.16; interface ITwoBearsBots { function id() external view returns (uint256); function createBotSellBuy(address _token_in, address _token_out, uint _value, uint _value_inc, uint _price, uint _price_step, uint _price_limit, uint _order_position) external; function createBotNetTrade(address _token_in, address _token_out, uint _value_sell, uint _value_buy, uint _price, uint _price_step, uint _price_up_limit, uint _price_down_limit, uint _order_position_sell, uint _order_position_buy) external; function restoreBot(uint _id_bot) external; function deleteBot(uint _id_bot) external; } interface IColdStaking { function start_staking(uint rounds) external payable; function claim() external; function withdraw_stake() external; } interface IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IWCLO { function deposit() external payable; function withdraw(uint wad) external; } contract WalletDAO { struct TokenData { // структура вывода информации по токену uint256 balance; // баланс токена в walletDAO uint8 decimal; // количество десятичных знаков у токена address token; // адрес контракта токена string symbol; // символ токена } /* Callisto network testnet address public constant DAO = 0xb356A5a5710Cac1677854f1b95608D1d4B4B417d; // Контракт DAO address public constant WCLO = 0xbd2D3BCe975FD72E44A73cC8e834aD1B8441BdDa; // Контракт WCLO address public constant ColdStaking = 0xBD38997D00295D738BDC258DB4446577f4181Ed7; // Контракт ColdStaking address public constant TwoBearsBalances = 0x1501Bffb3D83239214AE55eCE3a4ccd40092c922; // Контракт депозитов на 2bears address public constant TwoBearsBots = 0x69b78bF6300a39D186C7850A46ea6CA261c265c3; // Контракт ботов на 2bears */ address public constant DAO = 0x810059e1406dEDAFd1BdCa4E0137CbA306c0Ce36; // Контракт DAO address public constant WCLO = 0xF5AD6F6EDeC824C7fD54A66d241a227F6503aD3a; // Контракт WCLO address public constant ColdStaking = 0x08A7c8be47773546DC5E173d67B0c38AfFfa4b84; // Контракт ColdStaking address public constant TwoBearsBalances = 0x820b5c3835B731DdeB1155ac0b37009E37524a53; // Контракт депозитов на 2bears address public constant TwoBearsBots = 0xc113Ed199eF9380e3f93B0a6e25FA86b7298FB16; // Контракт ботов на 2bears uint[] listBots; // список всех запущенных ботов на 2bears address[] tokenTrackingList; // список адресов токенов для отcлеживания в UI event TransferCLO(address indexed _sender, address indexed _recipient, uint _value); modifier onlyDAO() { require(msg.sender == DAO, "Only contract DAO"); _; } // Контракт кошелька DAO работает с 2bears function twoBears_Approve(address _token, bool _permission) external onlyDAO { // Выдать/отозвать разрешение ботам торговать токеном uint _val = _permission == true ? uint(int(-1)) : 0; IERC20(_token).approve(TwoBearsBalances, _val); // даем/отзываем разрешение на использование токена } function twoBears_BotSellBuy(address _token_in, address _token_out, uint _value, uint _value_inc, uint _price, uint _price_step, uint _price_limit) external onlyDAO { // создание бота закупа или бота распродажи // _value - объем токена с наименьшим приоритетом // _price - цена в токене с максимальным приоритетом ITwoBearsBots(TwoBearsBots).createBotSellBuy(_token_in, _token_out, _value, _value_inc, _price, _price_step, _price_limit, 0); uint _id_bot = ITwoBearsBots(TwoBearsBots).id(); // возвращаем id созданного бота _add_ID_listBots(_id_bot); // сохраняем ID бота в списке отслеживаний } function twoBears_BotNetTrade(address _token_in, address _token_out, uint _value_sell, uint _value_buy, uint _price, uint _price_step, uint _price_up_limit, uint _price_down_limit) external onlyDAO { // создание бота сеточной торговли // _value_sell и _value_buy - объем токена с наименьшим приоритетом // _price - цена в токене с максимальным приоритетом ITwoBearsBots(TwoBearsBots).createBotNetTrade(_token_in, _token_out, _value_sell, _value_buy, _price, _price_step, _price_up_limit, _price_down_limit, 0, 0); uint _id_bot = ITwoBearsBots(TwoBearsBots).id(); // возвращаем id созданного бота _add_ID_listBots(_id_bot); // сохраняем ID бота в списке отслеживаний } function twoBears_RestoreBot(uint _id_bot) external onlyDAO { // Восстановить работу бота после устранения неисправности ITwoBearsBots(TwoBearsBots).restoreBot(_id_bot); } function twoBears_DeleteBot(uint _id_bot) external onlyDAO { // Удалить бота (все ордера данного бота будут отменены, все средства вернутся на кошелек DAO) ITwoBearsBots(TwoBearsBots).deleteBot(_id_bot); _del_ID_listBots(_id_bot); } function _add_ID_listBots(uint _id_bot) private { // Добавление ID нового бота в список listBots.push(_id_bot); } function _del_ID_listBots(uint _id_bot) private { // Удаление ID бота из списка for(uint i; i < listBots.length; i++){ if(listBots[i] == _id_bot){ listBots[i] = listBots[listBots.length - 1]; listBots.pop(); break; } } } function twoBears_ViewListBots() public view returns (uint[] memory) { // Просмотреть список созданых ботов return (listBots); } // Контракт кошелька DAO работает с ColdStaking function coldStaking_Start(uint256 _value, uint256 _rounds) external onlyDAO { // Сделать ставку. _value - количество CLO, _rounds - количество раундов IColdStaking(ColdStaking).start_staking{value: _value}(_rounds); } function coldStaking_Claim() external onlyDAO { // Забрать награду (claim) IColdStaking(ColdStaking).claim(); } function coldStaking_Withdraw() external onlyDAO { // Забрать ставку (withdraw_stake) IColdStaking(ColdStaking).withdraw_stake(); } // Контракт кошелька DAO оборачивает CLO и разворачивает WCLO function walletDAO_WrapCLO(uint256 _value) external onlyDAO { // обернуть CLO в WCLO IWCLO(WCLO).deposit{value: _value}(); } function walletDAO_UnwrapWCLO(uint256 _value) external onlyDAO { // развернуть WCLO в CLO IWCLO(WCLO).withdraw(_value); } // Контракт кошелька DAO отправляет CLO и любые токены стандартов ERC20, ERC223 function walletDAO_TransferCLO(address _recipient, uint256 _value) external onlyDAO { // отправка CLO payable(_recipient).transfer(_value); // отправляем CLO emit TransferCLO(address(this), _recipient, _value); // логируем отправку CLO } function walletDAO_TransferToken(address _token, address _recipient, uint256 _value) external onlyDAO { // отправка любого токена IERC20(_token).transfer(_recipient, _value); // отправляем токен } // Контракт кошелька DAO добавляет / удаляет токены для отслеживания в UI function walletDAO_AddTokenTracking(address _token) external onlyDAO { // Добавить токен для отслеживания if(IERC20(_token).decimals() > 0){ // перестраховка что добавляется контракт имеющий десятичные знаки tokenTrackingList.push(_token); } } function walletDAO_DelTokenTracking(address _token) external onlyDAO { // Удалить токен из отслеживаемых for(uint i; i < tokenTrackingList.length; i++){ if(tokenTrackingList[i] == _token){ tokenTrackingList[i] = tokenTrackingList[tokenTrackingList.length - 1]; tokenTrackingList.pop(); break; } } } function walletDAO_ViewBalances() public view returns (TokenData[] memory) { // Просмотреть балансы кошелька TokenData[] memory _result = new TokenData[](tokenTrackingList.length + 1); // + 1 это для вывода нативного CLO _result[0] = TokenData(address(this).balance, 18, address(0x00), "CLO"); // Информация нативной монеты сети for(uint i; i < tokenTrackingList.length; i++){ // перебираем весь массив токенов address _token = tokenTrackingList[i]; _result[i+1] = TokenData(IERC20(_token).balanceOf(address(this)), IERC20(_token).decimals(), _token, IERC20(_token).symbol()); } return (_result); // возвращаем балансы и информацию по заданным токенам } // Контракт кошелька DAO примимает CLO и любые токены стандартов ERC20, ERC223 receive() external payable {} // принимаем CLO function tokenReceived(address _from, uint _value, bytes memory _data) public returns (bytes4) { // принимаем токены ERC223 return this.tokenReceived.selector; // возвращаем селектор этой функции } }
Contract ABI
[{"type":"event","name":"TransferCLO","inputs":[{"type":"address","name":"_sender","internalType":"address","indexed":true},{"type":"address","name":"_recipient","internalType":"address","indexed":true},{"type":"uint256","name":"_value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ColdStaking","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DAO","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"TwoBearsBalances","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"TwoBearsBots","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WCLO","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"coldStaking_Claim","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"coldStaking_Start","inputs":[{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"uint256","name":"_rounds","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"coldStaking_Withdraw","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bytes4","name":"","internalType":"bytes4"}],"name":"tokenReceived","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twoBears_Approve","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"bool","name":"_permission","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twoBears_BotNetTrade","inputs":[{"type":"address","name":"_token_in","internalType":"address"},{"type":"address","name":"_token_out","internalType":"address"},{"type":"uint256","name":"_value_sell","internalType":"uint256"},{"type":"uint256","name":"_value_buy","internalType":"uint256"},{"type":"uint256","name":"_price","internalType":"uint256"},{"type":"uint256","name":"_price_step","internalType":"uint256"},{"type":"uint256","name":"_price_up_limit","internalType":"uint256"},{"type":"uint256","name":"_price_down_limit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twoBears_BotSellBuy","inputs":[{"type":"address","name":"_token_in","internalType":"address"},{"type":"address","name":"_token_out","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"uint256","name":"_value_inc","internalType":"uint256"},{"type":"uint256","name":"_price","internalType":"uint256"},{"type":"uint256","name":"_price_step","internalType":"uint256"},{"type":"uint256","name":"_price_limit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twoBears_DeleteBot","inputs":[{"type":"uint256","name":"_id_bot","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twoBears_RestoreBot","inputs":[{"type":"uint256","name":"_id_bot","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"twoBears_ViewListBots","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"walletDAO_AddTokenTracking","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"walletDAO_DelTokenTracking","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"walletDAO_TransferCLO","inputs":[{"type":"address","name":"_recipient","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"walletDAO_TransferToken","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_recipient","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"walletDAO_UnwrapWCLO","inputs":[{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct WalletDAO.TokenData[]","components":[{"type":"uint256","name":"balance","internalType":"uint256"},{"type":"uint8","name":"decimal","internalType":"uint8"},{"type":"address","name":"token","internalType":"address"},{"type":"string","name":"symbol","internalType":"string"}]}],"name":"walletDAO_ViewBalances","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"walletDAO_WrapCLO","inputs":[{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x608060405234801561001057600080fd5b5061297b806100206000396000f3fe6080604052600436106101395760003560e01c80636e3adf8d116100ab57806398fabd3a1161006f57806398fabd3a146103cf578063b53a7052146103fa578063be66ca9214610423578063e13758011461044c578063f800490314610475578063ff5cf4b11461049e57610140565b80636e3adf8d146102fc57806379cce4f5146103275780638726968d1461035257806387a7c32a146103695780638943ec021461039257610140565b8063232fc349116100fd578063232fc3491461021657806329581b3e1461022d5780632e5a318d1461025657806344b6d9c41461027f57806365fac6dc146102a85780636d85e609146102d157610140565b806307ac32d81461014557806311a924161461016e5780631558c67c1461019757806320357b8c146101c257806322c380e4146101ed57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190611bb1565b6104c9565b005b34801561017a57600080fd5b5061019560048036038101906101909190611c3c565b6105c3565b005b3480156101a357600080fd5b506101ac6106c9565b6040516101b99190611d4d565b60405180910390f35b3480156101ce57600080fd5b506101d7610721565b6040516101e49190611f4f565b60405180910390f35b3480156101f957600080fd5b50610214600480360381019061020f9190611bb1565b610a48565b005b34801561022257600080fd5b5061022b610b4c565b005b34801561023957600080fd5b50610254600480360381019061024f9190611bb1565b610c44565b005b34801561026257600080fd5b5061027d60048036038101906102789190611f71565b610d51565b005b34801561028b57600080fd5b506102a660048036038101906102a19190612027565b610f00565b005b3480156102b457600080fd5b506102cf60048036038101906102ca9190612067565b611032565b005b3480156102dd57600080fd5b506102e66111dc565b6040516102f39190612118565b60405180910390f35b34801561030857600080fd5b506103116111f4565b60405161031e9190612118565b60405180910390f35b34801561033357600080fd5b5061033c61120c565b6040516103499190612118565b60405180910390f35b34801561035e57600080fd5b50610367611224565b005b34801561037557600080fd5b50610390600480360381019061038b9190612133565b61131c565b005b34801561039e57600080fd5b506103b960048036038101906103b49190612295565b61152c565b6040516103c6919061233f565b60405180910390f35b3480156103db57600080fd5b506103e461153f565b6040516103f19190612118565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190611bb1565b611557565b005b34801561042f57600080fd5b5061044a60048036038101906104459190612133565b61165b565b005b34801561045857600080fd5b50610473600480360381019061046e9190612392565b6117be565b005b34801561048157600080fd5b5061049c600480360381019061049791906123d2565b611911565b005b3480156104aa57600080fd5b506104b3611a17565b6040516104c09190612118565b60405180910390f35b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105429061246f565b60405180910390fd5b73f5ad6f6edec824c7fd54a66d241a227f6503ad3a73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b505050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c9061246f565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161068092919061249e565b6020604051808303816000875af115801561069f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c391906124dc565b50505050565b6060600080548060200260200160405190810160405280929190818152602001828054801561071757602002820191906000526020600020905b815481526020019060010190808311610703575b5050505050905090565b60606000600180805490506107369190612538565b67ffffffffffffffff81111561074f5761074e61216a565b5b60405190808252806020026020018201604052801561078857816020015b610775611b26565b81526020019060019003908161076d5790505b5090506040518060800160405280478152602001601260ff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600381526020017f434c4f0000000000000000000000000000000000000000000000000000000000815250815250816000815181106108105761080f61256c565b5b602002602001018190525060005b600180549050811015610a40576000600182815481106108415761084061256c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060405180608001604052808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108b29190612118565b602060405180830381865afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f391906125b0565b81526020018273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109679190612609565b60ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906109ff91906126d7565b81525083600184610a109190612538565b81518110610a2157610a2061256c565b5b6020026020010181905250508080610a3890612720565b91505061081e565b508091505090565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac19061246f565b60405180910390fd5b73f5ad6f6edec824c7fd54a66d241a227f6503ad3a73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610b179190612768565b600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b5050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc59061246f565b60405180910390fd5b7308a7c8be47773546dc5e173d67b0c38afffa4b8473ffffffffffffffffffffffffffffffffffffffff1663cd9488556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b50505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd9061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663c78f936f826040518263ffffffff1660e01b8152600401610d139190612768565b600060405180830381600087803b158015610d2d57600080fd5b505af1158015610d41573d6000803e3d6000fd5b50505050610d4e81611a2f565b50565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff166330be116089898989898989896000806040518b63ffffffff1660e01b8152600401610e339a999897969594939291906127c8565b600060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b50505050600073c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663af640d0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea91906125b0565b9050610ef581611afa565b505050505050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f799061246f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fc8573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f4ddebed7447a12da95902559eac51ea2594f93265e70f2d11da210e33abdafcd836040516110269190612768565b60405180910390a35050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab9061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff16632fd96ca98888888888888860006040518963ffffffff1660e01b8152600401611110989796959493929190612864565b600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b50505050600073c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663af640d0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c791906125b0565b90506111d281611afa565b5050505050505050565b73820b5c3835b731ddeb1155ac0b37009e37524a5381565b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1681565b73f5ad6f6edec824c7fd54a66d241a227f6503ad3a81565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061246f565b60405180910390fd5b7308a7c8be47773546dc5e173d67b0c38afffa4b8473ffffffffffffffffffffffffffffffffffffffff16634e71d92d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b50505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113959061246f565b60405180910390fd5b60005b600180549050811015611528578173ffffffffffffffffffffffffffffffffffffffff16600182815481106113d9576113d861256c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361151557600180808054905061143191906128e2565b815481106114425761144161256c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600182815481106114815761148061256c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018054806114db576114da612916565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611528565b808061152090612720565b9150506113a1565b5050565b6000638943ec0260e01b90509392505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3681565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d09061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663e38d1a40826040518263ffffffff1660e01b81526004016116269190612768565b600060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b5050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d49061246f565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612609565b60ff1611156117bb576001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118379061246f565b60405180910390fd5b60006001151582151514611855576000611877565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b373820b5c3835b731ddeb1155ac0b37009e37524a53836040518363ffffffff1660e01b81526004016118c892919061249e565b6020604051808303816000875af11580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b91906124dc565b50505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a9061246f565b60405180910390fd5b7308a7c8be47773546dc5e173d67b0c38afffa4b8473ffffffffffffffffffffffffffffffffffffffff16635d8c85ef83836040518363ffffffff1660e01b81526004016119e19190612768565b6000604051808303818588803b1580156119fa57600080fd5b505af1158015611a0e573d6000803e3d6000fd5b50505050505050565b7308a7c8be47773546dc5e173d67b0c38afffa4b8481565b60005b600080549050811015611af6578160008281548110611a5457611a5361256c565b5b906000526020600020015403611ae35760006001600080549050611a7891906128e2565b81548110611a8957611a8861256c565b5b906000526020600020015460008281548110611aa857611aa761256c565b5b90600052602060002001819055506000805480611ac857611ac7612916565b5b60019003818190600052602060002001600090559055611af6565b8080611aee90612720565b915050611a32565b5050565b600081908060018154018082558091505060019003906000526020600020016000909190919091505550565b604051806080016040528060008152602001600060ff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611b8e81611b7b565b8114611b9957600080fd5b50565b600081359050611bab81611b85565b92915050565b600060208284031215611bc757611bc6611b71565b5b6000611bd584828501611b9c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0982611bde565b9050919050565b611c1981611bfe565b8114611c2457600080fd5b50565b600081359050611c3681611c10565b92915050565b600080600060608486031215611c5557611c54611b71565b5b6000611c6386828701611c27565b9350506020611c7486828701611c27565b9250506040611c8586828701611b9c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611cc481611b7b565b82525050565b6000611cd68383611cbb565b60208301905092915050565b6000602082019050919050565b6000611cfa82611c8f565b611d048185611c9a565b9350611d0f83611cab565b8060005b83811015611d40578151611d278882611cca565b9750611d3283611ce2565b925050600181019050611d13565b5085935050505092915050565b60006020820190508181036000830152611d678184611cef565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b611db181611d9b565b82525050565b611dc081611bfe565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e00578082015181840152602081019050611de5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611e2882611dc6565b611e328185611dd1565b9350611e42818560208601611de2565b611e4b81611e0c565b840191505092915050565b6000608083016000830151611e6e6000860182611cbb565b506020830151611e816020860182611da8565b506040830151611e946040860182611db7565b5060608301518482036060860152611eac8282611e1d565b9150508091505092915050565b6000611ec58383611e56565b905092915050565b6000602082019050919050565b6000611ee582611d6f565b611eef8185611d7a565b935083602082028501611f0185611d8b565b8060005b85811015611f3d5784840389528151611f1e8582611eb9565b9450611f2983611ecd565b925060208a01995050600181019050611f05565b50829750879550505050505092915050565b60006020820190508181036000830152611f698184611eda565b905092915050565b600080600080600080600080610100898b031215611f9257611f91611b71565b5b6000611fa08b828c01611c27565b9850506020611fb18b828c01611c27565b9750506040611fc28b828c01611b9c565b9650506060611fd38b828c01611b9c565b9550506080611fe48b828c01611b9c565b94505060a0611ff58b828c01611b9c565b93505060c06120068b828c01611b9c565b92505060e06120178b828c01611b9c565b9150509295985092959890939650565b6000806040838503121561203e5761203d611b71565b5b600061204c85828601611c27565b925050602061205d85828601611b9c565b9150509250929050565b600080600080600080600060e0888a03121561208657612085611b71565b5b60006120948a828b01611c27565b97505060206120a58a828b01611c27565b96505060406120b68a828b01611b9c565b95505060606120c78a828b01611b9c565b94505060806120d88a828b01611b9c565b93505060a06120e98a828b01611b9c565b92505060c06120fa8a828b01611b9c565b91505092959891949750929550565b61211281611bfe565b82525050565b600060208201905061212d6000830184612109565b92915050565b60006020828403121561214957612148611b71565b5b600061215784828501611c27565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121a282611e0c565b810181811067ffffffffffffffff821117156121c1576121c061216a565b5b80604052505050565b60006121d4611b67565b90506121e08282612199565b919050565b600067ffffffffffffffff821115612200576121ff61216a565b5b61220982611e0c565b9050602081019050919050565b82818337600083830152505050565b6000612238612233846121e5565b6121ca565b90508281526020810184848401111561225457612253612165565b5b61225f848285612216565b509392505050565b600082601f83011261227c5761227b612160565b5b813561228c848260208601612225565b91505092915050565b6000806000606084860312156122ae576122ad611b71565b5b60006122bc86828701611c27565b93505060206122cd86828701611b9c565b925050604084013567ffffffffffffffff8111156122ee576122ed611b76565b5b6122fa86828701612267565b9150509250925092565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61233981612304565b82525050565b60006020820190506123546000830184612330565b92915050565b60008115159050919050565b61236f8161235a565b811461237a57600080fd5b50565b60008135905061238c81612366565b92915050565b600080604083850312156123a9576123a8611b71565b5b60006123b785828601611c27565b92505060206123c88582860161237d565b9150509250929050565b600080604083850312156123e9576123e8611b71565b5b60006123f785828601611b9c565b925050602061240885828601611b9c565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920636f6e74726163742044414f000000000000000000000000000000600082015250565b6000612459601183612412565b915061246482612423565b602082019050919050565b600060208201905081810360008301526124888161244c565b9050919050565b61249881611b7b565b82525050565b60006040820190506124b36000830185612109565b6124c0602083018461248f565b9392505050565b6000815190506124d681612366565b92915050565b6000602082840312156124f2576124f1611b71565b5b6000612500848285016124c7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061254382611b7b565b915061254e83611b7b565b925082820190508082111561256657612565612509565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506125aa81611b85565b92915050565b6000602082840312156125c6576125c5611b71565b5b60006125d48482850161259b565b91505092915050565b6125e681611d9b565b81146125f157600080fd5b50565b600081519050612603816125dd565b92915050565b60006020828403121561261f5761261e611b71565b5b600061262d848285016125f4565b91505092915050565b600067ffffffffffffffff8211156126515761265061216a565b5b61265a82611e0c565b9050602081019050919050565b600061267a61267584612636565b6121ca565b90508281526020810184848401111561269657612695612165565b5b6126a1848285611de2565b509392505050565b600082601f8301126126be576126bd612160565b5b81516126ce848260208601612667565b91505092915050565b6000602082840312156126ed576126ec611b71565b5b600082015167ffffffffffffffff81111561270b5761270a611b76565b5b612717848285016126a9565b91505092915050565b600061272b82611b7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361275d5761275c612509565b5b600182019050919050565b600060208201905061277d600083018461248f565b92915050565b6000819050919050565b6000819050919050565b60006127b26127ad6127a884612783565b61278d565b611b7b565b9050919050565b6127c281612797565b82525050565b6000610140820190506127de600083018d612109565b6127eb602083018c612109565b6127f8604083018b61248f565b612805606083018a61248f565b612812608083018961248f565b61281f60a083018861248f565b61282c60c083018761248f565b61283960e083018661248f565b6128476101008301856127b9565b6128556101208301846127b9565b9b9a5050505050505050505050565b60006101008201905061287a600083018b612109565b612887602083018a612109565b612894604083018961248f565b6128a1606083018861248f565b6128ae608083018761248f565b6128bb60a083018661248f565b6128c860c083018561248f565b6128d560e08301846127b9565b9998505050505050505050565b60006128ed82611b7b565b91506128f883611b7b565b92508282039050818111156129105761290f612509565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e570ea0c18ebbe85208cac62731668b681800ced5c114c82ab71e4826847ca3e64736f6c63430008100033
Deployed ByteCode
0x6080604052600436106101395760003560e01c80636e3adf8d116100ab57806398fabd3a1161006f57806398fabd3a146103cf578063b53a7052146103fa578063be66ca9214610423578063e13758011461044c578063f800490314610475578063ff5cf4b11461049e57610140565b80636e3adf8d146102fc57806379cce4f5146103275780638726968d1461035257806387a7c32a146103695780638943ec021461039257610140565b8063232fc349116100fd578063232fc3491461021657806329581b3e1461022d5780632e5a318d1461025657806344b6d9c41461027f57806365fac6dc146102a85780636d85e609146102d157610140565b806307ac32d81461014557806311a924161461016e5780631558c67c1461019757806320357b8c146101c257806322c380e4146101ed57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190611bb1565b6104c9565b005b34801561017a57600080fd5b5061019560048036038101906101909190611c3c565b6105c3565b005b3480156101a357600080fd5b506101ac6106c9565b6040516101b99190611d4d565b60405180910390f35b3480156101ce57600080fd5b506101d7610721565b6040516101e49190611f4f565b60405180910390f35b3480156101f957600080fd5b50610214600480360381019061020f9190611bb1565b610a48565b005b34801561022257600080fd5b5061022b610b4c565b005b34801561023957600080fd5b50610254600480360381019061024f9190611bb1565b610c44565b005b34801561026257600080fd5b5061027d60048036038101906102789190611f71565b610d51565b005b34801561028b57600080fd5b506102a660048036038101906102a19190612027565b610f00565b005b3480156102b457600080fd5b506102cf60048036038101906102ca9190612067565b611032565b005b3480156102dd57600080fd5b506102e66111dc565b6040516102f39190612118565b60405180910390f35b34801561030857600080fd5b506103116111f4565b60405161031e9190612118565b60405180910390f35b34801561033357600080fd5b5061033c61120c565b6040516103499190612118565b60405180910390f35b34801561035e57600080fd5b50610367611224565b005b34801561037557600080fd5b50610390600480360381019061038b9190612133565b61131c565b005b34801561039e57600080fd5b506103b960048036038101906103b49190612295565b61152c565b6040516103c6919061233f565b60405180910390f35b3480156103db57600080fd5b506103e461153f565b6040516103f19190612118565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190611bb1565b611557565b005b34801561042f57600080fd5b5061044a60048036038101906104459190612133565b61165b565b005b34801561045857600080fd5b50610473600480360381019061046e9190612392565b6117be565b005b34801561048157600080fd5b5061049c600480360381019061049791906123d2565b611911565b005b3480156104aa57600080fd5b506104b3611a17565b6040516104c09190612118565b60405180910390f35b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105429061246f565b60405180910390fd5b73f5ad6f6edec824c7fd54a66d241a227f6503ad3a73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b505050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c9061246f565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161068092919061249e565b6020604051808303816000875af115801561069f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c391906124dc565b50505050565b6060600080548060200260200160405190810160405280929190818152602001828054801561071757602002820191906000526020600020905b815481526020019060010190808311610703575b5050505050905090565b60606000600180805490506107369190612538565b67ffffffffffffffff81111561074f5761074e61216a565b5b60405190808252806020026020018201604052801561078857816020015b610775611b26565b81526020019060019003908161076d5790505b5090506040518060800160405280478152602001601260ff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600381526020017f434c4f0000000000000000000000000000000000000000000000000000000000815250815250816000815181106108105761080f61256c565b5b602002602001018190525060005b600180549050811015610a40576000600182815481106108415761084061256c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060405180608001604052808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108b29190612118565b602060405180830381865afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f391906125b0565b81526020018273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109679190612609565b60ff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906109ff91906126d7565b81525083600184610a109190612538565b81518110610a2157610a2061256c565b5b6020026020010181905250508080610a3890612720565b91505061081e565b508091505090565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac19061246f565b60405180910390fd5b73f5ad6f6edec824c7fd54a66d241a227f6503ad3a73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610b179190612768565b600060405180830381600087803b158015610b3157600080fd5b505af1158015610b45573d6000803e3d6000fd5b5050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc59061246f565b60405180910390fd5b7308a7c8be47773546dc5e173d67b0c38afffa4b8473ffffffffffffffffffffffffffffffffffffffff1663cd9488556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b50505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd9061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663c78f936f826040518263ffffffff1660e01b8152600401610d139190612768565b600060405180830381600087803b158015610d2d57600080fd5b505af1158015610d41573d6000803e3d6000fd5b50505050610d4e81611a2f565b50565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff166330be116089898989898989896000806040518b63ffffffff1660e01b8152600401610e339a999897969594939291906127c8565b600060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b50505050600073c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663af640d0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea91906125b0565b9050610ef581611afa565b505050505050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f799061246f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fc8573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f4ddebed7447a12da95902559eac51ea2594f93265e70f2d11da210e33abdafcd836040516110269190612768565b60405180910390a35050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab9061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff16632fd96ca98888888888888860006040518963ffffffff1660e01b8152600401611110989796959493929190612864565b600060405180830381600087803b15801561112a57600080fd5b505af115801561113e573d6000803e3d6000fd5b50505050600073c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663af640d0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c791906125b0565b90506111d281611afa565b5050505050505050565b73820b5c3835b731ddeb1155ac0b37009e37524a5381565b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1681565b73f5ad6f6edec824c7fd54a66d241a227f6503ad3a81565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061246f565b60405180910390fd5b7308a7c8be47773546dc5e173d67b0c38afffa4b8473ffffffffffffffffffffffffffffffffffffffff16634e71d92d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561130257600080fd5b505af1158015611316573d6000803e3d6000fd5b50505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113959061246f565b60405180910390fd5b60005b600180549050811015611528578173ffffffffffffffffffffffffffffffffffffffff16600182815481106113d9576113d861256c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361151557600180808054905061143191906128e2565b815481106114425761144161256c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600182815481106114815761148061256c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018054806114db576114da612916565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611528565b808061152090612720565b9150506113a1565b5050565b6000638943ec0260e01b90509392505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3681565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d09061246f565b60405180910390fd5b73c113ed199ef9380e3f93b0a6e25fa86b7298fb1673ffffffffffffffffffffffffffffffffffffffff1663e38d1a40826040518263ffffffff1660e01b81526004016116269190612768565b600060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b5050505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d49061246f565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612609565b60ff1611156117bb576001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118379061246f565b60405180910390fd5b60006001151582151514611855576000611877565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b373820b5c3835b731ddeb1155ac0b37009e37524a53836040518363ffffffff1660e01b81526004016118c892919061249e565b6020604051808303816000875af11580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b91906124dc565b50505050565b73810059e1406dedafd1bdca4e0137cba306c0ce3673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a9061246f565b60405180910390fd5b7308a7c8be47773546dc5e173d67b0c38afffa4b8473ffffffffffffffffffffffffffffffffffffffff16635d8c85ef83836040518363ffffffff1660e01b81526004016119e19190612768565b6000604051808303818588803b1580156119fa57600080fd5b505af1158015611a0e573d6000803e3d6000fd5b50505050505050565b7308a7c8be47773546dc5e173d67b0c38afffa4b8481565b60005b600080549050811015611af6578160008281548110611a5457611a5361256c565b5b906000526020600020015403611ae35760006001600080549050611a7891906128e2565b81548110611a8957611a8861256c565b5b906000526020600020015460008281548110611aa857611aa761256c565b5b90600052602060002001819055506000805480611ac857611ac7612916565b5b60019003818190600052602060002001600090559055611af6565b8080611aee90612720565b915050611a32565b5050565b600081908060018154018082558091505060019003906000526020600020016000909190919091505550565b604051806080016040528060008152602001600060ff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611b8e81611b7b565b8114611b9957600080fd5b50565b600081359050611bab81611b85565b92915050565b600060208284031215611bc757611bc6611b71565b5b6000611bd584828501611b9c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c0982611bde565b9050919050565b611c1981611bfe565b8114611c2457600080fd5b50565b600081359050611c3681611c10565b92915050565b600080600060608486031215611c5557611c54611b71565b5b6000611c6386828701611c27565b9350506020611c7486828701611c27565b9250506040611c8586828701611b9c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611cc481611b7b565b82525050565b6000611cd68383611cbb565b60208301905092915050565b6000602082019050919050565b6000611cfa82611c8f565b611d048185611c9a565b9350611d0f83611cab565b8060005b83811015611d40578151611d278882611cca565b9750611d3283611ce2565b925050600181019050611d13565b5085935050505092915050565b60006020820190508181036000830152611d678184611cef565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b611db181611d9b565b82525050565b611dc081611bfe565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e00578082015181840152602081019050611de5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611e2882611dc6565b611e328185611dd1565b9350611e42818560208601611de2565b611e4b81611e0c565b840191505092915050565b6000608083016000830151611e6e6000860182611cbb565b506020830151611e816020860182611da8565b506040830151611e946040860182611db7565b5060608301518482036060860152611eac8282611e1d565b9150508091505092915050565b6000611ec58383611e56565b905092915050565b6000602082019050919050565b6000611ee582611d6f565b611eef8185611d7a565b935083602082028501611f0185611d8b565b8060005b85811015611f3d5784840389528151611f1e8582611eb9565b9450611f2983611ecd565b925060208a01995050600181019050611f05565b50829750879550505050505092915050565b60006020820190508181036000830152611f698184611eda565b905092915050565b600080600080600080600080610100898b031215611f9257611f91611b71565b5b6000611fa08b828c01611c27565b9850506020611fb18b828c01611c27565b9750506040611fc28b828c01611b9c565b9650506060611fd38b828c01611b9c565b9550506080611fe48b828c01611b9c565b94505060a0611ff58b828c01611b9c565b93505060c06120068b828c01611b9c565b92505060e06120178b828c01611b9c565b9150509295985092959890939650565b6000806040838503121561203e5761203d611b71565b5b600061204c85828601611c27565b925050602061205d85828601611b9c565b9150509250929050565b600080600080600080600060e0888a03121561208657612085611b71565b5b60006120948a828b01611c27565b97505060206120a58a828b01611c27565b96505060406120b68a828b01611b9c565b95505060606120c78a828b01611b9c565b94505060806120d88a828b01611b9c565b93505060a06120e98a828b01611b9c565b92505060c06120fa8a828b01611b9c565b91505092959891949750929550565b61211281611bfe565b82525050565b600060208201905061212d6000830184612109565b92915050565b60006020828403121561214957612148611b71565b5b600061215784828501611c27565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121a282611e0c565b810181811067ffffffffffffffff821117156121c1576121c061216a565b5b80604052505050565b60006121d4611b67565b90506121e08282612199565b919050565b600067ffffffffffffffff821115612200576121ff61216a565b5b61220982611e0c565b9050602081019050919050565b82818337600083830152505050565b6000612238612233846121e5565b6121ca565b90508281526020810184848401111561225457612253612165565b5b61225f848285612216565b509392505050565b600082601f83011261227c5761227b612160565b5b813561228c848260208601612225565b91505092915050565b6000806000606084860312156122ae576122ad611b71565b5b60006122bc86828701611c27565b93505060206122cd86828701611b9c565b925050604084013567ffffffffffffffff8111156122ee576122ed611b76565b5b6122fa86828701612267565b9150509250925092565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61233981612304565b82525050565b60006020820190506123546000830184612330565b92915050565b60008115159050919050565b61236f8161235a565b811461237a57600080fd5b50565b60008135905061238c81612366565b92915050565b600080604083850312156123a9576123a8611b71565b5b60006123b785828601611c27565b92505060206123c88582860161237d565b9150509250929050565b600080604083850312156123e9576123e8611b71565b5b60006123f785828601611b9c565b925050602061240885828601611b9c565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920636f6e74726163742044414f000000000000000000000000000000600082015250565b6000612459601183612412565b915061246482612423565b602082019050919050565b600060208201905081810360008301526124888161244c565b9050919050565b61249881611b7b565b82525050565b60006040820190506124b36000830185612109565b6124c0602083018461248f565b9392505050565b6000815190506124d681612366565b92915050565b6000602082840312156124f2576124f1611b71565b5b6000612500848285016124c7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061254382611b7b565b915061254e83611b7b565b925082820190508082111561256657612565612509565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506125aa81611b85565b92915050565b6000602082840312156125c6576125c5611b71565b5b60006125d48482850161259b565b91505092915050565b6125e681611d9b565b81146125f157600080fd5b50565b600081519050612603816125dd565b92915050565b60006020828403121561261f5761261e611b71565b5b600061262d848285016125f4565b91505092915050565b600067ffffffffffffffff8211156126515761265061216a565b5b61265a82611e0c565b9050602081019050919050565b600061267a61267584612636565b6121ca565b90508281526020810184848401111561269657612695612165565b5b6126a1848285611de2565b509392505050565b600082601f8301126126be576126bd612160565b5b81516126ce848260208601612667565b91505092915050565b6000602082840312156126ed576126ec611b71565b5b600082015167ffffffffffffffff81111561270b5761270a611b76565b5b612717848285016126a9565b91505092915050565b600061272b82611b7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361275d5761275c612509565b5b600182019050919050565b600060208201905061277d600083018461248f565b92915050565b6000819050919050565b6000819050919050565b60006127b26127ad6127a884612783565b61278d565b611b7b565b9050919050565b6127c281612797565b82525050565b6000610140820190506127de600083018d612109565b6127eb602083018c612109565b6127f8604083018b61248f565b612805606083018a61248f565b612812608083018961248f565b61281f60a083018861248f565b61282c60c083018761248f565b61283960e083018661248f565b6128476101008301856127b9565b6128556101208301846127b9565b9b9a5050505050505050505050565b60006101008201905061287a600083018b612109565b612887602083018a612109565b612894604083018961248f565b6128a1606083018861248f565b6128ae608083018761248f565b6128bb60a083018661248f565b6128c860c083018561248f565b6128d560e08301846127b9565b9998505050505050505050565b60006128ed82611b7b565b91506128f883611b7b565b92508282039050818111156129105761290f612509565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e570ea0c18ebbe85208cac62731668b681800ced5c114c82ab71e4826847ca3e64736f6c63430008100033